MCP OmniFocus
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 OmniFocuscreate a task named 'Review Q3 report' due tomorrow"
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
MCP server for OmniFocus with auto-detection of Pro/Standard version.
Features
Auto-detection: Automatically detects OmniFocus Pro or Standard
Full Pro support: AppleScript for read/write with sync
Standard fallback: SQLite read + URL scheme for create
Capabilities by Version
Feature | Pro (AppleScript) | Standard |
Read tasks | ✓ | ✓ (SQLite) |
Create task | ✓ | ✓ (URL scheme, syncs) |
Update task | ✓ | ⚠️ (SQLite, no sync) |
Complete task | ✓ | ⚠️ (SQLite, no sync) |
Get projects | ✓ | ✓ (SQLite) |
⚠️ Standard SQLite write: Changes don't sync until OmniFocus restart.
Related MCP server: OmniFocus MCP Server
Installation
Via npm (recommended)
npx mcp-omnifocusFrom source
git clone https://github.com/avlihachev/mcp-omnifocus.git
cd mcp-omnifocus
npm install
npm run buildClaude Desktop Configuration
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": ["mcp-omnifocus"]
}
}
}Or if installed from source:
{
"mcpServers": {
"omnifocus": {
"command": "node",
"args": ["/path/to/mcp-omnifocus/dist/index.js"]
}
}
}Tools
omnifocus_get_tasks
Get tasks filtered by flagged, due today, or all.
omnifocus_create_task
Create a new task with name, note, project, flagged, dueDate.
omnifocus_update_task
Update existing task (Pro: syncs, Standard: SQLite only).
omnifocus_complete_task
Mark task as complete (Pro: syncs, Standard: SQLite only).
omnifocus_get_projects
Get list of active projects.
Available Tools
7 toolsomnifocus_complete_taskB
Mark a task as complete. (Standard version: changes via SQLite won't sync until OmniFocus restart)
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task ID to complete (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It does disclose a genuinely non-obvious behavior: changes via SQLite won't sync until OmniFocus restart. However, it does not mention reversibility, side effects, or failure behavior, so transparency is only partial.
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 short and front-loaded, with the action stated first and the important restart caveat placed in a compact parenthetical. It is efficient and every sentence earns its place, though it could add a brief sibling distinction without becoming verbose.
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 one-parameter mutation tool with no output schema, this is minimally sufficient: it names the action and flags a critical sync behavior. It leaves some gaps, such as what the caller should expect after invocation and what 'standard version' means, but the simple schema lowers the bar.
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 already documents taskId as 'Task ID to complete (required)' with 100% coverage. The description adds no additional parameter-level meaning, so the baseline score of 3 applies.
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 uses a specific verb ('Mark') and clearly identifies the resource and target state ('task as complete'). It is unambiguous about what the tool does, but it does not differentiate it from the sibling omnifocus_update_task, so it stops short of full sibling distinction.
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?
There is no guidance about when to choose this tool over alternatives such as omnifocus_update_task. The parenthetical mentions a sync caveat, but it does not explain when this tool should or should not be used, leaving an agent without decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_create_taskB
Create a new task in OmniFocus. Detected version: standard
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Task name (required) | |
| note | No | Task note/description | |
| dueDate | No | Due date in ISO format (YYYY-MM-DD) | |
| flagged | No | Mark task as flagged | |
| project | No | Project name to add task to (optional, defaults to inbox) |
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, yet it only says 'Create a new task in OmniFocus.' It does not describe return values, side effects, permissions, failure modes, or behavior when optional fields like project are omitted. The 'Detected version: standard' note adds operational context but no behavioral 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 short, front-loaded, and free of fluff. The 'Detected version: standard' sentence is somewhat expendable, but it is not misleading and does not significantly harm the 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?
For a simple create-task operation, the schema plus clear purpose provide enough to invoke the tool correctly. However, the lack of any return-value or post-condition information, combined with no annotations and no output schema, leaves some behavioral context missing.
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 five parameters. The description itself adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 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?
The description clearly states a specific action ('Create') on a specific resource ('a new task in OmniFocus'), which unambiguously differentiates it from sibling tools like omnifocus_get_tasks, omnifocus_update_task, and omnifocus_complete_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?
There is no explicit guidance about when to use this tool versus alternatives, but the creation semantics are strongly implied by the tool name and the clear action/resource phrasing. No misleading or contradictory guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_get_configB
Get current configuration settings
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden; the word 'Get' implies a read-only retrieval and 'current' suggests no historical state. It doesn't disclose return shape, any configuration scope, or side-effect potential, but for a zero-parameter getter this is minimally adequate.
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?
One short sentence contains the entire semantic payload with no filler. The action and object are 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 parameterless getter, invocation is obvious, but with no output schema the description should state what the returned configuration contains or the response format. It is adequate but incomplete for an agent that needs to interpret the result.
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 no parameters and 100% schema description coverage, so the baseline is 4. The description adds no parameter detail, but there is nothing to document.
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 uses a specific verb ('Get') and resource ('current configuration settings'), and the config resource distinguishes it from task/project siblings. However, it doesn't spell out what settings are covered or how it differs from set_config beyond the get/set pairing.
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 when-to-use guidance or alternatives are mentioned. An agent can infer this is the read counterpart to omnifocus_set_config only from the sibling list, but the description itself gives no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_get_projectsA
Get list of active projects from OmniFocus. Detected version: standard
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. 'Get list' makes clear this is a read-style operation, and 'Detected version: standard' adds environment context, but it does not clarify output shape, ordering, pagination, or the precise meaning of 'active.'
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-loads the core purpose. The second sentence, 'Detected version: standard,' is compact but its relevance is unexplained, so it does not fully earn 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 zero-parameter read tool, this is minimally adequate: an agent knows it will receive a list of active projects. However, with no output schema and no annotations, the description could usefully mention what fields or identifiers are returned and what qualifies a project as 'active.'
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 zero parameters and the schema already documents an empty properties object with 100% coverage. There is nothing meaningful for the description to add about parameters, so the baseline of 4 applies.
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 uses a specific verb and resource: 'Get list of active projects from OmniFocus.' It clearly distinguishes this from sibling tools like omnifocus_get_tasks and omnifocus_get_config, and the qualifier 'active' adds useful scope.
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 intended use is implied: call this when a list of active OmniFocus projects is needed. However, it does not explicitly state when not to use it or point to alternatives such as omnifocus_get_tasks, so routing guidance is implicit rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_get_tasksB
Get tasks from OmniFocus. Filter by flagged, due today, or all. Detected version: standard
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter tasks: flagged, due_today, or all (default: flagged + due today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It says 'Get tasks' but does not describe the response format, default behavior beyond the schema, error cases, or any side effects; 'Detected version: standard' is cryptic and does not meaningfully disclose 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 first two sentences are compact and front-loaded, making the core purpose immediately clear. However, the third segment, 'Detected version: standard,' is vague and does not earn its place; it adds noise without actionable context.
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 read tool with one optional enum parameter, the description is mostly sufficient and the schema covers the parameter details. But with no output schema, it would benefit from stating what a successful response contains, and the unexplained version note leaves a small 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?
Schema description coverage is 100%, and the single parameter is a well-described enum including its default. The description repeats the enum values ('flagged, due today, or all') but adds no additional semantic detail beyond what the schema already provides.
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 a specific verb-resource pair, 'Get tasks from OmniFocus,' and lists the filter options, making the tool's purpose clear. It distinguishes from 'get_projects' and 'get_config' by the resource, but it does not explicitly differentiate itself from sibling task tools such as 'create', 'update', or 'complete'.
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 intended use is implied by 'Get tasks' and the filter options, but the description gives no explicit guidance on when to use this tool versus the sibling create/update/complete tools. It offers clear context about what it returns, yet stops short of stating exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_set_configA
Update configuration settings. For Standard version: directSqlAccess controls whether to use direct SQLite access for update/complete operations (faster but requires OmniFocus restart to sync)
| Name | Required | Description | Default |
|---|---|---|---|
| taskLimit | No | Maximum number of tasks to return from getTasks (default: 500, max: 10000) | |
| directSqlAccess | No | Enable direct SQLite access for write operations (Standard version only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It adds a meaningful side effect: directSqlAccess is faster but requires an OmniFocus restart to sync. This goes beyond the schema's simple description, though it does not disclose behavior for taskLimit changes.
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 two short sentences with no fluff. It front-loads the core purpose and then provides focused elaboration on the one parameter that benefits from behavioral context. 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 two-parameter configuration tool with fully documented schema parameters, the description is adequate. It includes the most important contextual detail (restart requirement), though it does not mention taskLimit at the tool level or describe return behavior. No output schema is present, so that omission is acceptable.
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 baseline is 3. The description adds value for directSqlAccess by specifying the speed/restart trade-off and clarifying that it applies to update/complete operations, which is more precise than the schema's 'write operations'. No additional semantics for taskLimit are needed since the schema already documents it well.
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 a specific action ('Update') and resource ('configuration settings'), making the tool's purpose immediately clear. It also contrasts naturally with the sibling omnifocus_get_config, distinguishing the setter from the getter without ambiguity.
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 gives clear context for when the directSqlAccess setting is applicable ('For Standard version') and explains what it affects. It does not explicitly mention alternatives or when not to use the tool, but the 'Update' verb and the tool's name imply its role as the configuration setter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
omnifocus_update_taskA
Update an existing task in OmniFocus. (Standard version: changes via SQLite won't sync until OmniFocus restart)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New task name | |
| note | No | New task note | |
| taskId | Yes | Task ID (required) | |
| dueDate | No | New due date in ISO format | |
| flagged | No | Set flagged status |
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 discloses a specific behavioral trait: changes via SQLite won't sync until restart, which is valuable. However, it does not mention other behavioral aspects like reversibility, failure modes, or permissions. For a mutation tool, this is partial coverage—useful but not comprehensive.
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 with a parenthetical caveat. It is concise, front-loaded with the core purpose, and the caveat is relevant and separated clearly. Every word earns its place with no fluff.
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 output schema, the description covers the main action and a key sync behavior. However, it does not mention how to obtain the required taskId, potential error conditions, or the effect on existing fields when some are omitted. The sync note is a good start, but more context could be added for a complete picture.
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 covers all 5 parameters with descriptions (100% coverage), so the schema already explains each field. The tool description does not add any additional parameter semantics beyond the schema, such as examples or relationships. With high schema coverage, the baseline of 3 is appropriate; no further value is added.
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 the action clearly: 'Update an existing task in OmniFocus.' The verb 'update' and resource 'task' are specific, and 'existing' distinguishes it from create. The caveat about SQLite sync adds context without confusion. Sibling tools like create/complete/get are clearly distinct from this update operation.
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 does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or conditions. The purpose is clear enough that an agent could infer it for updates, but there is no guidance on when not to use it or prerequisites (e.g., needing a taskId from get_tasks). The sync caveat hints at a usage consideration but does not direct selection.
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.
7 tool updates
v0.1.1- First observed
omnifocus_complete_task - First observed
omnifocus_create_task - First observed
omnifocus_get_config - First observed
omnifocus_get_projects - First observed
omnifocus_get_tasks - First observed
omnifocus_set_config - First observed
omnifocus_update_task
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: tasks have get/create/update/complete, projects have get, and configuration has get/set. There is no meaningful overlap between the tools, so an agent should be able to select the right one without confusion.
All tools follow the consistent omnifocus_<verb>_<noun> snake_case pattern using clear verbs like get, create, update, complete, and set. The naming conventions are uniform and predictable across the entire set.
Seven tools is a well-scoped size for an OmniFocus server, covering task operations, project retrieval, and configuration without unnecessary bulk. Each tool serves a clear purpose and the count feels appropriate for the domain.
The core task lifecycle is covered well with get, create, update, and complete operations, and config get/set supports the server itself. Minor gaps exist such as no task deletion or project mutation capabilities, but agents can likely work around these for most workflows.
Maintenance
Related MCP Connectors
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Read teams, spaces, lists and tasks; create, update and comment on tasks and track time.
- NirvanaOAuthcom.nirvanahq
Read and update your Nirvana tasks and projects: GTD states, tags, due dates, and capture.
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered task management in OmniFocus with support for project reviews, planned dates, repeating tasks, custom perspectives, hierarchical subtasks, and advanced filtering. Perfect for Claude AI integration with comprehensive CRUD operations for tasks, projects, and folders.2-
- AlicenseAqualityDmaintenanceEnables comprehensive management of OmniFocus on macOS through 17 specialized tools for projects, tasks, and organization. Users can create, update, and filter items or navigate the interface using natural language via the Model Context Protocol.218MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read and write to OmniFocus database, allowing natural language task management, project creation, and GTD workflows.41MIT
- AlicenseAqualityBmaintenanceGives MCP-compatible AI assistants full, typed access to OmniFocus on macOS, enabling task management, project manipulation, inbox processing, and more via natural language.10034 npm1MIT