Let LLMs interface with your tasks and projects through the Model Context Protocol. Add, organize, and query your OmniFocus database with natural language commands.
# Add to your Claude Code skills
git clone https://github.com/themotionmachine/OmniFocus-MCPGuides for using mcp servers skills like OmniFocus-MCP.
Last scanned: 5/30/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@modelcontextprotocol/sdk: Anthropic's MCP TypeScript SDK has a ReDoS vulnerability",
"severity": "high"
},
{
"type": "npm-audit",
"message": "body-parser: body-parser is vulnerable to denial of service when url encoding is used",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "express: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "path-to-regexp: path-to-regexp vulnerable to Denial of Service via sequential optional groups",
"severity": "high"
},
{
"type": "npm-audit",
"message": "postcss: PostCSS has XSS via Unescaped </style> in its CSS Stringify Output",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "qs: qs's arrayLimit bypass in comma parsing allows denial of service",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "vite: Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling",
"severity": "high"
}
],
"status": "WARNING",
"scannedAt": "2026-05-30T15:40:58.081Z",
"npmAuditRan": true,
"pipAuditRan": true
}See how OmniFocus-MCP compares with popular alternatives.
OmniFocus-MCP is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by themotionmachine. Let LLMs interface with your tasks and projects through the Model Context Protocol. Add, organize, and query your OmniFocus database with natural language commands. It has 246 GitHub stars.
OmniFocus-MCP returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/themotionmachine/OmniFocus-MCP" and add it to your Claude Code skills directory (see the Installation section above).
OmniFocus-MCP is primarily written in TypeScript. It is open-source under themotionmachine on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh OmniFocus-MCP against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
A Model Context Protocol (MCP) server that connects OmniFocus to Claude and other MCP-compatible AI assistants.

This server bridges AI assistants and your OmniFocus database. Through natural conversation, an assistant can query, create, edit, and remove tasks and projects — including bulk operations. Some things you can do with it:
npx)The first time the server talks to OmniFocus, macOS will ask you to allow automation access. Grant it once and you're set.
Add the server to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": ["-y", "omnifocus-mcp"]
}
}
}
Then restart Claude Desktop.
claude mcp add omnifocus -- npx -y omnifocus-mcp
Other MCP clients work the same way: launch npx -y omnifocus-mcp over stdio.
Targeted queries:
"Show me all my flagged tasks due this week"
"What are my next actions in the Work folder?"
"Count how many tasks are in each project"
Reorganizing:
"I want every task to have an energy level tag. Show me a list of all the tasks that don't have one and your suggestions for what tag to add. I'll make any changes I think are appropriate. Then make the changes in OmniFocus."
Capturing from anywhere:
"Ok, thanks for the detailed explanation of why the rule of law is important. Add a recurring task to my activism project that reminds me to call my representative weekly. Include a summary of this conversation in the notes field."
Working with perspectives:
"What perspectives do I have available?"
"Show me what's in my Inbox perspective"
Processing transcripts or PDFs:
"I'm pasting in the transcript from today's meeting. Please analyze it and create tasks in OmniFocus for any action items assigned to me. Put them in my 'Product Development' project."
The server provides 12 tools. Optional parameters are marked.
query_omnifocusQuery tasks, projects, or folders with targeted filters — much faster and lighter than dumping the whole database. See QUERY_TOOL_REFERENCE.md for the full reference and QUERY_TOOL_EXAMPLES.md for worked examples.
| Parameter | Description |
|---|---|
entity |
What to query: tasks, projects, or folders |
filters (optional) |
Combine with AND logic; array filters (tags, status) use OR within the array |
fields (optional) |
Only return the listed fields — keeps responses small |
limit, sortBy, sortOrder (optional) |
Shape the result list |
includeCompleted (optional) |
Include completed/dropped items (default: false) |
summary (optional) |
Return only the match count |
Available filters:
projectName (case-insensitive partial match; "inbox" targets the inbox), projectId, folderId (includes subfolders), folderName (case-insensitive partial match, includes subfolders)taskName (case-insensitive partial match)tags (exact match, case-sensitive)status — tasks: Next, Available, Blocked, DueSoon, Overdue, Completed, Dropped; projects: Active, OnHold, Done, DroppeddueWithin, deferredUntil, plannedWithin (ranges), dueOn, deferOn, plannedOn (exact day). Accept a number of days, "today", "tomorrow", "this week", "next week", or an ISO dateaddedWithin, addedOn, completedWithin, completedOn, droppedWithin, droppedOn (same value forms; completed/dropped filters require includeCompleted: true)flagged, inbox, hasNote, isRepeating (tasks only), reviewDue (projects only)Filter names are not field names: the filter is inbox, the field is inInbox. Unknown filter keys are rejected, and so are filters or status values that don't apply to the queried entity (folders take only folderId, folderName and status). See the reference for per-entity applicability and exact date semantics.
dump_databaseGet the complete state of your database. Use for comprehensive analysis; prefer query_omnifocus for anything targeted.
hideCompleted (optional): hide completed/dropped tasks (default: true)hideRecurringDuplicates (optional): hide duplicate instances of recurring tasks (default: true)add_omnifocus_taskCreate a new task.
nameprojectName (optional): project to add the task to (defaults to inbox)parentTaskId / parentTaskName (optional): nest under an existing tasknote, dueDate, deferDate, plannedDate, flagged, estimatedMinutes, tags (all optional)repeat (optional): make it recurring — see Repeating itemsadd_projectCreate a new project.
namefolderName (optional): folder to place the project insequential (optional): whether tasks must be completed in ordernote, dueDate, deferDate, flagged, estimatedMinutes, tags, repeat (all optional)edit_itemEdit an existing task or project. Also the way to move items — set newProjectName to move a task into a project, or to ""/"inbox" to send it to the inbox.
id or name: which item to edit (id takes precedence)itemType: task or projectnewName, newNote, newDueDate, newDeferDate, newFlagged, newEstimatedMinutes (dates in ISO format; empty string clears)newStatus (incomplete, completed, dropped, skipped — skipped only for repeating tasks), addTags, removeTags, replaceTags, newProjectName, newPlannedDatenewParentTaskId puts the task under another task (an action group), keeping its id and anything that links to it; "" returns it to the top level of its project, or of the inbox if it has no project. position places it among its siblings: "beginning", "end", {"before": "<id>"} or {"after": "<id>"}.newProjectStatus (active, completed, dropped, onHold), newFolderName, newSequential, newReviewInterval ({"steps": 2, "unit": "week"}; units day, week, month, year), markReviewed (sets the next review date based on the project's review interval, including one set in the same call)newRepeat sets a new rule (same shape as repeat on create); newRepeat: null clears itRules for nesting and ordering:
position without newParentTaskId reorders the task within its current parent.before/after task must be a sibling under the target parent; otherwise the edit fails.newParentTaskId can't be combined with newProjectName (the parent decides the project). position can: the task is moved to the project, then placed.newReviewInterval is for projects only. Passing one on the wrong item type is an error, not a silent skip.parent (moved under Plan launch), position (after hZ3kP1x) or review interval (every 2 weeks). query_omnifocus reports the interval back in the same words (reviewInterval: "2 weeks").At least one editable field is required — a call with only id/name/itemType is refused rather than reported as a successful no-op. Unrecognized argument keys (a note typo for newNote, say) are rejected by every tool with the key named in the error, instead of being silently dropped.
remove_itemRemove a task or project.
id or name: which item to removeitemType: task or projectbatch_add_itemsCreate multiple tasks and projects in one operation. Each item accepts the same fields as add_omnifocus_task / add_project, plus type (task or project) and optional hierarchy helpers:
tempId: a temporary ID other items in the same batch can referenceparentTempId: nest this item under another batch item's tempId{
"items": [
{ "type": "project", "name": "My Project", "tempId": "proj1" },
{ "type": "task", "name": "First task", "parentTempId": "proj1" },
{ "type": "task", "name": "Parent task", "parentTempId": "proj1", "tempId": "t1" },
{ "type": "task", "name": "Subtask", "parentTempId": "t1" }
]
}
batch_remove_itemsRemove multiple tasks or projects in one operation. Each item takes id or name, plus itemType.
list_perspectivesList available perspectives, both built-in and custom (custom perspectives are an OmniFocus Pro feature).
includeBuiltIn, includeCustom (optional, default: true)get_perspective_viewGet the items visible in a named perspective.
perspectiveName: e.g. Inbox, Flagged, or a custom perspective namelimit (optional, default: 100), includeMetadata (optional), fields *(o