MCP OmniFocus
Specifically required as the operating system for running OmniFocus and this integration
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., "@MCP OmniFocuslist my tasks due this week"
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.
mcp-omnifocus
A Model Context Protocol (MCP) server for controlling OmniFocus from VS Code, the command line, or any MCP-compatible client. This tool enables automation and management of your OmniFocus tasks, projects, and tags using natural language and programmable interfaces.
Features
List all tasks, projects, tags, and perspectives in OmniFocus
Create, update, complete, drop, and activate tasks
Assign tasks to projects and tags
Process and organize your GTD inbox
Integrate with VS Code and other MCP clients
Related MCP server: OmniFocus MCP Server
Requirements
Installation
Clone the repository and install dependencies using uv:
git clone https://github.com/YOUR_USERNAME/mcp-omnifocus.git
cd mcp-omnifocus
uv venv
uv pip install -e .Usage
Add the following to your mcp configuration:
{
"servers": {
"mcp-omnifocus": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/somposer/mcp-omnifocus",
"mcp-omnifocus",
]
}
}
}Capabilities
The MCP OmniFocus server exposes the following tools, prompts, and resources:
list_perspectives: List all perspectiveslist_projects: List all projectslist_tags: List all tagslist_tasks: List all tasks (with full hierarchy)list_inbox: List all tasks in the Inboxcreate_task: Create a new taskupdate_task: Update a task (name, project, tags, note, defer/due date, flagged)complete_task: Mark a task as completedrop_task: Drop a taskactivate_task: Reactivate a dropped or completed taskprocess_inbox: A reusable prompt for processing your GTD inbox
Development
For development change your mcp.json to the following:
{
"servers": {
"mcp-omnifocus": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--project",
"${workspaceFolder}/",
"python",
"-m",
"mcp_omnifocus",
],
"dev": {
"watch": "src/**/*.py",
"debug": {
"type": "python"
}
}
}
}
}License
MIT
Available Tools
12 toolsactivate_taskA
Activate (un-drop or un-complete) a task in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to activate |
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 mentions the action but does not disclose behavioral traits like permissions needed, whether changes are reversible, side effects on related tasks, or error handling. For a mutation tool without annotations, this is a significant gap in 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 a single, efficient sentence that front-loads the purpose with zero waste. It uses parentheses for clarification without redundancy, making it appropriately sized and well-structured.
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 is a mutation with no annotations and no output schema, the description is incomplete. It lacks details on what happens after activation, potential errors, or system behavior, which are crucial for an agent to use it correctly in context with siblings like 'update_task'.
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 100%, so the schema already documents the 'task_id' parameter. The description does not add any meaning beyond what the schema provides, such as format examples or constraints, but the baseline is 3 when schema coverage is high.
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 specific action ('Activate') and resource ('a task in OmniFocus'), and distinguishes it from siblings by specifying what activation means ('un-drop or un-complete'), which differentiates it from tools like 'complete_task' or 'drop_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?
The description implies usage context by defining activation as reversing drop or completion states, suggesting it should be used on tasks that are dropped or completed. However, it does not explicitly state when not to use it or name alternatives, such as whether it applies to all task states or only specific ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskC
Complete a task in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to complete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether completion is reversible, if it affects task dependencies, requires specific permissions, or what the response looks like, leaving significant gaps for a mutation 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?
The description is a single, efficient sentence with zero waste, front-loading the core action and resource. It's appropriately sized for a simple tool, earning its place without unnecessary elaboration.
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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral impact (e.g., what 'complete' entails), error handling, or return values, which are crucial for an agent to use it correctly in context with siblings.
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 100%, so the schema already documents the single parameter 'task_id'. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.
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 ('Complete') and resource ('a task in OmniFocus'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'drop_task' which might also mark tasks as done, missing explicit differentiation.
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 about when to use this tool versus alternatives like 'drop_task' or 'update_task' for marking completion. The description lacks context about prerequisites (e.g., task must exist, be active) or exclusions, offering minimal usage direction.
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 new task in OmniFocus with a name and an optional note.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the task to create | |
| note | No | The note for the task, None if no note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only mentions creation with name and note. It lacks critical behavioral details such as required permissions, whether tasks are saved immediately, default settings (e.g., project, context), or error handling, which are essential for a mutation 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?
The description is a single, efficient sentence that directly states the tool's purpose and parameters without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like side effects, return values, or error conditions, leaving significant gaps in understanding how 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?
Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds minimal value by summarizing the parameters but doesn't provide additional context like format constraints or examples beyond what's in 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 clearly states the action ('Create a new task') and resource ('in OmniFocus'), specifying the required name and optional note. It distinguishes from sibling tools like 'update_task' or 'list_tasks' by focusing on creation, though it doesn't explicitly contrast with them.
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 'update_task' for modifying existing tasks or 'list_tasks' for viewing. The description only states what it does, not when it's appropriate, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drop_taskC
Drop a task in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to drop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action without disclosing behavioral traits. It doesn't clarify if dropping is destructive (e.g., deletes the task), requires specific permissions, has side effects, or what the expected outcome is (e.g., no return value or confirmation). This is inadequate for a mutation 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words, making it appropriately sized and front-loaded. However, it's overly concise to the point of under-specification, slightly reducing its effectiveness 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 complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It fails to explain what 'drop' entails behaviorally, potential impacts, or return values, leaving significant gaps for an AI agent to understand and invoke the tool 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 description coverage is 100%, with the single parameter 'task_id' documented in the schema as 'The ID of the task to drop'. The description adds no additional meaning beyond this, such as format examples or constraints, so it meets the baseline of 3 where the schema does the heavy lifting.
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 'Drop a task in OmniFocus' clearly states the action (drop) and resource (task), but it's vague about what 'drop' means operationally compared to siblings like 'complete_task' or 'activate_task'. It distinguishes by name but not by specific behavior, leaving ambiguity about whether this is deletion, cancellation, or status change.
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 'complete_task' or 'update_task'. The description lacks context about prerequisites, exclusions, or typical scenarios for dropping tasks, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inboxB
List all tasks in the OmniFocus Inbox.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 states the action but does not cover aspects like whether this is a read-only operation, potential rate limits, authentication needs, or what the return format might be. This leaves significant 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and no output schema, the description is incomplete. It does not explain behavioral traits, return values, or usage context, which are crucial for an AI agent to effectively invoke this tool. The simplicity of the tool (0 parameters) does not compensate for these missing elements.
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 parameters with 100% coverage, so no parameter information is needed. The description appropriately does not add parameter details, and since there are no parameters, it meets the baseline expectation without requiring compensation for gaps.
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 ('List') and resource ('tasks in the OmniFocus Inbox'), making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'list_tasks', which might list tasks more broadly, leaving room for ambiguity in sibling differentiation.
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 alternatives, such as 'list_tasks' or other list-related siblings. It lacks context on prerequisites, exclusions, or specific scenarios for usage, offering minimal direction for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_perspectivesB
List all perspectives in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'List all perspectives' implies a read-only operation that returns all available perspectives, but it doesn't specify whether this is paginated, sorted, filtered, or what format the output takes. For a tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
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 that states exactly what the tool does with zero wasted words. It's appropriately sized for a simple list operation and front-loads the essential information. Every word 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?
For a simple list operation with no parameters and no output schema, the description is minimally adequate but has clear gaps. It doesn't explain what perspectives are in OmniFocus context, doesn't describe the return format, and provides no usage guidance relative to sibling tools. With no annotations and no output schema, more context would be helpful.
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 tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't mention parameters since there are none, which is correct. The baseline for 0 parameters with full schema coverage is 4.
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 the resource 'perspectives in OmniFocus', making the purpose immediately understandable. It distinguishes from siblings like list_tasks or list_projects by specifying perspectives, but doesn't explicitly differentiate from other list operations beyond the resource name.
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 alternatives. With siblings like list_tasks, list_projects, and list_tags, there's no indication of what perspectives are or when one would list them instead of other resources. The description simply states what it does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
List all projects in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 states it lists projects but doesn't cover aspects like pagination, sorting, error conditions, or what 'all' entails (e.g., archived vs. active). This is a significant gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it highly concise and well-structured for quick comprehension.
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 simplicity (0 parameters, no output schema), the description is minimal but adequate for basic listing. However, with no annotations and no output schema, it lacks details on behavior, return format, or error handling, making it incomplete for reliable agent use.
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 parameters with 100% coverage, so the schema fully documents the absence of parameters. The description doesn't add parameter details, but with no parameters, a baseline of 4 is appropriate as there's nothing to compensate for.
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 ('all projects in OmniFocus'), making the purpose unambiguous. It doesn't distinguish from siblings like 'list_tasks_by_project' or 'list_perspectives', which would require a 5, but it's specific enough for basic understanding.
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 alternatives. It doesn't mention siblings like 'list_tasks' or 'list_tasks_by_project', nor does it specify contexts or prerequisites for listing projects, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsB
List all tags in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. While 'List all tags' implies a read-only operation, it doesn't disclose behavioral traits like whether it returns all tags at once or uses pagination, what format the output takes, or any rate limits or authentication requirements. The description is minimal and lacks necessary context for safe use.
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, clear sentence with zero wasted words. It's front-loaded with the core purpose and efficiently communicates the essential action without unnecessary elaboration, making it easy to parse quickly.
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 simplicity (0 parameters, no output schema) and lack of annotations, the description is minimally adequate but incomplete. It states what the tool does but omits details like output format or behavioral constraints that would help an agent use it correctly. For a read-only list operation, this is borderline viable but leaves gaps.
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 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, and since there are none, it doesn't need to compensate for any gaps. This meets the baseline for tools with no 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 action ('List') and resource ('tags in OmniFocus'), making the purpose immediately understandable. It distinguishes from siblings like 'list_tasks_by_tag' by focusing on tags themselves rather than tasks filtered by tags. However, it doesn't specify scope or format details that would make it fully 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?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_tasks_by_tag' that also involve tags, there's no indication whether this tool should be used for browsing all tags versus filtering tasks by tags, or any prerequisites for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksB
List all tasks in OmniFocus. The task full name is the full heirarchy of the task, including parent tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It describes the return format (task full name with hierarchy) but doesn't cover pagination, rate limits, authentication needs, error conditions, or whether this is a read-only operation. For a list operation with zero annotation coverage, this leaves significant behavioral gaps.
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?
Two clear sentences with zero waste. The first states the core purpose, the second clarifies the output format. Front-loaded with the main action, though could be slightly more structured for readability.
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 list operation with 0 parameters and no output schema, the description covers the basic purpose and output format. However, without annotations and with multiple sibling alternatives, it should provide more guidance on when to use this specific tool vs. filtered alternatives. The lack of behavioral context for a tool with no annotation coverage is a notable gap.
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 tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters, maintaining focus on what the tool does rather than its inputs. Baseline for 0 parameters is 4.
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 ('all tasks in OmniFocus'), making the purpose explicit. It distinguishes from some siblings by listing all tasks without filtering, but doesn't explicitly differentiate from list_tasks_by_project or list_tasks_by_tag which provide filtered views.
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 context by specifying 'all tasks' and explaining the 'full name' format, but doesn't provide explicit guidance on when to use this vs. alternatives like list_tasks_by_project or list_tasks_by_tag. No when-not-to-use or prerequisite information is included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasks_by_projectC
List all tasks in a specific project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The ID of the project to list tasks for | |
| task_status | No | The status of the tasks to list. If None, it is the equivelant of requesting available and unblocked tasks ['Available', 'Next', 'Overdue', 'DueSoon']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'List' implies a read-only operation, it doesn't specify whether this requires authentication, has rate limits, returns paginated results, or what format the output takes. The description lacks crucial behavioral context for a tool with no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple listing tool and front-loads the essential information about what the tool does.
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 tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what the output looks like, whether results are filtered/paginated, or any behavioral constraints. While the schema covers parameters well, the overall context for using this tool effectively is incomplete.
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 100% schema description coverage, the schema already documents both parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it mentions 'specific project' which aligns with the project_id parameter but provides no extra context about parameter usage or constraints.
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 ('tasks in a specific project'), making the purpose immediately understandable. It distinguishes from generic 'list_tasks' by specifying the project scope, though it doesn't explicitly differentiate from 'list_tasks_by_tag' which has similar structure but different filtering criteria.
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 alternatives like 'list_tasks' or 'list_tasks_by_tag'. It mentions the project scope but doesn't explain why one would choose this over other listing tools, nor does it mention any prerequisites or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasks_by_tagC
List all tasks with a specific tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | The ID of the tag to list tasks for | |
| task_status | No | The status of the tasks to list. If None, it is the equivelant of requesting available and unblocked tasks ['Available', 'Next', 'Overdue', 'DueSoon']. |
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. While 'List' implies a read-only operation, the description doesn't address critical aspects like authentication requirements, rate limits, pagination behavior, or what happens when no tasks match the tag. For a tool with no annotation coverage, this leaves significant gaps in understanding its 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?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose and avoids any redundant or verbose phrasing.
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 lack of annotations and output schema, the description is incomplete for a tool with two parameters and no structured behavioral hints. It doesn't explain return values, error conditions, or operational constraints, leaving the agent with insufficient context to use the tool effectively beyond basic parameter passing.
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 100%, so the schema fully documents both parameters (tag_id and task_status). The description adds no additional parameter semantics beyond implying tag-based filtering, which is already clear from the tool name and schema. This meets the baseline for high schema coverage.
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 ('tasks') with a specific filtering criterion ('with a specific tag'), making the purpose unambiguous. However, it doesn't explicitly distinguish this tool from sibling tools like 'list_tasks' or 'list_tasks_by_project', which would require mentioning the unique tag-based filtering approach.
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 alternatives. It doesn't mention sibling tools like 'list_tasks' (for unfiltered listing) or 'list_tasks_by_project' (for project-based filtering), nor does it specify prerequisites or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskC
Update a task in OmniFocus with a new name, assigned project name, tags, note, due date, and/or defer date.
| Name | Required | Description | Default |
|---|---|---|---|
| defer_date | No | The updated task deferred date in ISO format YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS, None if unchanged | |
| due_date | No | The updated task due date in ISO format YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS, None if unchanged | |
| flagged | No | The updated task flagged status, None if unchanged | |
| name | No | The updated task name, None if unchanged | |
| note | No | The updated task note, None if unchanged | |
| project_id | No | The project id to assign the task to, None if unchanged | |
| tag_ids | No | A list of tag ids to assign to a task. None if unchanged. Cannot remove existing tags assigned to a task. | |
| task_id | Yes | The ID of the task to update |
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 states the tool updates fields but lacks critical details: it doesn't specify if this is a mutation requiring permissions, whether changes are reversible, what happens to unspecified fields (implied unchanged but not stated), or the response format. For a mutation tool with zero annotation coverage, this is a significant gap in 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 a single, efficient sentence that front-loads the action ('Update a task') and enumerates the modifiable fields. There is no wasted language, and it directly conveys the core functionality without redundancy. It's appropriately sized for the tool's complexity.
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 (mutation with 8 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or response format, which are crucial for safe invocation. The schema covers parameters well, but the description fails to compensate for missing annotation and output information, leaving gaps in understanding the tool's full behavior.
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 100%, so the schema fully documents all 8 parameters with details like formats (ISO dates), defaults (null), and constraints (e.g., tag_ids cannot remove existing tags). The description lists the updatable fields (name, project name, tags, note, due date, defer date), which aligns with parameters but adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('Update') and resource ('a task in OmniFocus'), and lists the specific fields that can be modified (name, project name, tags, note, due date, defer date). It distinguishes from siblings like 'create_task' (creation vs. update) and 'complete_task' (status change vs. field updates), though it doesn't explicitly name alternatives. The purpose is specific and actionable.
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 alternatives. It doesn't mention prerequisites (e.g., needing a task_id), when not to use it (e.g., for deleting tasks), or refer to sibling tools like 'complete_task' for status changes. Usage is implied from the action 'update,' but no explicit context or exclusions are given.
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.
12 tool updates
v1.0.0- First observed
activate_task - First observed
complete_task - First observed
create_task - First observed
drop_task - First observed
list_inbox - First observed
list_perspectives - First observed
list_projects - First observed
list_tags - First observed
list_tasks - First observed
list_tasks_by_project - First observed
list_tasks_by_tag - First observed
update_task
TDQS
Scored across 12 tools
Most tools have distinct purposes, but there is some overlap between 'list_tasks' and the more specific 'list_tasks_by_project' and 'list_tasks_by_tag', which could cause confusion if an agent needs to choose between general and filtered listing. However, the descriptions clarify the differences, preventing major misselection.
All tool names follow a consistent verb_noun pattern with snake_case, such as 'create_task', 'list_inbox', and 'update_task'. This predictability makes the tool set easy to navigate and understand at a glance.
With 12 tools, the server is well-scoped for managing OmniFocus tasks, covering key operations like create, update, complete, and list across inbox, projects, and tags. Each tool serves a clear purpose without redundancy, fitting typical task management workflows.
The tool set provides strong CRUD coverage for tasks (create, update, complete, drop, activate) and comprehensive listing options (inbox, projects, tags, perspectives). A minor gap is the lack of direct project or tag management tools (e.g., create_project), but agents can still handle core task operations effectively.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceA Model Context Protocol (MCP) server that integrates with OmniFocus to enable Claude (or other MCP-compatible AI assistants) to interact with your tasks and projects.7299 npm242MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that integrates OmniFocus with Claude Desktop, providing AI-powered access to tasks and projects for enhanced task management and weekly reviews.4299 npm8MIT
- FlicenseNot gradedqualityCmaintenanceA production-grade MCP server that exposes OmniFocus as structured task infrastructure for AI agents, enabling read, write, and filter operations on tasks and projects via natural language.8-
- AlicenseNot gradedqualityDmaintenanceMCP server that gives AI assistants full control over OmniFocus on macOS, including tasks, projects, tags, folders, perspectives, forecast, notifications, and review workflows.43MIT