Skip to main content
Glama
maystar

Super Productivity REST MCP

by maystar

Super Productivity REST MCP

An MCP server that exposes the Super Productivity desktop app's Local REST API as tools an MCP client (e.g. Claude Code) can call directly — list/create/update/delete tasks, start/stop/archive them, read status and Focus Mode state, and list projects and tags.

It talks to the REST API over plain HTTP and makes no assumption about how it's deployed: run it locally next to Super Productivity, in a container that reaches the host over host.docker.internal, or anywhere else that can reach the API's base URL.

Prerequisites

Super Productivity ≥ 14.0.0, with Settings → Misc → Enable local REST API turned on. Copy the access token shown there — you'll need it as SP_REST_TOKEN below.

Related MCP server: Super Productivity MCP Server

Configuration

Env var

Required

Default

Description

SP_REST_TOKEN

for authenticated tools

Bearer token from Super Productivity's Local REST API settings. Only sp_health works without it.

SP_REST_BASE_URL

no

http://host.docker.internal:3876

Base URL of the Local REST API. Use http://localhost:3876 when running next to Super Productivity on the same machine.

Running

Directly with Node (≥ 20.11)

npm install
SP_REST_TOKEN=... SP_REST_BASE_URL=http://localhost:3876 node index.js

As a Docker container

docker build -t super-productivity-rest-mcp .
docker run -i --rm \
  -e SP_REST_TOKEN=... \
  -e SP_REST_BASE_URL=http://host.docker.internal:3876 \
  super-productivity-rest-mcp

Pre-built images are published to GHCR on every push to main and on version tags — see .github/workflows/docker-publish.yml. Once published:

docker run -i --rm -e SP_REST_TOKEN=... ghcr.io/<owner>/super-productivity-rest-mcp:latest

The server communicates over stdio, so -i (keep stdin open) is required; it does not open any network port of its own.

Registering with Claude Code

# Local Node process
claude mcp add super-productivity --scope user -- node /path/to/index.js

# Or via Docker
claude mcp add super-productivity --scope user -- \
  docker run -i --rm -e SP_REST_TOKEN -e SP_REST_BASE_URL ghcr.io/<owner>/super-productivity-rest-mcp:latest

Make sure SP_REST_TOKEN (and SP_REST_BASE_URL, if needed) is present in the environment Claude Code's MCP client subprocess inherits.

Tools

Tool

Description

sp_health

Health check (unauthenticated)

sp_status

Current task + total task count

sp_tasks_list

List tasks, filterable by title/project/tag/done-state/source

sp_task_get

Get one task by id

sp_task_create

Create a task

sp_task_update

Update fields of a task

sp_task_delete

Delete a task

sp_task_start

Set a task as the current task

sp_task_archive

Archive a task

sp_task_restore

Restore an archived task

sp_task_control_get_current

Get the currently running task

sp_task_control_set_current

Set/clear the current task

sp_task_control_stop

Stop the current task

sp_focus_get

Focus Mode status (Flowtime/Pomodoro/Countdown)

sp_projects_list

List projects

sp_tags_list

List tags

Project layout

index.js              entry point: reads env config, connects the server to stdio
src/server.js          builds the McpServer and wires all tool modules to a REST client
src/rest-client.js      thin HTTP client for the Local REST API (no MCP knowledge)
src/tool-result.js      shared helpers for shaping tool call results/errors
src/tools/*.js          one module per resource (tasks, task-control, focus, projects, tags, health)
test/smoke.mjs          automated test: server + in-memory MCP client, no network required
test/manual-client.mjs  manual verification client against a real, running Super Productivity instance

Testing

npm test

Runs test/smoke.mjs: connects an in-memory MCP client to the server, checks the expected 16 tools are registered, and confirms a call against an unreachable backend fails as a reported tool error rather than crashing. This needs no real Super Productivity instance and is what CI runs.

To verify against a real instance, run:

SP_REST_TOKEN=... [SP_REST_BASE_URL=http://localhost:3876] node test/manual-client.mjs

License

MIT

Available Tools

16 tools
sp_focus_getGet Focus Mode statusA

Returns the mode (Flowtime/Pomodoro/Countdown), cycle, and running timer, if active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It discloses only that the timer is returned 'if active,' but never states that the call is a side-effect-free read, what is returned when no focus mode is running, or whether any authentication is needed – all material gaps for a tool with zero annotation coverage.

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?

A single 15-word sentence that front-loads the core action and packs the mode variants, cycle, and conditional timer into compact parenthetical phrasing. No filler or redundancy.

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 is simple (0 params, no output schema, no annotations), and the description covers the main return fields. However, without an output schema, the description must explain the return contract fully, and 'if active' leaves the inactive-state behavior (empty, null, or error) unexplained.

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 0 parameters, so per the rubric the baseline is 4. The description appropriately spends its effort describing the return payload instead, which is the right trade-off for a parameterless getter.

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 ('Returns') and resource ('Focus Mode status') and enumerates exactly what comes back: mode with its three enum-like variants (Flowtime/Pomodoro/Countdown), cycle, and running timer. This clearly differentiates it from the generic sp_status and the task-centric siblings.

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 call this tool versus alternatives. With sibling tools like sp_status and sp_task_control_get_current present, nothing tells the agent why it would choose this status getter over those, so the usage must be inferred entirely from the name.

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

sp_healthSuper Productivity: health checkA

Checks whether the Super Productivity Local REST API is reachable (unauthenticated).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the call is unauthenticated, which is a meaningful trait, but it does not state what the response looks like (e.g., status code or boolean) or confirm that it has no side effects. For a health check this is a moderate disclosure.

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?

A single sentence that front-loads the verb and resource, with no filler or redundancy. Every word contributes meaning, including the unauthenticated qualifier.

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 zero-parameter health check, the description is largely sufficient: the agent knows what it does and that no authentication is required. The only missing context is what the tool returns (e.g., an HTTP status or response body), which would help the agent interpret the result, but the overall complexity is low.

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 to document. The 0-parameter baseline applies, and the description does not introduce any parameter-related 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?

States a specific action ('checks whether... reachable') against a named resource (the Super Productivity Local REST API) and qualifies it as unauthenticated. This distinguishes it from sibling CRUD tools like sp_task_get and sp_tasks_list, which operate on specific resources rather than the API's availability.

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 the tool is used to verify API connectivity before other operations, but it does not explicitly state when to prefer it over alternatives or mention any exclusions. With siblings like sp_status present, a brief note about when to use this vs. other status-type tools would make it clearer.

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

sp_projects_listList projectsA

Lists projects, optionally filtered by title (case-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose that filtering is case-insensitive and that the operation is a list (non-destructive), which is useful, but it omits response shape, pagination/ordering, and query-match semantics such as exact vs substring.

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 with no filler: it front-loads the action and resource, then states the one relevant filter behavior. Every word 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?

For a single-optional-parameter list tool, the core calling contract is present, making the description minimally viable. However, with no annotations and no output schema, an agent still lacks return-format details and query-match semantics, leaving meaningful 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?

Schema description coverage is 0%, so the description must compensate. It does this by mapping the lone 'query' parameter to a case-insensitive title filter, which adds real meaning beyond the bare string type. It could still clarify whether the filter is exact, prefix, or substring.

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 ('lists') with a clear resource ('projects') and immediately states the optional filtering behavior. It is distinct from sibling list tools by resource name, so an agent can tell it apart from sp_tasks_list without opening schemas.

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 versus alternatives, and no sibling tools or exclusions are mentioned. The only usage context is implied by the resource name 'projects', but there is no explicit decision support.

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

sp_statusSuper Productivity: statusB

Returns the current task and the total task count.

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?

With no annotations, the description carries the full behavioral disclosure burden. 'Returns' implies a read-only operation and the tool has no parameters, but the description does not explicitly state that it has no side effects, nor does it mention potential output shape or failure conditions.

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 with no filler or redundant information. It is appropriately sized and front-loads the core behavior.

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 description is minimally adequate for a zero-parameter status endpoint, but with no output schema it could be more explicit about the response format (e.g., what a 'task' looks like, whether the count is filtered). The sibling overlap also makes the context incomplete without usage guidance.

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 and the schema coverage is 100%, so the description does not need to elaborate on parameters. The baseline of 4 for zero-parameter tools applies.

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 states a clear verb ('Returns') and specific resources ('current task' and 'total task count'). It is distinct enough from siblings by combining these two pieces of information, though it does not explicitly contrast with sp_task_control_get_current or sp_tasks_list.

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 about when to use this tool versus alternatives like sp_task_control_get_current or sp_tasks_list. The description only states what it returns, not when it is the preferred choice or when it should be avoided.

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

sp_tags_listList tagsA

Lists tags, optionally filtered by title (case-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It clearly signals a read-only operation via 'lists' and adds the useful detail that title filtering is case-insensitive. It does not mention output format or pagination, but these are minor for a simple list tool.

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?

A single sentence with no filler. The core operation is front-loaded, and the optional filter behavior follows immediately. Every word contributes useful information.

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 tool with one optional parameter and no output schema, the description is nearly complete: it states what the tool lists and how filtering behaves. It could add details about the returned tag object structure, but that is not essential for correct invocation.

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 schema provides no description for the optional 'query' parameter (0% coverage), so the description must compensate. It does so by explaining that the query filters tags by title and is case-insensitive, giving the parameter concrete meaning beyond the raw schema.

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 and resource ('lists tags') and adds an optional title filter, making the tool's function completely clear. It is easily distinguished from sibling tools, which operate on tasks, projects, health, and controls rather than tags.

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 gives clear context: use this tool to list tags, with optional filtering by title. There are no sibling tag-listing tools, so no explicit alternative or exclusion is necessary; the use case is unambiguous.

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

sp_task_archiveArchive a taskC

Moves a task to the archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says the task is moved; it does not state whether the operation is reversible, whether it is a soft-delete, what side effects occur, or what the call returns. For a mutating tool this is a significant gap.

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?

A single sentence contains the entire meaningful description; there is no filler, repetition, or unnecessary detail.

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

Completeness2/5

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

For a one-parameter mutation tool with no annotations and no output schema, the description is minimal but leaves important context (reversibility, distinction from delete/restore, expected response) unstated. It is barely viable for correct invocation.

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?

The schema has 0% description coverage and the description does not explain the id parameter beyond 'a task' implicitly tying it to the resource. Since the description was expected to compensate for the bare schema and does not, parameter semantics are under-specified.

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 states a clear action ('Moves a task') and destination ('the archive'), so an agent can tell it archives rather than deletes or restores. It does not explicitly differentiate from sp_task_delete or sp_task_restore, but 'archive' is a distinct semantic target.

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 about when to choose archive over the sibling delete/restore tools. With sp_task_delete and sp_task_restore in the same group, the agent is left to infer all selection criteria.

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

sp_task_control_get_currentGet the currently running taskB

Returns the currently running task (task-control).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure, yet it merely restates the title without adding behavioral context. It does not reveal what happens when no task is currently running (null vs. empty vs. error), nor what the 'task-control' qualifier implies about side effects. The read-only nature is implied but the edge-case behavior is entirely undisclosed.

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

Conciseness4/5

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

The description is a single compact sentence, front-loaded with the operative verb and free of filler. The only slightly cryptic element is the '(task-control)' parenthetical, which is unexplained but harmless. The length is appropriate for a zero-parameter tool.

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 zero-parameter read with no output schema and no annotations, the description is nearly sufficient but leaves the no-current-task case unstated, which an agent needs to handle the response correctly. It also doesn't relate 'current task' to sibling state concepts like sp_focus_get or the setter sp_task_control_set_current. A single clause covering the empty case would have made it complete.

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 is trivially 100% covered and there is nothing for the description to explain. The zero-parameter baseline of 4 applies directly, and no deduction is warranted for missing parameter detail.

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 uses a specific verb ('Returns') and a specific resource ('the currently running task'), which distinguishes it from siblings like sp_task_get (fetch a task by ID) and sp_tasks_list (enumerate tasks). The '(task-control)' parenthetical loosely signals the control family, aligning it with sp_task_control_set_current and sp_task_control_stop. However, it closely paraphrases the title and never explicitly differentiates itself from those control siblings.

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 provided about when to call this tool versus alternatives such as sp_task_get, sp_tasks_list, sp_focus_get, or sp_task_control_stop. With 14 siblings present, an agent is left to infer the usage context purely from the name. There are no exclusions, prerequisites, or scenario-based routing clues.

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

sp_task_control_set_currentSet the current taskA

Sets the current task; omitting taskId (or passing null) clears the current task.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately communicates the mutating nature of the operation and the important edge case of clearing via omission/null. It does not discuss failure modes or side effects, but the core behavior is transparent.

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, efficient sentence. The main action is front-loaded, and the optional clearing behavior is clarified in a short clause without any filler.

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 one-parameter setter with no output schema, the description is complete enough for correct invocation: it states the primary action and the two ways to clear. It does not describe return values or error behavior, but neither is essential for this tool's basic use.

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

Parameters5/5

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

The schema provides only the type 'string or null' with no parameter description. The description compensates fully by explaining that omitting taskId or passing null clears the current task, which is exactly the semantic meaning an agent needs.

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 and resource ('Sets the current task') and explicitly covers the clearing behavior when taskId is omitted or null. This clearly distinguishes the tool from siblings like sp_task_control_get_current and sp_task_update.

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 makes the usage context clear: call this to establish the current task, and omit or null taskId to clear it. It does not explicitly name alternatives or exclusions, but the intended use is easy to infer from the tool name and behavior.

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

sp_task_control_stopStop the current taskA

Stops the currently running task without starting another one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It discloses the primary effect and the important constraint that no new task is started. It does not mention what happens if no task is running, whether the stop is reversible, or what the response looks like, but the core behavior is clear.

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?

A single, front-loaded sentence with no filler. It states the action and its scope immediately, and the additional clause adds meaningful distinction without bloat.

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 zero-parameter, no-output-schema action, the description is nearly sufficient. It explains the action and its non-cascading nature. A small gap is the lack of guidance on edge cases like stopping when no task is current, but the tool's simplicity keeps this minor.

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 baseline is 4. The description correctly avoids inventing parameters and provides enough context about what operation is performed.

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 ('Stops') with a clear resource ('the currently running task') and explicitly notes it does not start another task. This distinguishes it from sibling tools like sp_task_start and sp_task_control_set_current.

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 makes the use case clear: invoke when you want to halt the currently running task and remain idle. However, it gives no explicit guidance about when not to use this tool or how it differs from related alternatives such as sp_task_delete or sp_task_update.

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

sp_task_createCreate a taskA

Creates a new task. A subtask (parentId set) inherits the parent's project and cannot have its own tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
titleYes
dueDayNoYYYY-MM-DD
isDoneNo
tagIdsNo
parentIdNo
plannedAtNoUnix timestamp, ms
projectIdNo
timeSpentNoMilliseconds
deadlineDayNoYYYY-MM-DD, mutually exclusive with deadlineWithTime
dueWithTimeNoUnix timestamp, ms
timeEstimateNoMilliseconds
deadlineRemindAtNo
deadlineWithTimeNoUnix timestamp, ms, mutually exclusive with deadlineDay

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose two important nontrivial behaviors: subtasks inherit the parent's project and cannot have their own tags. However, it does not mention response behavior, validation effects, or what happens with conflicting fields like projectId and parentId.

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 sentences with no filler. The core action is front-loaded, and the subtask exception is stated as a single concise rule. Every sentence earns its place.

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

Completeness2/5

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

For a 14-parameter creation tool with no annotations and no output schema, the description is thin. It covers the special subtask case but omits broad guidance on required fields, defaults, mutually exclusive date fields, or what the tool returns after creation. An agent would need to infer a significant amount from the schema alone.

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 coverage is only 50%, so the description must add parameter meaning. It does add valuable semantics for parentId and tagIds by explaining subtask inheritance and tag restrictions. But most other parameters, including projectId, dueWithTime, and timeEstimate, receive no additional explanation beyond their schema descriptions.

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 opens with 'Creates a new task', a specific verb and resource that clearly identifies the tool's function. It also adds a distinguishing constraint about subtasks, which helps separate it from sibling tools like sp_task_update and sp_task_archive.

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: use this tool when a task needs to be created. However, it does not explicitly contrast it with sibling tools or state when an alternative like sp_task_update or sp_task_start would be more appropriate. The subtask rule provides some context but no direct selection guidance.

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

sp_task_deleteDelete a taskB

Deletes a task irreversibly.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits itself. It clearly communicates that deletion is destructive and irreversible, which is the most critical behavior. However, it does not describe side effects, return values, error conditions, or permission requirements, leaving some burden unmet.

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 extremely concise and front-loaded, containing only the essential information: the action, the target, and the irreversibility. Every word earns its place and there is no filler.

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 simple one-parameter deletion tool, the description is minimally usable and conveys the core semantics. However, with no output schema and no usage guidance, the agent is left without information about expected return behavior or edge cases, so it is not fully complete.

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?

The schema has one required 'id' parameter and 0% schema description coverage, so the description should compensate. It does not explain the id format, scope, or relationship to the task being deleted, though the id's general purpose is inferable from context.

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 states a specific verb ('Deletes') and resource ('a task'), and the modifier 'irreversibly' clearly distinguishes this from sibling tools like sp_task_archive and sp_task_restore. An agent can understand exactly what this tool does from one sentence.

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?

The description gives no guidance on when to use this tool versus alternatives. Notably, it does not mention that sp_task_archive may be preferable when reversible deletion is desired, despite the sibling tools making that distinction relevant.

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

sp_task_getGet a single taskA

Returns one task by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It correctly indicates a read-only retrieval, but does not mention what happens for missing/invalid ids, authentication requirements, or the exact response shape.

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 redundant information. It communicates the essential behavior efficiently.

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 simple single-task getter, the description is minimally adequate, but it lacks guidance on error behavior, response structure, and how it relates to sibling tools. Since there is no output schema or annotations, those gaps make it incomplete rather than fully sufficient.

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 coverage is 0% and the only parameter 'id' has no schema description. The phrase 'by id' clarifies that the parameter is the task identifier, but it adds no detail about expected format, restrictions, or examples beyond what the property name already suggests.

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 returns one task by id, with a specific verb and resource. It is distinguishable from the sibling sp_tasks_list, though it doesn't explicitly mention that distinction or other getter-like siblings.

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 for retrieving a single task when its id is known, but it gives no explicit guidance on when to choose this over sp_tasks_list or other task operations. Usage context is inferable, not stated.

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

sp_task_restoreRestore a task from the archiveC

Restores an archived task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of explaining side effects, but it only repeats the core action. It does not disclose what state changes 'restore' causes, whether the operation is reversible, or what happens if the task is not archived.

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

Conciseness4/5

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

The description is a single sentence with no filler, and the core action is front-loaded. It is somewhat redundant with the title, but it remains appropriately concise for a one-parameter tool.

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 simple one-parameter tool, this description gives just enough for a basic invocation, but it omits behavioral context such as the effect on task state and error conditions. With no annotations and no output schema, additional detail about the restore behavior would improve completeness.

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?

The schema provides only a required string `id` with no description, and the tool description does not explicitly map `id` to the task being restored. However, because there is a single parameter with an unambiguous name, an agent can reasonably infer that `id` refers to the archived task's identifier.

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 states a clear verb ('Restores') and resource ('an archived task'), so an agent can tell this tool reverses archiving and distinguishes it from sp_task_archive, sp_task_delete, and other task tools. It is slightly redundant with the title but still specific enough.

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?

There is no guidance on when to use this tool versus alternatives, whether it is the inverse of sp_task_archive, or whether it only applies to previously archived tasks. The usage context is only implied by the name and one-line description.

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

sp_tasks_listList tasksB

Lists tasks, optionally filtered by title, project, tag, done-state and source.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoTitle contains (case-insensitive)
tagIdNo
sourceNo
projectIdNo
includeDoneNoDefault false

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention default behavior (e.g., whether archived tasks are included by default, the default source, or pagination), what the response looks like, or any side effects. The description only states the basic function without disclosing these important operational details.

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

Conciseness4/5

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

The description is a single, concise sentence that front-loads the main action and lists the key filters. It contains no fluff or redundant phrasing. However, it is so brief that it sacrifices useful detail, so it doesn't earn a 5.

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

Completeness2/5

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

For a tool with 5 parameters, no output schema, and no annotations, the description is insufficiently complete. It doesn't specify defaults for source or includeDone, doesn't describe the response format, and doesn't clarify behavior when no filters are provided. An agent would be uncertain about the tool's exact behavior without additional inference.

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 only 40% (query and includeDone have descriptions; tagId, source, projectId have none). The description adds some value by naming the filter dimensions, which maps to the parameters, but it doesn't explain their semantics (e.g., what source values mean, default of includeDone, or that all filters are optional). It partially compensates for the low coverage but leaves gaps.

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 (lists) and resource (tasks), and enumerates the filter dimensions (title, project, tag, done-state, source). This distinguishes it from sibling sp_task_get (which retrieves a single task) by implication, though it doesn't explicitly name the alternative. It is not a tautology and conveys the core purpose well.

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 when to use this tool (when you need a list of tasks, optionally filtered) but provides no explicit guidance on when not to use it or how it compares to alternatives like sp_task_get or sp_task_delete. There are no exclusions or alternative mentions, so the usage context is only implied.

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

sp_task_startStart a taskC

Sets the given task as the current task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of disclosing behavior. It does reveal that the operation changes which task is current, but it does not explain whether this also starts execution, whether it is reversible, what permissions are required, or what happens to the previously current task.

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 one concise sentence with no filler. The core behavior is front-loaded and every word contributes to understanding the tool's purpose.

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

Completeness2/5

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

For a mutating, one-parameter tool with no annotations and no output schema, this description is too thin. It does not explain the relationship to sp_task_control_set_current, nor does it provide enough behavioral context for an agent to confidently invoke it correctly in a broader workflow.

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%, and the only parameter is id (a plain string). The description adds minimal meaning by implying the id identifies the task to set current, but it does not clarify id format, source, or validation rules beyond that inference.

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 states a specific verb and resource: it sets a given task as the current task. This is clear in isolation, but it does not differentiate itself from the similarly named sibling sp_task_control_set_current, which likely performs the same operation.

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 provided about when to use this tool versus alternatives. The sibling sp_task_control_set_current appears to overlap with this tool's behavior, and the description gives no conditions, exclusions, or context to help an agent choose between them.

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

sp_task_updateUpdate a taskB

Updates individual fields of a task. parentId/subTaskIds cannot be changed (results in 400). deadlineDay/deadlineWithTime/deadlineRemindAt are mutually exclusive.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
notesNo
titleNo
dueDayNoYYYY-MM-DD
isDoneNo
tagIdsNo
plannedAtNoUnix timestamp, ms
projectIdNo
timeSpentNoMilliseconds
deadlineDayNoYYYY-MM-DD, mutually exclusive with deadlineWithTime
dueWithTimeNoUnix timestamp, ms
timeEstimateNoMilliseconds
deadlineRemindAtNo
deadlineWithTimeNoUnix timestamp, ms, mutually exclusive with deadlineDay

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It adds useful constraints: parentId/subTaskIds are immutable and cause a 400, and deadlineDay/deadlineWithTime/deadlineRemindAt are mutually exclusive. However, it does not disclose what happens to unspecified fields on update, whether the operation requires special permissions, what the response looks like, or whether the update is idempotent. Some context is present, but key behavior remains undisclosed.

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. The primary action is stated first, followed by two high-value behavioral constraints. Every sentence earns its place, and there is no filler or repetition of schema field formats.

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

Completeness2/5

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

Despite the tool having 14 parametersressing, no output schema, and no annotations, the description offers only two sentences. It does not cover partial-update semantics, response format, error cases beyond the 400 for forbidden fields, prerequisites like task existence, or how to set/clear optional fields. Given the complexity, the description is too lean to be fully contextual.

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 coverage is only 50%, so the description must compensate. It does add semantic value by explaining mutual exclusivity among three deadline fields and noting that parentId/subTaskIds are forbidden, even though those keys are not present in the schema. However, it does not clarify the meaning or intent for the many unannotated fields such as id, notes, title, isDone, tagIds, projectId, or deadlineRemindAt beyond what the schema already states.

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 opens with a specific verb and resource: 'Updates individual fields of a task.' This clearly positions the tool as a partial-update operation and distinguishes it from siblings like sp_task_create, sp_task_delete, and sp_task_archive. It could be slightly stronger by explicitly stating which task is updated via the id parameter, but the core purpose is unambiguous.

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?

The description provides constraints about what cannot be changed and mutual exclusivity, but it does not say when to prefer this tool over alternatives such as sp_task_create or sp_task_archive. There is no explicit guidance about when updates are appropriate or when another sibling tool should be used. The usage is implied from the name and title rather than stated.

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. 16 tool updatesv0.1.0
    • First observedsp_focus_get
    • First observedsp_health
    • First observedsp_projects_list
    • First observedsp_status
    • First observedsp_tags_list
    • First observedsp_task_archive
    • First observedsp_task_control_get_current
    • First observedsp_task_control_set_current
    • First observedsp_task_control_stop
    • First observedsp_task_create
    • First observedsp_task_delete
    • First observedsp_task_get
    • First observedsp_task_restore
    • First observedsp_task_start
    • First observedsp_task_update
    • First observedsp_tasks_list

TDQS

B3.1/5.0

Scored across 16 tools

Disambiguation2/5

Several tools overlap around the 'current task' concept: sp_task_start, sp_task_control_set_current, sp_task_control_stop, sp_status, and sp_task_control_get_current all describe the same state from slightly different angles. This makes it unclear which tool an agent should select for starting, stopping, or querying the active task.

Naming Consistency3/5

The sp_ prefix is consistent, but naming patterns vary: sp_task_get and sp_tasks_list mix singular/plural, while sp_task_start vs sp_task_control_set_current and sp_health/sp_status break the verb_noun rhythm. The names are readable but not predictable enough to be a 4 or 5.

Tool Count3/5

16 tools is on the borderline of being heavy for the scope, and the redundant current-task control tools make the count feel inflated. It is not excessive, but several tools could be consolidated without losing capability.

Completeness3/5

Tasks have solid lifecycle coverage with create, get, list, update, delete, archive, restore, start, and stop. However, projects and tags only have list operations, and focus only has a getter, leaving no way to manage those resources through the MCP server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers