super-productivity-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@super-productivity-mcpAdd a task: Buy milk #shopping @tomorrow 15m"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Why this fork exists
This project is a fork of b0x42/Super-Productivity-MCP, the MCP bridge maintained by the author of Super Productivity. Same MIT base, same install path (SP plugin + MCP server). The fork exists because upstream's toolset covers capture and triage, but not planning.
The author runs his day through an AI assistant: read the schedule in the morning, plan tasks into time blocks, reschedule when the day slips, close out with a review. That loop kept tripping on upstream. Long daily planning sessions, rescheduling mid-day, and managing the schedule itself all required operations upstream did not expose. The fork adds what the agent needed:
get_schedule: time-blocked day view with overlap detection, tasks due but unscheduled, and completed workplan_tasks_for_todayand exact planned times (due_with_time): batch a morning plan, or pin a task to a specific clock timesp://context: one fetch that bootstraps a session (server time, projects, tags, today's schedule, current task)real time tracking:
start_task/stop_taskdrive SP's built-in timer, per-day time buckets,get_worklogatomic batches: create a parent with subtasks and reorder in one call (temp-id resolution)
context and state: active view, selected task,
get_app_statesnapshot, counters, notesenrichment on every response: resolved
projectTitleand tags
The fork also commits to one supported target: Super Productivity 18.16.0 and newer. No fallback paths for older versions, 235 passing tests, and every behavior is verified live against 18.16.0. Upstream stays the light option for pure capture; this fork is for running the day.
Related MCP server: ticktick-mcp
First-time setup, step by step
This walks you through a fresh install. If you have installed MCP servers before, skip to Installation.
Step 1: download the plugin
Open the latest release page in your browser.
Under Assets, click plugin.zip. If you don't see the file list, click Show all assets first. The file downloads to your Downloads folder.
Leave the file as is. Do not unzip it. Super Productivity uploads the zip directly.
Step 2: install the plugin in Super Productivity
Open Super Productivity.
Go to Settings → Plugins → Upload Plugin.
Select the
plugin.zipyou just downloaded and click Open.Restart Super Productivity when it asks you to.
Step 3: allow Node access
The first time you start Super Productivity with the plugin enabled, a one-time Node execution consent dialog appears. Click Allow. The plugin needs it to talk to your assistant. If you re-upload the plugin later, the dialog appears again.
Step 4: connect your assistant
The MCP server runs on your computer and is registered in your MCP client. The quickest path is Claude Desktop: configure your MCP client. It is one small config file: copy the example block, paste it in, and restart the app. Using Kiro or another client? See the same section for config file locations.
Step 5: verify
Ask your assistant: "Check the Super Productivity connection." You should get a confirmation that Super Productivity is running and the plugin is responding.
Prerequisites
Super Productivity >= 18.16.0 (older builds are refused by the plugin)
Node.js >= 18
An MCP-compatible client (Claude Desktop, Kiro, etc.)
Installation
First-time users: the step-by-step guide above covers the whole flow: download plugin.zip, upload it, allow Node access, configure your client, verify.
Developers: install the plugin with npx instead of downloading the zip:
npx -y @pir-ahmed-shah/super-productivity-mcp@latest --extract-pluginThis fetches the package and writes plugin.zip to the current folder. Upload it in Settings → Plugins → Upload Plugin, restart SP, and click Allow on the one-time Node execution consent dialog. The plugin requires SP 18.16.0+; older builds are refused with a clear error.
Configure your MCP client
{
"mcpServers": {
"super-productivity": {
"command": "npx",
"args": ["-y", "@pir-ahmed-shah/super-productivity-mcp"]
}
}
}Config file locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.json
For Claude Code, don't edit the config file by hand. Use the CLI:
# user scope (everywhere), project scope (-s project), or local scope (default)
claude mcp add -s user super-productivity npx -- -y @pir-ahmed-shah/super-productivity-mcpTo verify, run claude mcp list. Restart the session to load the server. Swap npx -- -y @pir-ahmed-shah/super-productivity-mcp for super-productivity-mcp (global install) or node /absolute/path/to/dist/index.js (from source). See Running without npx.
Running without npx
npx is convenient but fetches the package on every cold cache and needs network access. If you'd rather pin a local copy, pick one of the options below.
Option A: global install
npm install -g @pir-ahmed-shah/super-productivity-mcp
super-productivity-mcp --extract-plugin # optional: write plugin.zip to cwdThen point your MCP client at the installed binary:
{
"mcpServers": {
"super-productivity": {
"command": "super-productivity-mcp"
}
}
}If the binary isn't found, your MCP client may not inherit your shell's PATH. Use the absolute path from which super-productivity-mcp as command, or if which doesn't resolve it, point at $(npm config get prefix)/bin/super-productivity-mcp (on macOS/Linux).
Option B: from source
git clone https://github.com/PirAhmedShah/Super-Productivity-MCP.git
cd Super-Productivity-MCP
npm install
npm run build # produces dist/index.js and dist/plugin.zipThen run the server directly with node:
{
"mcpServers": {
"super-productivity": {
"command": "node",
"args": ["/absolute/path/to/Super-Productivity-MCP/dist/index.js"]
}
}
}The plugin to upload to Super Productivity is at dist/plugin.zip after npm run build.
What you can do
Quick Capture
"Add a task: Buy milk #shopping @tomorrow 15m"
Parses the tag, due date, and time estimate from short syntax. One shot, no follow-up needed.
Batch Triage
"Show me all unscheduled tasks in my Work project, tag them #backlog, and set them due next Friday"
Filters, bulk-updates due dates, and adds tags, all in one conversation turn.
Full Planning Session
"Look at my week: show today's plan and anything overdue. Break 'Launch blog' into subtasks, start the first one, and move anything I finished yesterday to done. Give me a time summary when you're done."
Reads resources for context, creates subtasks in batch, starts the timer, bulk-completes tasks, pulls the worklog, and summarizes. A multi-step workflow in a single prompt.
Time-Aware Planning
"Show me today as a timeline: what overlaps, what's due but unplanned, and what I already finished"
get_schedule returns the day as time blocks (start = planned time, size = estimate) with conflict clusters, unscheduled tasks, and completed work in one call. sp://context bootstraps a whole session (server time, projects, tags, today's schedule, overdue, current task) in a single read.
See more use cases.
Available tools
Tool | Description |
| Create a task (supports SP short syntax) |
| Create a parent task + subtasks in one operation |
| Atomic multi-operation batch on one project (create/update/delete/reorder) in a single call. Same-batch |
| List tasks. Filter by project, tag, done, archived, search (title+notes), |
| Time-blocked view of a date range: tasks sized by |
| Fully-resolved single-task deep-dive: enriched names, derived schedule block, parent title, subtask list, and time spent over the last 14 days |
| Update title, notes, done state, due date, |
| Mark a task as complete |
| Permanently delete a task (parent deletes subtasks too) |
| Start the time tracker on a task |
| Stop the currently running time tracker |
| Add elapsed milliseconds to a task's today bucket. Fallback/correction since 1.7.2 ( |
| Get the currently tracked task (null if none) |
| Open a task in SP's detail panel (works regardless of the active view) |
| The task currently open in SP's detail panel (null if none) |
| The task row currently focused in the UI (null if none) |
| The project/tag/TODAY context the user is currently viewing |
| The tasks currently rendered in the active work context |
| Batch plan/unplan tasks for today (pins to 00:00; |
| Mark multiple tasks complete in one operation |
| Update multiple tasks in one operation |
| Add a tag without replacing other tags |
| Remove a single tag |
| Move a top-level task to a different project |
| Reorder tasks within a project or parent |
| List all projects |
| Create a new project |
| Update project properties |
| List all tags |
| Create a new tag |
| Update tag properties |
| List all recurring task configurations (schedule, cadence, day-of-week settings) |
| Time tracking summary for a date range |
| Show a snackbar in SP's UI |
| Current machine date/time (local tz): |
| Verify SP is running and the plugin is responding (also returns |
| Show resolved data directory paths |
| Read-only full snapshot of SP state (tasks, projects, tags, notes, repeat configs, counters, global config). Optionally written to a JSON file via |
| List all SP notes |
| The plugin's optional configuration (usually |
| Tell SP to reload its persisted data from disk |
| Read a simple counter (null if it doesn't exist) |
| Set a simple counter to an absolute value |
| Increment a simple counter (creates it at 0 first) |
| Decrement a simple counter (creates it at 0 first) |
| Delete a simple counter |
| Return all simple counters as |
Resources
Resource | Description |
| One-fetch session bootstrap: server time, projects, tags, today's schedule (with overlaps + completed), overdue tasks, and the currently tracked task. All names resolved |
| All projects with IDs and colors |
| All tags with IDs, colors, and icons |
| Today's planned tasks (names resolved) |
| Overdue tasks (names resolved) |
Resolved names
SP stores tasks with opaque projectId / tagIds UUIDs. To save the agent from joining get_projects + get_tags by hand, every task payload (from get_tasks, get_schedule, get_task, and the task resources) is enriched with:
projectTitle: the resolved project name (ornull)tags:[{ id, title, color }]for each of the task's tags
Project/tag lookups are cached server-side (30s TTL) and invalidated automatically on create/update_tag and create/update_project, so writes are reflected immediately. Unknown references degrade gracefully (resolve to null / are omitted). get_tasks { fields: [...] } also accepts projectTitle and tags as selectable fields.
Atomic batch operations
batch_update_project applies create/update/delete/reorder operations to one project in a single call:
Same-batch references (plugin ≥ 1.7.1): give new tasks a
temp_idand later operations in the same call may use it asparent_id(subtask under a freshly-created parent), insidereordertask_ids, or insub_task_ids. The plugin resolves temp ids itself before dispatching to SP.Real ids still required for update/delete: to update or delete a task you just created in the same batch, run a second call using its real id from the first call's
createdTaskIds(two-phase pattern).On partial failure SP drops skipped operations silently (logged server-side), so verify the result.
SP short syntax
Include these in task titles and they are parsed automatically:
Syntax | Example | Effect |
|
| Adds the "shopping" tag |
|
| Assigns to "work" project (prefix match, min 3 chars) |
|
| Sets due date to Friday |
|
| Sets due date and exact planned time (local) |
|
| Sets 30-minute time estimate |
|
| Sets 1h spent, 2h estimate |
Troubleshooting
Plugin not loading? Re-upload plugin.zip from the latest release and accept the Node execution consent dialog that appears on first enable. The plugin requires SP 18.16.0+; older builds are refused by the plugin itself.
Commands timing out? Ask "Show debug info for Super Productivity" to check that both sides are using the same data directory. Mac App Store users may need to set SP_MCP_DATA_DIR.
Stale plugin? If tasks behave oddly after plugin writes (mangled titles, dropped subtasks, ignored reorders), the deployed plugin.zip is older than the latest release. Re-download it and re-upload in Settings → Plugins.
See the full troubleshooting guide.
Scheduling semantics
A task's planned/start time lives in SP's
dueWithTimefield, exposed asplannedTimein responses.A task's size is its
timeEstimate(duration) and its start is its planned time.get_schedulecombines the two into a timeline:startMs = plannedTime,endMs = startMs + timeEstimate.get_schedulereports overlap conflict clusters: transitively-connected groups of tasks whose scheduled windows intersect. Only open tasks with both a planned time and a positive estimate participate; intervals that merely touch at a boundary are not overlaps.get_tasks { overlapping: true }returns just the tasks involved in a conflict. Completed tasks land incompletedInRangeonly, never double-listed inscheduled(withinclude_done), so the summary counts stay consistent.Derived per-task
status:done→unsized(no planned time) →past(now ≥ end) →in-progress(now ≥ start) →upcoming.Get the current wall clock with
get_time(orcheck_connection.serverNow).epochMsis ready for scheduling; do not shell out todate.Time tracking:
start_task/stop_taskdrive SP's real timer. The plugin dispatches the whitelisted NgRx action[Task] SetCurrentTask({ id }to start,{ id: null }to stop), so the UI shows the ticking timer and SP accruestimeSpentOnDay[today]natively (whatget_worklogsums).add_time_today { task_id, ms }remains as a fallback/correction (retroactive accrual, backgrounded-window under-accrual), andupdate_task { time_spent_on_day: { 'YYYY-MM-DD': ms } }corrects the per-day bucket itself (merge semantics;timeSpentfollows as the bucket sum).update_task { due_with_time: <unix ms> }sets the exact planned time (get_time'sepochMs= "from now until next task");nullunplans.plan_tasks_for_todaypins tasks to start-of-day (00:00). Useplan_from_now: truewhen an exact start time matters.@friday 3pmin a title sets the due date and the exact planned time;@fridaysets the due date only.To verify a write, read the task's
plannedTime(alias ofdueWithTime) from the write response orget_tasks. The tools return the resulting task so bad input is caught immediately.
License
MIT
This server cannot be installed
Maintenance
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
- Alicense-qualityAmaintenanceAn MCP server that connects AI assistants to Super Productivity for managing tasks, projects, and tags. Supports quick capture, batch triage, and full planning sessions through natural language.Last updated12160MIT
- Alicense-qualityBmaintenanceAn MCP server that connects AI assistants to TickTick, enabling project and task management through natural language, including reading projects, finding tasks, creating tasks, and completing work.Last updated2MIT
- Alicense-qualityDmaintenanceMCP server for integrating TickTick task management with AI applications, enabling task and project operations via natural language.Last updated18MIT
- AlicenseAqualityBmaintenanceAn MCP server connecting OmniFocus to AI assistants, enabling task and project management via natural language.Last updated6153MIT
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
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/PirAhmedShah/Super-Productivity-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server