Skip to main content
Glama

MCP OmniFocus

npm version

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

npx mcp-omnifocus

From source

git clone https://github.com/avlihachev/mcp-omnifocus.git
cd mcp-omnifocus
npm install
npm run build

Claude 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 tools
omnifocus_complete_taskB

Mark a task as complete. (Standard version: changes via SQLite won't sync until OmniFocus restart)

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesTask ID to complete (required)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the 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.

Conciseness4/5

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.

Completeness3/5

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

For a one-parameter mutation tool with no 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTask name (required)
noteNoTask note/description
dueDateNoDue date in ISO format (YYYY-MM-DD)
flaggedNoMark task as flagged
projectNoProject name to add task to (optional, defaults to inbox)

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of 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.

Conciseness4/5

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.

Completeness3/5

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

For a zero-parameter read 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.

Parameters4/5

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

The tool has zero parameters and the schema 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.

Purpose5/5

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

The description uses a specific verb and resource: '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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter tasks: flagged, due_today, or all (default: flagged + due today)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
taskLimitNoMaximum number of tasks to return from getTasks (default: 500, max: 10000)
directSqlAccessNoEnable direct SQLite access for write operations (Standard version only)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew task name
noteNoNew task note
taskIdYesTask ID (required)
dueDateNoNew due date in ISO format
flaggedNoSet flagged status

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv0.1.1
    • First observedomnifocus_complete_task
    • First observedomnifocus_create_task
    • First observedomnifocus_get_config
    • First observedomnifocus_get_projects
    • First observedomnifocus_get_tasks
    • First observedomnifocus_set_config
    • First observedomnifocus_update_task

TDQS

A3.8/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers