OmniFocus MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| add_omnifocus_taskA | Add a SINGLE task to OmniFocus. IMPORTANT: For adding 2+ tasks, use batch_add_items instead (9x faster, single API call). |
| add_projectA | Add a SINGLE project to OmniFocus. For adding multiple projects, use batch_add_items instead. |
| add_folderC | Add a new folder to OmniFocus |
| remove_itemA | Remove a SINGLE task or project from OmniFocus. For removing 2+ items, use batch_remove_items instead (9x faster). |
| edit_itemA | Edit a SINGLE task or project in OmniFocus. For editing 2+ items, use batch_edit_items instead (12x faster). |
| batch_add_itemsA | PREFERRED: Add multiple tasks/projects in ONE call. 9x faster than individual add_omnifocus_task calls. Always use this for 2+ items. |
| batch_remove_itemsA | PREFERRED: Remove multiple tasks/projects in ONE call. 9x faster than individual remove_item calls. Always use this for 2+ items. |
| batch_edit_itemsA | PREFERRED: Edit multiple tasks/projects in ONE call. 12x faster than individual edit_item calls. Always use this for 2+ items. |
| get_task_by_idC | Get information about a specific task by ID or name |
| get_project_by_idB | Get information about a specific project by ID or name |
| get_folder_by_idB | Get information about a specific folder by ID or name |
| get_today_completed_tasksC | Get tasks completed today - view today's accomplishments |
| get_inbox_tasksC | Get tasks from OmniFocus inbox perspective |
| get_flagged_tasksB | Get flagged tasks from OmniFocus with optional project filtering |
| get_forecast_tasksA | Get tasks from OmniFocus forecast perspective (due/deferred tasks in date range) |
| get_tasks_by_tagA | Get tasks filtered by OmniFocus tags (labels like @home, @work, @urgent). Use this for tag-based filtering, NOT for custom perspective names. Tags are labels assigned to individual tasks. |
| list_tagsB | List all tags defined in OmniFocus with task counts and hierarchy |
| filter_tasksA | Advanced task filtering for ONE project. For filtering across 2+ projects, use batch_filter_tasks instead (single API call). Supports status, dates, tags, search, and more. |
| batch_filter_tasksA | PREFERRED: Filter tasks across multiple projects in ONE call. Always use this instead of multiple filter_tasks calls when querying 2+ projects. |
| list_custom_perspectivesB | List all custom perspectives defined in OmniFocus |
| get_custom_perspective_tasksA | Get tasks from a specific OmniFocus custom perspective by name. Use this when user refers to perspective names like 'Today', 'Daily Review', 'This Week' etc. - these are custom views created in OmniFocus, NOT tags. Supports hierarchical tree display of task relationships. |
| get_projects_for_reviewB | Get projects that are due for review (next review date is in the past or today) |
| batch_mark_reviewedB | Mark multiple projects as reviewed in a single operation (advances their next review dates) |
| list_projectsB | List projects with optional folder and status filtering - the targeted way to discover projects and their IDs |
| get_server_versionA | Get OmniFocus MCP server version and build information |
| diagnose_connectionA | Check OmniFocus connectivity, permissions, and server status. Run this first if experiencing issues. |
| search_tasksA | Full-text search across task names and notes. Simpler than filter_tasks for finding tasks by text. Supports match modes: contains, anyWord, allWords, exact. |
| duplicate_projectB | Create a copy of a project including all its tasks. Useful for templates and recurring workflows. Supports date shifting and hierarchy preservation. |
| edit_tagA | Edit a tag's properties: rename, change status (active/onHold/dropped), move to different parent, or set allowsNextAction. Use to reactivate dropped tags or reorganize tag hierarchy. |
| get_system_healthA | Get all OmniFocus health metrics in a single call. Returns counts for inbox, projects (by status), tasks (by status), tags, flagged tasks, and untagged tasks. Includes health indicators (🟢/🟡/🔴) and percentages. Much faster than multiple filter_tasks calls for dashboards. |
| get_completion_statsA | Get task completion counts grouped by project, tag, or folder for a date range. Returns sorted list with counts and percentages. Much faster than multiple filter_tasks calls for analytics. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Most tools have clearly distinct purposes, and descriptions actively steer agents between single-item and batch variants. However, the query surface (get_tasks_by_tag, filter_tasks, batch_filter_tasks, search_tasks, get_custom_perspective_tasks, get_system_health) has enough conceptual overlap that misselection is still plausible.
The set is predominantly snake_case verb_noun and is generally predictable. Minor deviations like add_omnifocus_task, batch_add_items, and the mix of get_task_by_id vs get_tasks_by_tag keep it from being perfectly consistent.
At 31 tools, the surface is heavy for a single MCP server, and much of the count comes from paired single-item and batch tools for the same operations. While OmniFocus is a broad domain, the duplication makes the set larger than necessary.
Task and project operations are well covered, including batch workflows, reviews, perspectives, search, and stats. However, folder and tag lifecycle coverage is incomplete (e.g., no clear folder edit/delete/list tools and no explicit tag creation/deletion), creating notable gaps.