Skip to main content
Glama
Amorem

super-productivity-mcp

Super Productivity MCP

CI License: MIT Node.js >= 20 npm version

Super Productivity MCP

An explicit, local Model Context Protocol server for Super Productivity. It connects ChatGPT Desktop or Codex to Super Productivity's official local REST API over STDIO.

The core promise is deliberately small:

Select one task explicitly, put it in Today, start or stop its timer, and complete it.

Nothing is imported or scheduled implicitly. GitHub issue association is opt-in per tool call.

Quick start

The complete first-run path takes a few minutes:

  1. Install the Super Productivity desktop app 18.x or newer. The web and mobile apps do not expose this local API. If Enable local REST API is missing, update the desktop app from the official releases.

  2. In Super Productivity, open Settings → Misc Settings and enable Enable local REST API. With the released 18.16.0 desktop app, no token is displayed and no token is required.

  3. Choose exactly one host setup below. Do not run the CLI command if you use a Desktop application.

    Case A — Desktop application:

    • ChatGPT Desktop: open Settings → MCP servers → Add server → STDIO, enter command npx, and add the two arguments -y and super-productivity-mcp-server.

    • Codex Desktop: it may not show an MCP servers menu. Open Settings → Configuration, choose Open config.toml, and paste the configuration block in the Codex Desktop section below. No CLI is required.

    Case B — Codex CLI: open the CLI section below, verify codex --version, and then run the exact codex mcp add command. If Terminal says zsh: command not found: codex, use the Codex Desktop config.toml path in Case A instead.

    For Super Productivity 18.16.0, leave SP_API_TOKEN unset. If a future build displays an Access Token, supply it only through the MCP environment; never paste it into a chat or commit it.

  4. Restart or reload the MCP host after completing your selected case, then ask it:

    Check the connection to Super Productivity with check_connection.
  5. Once the connection succeeds, use search_tasks to find one task and pass its returned taskId explicitly to plan_task_today, start_task, stop_timer, or complete_task.

Optional local liveness check (it does not require the token):

curl --noproxy 127.0.0.1 http://127.0.0.1:3876/health

The expected response contains "server":"up" and "rendererReady":true.

Related MCP server: ChatGPT Codex Bridge

What it does

Tool

Purpose

Changes state

health / check_connection

Check the local API and renderer

No

search_tasks

Find tasks and return stable IDs

No

list_today

List tasks already planned for Today

No

plan_task_today

Plan exactly one supplied task ID for Today

Yes

start_task

Start exactly one supplied task ID

Yes

stop_timer

Stop the current timer

Yes

complete_task

Complete exactly one supplied task ID

Yes

get_current_task

Read the currently tracked task

No

ensure_github_issue_task

Reuse or create one task for a GitHub issue

Yes, only when called

The server intentionally does not create GitHub issues. Use the GitHub integration or connector for that, then call ensure_github_issue_task only when you explicitly want the issue in Super Productivity.

The workflow

flowchart LR
    A["ChatGPT Desktop or Codex"] -->|STDIO MCP| B["Super Productivity MCP"]
    B -->|"Loopback HTTP; no token in 18.16.0"| C["Super Productivity local REST API"]
    C --> D["One selected task"]
    D --> E["Today"]
    E --> F["Timer"]
    F --> G["Done"]
    H["GitHub issue URL or owner/repo#number"] -->|explicit ensure call| B

Typical conversation:

Search Super Productivity for "Add the export filter".
Plan task <returned taskId> for Today.
Start task <same taskId>.
Stop the timer.
Complete task <same taskId>.

The server instructions tell an MCP client to search first and pass the exact returned taskId to every state-changing operation. There is no bulk-selection fallback.

Requirements

  • Super Productivity desktop 18.x or newer with the local REST API enabled.

  • Node.js 20 or newer.

In Super Productivity, enable Settings → Misc Settings → Enable local REST API. The official API listens on http://127.0.0.1:3876 by default and exposes an unauthenticated /health endpoint. The released 18.16.0 desktop API is also unauthenticated for task endpoints, so no token is needed for the normal setup. This server sends a Bearer token only when the optional SP_API_TOKEN is set, to remain compatible with future authenticated builds.

Read the official Super Productivity local REST API documentation before changing the API URL or exposing a proxy. The upstream API is release-sensitive: this package's no-token default matches the 18.16.0 desktop release, whose released API handler does not authenticate task requests.

Install

From the public npm registry:

npx -y super-productivity-mcp-server

End users do not need an npm account or an npm login to install the public package.

For a local checkout:

pnpm install
pnpm build
node /absolute/path/to/super-productivity-mcp/dist/index.js

Package and releases

The public package is super-productivity-mcp-server. The GitHub release workflow publishes new versions when the repository has an NPM_TOKEN Actions secret. That maintainer-only credential is not needed by people installing or using the server.

The server reads configuration from environment variables:

Variable

Default

Notes

SP_API_TOKEN

Optional Bearer token for an authenticated Super Productivity build

SP_API_URL

http://127.0.0.1:3876

HTTP(S) URL; loopback is enforced by default

SP_API_TIMEOUT_MS

15000

Integer from 1000 to 60000

SP_ALLOW_NON_LOOPBACK_URL

false

Use only for a trusted local proxy

SP_LOG_LEVEL

warn

error, warn, info, or debug

See .env.example for a copyable template.

Case A — Desktop application

There are two Desktop applications people commonly mean here. They do not expose the same menu:

  • ChatGPT Desktop: has the graphical Settings → MCP servers menu.

  • Codex Desktop: some builds may not have an MCP menu. Use Settings → Configuration → Open config.toml instead.

Both variants start the same public npm package. You do not need an npm account or an npm login.

A1. ChatGPT Desktop — graphical setup

Use this exact procedure in the ChatGPT Desktop application:

  1. Open Settings → MCP servers.

  2. Click Add server.

  3. Choose STDIO.

  4. Fill the fields as follows:

    Field

    Value

    Name, if requested

    super_productivity

    Command

    npx

    Arguments

    -y and super-productivity-mcp-server as two separate arguments

    SP_API_URL, optional

    http://127.0.0.1:3876

    SP_LOG_LEVEL, optional

    warn

    SP_API_TOKEN

    Leave empty for Super Productivity 18.16.0

  5. Save the server and select Restart or restart ChatGPT Desktop if requested.

  6. In a chat, type /mcp to inspect connected servers, then ask:

    Check the connection to Super Productivity with check_connection.

If MCP servers or STDIO is unavailable in ChatGPT Desktop, update the application or use the Codex Desktop configuration path below. For a local build, replace the command with node and use the absolute path to dist/index.js. See examples/chatgpt-desktop.md.

A2. Codex Desktop — configure config.toml, not an MCP menu

If your Codex Desktop build does not show an MCP servers menu, do not look for it elsewhere in the settings. Use Settings → Configuration → Open config.toml instead:

  1. Open Settings.

  2. Select Configuration in the left sidebar.

  3. Select Open config.toml.

  4. Add this block and save the file:

    [mcp_servers.super_productivity]
    command = "npx"
    args = ["-y", "super-productivity-mcp-server"]
    env = { SP_API_URL = "http://127.0.0.1:3876", SP_LOG_LEVEL = "warn" }
  5. Fully quit and reopen Codex Desktop.

  6. Ask Codex:

    Check the connection to Super Productivity with check_connection.

The shared file is normally ~/.codex/config.toml. Codex Desktop, Codex CLI, and the IDE extension use the same configuration layers. For a local checkout, replace the block with:

[mcp_servers.super_productivity]
command = "node"
args = ["/absolute/path/to/super-productivity-mcp/dist/index.js"]

Case B — Codex CLI in Terminal

Use this case only if you want to work from the Codex CLI. The Desktop procedure above does not require the codex command.

  1. In the same Terminal where you will use Codex, run:

    codex --version

    If Terminal prints zsh: command not found: codex, stop and use Case A. If you specifically want the CLI, install it using the official Codex CLI instructions, open a new Terminal, and run codex --version again.

  2. Once codex --version works, copy this complete command:

    codex mcp add super_productivity --env SP_API_URL=http://127.0.0.1:3876 --env SP_LOG_LEVEL=warn -- npx -y super-productivity-mcp-server
  3. Verify the registration and start the CLI:

    codex mcp list
    codex
  4. Inside Codex, type /mcp and ask:

    Check the connection to Super Productivity with check_connection.

See examples/codex-config.toml for the shared configuration format and the official OpenAI MCP setup documentation for the current Codex configuration surfaces.

Troubleshooting

I cannot find “Enable local REST API”

Confirm that you are using the desktop app, not the web or mobile app, and that its version is 18.x or newer. Quit and update it from the official Super Productivity releases, then return to Settings → Misc Settings. This setting is not present in older desktop builds.

I can enable the API, but I do not see a token

That is expected with the released Super Productivity 18.16.0 desktop app. Its local API is bound to loopback and does not require a token, so leave SP_API_TOKEN unset. Do not use an npm or GitHub token in its place. A future Super Productivity build may expose an Access Token; use it only when the app itself displays one.

In check_connection, configured: true means the local API and renderer are ready. The separate tokenConfigured: false field is expected for this no-token setup.

ECONNREFUSED 127.0.0.1:3876

Super Productivity is closed, the local API is disabled, or the renderer has not finished starting. Keep the desktop app open, enable the API, wait a few seconds, and retry check_connection.

401 Unauthorized

This only applies when using a Super Productivity build that requires a Bearer token. Copy the current Access Token from that app, set it as SP_API_TOKEN, and restart the MCP host. Do not use the npm publication token here.

The server does not appear in the MCP client

Check that Node.js 20 or newer is installed, that the command is exactly npx with arguments -y super-productivity-mcp-server, and restart the MCP host. The server speaks MCP over STDIO, so normal diagnostics go to stderr rather than appearing as a regular terminal application.

Terminal says zsh: command not found: codex

That message only means the optional Codex CLI is unavailable in that Terminal. If you use the Codex Desktop application, configure the server from Settings → Configuration → Open config.toml; no codex command is needed. If you intended to use the CLI, follow the official Codex CLI installation instructions, open a new Terminal, and confirm codex --version before running codex mcp add.

I cannot find “MCP servers” in Desktop settings

That menu belongs to the ChatGPT Desktop MCP flow. The current Codex Desktop settings panel may not expose it. In Codex Desktop, select Configuration in the settings sidebar and then choose Open config.toml. Add the [mcp_servers.super_productivity] block from Case A, restart Codex Desktop, and ask it to call check_connection.

check_connection succeeds but no tasks are returned

Use search_tasks with a distinctive part of an existing task title. State-changing tools require the exact taskId returned by that search; the server never guesses a task or bulk-imports issues.

GitHub issue association

Call the tool explicitly with either form:

ensure_github_issue_task({ issue: "Amorem/my-repo#123" })
ensure_github_issue_task({ issue: "https://github.com/Amorem/my-repo/issues/123", planToday: true })

The server searches active, archived, and completed local tasks. It reuses a task containing its stable marker or exact issue URL. If no safe match exists, it creates one task with a marker and returns its ID. Repeating the same call is idempotent. planToday defaults to false and must be set explicitly.

The current Super Productivity local REST API does not expose writable GitHub provider fields in its task PATCH allowlist. For that reason, tasks created by this server use a private, visible-in- notes marker; native GitHub-linked tasks are recognized when the local API exposes an unambiguous GitHub issue number. If two native tasks could match, the server returns an ambiguity error instead of choosing silently. No GitHub token or GitHub network request is required by this server.

Security model

  • STDIO stdout is reserved for MCP protocol messages; diagnostics go to stderr.

  • SP_API_TOKEN is optional; when supplied, it is never printed and is redacted in error/log paths.

  • The configured API URL must be loopback unless SP_ALLOW_NON_LOOPBACK_URL=true is explicitly set.

  • Super Productivity 18.16.0's local API has no application-level authentication. Keep the API on loopback and remember that local applications running as the same user can read and modify tasks.

  • If a future build provides a local API token, protect the environment and configuration that can access it.

  • The server does not import all GitHub issues, poll GitHub, or perform background actions.

  • All task mutations require an exact taskId, except the explicit, idempotent GitHub association tool which creates at most one marked task.

Architecture

sequenceDiagram
    participant Host as ChatGPT Desktop / Codex
    participant MCP as super-productivity-mcp-server
    participant SP as Super Productivity

    Host->>MCP: search_tasks({query})
    MCP->>SP: GET /tasks?query=...
    SP-->>MCP: task list with IDs
    MCP-->>Host: IDs and safe summaries
    Host->>MCP: plan_task_today({taskId})
    MCP->>SP: PATCH /tasks/:id {dueDay: today}
    Host->>MCP: start_task({taskId})
    MCP->>SP: POST /tasks/:id/start
    Host->>MCP: stop_timer() / complete_task({taskId})
    MCP->>SP: POST /task-control/stop or PATCH /tasks/:id

Implementation boundaries are intentionally narrow:

  • src/sp-client.ts is the typed, timeout-bound REST client.

  • src/server.ts contains MCP schemas and explicit tool behavior.

  • src/github.ts parses and deduplicates issue references without GitHub network access.

  • src/config.ts, src/errors.ts, and src/logger.ts enforce safe configuration and diagnostics.

Development

pnpm install
pnpm verify

pnpm verify runs lint, formatting checks, strict TypeScript typechecking, unit/integration tests, and the production build. The test suite uses mocked REST responses and the official MCP SDK's in-memory transport; it never contacts Super Productivity or GitHub.

See CONTRIBUTING.md for the contribution workflow and SECURITY.md for vulnerability reports.

Roadmap

  • Add a safe provider-aware lookup when Super Productivity exposes issue-provider configuration via the local API.

  • Add optional GitHub metadata enrichment behind an explicit, separately configured connector.

  • Add a small interactive setup command that validates the local API without storing the token.

  • Add compatibility fixtures for each supported Super Productivity API revision.

License

MIT. See LICENSE.

Available Tools

10 tools
check_connectionCheck Super Productivity connectionA
Read-onlyIdempotent

Check whether the local Super Productivity desktop API is reachable and ready.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds the useful context of targeting the local desktop API and confirming 'ready' status, but it does not disclose additional behavioral traits like response format or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It directly names the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless health-check tool with rich annotations and no output schema, the description is complete enough. It tells the agent exactly what the tool checks and the expected state of the API.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no semantic burden. Baseline for 0 params is 4, and the description does not need to explain parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb+resource+outcome: checking whether the local Super Productivity desktop API is reachable and ready. It differentiates from task-management siblings, though it does not explicitly distinguish itself from the similarly named 'health' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool over alternatives, such as 'health'. The description implies a readiness check but provides no explicit context, exclusion, or alternative recommendation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_taskComplete one taskA
Idempotent

Mark exactly the supplied task ID as completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is a non-destructive, idempotent write operation. The description adds that the marking is 'exactly' scoped to the supplied task ID, clarifying that no other tasks are affected, which is a behavioral trait not explicitly in the annotations. It does not describe edge cases like already-completed tasks, but the idempotent annotation covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with the action placed first and no redundant wording. Every word contributes to clarity, and it is appropriately sized for a function with one parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with one parameter and no output schema, the description covers the essential purpose and input. It could benefit from noting whether the task must be in a particular state or how this interacts with ongoing timers, but the idempotent and non-destructive annotations fill some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explicitly mentioning 'supplied task ID', indicating the parameter's role in identifying the task to complete. This adds meaning beyond the schema's bare property name, though it does not provide further constraints or examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Mark' with the resource 'task' and state 'completed', making the action unambiguous. It also specifies 'exactly the supplied task ID', which distinguishes it from sibling tools like start_task or stop_timer that affect task state differently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for marking a specific task as completed, but it does not provide explicit guidance on when to use it versus alternatives such as stop_timer or plan_task_today. No exclusions or alternative references are given, leaving the comparison to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ensure_github_issue_taskEnsure one task for a GitHub issueA
Idempotent

Find an existing native or Super Productivity MCP-marked task for owner/repo#number or a GitHub issue URL. Create at most one marked task if missing; it is not planned for Today unless planToday=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueYes
notesNo
titleNo
planTodayNo
projectIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral details beyond the idempotentHint annotation, notably 'create at most one marked task' and 'not planned for Today unless planToday=true'. It also clarifies the scope of what constitutes an existing task (native or MCP-marked), providing transparency not available from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. It consists of two sentences that convey the essential behavior without wasted words, earning a perfect score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and no schema descriptions. The description covers the core behavior but omits return value, behavior when multiple tasks already exist, and details for half the parameters. It is adequate but leaves notable gaps for a moderately complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It explains the 'issue' parameter format (owner/repo#number or URL) and the effect of 'planToday', but leaves 'notes', 'title', and 'projectId' unexplained. Only 2 of 5 parameters are covered, which is insufficient for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: find an existing task for a GitHub issue and create at most one if missing. The verb 'ensure' plus the specific resource (task for a GitHub issue) makes it distinct from sibling tools like search_tasks or complete_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied rather than explicit: you use this tool when you want to guarantee a task exists for a GitHub issue. It does not explicitly mention alternatives or when not to use, but the idempotent nature and the 'unless planToday=true' hint suggest typical workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_taskGet the current taskA
Read-onlyIdempotent

Return the task currently being tracked, or null when the timer is stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, and non-destructive nature. The description adds the behavioral detail that a null return indicates the timer is stopped, which is useful beyond the annotations. No contradictions noted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the key action ('Return the task'), and every word is meaningful. There is no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For such a simple tool with no parameters and no output schema, the description fully explains the behavior, including the null case. The annotations provide safety context, and the description adds the only missing behavioral detail. The tool is completely covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so there is nothing for the description to explain. Baseline for 0 params is 4, and the description correctly omits parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and clearly identifies the resource ('the task currently being tracked'), including the null case. This distinguishes it from sibling tools like start_task and list_today, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for retrieving the current tracked task or returning null if the timer is stopped. However, it does not explicitly mention alternatives or when not to use this tool, such as contrasting with list_today or search_tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

healthCheck Super Productivity connectionB
Read-onlyIdempotent

Check whether the local Super Productivity desktop API is reachable and ready.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'local' and 'desktop API' context, which is useful, but it doesn't explain behavior in failure cases (e.g., what happens when the API is unreachable) or interpret 'ready'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the core action and resource. There is no wasted verbiage; it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (0 params, no output schema, annotations covering safety), the description is minimally adequate for selection and invocation. However, it lacks details on what the response looks like (e.g., success/failure indicators) and does not address the potential overlap with 'check_connection', leaving the context incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is 100% vacuously. The baseline for 0 params is 4, and the description correctly omits parameter details since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Check') and resource ('local Super Productivity desktop API'), indicating it verifies reachability and readiness. However, it does not explicitly differentiate from the sibling tool 'check_connection', which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives like 'check_connection'. The description simply states what it does without offering context on selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_todayList today's tasksA
Read-onlyIdempotent

List tasks explicitly planned for Today in Super Productivity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
includeDoneNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing the safety profile. The description adds the behavioral nuance of filtering to 'explicitly planned' tasks, which is useful and does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that communicates the essential purpose without any fluff. It earns its place by adding the 'explicitly planned' qualifier and the product context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the description is sufficient for a basic read-only list operation. It lacks mention of return format or default limit behavior, but given the strong annotations and low complexity, it covers the essential context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description provides no explanation for the 'limit' and 'includeDone' parameters. While the parameter names are somewhat self-explanatory, their default values and exact filtering behavior are not described, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('List') and resource ('tasks') with a distinct scope ('explicitly planned for Today'). This distinguishes it from siblings like search_tasks, which is likely a broader search, and get_current_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool to retrieve tasks specifically planned for today. However, it does not explicitly mention alternatives or when not to use it (e.g., for general search, use search_tasks).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_task_todayPlan one task for TodayA
Idempotent

Place exactly the supplied task ID in Today, optionally at an explicit ISO timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes
startAtNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds 'exactly' and 'optionally at an explicit ISO timestamp,' offering some behavioral context. However, it does not clarify whether existing items in Today are replaced or how the timestamp affects placement, leaving room for ambiguity beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the core action and key option without unnecessary words. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters and no output schema, the description is mostly sufficient for basic use, but it omits edge cases such as whether the task must exist, whether the plan is overwritten, or what the response contains. Given the annotations and sibling context, it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does add meaning to both parameters: taskId is the task to place, and startAt is an explicit ISO timestamp. However, it does not specify behavior when startAt is omitted or validate timestamp format, leaving some gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Place' with a clear resource 'in Today' and explicitly mentions the supplied task ID and optional timestamp. This distinguishes it from siblings like start_task or complete_task, which focus on execution or completion rather than planning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (to place a task in Today's plan) but does not explicitly contrast with alternatives or state when not to use it. The sibling tool names provide context, but no direct guidance is given, so it falls at the 'implied usage' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tasksSearch Super Productivity tasksA
Read-onlyIdempotent

Find tasks by title or project. Returns task IDs for explicit follow-up actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
sourceNoactive
projectIdNo
includeDoneNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds that the tool returns task IDs, a behavioral detail not present in annotations. However, it doesn't disclose limitations like default source or matching behavior, so it is better than minimal but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no fluff, front-loaded with the core action. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and 5 parameters, the description is somewhat sparse. It covers the primary search behavior and return type but omits details about search scope (source, includeDone) and pagination limit. It is minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the 5 parameters. It only clarifies that query relates to title and projectId to project, while completely ignoring source, includeDone, and limit. This is insufficient compensation for a parameter-heavy tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: searching for tasks by title or project. It also specifies the output (task IDs), which distinguishes it from other read-only tools like list_today or get_current_task. This is a specific verb+resource+scope combination, earning full marks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to find tasks and obtain IDs for follow-up actions, but it does not explicitly state when to use this over siblings like list_today or plan_task_today. No alternatives or exclusions are mentioned, so it falls into implied usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_taskStart one taskA
Idempotent

Start tracking exactly the supplied task ID as the current task.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it is mutating, non-destructive, and idempotent. The description adds that it sets the current task to exactly the supplied ID, implying replacement of any existing current task, which is useful context beyond annotations. However, it doesn't discuss error cases or effects on timer state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, directly to the point, with no filler. Front-loaded with the action verb 'Start tracking.'

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description sufficiently explains the basic functionality. It could mention what happens to the previously tracked task or existing timer, but the word 'exactly' implies a clean replacement. Overall, adequate for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage), so the description must compensate. It mentions 'supplied task ID,' which confirms the parameter's role, but doesn't elaborate on format or constraints beyond the schema. Given only one parameter named taskId, the description provides minimal added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Start tracking' and clearly indicates the resource: 'exactly the supplied task ID as the current task.' This distinguishes it from siblings like get_current_task (reads) and stop_timer (stops).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is used when you want to set a specific task as current, but it does not explicitly state when to use it over alternatives like plan_task_today or list_today. No exclusions or alternative references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_timerStop the current timerA
Idempotent

Stop the Super Productivity timer without selecting or changing another task.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds useful behavioral context by stating that the timer is stopped without selecting or changing another task, which is a valuable side effect to disclose. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the primary action and its key constraint. Every word contributes value; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless tool with no output schema and strong annotations, this description is complete. It tells the agent exactly what the tool does and the important side-effect boundary (no task change).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the description naturally adds no parameter-specific semantics. Per the rubric, a baseline of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('stop') and resource ('Super Productivity timer'), and clarifies the scope ('without selecting or changing another task'). This clearly distinguishes it from sibling tools like start_task and complete_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to stop the current timer without altering task selection. It does not explicitly name alternative tools, but the behavior is specific enough that an agent can infer when this is the right action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.1
    • First observedcheck_connection
    • First observedcomplete_task
    • First observedensure_github_issue_task
    • First observedget_current_task
    • First observedhealth
    • First observedlist_today
    • First observedplan_task_today
    • First observedsearch_tasks
    • First observedstart_task
    • First observedstop_timer

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation2/5

health and check_connection have identical purpose and descriptions, making them indistinguishable. All other tools have clear, distinct roles (searching, planning, tracking, completing, GitHub integration), so the ambiguity is limited to this redundant pair.

Naming Consistency4/5

Most tools follow a verb_noun snake_case pattern (e.g., search_tasks, start_task, complete_task). The outlier is 'health', which is a bare noun instead of a verb phrase like 'check_health' or 'get_health'. This minor deviation prevents a perfect score.

Tool Count5/5

With 10 tools, the set is well-scoped for a desktop productivity API. Each tool serves a distinct function (health check, task search, today list, planning, tracking, timer control, completion, current task retrieval, GitHub integration) without unnecessary bloat.

Completeness4/5

The core workflows for Super Productivity are covered: finding tasks, planning them for today, starting/stopping time tracking, completing tasks, and retrieving the current task. Missing operations like creating standalone tasks or updating task details are notable but not critical, as the GitHub issue integration provides one creation path.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers