superproductivity
Super Productivity MCP
让您的 AI 助手真正访问您的任务——同时不放弃本地优先。
一个 MCP 服务器,通过您 Nextcloud 中已有的同步文件读写您的 Super Productivity 任务。无需插件、无需分支、无需第二个需要同步维护的应用。
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Super │ sync │ Nextcloud │ sync │ This MCP │
│ Productivity │ ──────► │ sync-data.json │ ◄────── │ server │
│ desktop/mobile │ ◄────── │ │ ──────► │ │
└─────────────────┘ └──────────────────┘ └────────┬────────┘
│ MCP
┌────────▼────────┐
│ OpenClaw, │
│ Claude, … │
└─────────────────┘为什么存在
Super Productivity 刻意采用本地优先设计。它没有远程 API、没有出站 webhook,桌面应用的本地 REST API 绑定在 127.0.0.1——从设计上就无法从其他任何地方访问。CalDAV 插件只导出已有日期的任务,而且将它们导出为日历事件,而非任务。
同步文件则不同。它包含一切:每个项目、每个标签、整个未设日期的积压任务、子任务、估算、时间跟踪。它已经在您的服务器上。它是完整的图景,除此之外别无其他。
所以这个服务器与它对话。
Related MCP server: Nextcloud MCP Server
为什么它是安全的
这个想法的朴素版本——下载 JSON、编辑、上传——最终会毁掉您的任务历史。Super Productivity 不是一个包含任务的文件;它是一个带向量时钟的操作日志,您的设备通过重放操作来合并更改,而不是通过比较文件。
这个服务器正确地参与了该协议。它表现得像您账户上的又一台设备:
朴素的文件编辑器 | 本服务器 | |
在手机上并发编辑 | 被静默覆盖 | 被检测到,并重新应用在其之上 |
其他设备看到的变化 | 像一个神秘的整文件替换 | 像一个普通操作,与任何设备一样 |
同步协议中的身份 | 无——伪装成您的桌面 | 自己的客户端 id,自己的向量时钟条目 |
它不理解的字段 | 被丢弃 | 逐字节保留 |
写入被中断 | 文件损坏 | 之前的版本仍在 |
同步文件格式改变 | 崩溃 | 被检测并处理 |
具体来说,每次写入:
使用强 ETag 读取。 Nextcloud 的
OC-ETag,即使反向代理重写了普通ETag也能存活。通过 Super Productivity 自身 reducer 的忠实移植来应用更改——因此
TODAY保持为虚拟标签,dueDay和dueWithTime保持互斥,完成任务永远不会凭空发明一个截止日期。发出匹配的操作,使用本服务器的客户端 id 和递增的向量时钟,这样您的其他设备会将其接受为因果上更新的,而不是标记为冲突。
在触碰主文件之前刷新
.bak。在其读取的版本上有条件地写入。 绝不无条件写入。如果另一台设备先写了,整个变更会针对新状态重新运行——它们的更改得以保留,您的更改应用在其之上。
已针对真实的 Nextcloud 验证:
If-Match确实被强制执行,在完整的创建/安排/完成/删除周期之后,远程仍然是一个有效的 schema-4 信封,归档和未触碰的状态逐字节相同。
快速开始
要求: Node 20.11+,一个已经将 Super Productivity 同步到其中的 Nextcloud。
git clone <this-repo> superproductivity-mcp
cd superproductivity-mcp
npm install
cp .env.example .env填写 .env:
SP_NEXTCLOUD_URL=https://cloud.example.com
SP_NEXTCLOUD_USER=yourname
SP_NEXTCLOUD_PASSWORD=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
SP_SYNC_FOLDER=super-productivity使用应用密码,而不是您的登录密码:设置 → 安全 → 设备与会话 → 创建新应用密码。它是有作用域的、可撤销的,而且是在开启双因素认证时唯一有效的方式。
在连接到任何东西之前检查一切:
npm run doctorSuper Productivity MCP — doctor (v1.0.0)
ok configuration https://cloud.example.com as yourname
ok sync folder super-productivity
ok mode read-write
ok client id M_TSrPmbHAoq
ok encryption not configured (the sync file must be plaintext)
ok reachable Nextcloud answered and the credentials were accepted
ok sync file SINGLE_FILE (sync-data.json)
ok decoded syncVersion 114, schema 4
ok conditional writes the server returns a strong ETag, so concurrent writes are safe
ok devices B_UjDTUW, A_rmkezu
ok operation log 354 of 2000 retained
ok contents 12 open tasks, 3 projects, 4 tags
All checks passed. The MCP server should work.doctor 从不写入。如果某一步失败,它会说明是哪一步以及为什么——这正是它的全部意义所在,因为这里的每种失败模式在其他情况下都会在您的 AI 客户端中显示为无用的"工具不工作"。
然后构建:
npm run build连接它
添加到您的 MCP 服务器配置中:
{
"mcpServers": {
"superproductivity": {
"command": "node",
"args": ["/absolute/path/to/superproductivity-mcp/dist/main.js"],
"env": {
"SP_NEXTCLOUD_URL": "https://cloud.example.com",
"SP_NEXTCLOUD_USER": "yourname",
"SP_NEXTCLOUD_PASSWORD": "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx",
"SP_SYNC_FOLDER": "super-productivity"
}
}
}
}您可以完全省略 env,让它改读 .env 文件——如果工作目录不是项目根目录,请将 SP_ENV_FILE 设置为绝对路径。
同样的结构,在 claude_desktop_config.json 中
(macOS 上是 ~/Library/Application Support/Claude/,
Windows 上是 %APPDATA%\Claude\)。
claude mcp add superproductivity -- node /absolute/path/to/dist/main.js它是一个标准的 stdio MCP 服务器。运行 node dist/main.js;它在 stdout 上使用 JSON-RPC 通信,并且只向 stderr 记录日志。
工具
读取
工具 | 它回答什么 |
| "现在情况如何?" 计数、今天的任务、逾期工作、所有项目和标签及其 id。从这里开始。 |
| 按项目、标签、状态、日程或文本过滤。按您处理它们的顺序排序:逾期 → 今天 → 按日期 → 积压 → 已完成。 |
| 完整查看单个任务,包含备注和子任务。 |
| 带任务计数的项目。 |
| 带 id 的标签。 |
写入
工具 | 备注 |
| 标题是唯一必需项。传入 |
| 只修补您发送的字段,因此并发编辑得以保留。 |
| 完成任务,或使用 |
| 删除任务及其子任务。标记为破坏性,以便您的主机可以先确认。 |
|
|
| "今天就做这个"的正确工具。 |
| 创建、重命名、归档、切换积压。 |
| 拒绝重复名称。 |
诊断
工具 | 备注 |
| 布局、同步版本、哪些设备一直在写入,以及任何警告。 |
| 用通俗语言呈现的操作日志——"那真的保存了吗?" |
在 SP_MODE=read-only 模式下,写入工具根本不会被通告,而不是通告后被拒绝。模型能看到的工具就是它会尝试的工具。
两件值得知道的事
"今天"不是您应用的标签。 一个任务在"今天"中是因为它的截止日期是今天。sp_plan_for_today 是把它放进去的方式;TODAY 标签的任务列表只存储排序。
时长以分钟为单位。 Super Productivity 存储毫秒;本服务器在边界处转换,因此永远不会差六十倍。
配置
变量 | 默认值 | 备注 |
| 必填 | 基础 URL,不含路径。如果您的服务器重定向, |
| 必填 | 您的文件所在的用户名。 |
| 必填 | 强烈建议使用应用密码。 |
| — | 仅当您的实例用邮箱登录但文件存储在不同的用户名下时。 |
|
| Nextcloud 中的文件夹。 |
| — | 仅当您在 Super Productivity 的同步设置中启用了加密时。必须完全匹配。 |
|
|
|
| 派生 | 本服务器在向量时钟中的身份。从机器 + 目标稳定派生;仅当您需要固定它时才设置。 |
|
| 读取可以从缓存中提供多长时间。写入总是重新获取。 |
|
|
|
|
| 每个请求的超时时间。 |
|
| 从何处读取环境文件。 |
也接受旧的 nextcloud_user / nextcloud_password 名称,因此现有的 .env 无需重命名。
为什么解析
.env文件而不是 source 它: 应用密码经常以$开头,而 shell 中的source .env会把$Nyd0…展开为空字符串。由此产生的失败看起来完全像密码错误。本服务器按字面读取文件,从而避开了整类混淆。
工作原理
src/
├── domain/ Pure. No I/O, no framework, no network.
│ ├── model/ Super Productivity's state, as we read it
│ ├── reducers/ Faithful ports of upstream's own reducers
│ ├── sync/ Vector clocks, the compact operation format
│ ├── errors.ts One taxonomy, split by what the caller should do
│ └── ports.ts The boundary: FileStore, Clock, IdGenerator, Logger
├── application/ Use cases and projections
│ ├── workspace.ts Read-modify-write with optimistic concurrency
│ ├── read-models.ts Raw state → something a model can act on
│ └── services/ Task, organiser and diagnostics use cases
├── infrastructure/ Everything that touches the outside world
│ ├── codec/ The pf_ prefix, gzip, Argon2id + AES-GCM
│ ├── webdav/ Conditional writes, strong validators
│ ├── sync/ Layout detection, operation replay
│ └── config/ Env loading and validation
├── presentation/ The MCP tool surface
└── composition-root.ts The only place a concrete dependency is chosen依赖规则指向内部:domain 对 WebDAV 或 MCP 一无所知。这不是装饰——这正是集成测试套件可以在两秒内、离线、使用冻结时钟、针对内存存储运行整个技术栈(包括条件写入重试逻辑)的原因。
两种同步布局,自动检测
Super Productivity 发布了两种远程布局,并且可以随时迁移文件夹:
单文件 —
sync-data.json同时保存快照、归档和日志。默认方式。分离 —
sync-ops.json是提交点,sync-state.json是快照。可选加入("精细同步")。
每次读取时都会检测布局,从不进行配置。在拆分布局中, 快照仅在压缩时重写,因此可能滞后多达 2000 个 操作;此服务器会重放待处理日志以弥合差距,并报告 任何无法重放的内容,而不是静默地向你展示不完整的 画面。
加密
如果你在 Super Productivity 中启用了加密,请将 SP_ENCRYPTION_PASSWORD
设置为相同的密码。该流水线 — JSON → gzip → Argon2id 派生的 AES-256-GCM
— 与上游完全一致,包括旧客户端写入文件时的旧版 PBKDF2 格式。
配置了加密时,拒绝明文文件。加密标志 位于经过身份验证的封装之外,因此任何能写入你的 远程存储的人都可以剥离它并为你提供他们自己的数据;本地意图优先于 远程的自我声明。
开发
npm test # unit + integration, no network, ~2s
npm run test:unit
npm run test:integration
npm run test:coverage
npm run test:e2e # real Nextcloud — see below
npm run verify # format + lint + typecheck + test
npm run dev # run from source284 个测试。 集成套件针对内存
存储运行整个技术栈,该存储真实地评估 If-Match,覆盖了
否则几乎无法模拟的情况:竞争设备在读写间隙内提交、
服务器没有可用的 ETag、备份写入失败、
已墓碑化的文件夹、损坏的远程存储。
测试夹具是一个真实的同步文件 — 相同的封装、相同的 344 操作日志、 相同的模式版本 — 每个标题和备注都被替换为合成文本。
端到端
npm run test:e2e 针对真实的 Nextcloud 运行,位于独立的沙盒文件夹
中,该文件夹从你的同步文件的副本中播种,之后会被删除。你的真实
同步文件夹永远不会被套件写入。未配置凭据时它会跳过自身。
在 .env 中设置 SP_E2E_FOLDER(默认 super-productivity-mcp-e2e)。它必须
与 SP_SYNC_FOLDER 不同;套件会在其中创建、覆盖和删除文件。
限制
直截了当地说明,因为另一种选择是以后才发现它们:
同步不是即时的。 更改会立即写入同步文件;你的 桌面端和手机会在下次同步时获取它们。
已归档任务为只读。 此服务器读取你的归档但从不 写入。请完成任务而不是归档它们。
拆分布局仅支持追加。 当其操作日志填满时,服务器 拒绝进一步写入,并告诉你打开一次 Super Productivity 以便其压缩。压缩意味着将部分重放的 快照发布为权威版本,这可能会静默丢弃其未能 重放的任何内容。
没有时间跟踪或番茄钟。 这些是本地实时功能; 这里没有可合理写入的内容。
备注和重复任务为直通只读,不可写入。
一级子任务嵌套,与 Super Productivity 本身一致。
故障排除
症状 | 可能的原因 |
| 启用了 2FA 的登录密码 — 请使用应用密码。或者密码以 |
|
|
| 指向了错误的文件,或者加密已开启且 |
| 已设置 |
诊断中的 | 代理正在剥离 ETag 头。写入将拒绝,而不是冒险覆盖另一台设备。请修复代理。 |
手机上看不到更改 | 打开应用并让其同步。检查 |
| 有东西在紧密循环中同步。请稍后再试。没有任何更改。 |
致谢
基于 Johannes Millan 的 Super Productivity
构建。此处的操作日志格式、向量时钟算法和
reducer 语义是该项目自身实现的移植 — 请参阅
docs/sync-and-op-log/
了解此服务器必须学会的架构。
许可证
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage tasks, projects, and analyze productivity directly in Super Productivity through real-time integration via Socket.IO bridge plugin.3
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Nextcloud instances through secure APIs, supporting operations across Notes, Calendar, Contacts, Files, Deck, Cookbook, and Tables with OAuth2 or Basic Auth.2AGPL 3.0
- AlicenseAqualityBmaintenanceEnables AI assistants to read and write to OmniFocus database, allowing natural language task management, project creation, and GTD workflows.41MIT
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to todo.txt files, enabling task management through natural language while preserving plain text simplicity.8MIT
Related MCP Connectors
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Manage your MakeMeBetter AI tasks, habits, and goals from your AI assistant.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/daxrpm/superproductivity-mcp-offline'
If you have feedback or need assistance with the MCP directory API, please join our Discord server