OmniFocus MCP Plus
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
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| batch_edit_itemsA | Edit up to 100 tasks/projects in one call with preview and per-item read-back verification. Earlier edits remain if a later item fails. |
| server_infoA | Report server build, executable, OmniFocus version/capabilities and automation connectivity. |
| search_automation_apiA | Search installed OmniFocus API docs (4.9+). Returns paginated TypeScript declarations and comments; does not execute code. |
| dump_databaseA | Gets the current state of your OmniFocus database |
| add_omnifocus_taskA | Add a new task to OmniFocus. Before creating a task that may already exist, call find_similar_tasks with the same name and reuse the returned id instead if a strong match comes back. |
| add_projectB | Add a new project to OmniFocus |
| remove_itemB | Remove a task or project from OmniFocus |
| edit_itemC | Edit a task or project in OmniFocus. Supports: rename, set/clear dates (due, defer, planned), flag/unflag, set status (complete, drop, reopen), add/remove/replace tags, set estimated minutes, move to different project/parent task/inbox. |
| move_taskA | Move an existing task to a project, parent task, or inbox |
| batch_add_itemsA | Add multiple tasks or projects to OmniFocus in a single operation. Supports tempId/parentTempId hierarchy wiring, dryRun preview, stopOnError, and atomic rollback. Before adding tasks that may already exist, call find_similar_tasks for each name and drop or replace any item with a strong match — batch creation multiplies duplicates. |
| batch_remove_itemsA | Remove multiple tasks or projects from OmniFocus in a single operation |
| get_task_by_idA | Get information about a specific task by ID or name |
| get_today_completed_tasksC | Get tasks completed today - view today's accomplishments |
| get_inbox_tasksB | 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. |
| filter_tasksA | Advanced task filtering: status, dates (due/defer/planned/completed/added/modified/dropped), project, folder tree, tags, name/regex, note, repeat, estimate — plus and/or/not clauses, countOnly, field projection, and offset paging. |
| list_custom_perspectivesA | List all custom perspectives defined in OmniFocus. Pass includeRules to also get each perspective's filter rules and aggregation. |
| get_custom_perspective_tasksA | Get tasks from a specific OmniFocus custom perspective by name. Use this when user refers to perspective names like 'Today', 'Weekly Review', 'This Week' etc. - these are custom views created in OmniFocus, NOT tags. Supports hierarchical tree display of task relationships. |
| append_to_noteB | Append text to a task or project's note without overwriting existing content |
| uncomplete_taskA | Mark a completed task as incomplete again |
| complete_taskA | Complete a task. Already-completed tasks are unchanged; repeating tasks advance on each call, so do not blindly retry. |
| set_task_repetitionA | Set or clear a repeating schedule on a task. Use the structured fields (frequency/interval/daysOfWeek/daysOfMonth/count/endDate) — e.g. 2nd Tuesday monthly — or pass a raw iCal RRULE via rule_string. Verified by read-back. |
| list_projectsA | List and filter OmniFocus projects by folder, status, stalled state, with sorting and pagination |
| search_projectsA | Search OmniFocus projects by name query |
| get_project_countsA | Get aggregate project counts by status (active, on hold, completed, dropped, stalled) |
| get_task_countsB | Get aggregate task counts with optional filters (project, tag, flagged, date range). Returns total, available, completed, overdue, due soon, flagged, deferred. |
| list_foldersA | List all OmniFocus folders with project counts |
| get_folderA | Get details of an OmniFocus folder including its projects and subfolders |
| create_folderB | Create a new folder in OmniFocus, optionally nested under a parent folder |
| update_folderA | Update an OmniFocus folder's name or status |
| delete_folderA | Delete an OmniFocus folder. WARNING: this also deletes all projects inside the folder. |
| list_tagsA | List all OmniFocus tags with available task counts, filterable by status |
| search_tagsA | Search OmniFocus tags by name query |
| create_tagA | Create a new tag in OmniFocus, optionally nested under a parent tag |
| update_tagA | Update an OmniFocus tag's name or status |
| delete_tagC | Delete an OmniFocus tag |
| list_subtasksA | List children (subtasks) of a task, optionally recursive to show full hierarchy |
| duplicate_taskA | Duplicate an existing task, optionally into a different project. Copies name, note, dates, flags, tags. |
| batch_move_tasksA | Move multiple tasks to a project, parent task, or inbox in a single operation |
| list_notificationsA | List all notifications (reminders) on a task |
| add_notificationA | Add a notification (reminder) to a task — absolute date or relative to due date |
| remove_notificationA | Remove a notification (reminder) from a task by index |
| reorder_taskA | Reorder a task within its container — move before/after a sibling, or to beginning/ending. Controls next action in sequential projects. |
| manage_reviewsA | Project review workflow. 'list_due' lists projects whose review date has arrived (all: true = every scheduled project); 'mark_reviewed' stamps one project or up to 100 via projectIds and advances each next review date by its own interval; 'set_schedule' sets the review interval (unit + steps). |
| convert_task_to_projectA | Promote an existing task into a full project, keeping its subtasks, tags, and note. Optionally file it into a folder; without one the new project lands at the top level of the library. |
| analyzeA | Read-only analytics over the OmniFocus database: health_snapshot, velocity, overdue_clusters, or stalled_projects. Returns counts, rates, lists and dates as markdown — no scores and no recommendations — so the caller does the interpreting. |
| update_perspective_rulesA | Replace a custom perspective's filter rules (and optionally its aggregation). Overwrites — read current rules first via list_custom_perspectives includeRules. Keys are validated before writing (OmniFocus silently accepts invalid rules), the write is read-back verified with rollback, and the previous rules are returned for undo. |
| find_similar_tasksA | Find existing OmniFocus tasks whose names are similar to a proposed new task name. Run this BEFORE creating a task that might already exist — it returns ranked matches with similarity scores and task IDs so you can reuse an existing task instead of creating a duplicate. Tolerant of typos, word reordering, and partial names. |
| manage_attachmentsA | List, read, add, or remove file attachments on a task or project. 'read' returns small files inline as base64 and writes larger ones to an absolute savePath; 'add' takes either base64 content or an absolute filePath. 10MB limit either way. |
| app_controlA | Application-level OmniFocus control: start a sync, step the undo/redo stack, read/set/clear the sidebar focus of the front window, or reveal (select) a task or project. Undo and redo are destructive and require confirm: true — the top of the undo stack is often the user's own manual edit. |
| search_itemsA | Search tasks, projects, folders, and tags in one pass by name (optionally notes). Case-insensitive substring match; returns ids grouped by type with honest per-type totals. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| weekly_review | Step-by-step GTD weekly review: projects due for review, stalled-project evidence, mark reviewed, inbox sweep, week ahead. |
| inbox_processing | Inbox triage loop: decide do / defer / delegate / delete per item, check for duplicates, then file with project, tags, and dates. |
| daily_planning | Build today's plan from forecast, due-today, planned-today, and flagged tasks, then commit it with planned dates. |
| task_health_scan | Run the analyze tool across health, overdue clusters, stalled projects, and velocity, and present the evidence. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| inbox | Unprocessed tasks currently sitting in the OmniFocus inbox. |
| today | Today's landscape: tasks due or deferred to today, plus anything overdue. |
| flagged | Flagged tasks across the database, grouped by project. |
| stats | Aggregate task and project counts — size and shape of the database. |
TDQS
Scored across 53 tools
Several task-retrieval tools overlap substantially: filter_tasks can express flag, tag, date, project, and inbox queries, yet dedicated get_flagged_tasks, get_today_completed_tasks, get_inbox_tasks, get_forecast_tasks, and get_tasks_by_tag are also present. Single/batch variants and complete_task/edit_item create further selection ambiguity. Descriptions help, but an agent will often have multiple valid tools for the same request.
Most tools follow a snake_case verb_noun pattern such as list_projects, create_tag, delete_folder, and complete_task. Exceptions like server_info, analyze, and app_control, plus mixed object specificity (add_omnifocus_task vs add_project), keep it from being fully consistent.
53 tools is well over the threshold where agents can easily navigate a tool list. Many tools are parameterized variants of one another—single vs batch, generic filter vs specialized getters—so the count feels inflated rather than curated.
The server covers task/project CRUD, folders, tags, notifications, attachments, reviews, perspectives, and app control, so there are no obvious dead ends. Minor gaps remain, such as no create/delete for custom perspectives and no dedicated get-project-by-id, but core OmniFocus workflows are well covered.