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-MCPA Model Context Protocol (MCP) server that integrates with OmniFocus to enable Claude (or other MCP-compatible clients) to interact with your tasks and projects.

This MCP server creates a bridge between AI assistants (like Claude) and your OmniFocus task management system. It gives AI models the ability to view, create, edit, and remove tasks and projects in your OmniFocus database through natural language conversations. Some ways you could use it:
prompt features~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": ["-y", "omnifocus-mcp"]
}
}
}
No comments yet. Be the first to share your thoughts!
Use the new query_omnifocus tool for fast, targeted searches:
"Show me tasks due today" "Get all flagged items in my Work project"
"Count how many tasks are in each project"
"I want every task to have an energy level tag. Show me a list of all the tasks that don't have an energy level tag and your suggestions for what tag to add. I'll make any changes I think are appropriate. Then make the changes in OmniFocus."
"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."
Get a summary of your current tasks and manage them conversationally:
"Show me all my flagged tasks due this week"
Or create custom views:
"What are my next actions in the Work folder?"
List and view your perspectives:
"What perspectives do I have available?" "Show me what's in my Inbox perspective" "Get the flagged items from my current perspective"
Extract action items from meeting transcripts, academic research articles, or notes:
"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."
Resources let MCP clients preload OmniFocus data as context without needing tool calls. Clients that support MCP resources (like Claude Desktop) can attach these directly to a conversation.
| URI | Description |
|---|---|
| omnifocus://inbox | Current inbox items (tasks not assigned to any project) |
| omnifocus://today | Today's agenda — tasks due today, planned for today, and overdue |
| omnifocus://flagged | All flagged items |
| omnifocus://stats | Quick database statistics (task counts, project counts, overdue, etc.) |
| URI Pattern | Description |
|---|---|
| omnifocus://project/{name} | Tasks in a specific project (supports autocomplete) |
| omnifocus://perspective/{name} | Items visible in a named perspective (supports autocomplete) |
All resources return JSON (application/json). Template resources support listing all available values and autocompletion for the {name} parameter.
The server currently provides these tools:
query_omnifocusEfficiently query your OmniFocus database with powerful filters. Get specific tasks, projects, or folders without loading the entire database.
Key Features:
Common Uses:
"Show me all flagged tasks due this week"
"Get next actions from my Work project"
"Count tasks in each project" (use with summary: true)
"Find all tasks deferred until tomorrow"
Parameters:
entity: Type to query ('tasks', 'projects', or 'folders')filters: (Optional) Narrow results by project, tags, status, dates, etc.
projectName, projectId, folderId: Filter by containertags: Filter by tag names (OR logic, case-sensitive)status: Filter by status (OR logic)flagged: Filter by flagged statusinbox: Filter by inbox status (true = inbox only, false = exclude inbox)dueWithin, deferredUntil, plannedWithin: Range date filters (days from today)dueOn, deferOn, plannedOn: Exact date filters (0 = today, 1 = tomorrow, etc.)hasNote: Filter by note presencefields: (Optional) Specific fields to return (id, name, note, dueDate, etc.)limit: (Optional) Maximum items to returnsortBy: (Optional) Field to sort byincludeCompleted: (Optional) Include completed items (default: false)summary: (Optional) Return only count instead of full detailsdump_databaseGets the complete current state of your OmniFocus database. Best for comprehensive analysis or when you need everything.
Parameters:
hideCompleted: (Optional) Hide completed/dropped tasks (default: true)hideRecurringDuplicates: (Optional) Hide duplicate recurring tasks (default: true)add_omnifocus_taskAdd a new task to OmniFocus.
Parameters:
name: The name of the taskprojectName: (Optional) The name of the project to add the task tonote: (Optional) Additional notes for the taskdueDate: (Optional) The due date of the task in ISO formatdeferDate: (Optional) The defer date of the task in ISO formatplannedDate: (Optional) The planned date of the task in ISO format - indicates intention to work on this task on this dateflagged: (Optional) Whether the task is flagged or notestimatedMinutes: (Optional) Estimated time to complete the tasktags: (Optional) Tags to assign to the taskparentTaskId: (Optional) Create under an existing parent task by IDparentTaskName: (Optional) Create under first matching parent task by name (fallback)add_projectAdd a new project to OmniFocus.
Parameters:
name: The name of the projectfolderName: (Optional) The name of the folder to add the project tonote: (Optional) Additional notes for the projectdueDate: (Optional) The due date of the project in ISO formatdeferDate: (Optional) The defer date of the project in ISO formatflagged: (Optional) Whether the project is flagged or notestimatedMinutes: (Optional) Estimated time to complete the projecttags: (Optional) Tags to assign to the projectsequential: (Optional) Whether tasks in the project should be sequentialremove_itemRemove a task or project from OmniFocus.
Parameters:
id: (Optional) The ID of the task or project to removename: (Optional) The name of the task or project to removeitemType: The type of item to remove ('task' or 'project')edit_itemEdit a task or project in OmniFocus.
Parameters:
id: (Optional) The ID of the task or project to editname: (Optional) The name of the task or project to edititemType: The type of item to edit ('task' or 'project')batch_add_itemsAdd multiple tasks or projects to OmniFocus in a single operation.
Parameters:
items: Array of items to add, where each item can be:
type: The type of item ('task' or 'project')name: The name of the itemnote: (Optional) Additional notesdueDate: (Optional) Due date in ISO formatdeferDate: (Optional) Defer date in ISO formatplannedDate: (Optional) Planned date in ISO format (tasks only)flagged: (Optional) Whether the item is flaggedestimatedMinutes: (Optional) Estimated completion timetags: (Optional) Array of tagsprojectName: (Optional) For tasks: the project to add tofolderName: (Optional) For projects: the folder to add tosequential: (Optional) For projects: whether tasks are sequentialparentTaskId: (Optional, tasks): Parent task by IDparentTaskName: (Optional, tasks): Parent task by name (fallback)tempId: (Optional, tasks): Temporary ID for within-batch referencesparentTempId: (Optional, tasks): Reference to another item's tempId to establish hierarchyhierarchyLevel: (Optional, tasks): Ordering hint (0 for root, 1 for child, ...)Examples:
{
"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 from OmniFocus in a single operation.
Parameters:
items: Array of items to remove, where each item can be:
id: (Optional) The ID of the item to removename: (Optional) The name of the item to removeitemType: The type of item ('task' or '