Skip to main content
Glama

pymnifocus

A Python toolkit for OmniFocus on macOS: an MCP server for AI assistant integration (Cursor, Claude, Gemini) and a standalone CLI query tool.

Inspired by themotionmachine/OmniFocus-MCP, rebuilt in Python with security hardening, a CLI, and PyPI packaging.

Prerequisites

  • macOS with OmniFocus installed and running

  • Python 3.10+

  • uv (recommended) or pip

Related MCP server: OmniFocus MCP Server

Installation

# From PyPI
pip install pymnifocus

# Or with uv
uv pip install pymnifocus

# For development
git clone https://github.com/vdanen/pymnifocus.git
cd pymnifocus
uv sync

CLI Query Tool

Query OmniFocus directly from your terminal with pymnifocus-query:

# Shorthand flags
pymnifocus-query --overdue
pymnifocus-query --flagged --sort dueDate
pymnifocus-query --inbox
pymnifocus-query --due-within 7 --limit 10
pymnifocus-query --project "Weekly Review"
pymnifocus-query --tag work --tag urgent
pymnifocus-query --available --summary
pymnifocus-query --today

# JSON input (same format as MCP query_omnifocus tool)
pymnifocus-query '{"entity": "tasks", "filters": {"status": ["Overdue", "DueSoon"]}, "sortBy": "dueDate"}'

# Pipe from stdin
echo '{"entity": "projects", "filters": {"status": ["Active"]}}' | pymnifocus-query

# Other tools
pymnifocus-query --tags
pymnifocus-query --perspectives
pymnifocus-query --dump

# Raw JSON output (for scripting)
pymnifocus-query --overdue --json

Run pymnifocus-query --help for full usage.

MCP Server

The MCP server enables AI assistants to interact with OmniFocus through natural language.

Running the Server

# Stdio transport (default, for Cursor/Claude/Gemini)
pymnifocus-server

# Streamable HTTP transport (for web clients or container access)
pymnifocus-server --transport streamable-http
pymnifocus-server --transport streamable-http --port 9000

# Or via module
python -m pymnifocus

Run pymnifocus-server --help for all options.

Cursor Integration

Edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "omnifocus": {
      "command": "pymnifocus-server"
    }
  }
}

Or if using uv from a local clone:

{
  "mcpServers": {
    "omnifocus": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/path/to/pymnifocus",
        "python",
        "-m",
        "pymnifocus.server"
      ]
    }
  }
}

Restart Cursor or reload MCP servers (Cmd+Shift+P -> "MCP: Restart Servers").

Claude Code Integration

Same as above, just edit ~/.claude.json.

Claude Desktop Integration

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "omnifocus": {
      "command": "pymnifocus-server"
    }
  }
}

Restart Claude Desktop.

Google AI Studio / Gemini

For MCP-compatible Gemini clients, the server uses stdio transport by default:

  • Command: pymnifocus-server

For Streamable HTTP (web-based clients):

pymnifocus-server --transport streamable-http

Then connect to http://localhost:8000/mcp.

Container Access

Since OmniFocus is a macOS application, the MCP server must run on the macOS host. Containers can reach it over HTTP using host.docker.internal.

1. Start the server on the host:

pymnifocus-server --transport streamable-http

This binds to 127.0.0.1:8000 by default. OmniFocus must be running.

2. Configure the MCP client inside the container:

{
  "mcpServers": {
    "omnifocus": {
      "url": "http://host.docker.internal:8000/mcp"
    }
  }
}

3. Sample Containerfile:

FROM python:3.13-slim

RUN pip install --no-cache-dir mcp-client-cli

# Configure MCP to reach the host's pymnifocus server
RUN mkdir -p /root/.config
COPY <<'EOF' /root/.config/mcp.json
{
  "mcpServers": {
    "omnifocus": {
      "url": "http://host.docker.internal:8000/mcp"
    }
  }
}
EOF

CMD ["bash"]

Build and run (Docker or Podman):

docker build -t my-mcp-app .
docker run --rm -it my-mcp-app

Note: host.docker.internal resolves to the host machine on Docker Desktop for Mac and Podman Machine. On Linux with native Docker, add --add-host=host.docker.internal:host-gateway to the docker run command.

Available MCP Tools

Tool

Description

query_omnifocus

Query tasks, projects, or folders with filters

dump_database

Get full OmniFocus database state

add_omnifocus_task

Add a new task

add_project

Add a new project

remove_item

Remove a task or project

edit_item

Edit a task or project

batch_add_items

Add multiple items at once (max 100)

batch_remove_items

Remove multiple items at once (max 100)

list_perspectives

List available perspectives

get_perspective_view

Get items from a perspective

list_tags

List all tags with hierarchy

MCP Resources

URI

Description

omnifocus://inbox

Current inbox items

omnifocus://today

Today's agenda (due, planned, overdue)

omnifocus://flagged

All flagged items

omnifocus://stats

Database statistics

omnifocus://project/{name}

Tasks in a project

omnifocus://perspective/{name}

Items in a perspective

Example Prompts

  • "Show me all flagged tasks due this week"

  • "Add a task 'Review quarterly report' to my Work project, due Friday"

  • "What's in my inbox?"

  • "List all my projects"

  • "Create a project called 'Website Redesign' with 3 tasks"

How It Works

The server communicates with OmniFocus using:

  • OmniJS scripts executed via JXA (osascript -l JavaScript) for queries, dumps, perspectives, and tags

  • AppleScript for add/edit/remove operations

OmniFocus must be running for either the MCP server or the CLI tool to function.

Security

  • All user input is validated and escaped before embedding in generated scripts

  • Entity names, sort fields, and field names are whitelisted

  • Numeric parameters are validated as integers

  • AppleScript strings are sanitized against injection (quotes, backslashes, newlines)

  • Script paths are constrained to prevent directory traversal

  • Batch operations are capped at 100 items

  • Query results are capped at 5000 items

  • Stdio transport: all communication is local (no network traffic)

  • HTTP transport: binds to localhost by default; use --host to override

License

MIT

Credits

Inspired by themotionmachine/OmniFocus-MCP. OmniJS scripts are adapted from that project.

Available Tools

11 tools
add_omnifocus_taskC

Add a new task to OmniFocus.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
noteNo
tagsNo
flaggedNo
due_dateNo
defer_dateNo
planned_dateNo
project_nameNo
parent_task_idNo
parent_task_nameNo
estimated_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits but only states the action. It does not mention side effects, validation requirements, error behavior, or whether the task is created synchronously. For a mutation tool, this is a significant gap.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words. It is front-loaded with the action and resource, which is ideal for conciseness. However, this brevity comes at the cost of completeness.

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

Completeness1/5

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

Given the tool's complexity (11 parameters, mutation, no annotations, 0% schema coverage), the description is severely incomplete. It provides no context about parameter relationships, return values, or operational constraints. Even with an output schema, the description fails to cover essential context for correct usage.

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

Parameters1/5

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

The schema has 11 parameters with 0% description coverage, and the tool description provides no parameter information at all. It does not even mention the required 'name' field or any optional fields, leaving the agent to infer semantics entirely from parameter names and defaults.

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 'Add a new task to OmniFocus' clearly identifies the action (add) and resource (task in OmniFocus). It is distinct from sibling tools like batch_add_items (batch addition) and add_project (project creation), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as batch_add_items or add_project. No mention of prerequisites like project existence, or whether this tool should be preferred for single-task creation. The description simply states the action without contextual usage direction.

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

add_projectC

Add a new project to OmniFocus.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
noteNo
tagsNo
flaggedNo
due_dateNo
defer_dateNo
sequentialNo
folder_nameNo
estimated_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action without describing side effects, idempotency, permission requirements, or return values. This is a significant gap 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.

Conciseness5/5

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

The description is a single sentence with no filler or redundancy. Every word earns its place, and the main action is front-loaded. It is appropriately concise for the amount of information it claims to convey.

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

Completeness1/5

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

With 9 parameters, no annotations, and a single verb phrase, the description is grossly incomplete. It fails to explain the purpose of parameters, any preconditions, or expected outcomes. The presence of an output schema does not compensate for this lack of context, as the tool's behavior and parameter usage remain unclear.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no parameter semantics beyond the action. With 9 parameters, the description provides no context for their meaning, formatting, or required options. The description does not compensate for the schema's lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action ('Add') and the specific resource ('a new project to OmniFocus'), effectively distinguishing it from sibling tools like 'add_omnifocus_task'. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'add_omnifocus_task' or 'batch_add_items'. It only states the basic function, so the agent has no explicit context for choosing this tool over others.

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

batch_add_itemsB

Add multiple tasks or projects in a single operation (max 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It discloses only the max limit and batch nature, but omits critical behavior such as partial-failure handling, atomicity, validation rules, or output structure. For a mutation tool, this is insufficient.

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

Conciseness4/5

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

The description is one concise sentence, front-loaded with the action, and includes the important max-100 limit. It is efficient and well-structured, though it sacrifices completeness for brevity.

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

Completeness2/5

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

Given the tool's complexity (array of arbitrary objects), a schema with no property definitions, and the absence of annotations, this description is far too sparse. It does not explain the item format, expected fields, or behavioral outcomes, making it insufficient for correct invocation.

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

Parameters2/5

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

The schema has one parameter with additionalProperties true and zero property definitions (0% schema coverage). The description only mentions 'tasks or projects' but fails to specify how each item should be structured, what fields are required, or how to differentiate between a task and a project.

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 ('Add'), the resource ('multiple tasks or projects'), and a key constraint ('max 100'). It effectively differentiates from singular tools like add_omnifocus_task and add_project, making its purpose unmistakable.

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 phrase 'in a single operation' implies use when batching multiple items, providing clear context. No explicit alternatives are named, but the sibling tools indicate singular options, so the usage is reasonably clear. However, it lacks explicit 'when not to use' guidance.

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

batch_remove_itemsB

Remove multiple tasks or projects in a single operation (max 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses the resource types and size limit but does not mention irreversibility, partial failure behavior, or any side effects of removing tasks/projects. Since removal is destructive, this lack of warning is a significant gap.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and resource, includes the key constraint (max 100), and contains no filler. It is appropriately concise for the limited scope of the tool.

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

Completeness2/5

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

The tool is a destructive batch operation with minimal schema guidance. Although an output schema exists (not shown), the description does not clarify error handling, atomicity, or which fields are expected in items. Given the complexity of batch mutations, the description is insufficient for an agent to use it reliably.

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

Parameters1/5

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

The schema has one parameter, items, which is an array of arbitrary objects with no property descriptions (schema coverage 0%). The description adds no detail about the required structure of each item (e.g., ID, type). The agent cannot infer how to construct valid item objects, so parameter semantics are almost entirely undefined.

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 the tool removes multiple tasks or projects in a single operation, specifying the action (remove), the object (tasks/projects), and scope (multiple, max 100). This distinguishes it from the singular remove_item sibling and the batch_add_items tool, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for batch removals by noting 'multiple tasks or projects' and the 100-item limit, but it does not explicitly state when to use this tool over remove_item or when not to use it (e.g., for single items). No exclusions or alternative guidance is provided, so usage context is implied rather than explicit.

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

dump_databaseC

Get the complete current state of your OmniFocus database. Best for comprehensive analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
hide_completedNo
hide_recurring_duplicatesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/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 disclosing behavior. It only says 'Get the complete current state,' which indicates a read operation but does not disclose whether the tool is read-only, the potential size of the result, performance implications, or any side effects. The description adds minimal behavioral context beyond the verb itself.

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 concise at two sentences, which is efficient. The phrase 'Best for comprehensive analysis' adds minimal value but is not wasteful. However, the brevity sacrifices critical information, so while it's concise, it could be restructured to include more useful details without becoming verbose.

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

Completeness2/5

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

Given the tool has an output schema but no annotations, the description should at least clarify the scope of 'complete state' (e.g., includes tasks, projects, tags) and how the boolean parameters affect output. The description is too sparse for a database dump tool that could produce large results and has filtering options. The output schema exists but is not referenced, and the description does not provide enough context for safe and effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention either parameter (hide_completed, hide_recurring_duplicates). The description fails to explain how these booleans affect the output, and the phrase 'complete current state' is actually misleading given that hide_completed defaults to true, meaning the dump is not complete by default. The description provides no added semantic value for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the tool retrieves the complete current state of the OmniFocus database, which is a specific verb+resource pairing. The phrase 'complete current state' and 'comprehensive analysis' help distinguish it from sibling tools like query_omnifocus, though it doesn't explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for comprehensive analysis, giving a use case context. However, it does not explicitly mention when to avoid this tool or suggest alternatives like query_omnifocus for targeted queries. The guidance is implied but not explicit.

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

edit_itemC

Edit a task or project in OmniFocus.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo
new_nameNo
new_noteNo
item_typeYes
new_flaggedNo
new_due_dateNo
new_defer_dateNo
new_planned_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries full burden for disclosing behavior. It only says 'Edit' without explaining whether it partially updates or overwrites fields, how items are identified (id vs. name), or what side effects occur. The rich schema suggests complex behavior that is completely unaddressed.

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 description is a single, taut sentence that is efficient but under-specifies. It avoids fluff but fails to provide substance beyond the purpose, making it less useful than a structurally complete description.

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

Completeness1/5

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

Given 9 parameters, no annotations, and 0% schema coverage, the description is severely inadequate. It does not explain update semantics, item selection, or the meaning of the numerous optional fields. An output schema exists but does not compensate for the lack of input guidance.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no parameter meaning. It does not clarify the roles of id/name for identification, nor the meaning of new_* fields for updates. The agent is left to infer everything from parameter names, which is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a clear verb ('Edit') and resource ('task or project in OmniFocus'), which distinguishes it from sibling tools that add or remove items. However, it does not specify what aspects can be edited (e.g., name, notes, dates), leaving the purpose slightly underspecified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like add_omnifocus_task or remove_item. There is no mention of prerequisites, such as needing an existing item ID or name, nor any exclusion criteria.

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

get_perspective_viewC

Get items visible in a specific OmniFocus perspective.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_metadataNo
perspective_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure, but it only states the basic 'get' action. It does not mention whether the operation is read-only, how it reacts to an invalid perspective name, or any constraints on returned data such as ordering, limit application, or metadata inclusion.

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, concise sentence with no filler or repetition. It is front-loaded and every word contributes to the core purpose, making it highly efficient for an agent to parse.

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

Completeness2/5

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

Despite having an output schema, the tool has three parameters, no annotations, and 0% schema description coverage. The description is too sparse to fully contextualize how to invoke the tool correctly; it omits all parameter semantics and usage guidance, leaving a significant completeness gap.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no explanatory value for any of the three parameters. It does not elaborate on what perspective_name means, how limit is applied, or what include_metadata controls, leaving the agent to rely solely on the schema titles and defaults.

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 ('Get') and a specific resource ('items visible in a specific OmniFocus perspective'), clearly indicating the tool's function. It is easily distinguished from sibling tools like list_perspectives (which lists perspective names) and add_omnifocus_task (which creates items).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternative querying approaches like query_omnifocus or dump_database. It does not mention prerequisites, such as needing to obtain the perspective name via list_perspectives, nor does it clarify what kind of perspective filtering is intended.

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 available perspectives in OmniFocus.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_customNo
include_built_inNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'List all available perspectives' but does not disclose that the include_custom and include_built_in parameters control which perspectives are returned, nor does it mention that listing is a read-only operation (though implied). The description is misleading by saying 'all' when filtering options exist, and lacks detail on side effects or prerequisites.

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, focused sentence with no fluff or repetition. It is front-loaded with the action and resource, making it highly concise and well-structured for a simple list tool.

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

Completeness2/5

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

Although an output schema exists (reducing the need to describe return values) and the tool is simple, the description is incomplete because it fails to clarify parameter semantics and usage context. With no annotations and sibling tools like get_perspective_view, the description leaves the agent uncertain about when to use this tool and how to filter perspectives effectively.

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

Parameters1/5

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

The schema has 0% description coverage, and the description provides no explanation of the include_custom and include_built_in parameters. An agent cannot infer what 'custom' vs 'built-in' perspectives mean or how the defaults behave beyond the schema's basic titles/defaults. The description adds zero value for parameter understanding.

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 ('List') and clear resource ('all available perspectives in OmniFocus'), which clearly distinguishes it from sibling tools like get_perspective_view (which focuses on a single perspective's view) and list_tags (which lists tags). The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly suggests use when a list of all perspectives is needed, but it does not explicitly state when to use this tool over alternatives like query_omnifocus or dump_database, nor does it provide exclusions or context about filtering. Usage guidance is implied by the tool's nature but not explicitly articulated.

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 with their hierarchy.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_droppedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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 adds the useful detail that tags are returned with their hierarchy, but it does not disclose the behavior of the include_dropped parameter or any other side effects (though read-only is implied by 'list').

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

Conciseness5/5

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

The description is a single, front-loaded sentence that communicates the core purpose without waste. Every word earns its place.

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

Completeness3/5

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

With only one optional parameter and an output schema present, the description is adequate for basic use. However, it omits any mention of the include_dropped parameter, which could lead to incorrect invocation when dropped tags are involved.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention the include_dropped parameter at all. The agent receives no guidance on what this boolean controls, making parameter semantics poor.

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 verb (list), a resource (all tags in OmniFocus), and a scope (with hierarchy). This distinguishes it from sibling tools like add_omnifocus_task (write operation) and list_perspectives (different resource).

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?

No explicit guidance is provided about when to use this tool versus alternatives like query_omnifocus. The description implies usage for listing tags but does not mention exclusions or alternatives.

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

query_omnifocusA

Efficiently query OmniFocus database with filters. Get specific tasks, projects, or folders.

Task filters include completedAfter and completedBefore (ISO date or datetime, local timezone) to restrict by completionDate; set include_completed true or completed tasks are excluded first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
entityYes
fieldsNo
filtersNo
sort_byNo
summaryNo
sort_orderNoasc
include_completedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 transparency burden. It discloses that completed tasks are excluded by default and require include_completed=true, and explains the date format for completedAfter/completedBefore filters. This adds meaningful behavioral context beyond the schema.

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 brief, front-loaded with the main purpose, and contains no filler. Every sentence contributes useful information.

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

Completeness2/5

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

Despite having an output schema, the tool has 8 parameters and no annotations. The description only covers task completion filters and ignores how to query projects/folders, use fields/sorting/limit, or handle other filter scenarios. A more thorough description is needed for a complex query tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning to the 'filters' object by naming completedAfter/completedBefore, and clarifies include_completed. However, other parameters like entity, fields, limit, and sort_by are not described, leaving gaps.

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 the tool queries the OmniFocus database and retrieves specific tasks, projects, or folders. The verb 'query' plus the resource types distinguishes it from sibling tools that add, edit, or remove items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for querying rather than adding/editing/removing, but does not explicitly name alternatives or state when not to use it. It provides filter context but lacks explicit exclusion guidance.

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

remove_itemA

Remove a task or project from OmniFocus. Provide either id or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo
item_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It states the action but doesn't disclose whether removal is permanent, what happens to subtasks, what occurs if both id and name are provided, or error behavior when the item isn't found. The phrase 'Provide either id or name' is parameter guidance, not behavioral disclosure.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the purpose, and contains zero redundant or irrelevant information. Every word earns its place.

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

Completeness3/5

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

The tool is simple and an output schema exists, so return values don't need to be explained. However, the description lacks differentiation from 'batch_remove_items' and doesn't cover important behavioral details like the required item_type or the mutual exclusivity of id/name. It's adequate for a basic understanding but has clear gaps.

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

Parameters4/5

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

Schema coverage is 0% and parameters lack descriptions. The description adds meaning by indicating that id and name are alternative identifiers ('Provide either id or name') and that item_type relates to 'task or project'. This clarifies all three parameters beyond what the schema provides, though it doesn't explicitly state enum values or the requirement to provide at least one identifier.

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 the action ('Remove') and the resource ('a task or project from OmniFocus'), which is specific and unambiguous. It distinguishes from the sibling 'batch_remove_items' by implying single-item removal, even though it doesn't explicitly say so.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'batch_remove_items'. The description doesn't mention exclusions, prerequisites, or scenarios where another tool would be more appropriate.

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

TDQS

B3.3/5.0
Disambiguation5/5

Each tool targets a distinct operation: adding, editing, removing, querying, listing tags/perspectives, etc. The batch variants are clearly separated from single-item operations, and the query/dump tools serve different analytical needs.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern such as add_project, remove_item, list_tags. Minor deviations like dump_database and query_omnifocus use different prefixes, but the overall style remains readable and predictable.

Tool Count5/5

11 tools is well-scoped for an OmniFocus MCP server, covering CRUD operations, batch operations, querying, and viewing perspectives/tags. The count feels balanced and not excessive for the domain.

Completeness4/5

Core lifecycle operations are covered (add, edit, remove, batch, query), along with supporting features like tags and perspectives. Minor gaps exist, such as no explicit 'complete task' tool, but these can be handled via edit_item or query filters.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vdanen/pymnifocus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server