GTD MCP Server
Allows deploying the GTD MCP server as a Databricks App, using Unity Catalog and Delta tables for storage and SQL warehouse for queries.
Allows running the GTD MCP server locally with SQLite storage for tasks, projects, inbox, and statistics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GTD MCP Servercapture in inbox: finish the quarterly report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GTD MCP Server: Python FastMCP on Databricks Apps
A practical, self-learning Model Context Protocol (MCP) server tutorial built with Python, FastMCP, FastAPI, and Databricks Apps. The project implements a Getting Things Done assistant with typed MCP tools for tasks, projects, inbox capture, next actions, and statistics.
Run the same MCP server locally with Codex and SQLite, or deploy it as a custom
Databricks App backed by a Unity Catalog Delta table and SQL warehouse. The
server supports both stdio and Streamable HTTP at /mcp, and can be attached to
Databricks AI Playground through its Tools panel.
What You Will Learn
how to build an MCP server in Python with FastMCP,
how MCP tools, schemas, transports, and structured responses work,
how to connect a local MCP server to Codex,
how to deploy an MCP server with Databricks Apps,
how to use Databricks App resources, service-principal authentication, Unity Catalog, Delta tables, and a SQL warehouse,
how to keep domain logic portable between SQLite and Databricks storage.
Start with QUICKSTART.md for setup and deployment. Use ARCHITECTURE.md as the complete workshop and extension guide.
Keywords: Model Context Protocol, MCP server, Python MCP, FastMCP, FastAPI, Databricks Apps, Databricks AI Playground, Codex MCP, Unity Catalog, Delta Lake, SQL Warehouse, AI agents, GTD assistant.
The operational code lives in src/; setup notebooks and client integration
guides live in docs/.
Related MCP server: Agentic Tools MCP Server
Repository Map
gtd-mcp-server/
├── README.md # how to navigate and work with this repo
├── QUICKSTART.md # local and Databricks Apps startup paths
├── ARCHITECTURE.md
├── LICENSE
├── pyproject.toml # uv project metadata
├── uv.lock # locked local dependency set
├── src/ # server package and Databricks app config
└── docs/
├── databricks_setup_storage.py
├── databricks_playground.md
└── local_llm_ide.mdLocal runs create a SQLite database at .local/gtd.sqlite3 by default.
Databricks Apps use Delta storage.
Main Concepts
src/gtd_mcp_server/server.py: FastMCP tools, FastAPI routes, launchers.src/gtd_mcp_server/storage.py: storage abstraction, SQLite backend, Delta backend.src/gtd_mcp_server/models.py: GTD task, project, inbox, and stats models.src/app.yaml: Databricks Apps startup command.src/requirements.txt: dependencies installed by Databricks Apps.pyproject.toml: localuvproject metadata.uv.lock: locked local dependency set.docs/databricks_setup_storage.py: Databricks notebook that creates the Unity Catalog catalog, schema, and Delta table.docs/databricks_playground.md: how to attach the deployed app through the Playground Tools panel.docs/local_llm_ide.md: how to connect the local server to Codex.
Storage Modes
Local default:
GTD_STORAGE_BACKEND=sqlite
GTD_SQLITE_PATH=.local/gtd.sqlite3Databricks Apps:
GTD_STORAGE_BACKEND=delta
GTD_DELTA_TABLE=gtd_mcp.app.gtd_mcp_records
DATABRICKS_WAREHOUSE_ID=<warehouse-id>
DATABRICKS_HOST=<injected-by-databricks-apps>Before deployment, attach a SQL warehouse resource with key sql-warehouse
and a UC table resource with key table. app.yaml maps both resources into
environment variables with valueFrom; Databricks Apps injects
DATABRICKS_HOST and service-principal credentials.
Before deploying on Databricks, run docs/databricks_setup_storage.py as a
Databricks notebook. It creates the gtd_mcp catalog, app schema, and
gtd_mcp_records Delta table used by the server.
When DATABRICKS_APP_NAME is present and GTD_STORAGE_BACKEND is unset, the
server assumes delta.
Databricks Apps installs requirements.txt and starts the command from app.yaml:
uvicorn gtd_mcp_server.server:app --host 0.0.0.0 --port $DATABRICKS_APP_PORTDaily Workflow
From this folder:
uv sync
uv run gtd-mcp-serverThen use:
REST health check:
http://localhost:8000/healthMCP streamable HTTP endpoint:
http://localhost:8000/mcpOpenAPI docs for the helper REST API:
http://localhost:8000/docs
Use /mcp from an MCP client.
Available Tools
17 toolscapture_taskB
Capture raw text to the GTD inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It implies a creation action but does not disclose side effects, idempotency, or processing behavior. The agent cannot assess safety or constraints from this description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no extraneous words. Every word contributes to the clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, simple action) and existence of an output schema, the description is adequate for capturing raw text. It lacks some behavioral details but is largely complete for the tool's straightforward nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one parameter and 0% schema description coverage, the description adds the qualifier 'raw text,' which suggests unstructured input. However, it does not explain format constraints, encoding, or how the text is processed, so value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Capture raw text to the GTD inbox' clearly specifies the action (capture), resource (raw text), and destination (GTD inbox). It distinguishes from siblings like create_task, which likely involves structured task creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., create_task, get_inbox). There are no context signals or exclusions mentioned, leaving the agent without criteria for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskC
Mark a task as completed.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 only states the action without explaining side effects, state changes, or required permissions. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with a single sentence that conveys the core purpose. Every word earns its place, but it could be slightly expanded for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter and presence of output schema, the description is minimally adequate. However, it lacks context about prerequisites or behavior, which would help an agent use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for the single parameter 'task_id'. The tool description does not explain how to specify the task (e.g., format or source). While the parameter name is self-explanatory, the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Mark a task as completed.' clearly states the verb (mark) and resource (task) with the action (completed). It distinguishes from siblings like 'start_task' and 'update_task' by focusing on the completion state, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool instead of alternatives such as 'update_task' or 'delete_task'. No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectC
Create a project to group related tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| goal | No | ||
| context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'Create a project' without disclosing any behavioral traits such as required permissions, idempotency, side effects, or constraints on project creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence with no unnecessary words. However, it could be more informative without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks important context about how projects group tasks, what fields are essential, and what happens on creation. An output schema exists but description still needs to set expectations for the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. However, description adds no meaning beyond parameter names (name, description, goal, context), which are self-explanatory but not elaborated. No help with format, validation, or relationships between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states clear verb ('Create') and resource ('project') with a brief purpose ('to group related tasks'). It distinguishes from sibling tools like 'create_task' or 'capture_task' that create or capture tasks, not projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives (e.g., when to create a project vs. simply creating a task). No prerequisites or context about project groupings are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskC
Create a structured actionable task.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| description | No | ||
| project_id | No | ||
| priority | No | medium | |
| context | No | ||
| due_date | No | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'create,' implying a write operation, but offers no details on side effects, permissions, or idempotency. This is insufficient for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (5 words) but lacks essential structure. It is too brief for a tool with 7 parameters and multiple siblings, resulting in under-specification rather than effective conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no annotations, presence of sibling tools), the description is incomplete. It does not explain how this tool relates to others or what 'structured actionable' means, leaving gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention any of the 7 parameters, and schema coverage is 0%. It adds no meaning beyond the schema fields, leaving the agent without guidance on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Create a structured actionable task,' which clearly indicates the tool creates a task with structured details. However, it does not differentiate from the sibling 'capture_task,' so the purpose is clear but not distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'capture_task' or 'complete_task.' The description lacks any context for appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectB
Delete a project and unassign its tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially fulfills the burden by noting that tasks are unassigned, but omits details like reversibility, permission requirements, or deletion semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence that efficiently conveys the core action and a meaningful side effect without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple deletion tool, but missing details about permanence, error states, and output schema content; not fully complete given lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no information about the project_id parameter, such as its format or how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (delete) and resource (project) and specifies a key side effect (unassign its tasks). Distinct from siblings like delete_task or update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, no prerequisites or warnings about the unassignment behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
Delete a task by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description should disclose behavioral details. It only states 'delete' without explaining whether it's a soft delete, if dependencies are checked, or if it can be undone. This is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, but at the cost of completeness. One sentence with no frills.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal and does not cover key aspects for a deletion tool: whether deletion is permanent, if confirmation is needed (none in schema), error conditions, or return value. Given the destructive nature and lack of annotation support, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It adds minimal value by indicating deletion is by ID, but does not specify format or source of task_id (e.g., from list_tasks). For a single parameter, it should provide clearer guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the resource (task), and the method (by ID). It distinguishes from other task-related tools like create_task and update_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines provided. The description does not indicate when to prefer this tool over alternatives like update_task or complete_task, nor does it mention any prerequisites (e.g., task must exist, permissions needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inboxB
Return all raw inbox captures.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'return' without disclosing safety, permissions, or side effects. Insufficient for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single phrase, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal description; while an output schema exists, description does not clarify what 'raw inbox captures' means or how it differs from other lists. More context would help given no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. Description adds no parameter info, but none is needed. Baseline 4 for zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all raw inbox captures (specific verb+resource), but does not explicitly differentiate from similar sibling tools like list_tasks or get_next_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives; no context for selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_actionsC
Get high-priority actionable tasks to work on next.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for disclosing behavior. It fails to explain how 'high-priority' is determined, whether the tool is read-only, or what the ordering or filtering criteria are. The return format is not described, though an output schema exists (not shown). This lack of detail limits the agent's understanding of side effects and expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. It conveys the core purpose without unnecessary detail. However, given the lack of parameter and usage guidance, it may be too brief for the agent to use effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and an output schema (not shown), so the description may be adequate for basic understanding. However, the absence of usage guidelines, behavioral transparency, and parameter semantics leaves gaps that reduce completeness. The presence of many sibling tools increases the need for more contextual detail, which is not provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter 'limit' with a default of 10, but no description. Schema description coverage is 0%, so the description must compensate. However, the description does not explain that 'limit' controls the maximum number of returned tasks, nor does it provide any other parameter guidance. The agent must guess the parameter's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves high-priority actionable tasks for the next work step. It uses a specific verb ('Get') and resource, and implies a filtered view distinct from sibling tools like 'list_tasks' or 'get_inbox'. However, it does not explicitly differentiate from alternatives such as 'get_inbox' which may also surface tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling tools like 'list_tasks' or 'start_task'. There is no mention of prerequisites, or when not to use it, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectC
Get project details and task IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It does not mention that it is a read-only operation, nor does it describe any prerequisites, rate limits, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. However, it is arguably too sparse for the information needed, sacrificing completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values, but it lacks information on the sole parameter, usage context, and behavioral traits. It is incomplete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds minimal meaning. 'project_id' is not described; the agent must infer that it is the project's identifier from the tool name. No format or source guidance is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'project', with additional detail 'and task IDs' that distinguishes it from siblings like list_projects or create_project. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_projects, get_task, or update_project. There are no hints about context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsB
Get task, project, priority, and attention-needed statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose safety or behavioral traits (e.g., read-only, side effects, rate limits). It simply states what stats are returned without context on behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single eight-word sentence that conveys the core purpose. No wasted words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description is largely sufficient. It covers the key types of statistics returned, though some terms (e.g., 'attention-needed') could benefit from clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds minimal value by naming the categories of statistics, but does not elaborate on their meaning or structure. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves task, project, priority, and attention-needed statistics. It distinguishes from sibling tools like get_inbox or get_task, but does not specify the scope (e.g., all tasks or user-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides no guidance on when to use this tool versus alternatives. No when/when-not conditions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskA
Get full task details by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries burden. States it gets full details but does not disclose error handling, authentication needs, or side effects. Adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no unnecessary words. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with an output schema, the description covers the essential purpose. Lacks details about return format but output schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter task_id is mentioned as 'by ID', but with 0% schema description coverage, the description adds minimal meaning beyond existence of a single ID parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get', resource 'full task details', and method 'by ID'. Differentiates from sibling get operations like get_project and get_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs list_tasks or other get tools. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthA
Check server health and selected storage backend.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description indicates a read operation but does not explicitly state it is non-destructive or disclose other behavioral traits like rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, purpose front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return value details are covered. Description is adequate for a health check tool, though it could mention non-destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; description adds meaning beyond schema by specifying what is checked (server health and storage backend). Baseline 4 applies, exceeded by adding context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Check' and resources 'server health' and 'selected storage backend'. Distinct from sibling tools which handle tasks and projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage as health check tool; siblings are unrelated tasks/projects so no confusion. Lacks explicit when-not or alternatives, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List projects, filtered by active/completed/paused or all.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | active |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It only states the basic action and filter options, without disclosing traits like pagination, sorting, default status, or whether it returns full project details. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and filtering capability. No redundant words; every part adds value. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional parameter, the description covers the core purpose and filter options. An output schema exists to handle return details, so the description is reasonably complete. Could mention the default status value, but schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds critical meaning. It lists the possible filter values ('active/completed/paused or all') which are not present in the schema. This gives the agent practical guidance beyond the type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'projects', and specifies filtering by status (active/completed/paused/all). It distinguishes from sibling tools like 'get_project' which returns a single project, though it doesn't explicitly contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing projects with optional filtering, but provides no explicit guidance on when to use this tool over others like 'get_project' or 'list_tasks'. No alternatives or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksA
List tasks with optional filters by status, priority, project, context, or tag.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| priority | No | ||
| project_id | No | ||
| context | No | ||
| tag | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool lists tasks with filters, which implies a read-only operation, but does not disclose pagination, ordering, scope (e.g., user vs global), rate limits, or data freshness. The existence of an output schema mitigates the lack of return value explanation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and lists filters. It is concise but could be more informative without becoming verbose; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 optional parameters, no parameter descriptions, no annotations, and no behavioral details, the description is incomplete. The output schema covers return structure, but missing guidance on ordering, limits, or typical usage scenarios leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 only lists parameter names (status, priority, project_id, context, tag) without explaining valid values, formats, or relationships. This adds minimal value beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'List' and resource 'tasks', and enumerates optional filters (status, priority, project, context, tag). This clearly defines the tool's purpose and distinguishes it from siblings like get_task (single task) and get_next_actions (specific filtered list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing tasks with optional filters, but lacks explicit guidance on when not to use it (e.g., for a single task use get_task) or alternatives. However, the context is clear enough for an agent to infer appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_taskC
Mark a task as in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 does not mention side effects (e.g., whether the task must currently be 'not started'), required permissions, rate limits, or idempotency. The description is too minimal to inform the agent about the tool's behavior beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is very concise. It is front-loaded with the essential action. However, it may be overly brief given the lack of supporting information, but for a simple tool it is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description does not explain what the tool returns. It also omits context about error handling, success criteria, or how the 'in progress' status affects downstream operations. The description is incomplete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, meaning the 'task_id' parameter has no description in the schema. The tool description adds no meaning to this parameter, leaving the agent without guidance on how to obtain or format the task identifier. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Mark a task as in progress' clearly states the verb (Mark) and resource (task) and specifies the state change. It differentiates from siblings like 'complete_task' by the specific status, but could be more explicit about the transition from 'not started' to 'in progress'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'capture_task' or 'update_task'. There is no mention of prerequisites, expected context, or situations where other tools are more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectC
Update project fields by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| name | No | ||
| description | No | ||
| goal | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose if update is partial, idempotent, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but omits critical information; could be expanded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks details on update semantics, error conditions, and parameter effects; output schema exists but insufficient standalone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description adds no meaning to parameters; only 'by ID' implies project_id usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool updates project fields by ID, distinguishing it from create_project and delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like create_project, or any context on prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskC
Update task fields by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| title | No | ||
| description | No | ||
| status | No | ||
| priority | No | ||
| context | No | ||
| due_date | No | ||
| notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It only says 'update', but does not mention whether the update is partial, what happens on success, or any side effects. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no schema descriptions, no annotations), the description is too minimal. It does not address return value, behavior for optional parameters, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds no meaning beyond parameter names. For 8 parameters, there is no explanation of formats, allowed values, or relationships (e.g., null meaning no update).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update'), the resource ('task'), and the means ('by ID'). It distinguishes this from siblings like 'create_task', 'complete_task', and 'delete_task'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'complete_task' or 'start_task'. No prerequisites or context provided.
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.
17 tool updates
v1.0.0- First observed
capture_task - First observed
complete_task - First observed
create_project - First observed
create_task - First observed
delete_project - First observed
delete_task - First observed
get_inbox - First observed
get_next_actions - First observed
get_project - First observed
get_stats - First observed
get_task - First observed
health - First observed
list_projects - First observed
list_tasks - First observed
start_task - First observed
update_project - First observed
update_task
TDQS
Scored across 17 tools
Each tool has a distinct and clearly defined purpose, with no overlapping functionality. For example, capture_task is for raw inbox items while create_task is for structured actionable tasks, and specialized tools like get_next_actions, get_inbox, and get_stats serve unique aggregation roles.
All tool names follow a consistent verb_noun pattern using lowercase snake_case (e.g., capture_task, get_next_actions, delete_project). This predictability aids agent comprehension and selection.
With 17 tools, the set is well-scoped for a GTD methodology server. Each tool addresses a specific operation in the GTD workflow without redundancy or bloat, balancing coverage with conciseness.
The tool surface covers core GTD operations: capture, creation, update, deletion, status tracking, and listing for both tasks and projects. Minor gaps exist, such as lack of batch operations or explicit 'review' tools, but core workflows are fully supported.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Getting Things Done (GTD) board for AI agents: capture to Inbox, next actions by context, projects, waiting-for, someday/maybe. Remote Streamable HTTP server with OAuth 2.1 login (passwordless email code). 16 tools + 4 prompts. Setup guide: https://gtdbrain.com/connect
Model Context Protocol server for todo.vu task management and time tracking.
Related MCP Servers
- AlicenseAqualityDmaintenanceA local Model Context Protocol server providing backend tools for AI agents to manage projects and tasks with persistent storage in SQLite, enabling structured tracking of project tasks with dependencies, priorities, and statuses.125 npm25GPL 3.0
- AlicenseBqualityDmaintenanceA Model Context Protocol server providing AI assistants with comprehensive project, task, and subtask management capabilities with project-specific storage.2912 npm89MIT
- AlicenseAqualityFmaintenanceA Model Context Protocol server that enables AI assistants to interact with TickTick/Dida365 task management API, supporting operations like creating, reading, updating, and deleting tasks and projects.1111 npm35MIT
- FlicenseNot gradedqualityDmaintenanceEnables natural language task management including logging, updating, and summarizing productivity activities across multiple categories using a local SQLite database. It allows users to manage workflows and generate time-based summaries through standardized Model Context Protocol tools.1-