OmniFocus Operator
A production-grade MCP server that exposes OmniFocus as structured task infrastructure for AI agents, enabling read, write, and filter operations on tasks and projects via natural language.
README
🎯 OmniFocus Operator
The last OmniFocus MCP Server you'll ever need.
Production-grade MCP server exposing OmniFocus as structured task infrastructure for AI agents. Agent-first design, SQLite-cached performance, 2,561 tests.
→ See the full landing page — features, architecture, benchmarks, and comparison
🚀 Quick Start
Prerequisites: macOS, OmniFocus 4, Python 3.12+
🪄 Not sure where this config goes? The setup wizard on the landing page walks you through it step-by-step — including auto-merging with your existing config.
For Claude Desktop
Paste this into ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"omnifocus-operator": {
"command": "uvx",
"args": ["omnifocus-operator"]
}
}
}
uvx downloads, isolates, and runs the server automatically. No install step.
First run: OmniFocus shows a one-time permission dialog. Tick the box, click Run Script. You won't see it again.
<picture> <source media="(prefers-color-scheme: dark)" srcset="docs/images/first-run-dark.png"> <img src="docs/images/first-run-light.png" alt="OmniFocus first-run permission dialog showing OmniFocus Operator's welcome banner with two steps: tick the 'Automatically run' checkbox, then click Run Script" width="600"> </picture>
For Claude Code, OpenCode, Cursor…
Ask your agent — copy this prompt:
Add this MCP server to my client config. Just edit the config file — don't install anything, don't run any scripts.
"omnifocus-operator": { "command": "uvx", "args": ["omnifocus-operator"] }
⚠️ This doesn't work with Claude Desktop — Desktop has no config-editing tools. Use the manual paste above.
<details> <summary><strong>Development install (contributors)</strong></summary>
git clone https://github.com/HelloThisIsFlo/omnifocus-operator.git
cd omnifocus-operator
uv sync
See CONTRIBUTING.md for dev workflow details.
</details>
✨ Features
- ⚡ 46ms reads — SQLite caching gives 30–60x faster reads than bridge-only servers
- 🛠️ 11 MCP tools — lookups, filtered lists, task creation & editing
- 🤖 Agent-first design — warnings that teach, errors that educate, guidance in every response
- 🧪 2,561 tests, 97% coverage — strict mypy, no corners cut
- 🛡️ Graceful degradation — server stays alive no matter what, always recoverable
- 🔄 Automatic fallback — SQLite → OmniJS bridge when needed
See the full documentation for architecture details, examples, and deep dives.
🛠️ Available Tools
Lookups
| Tool | Description |
|---|---|
get_all |
Full OmniFocus database as structured data (last-resort debugging) |
get_task |
Single task by ID — urgency, availability, dates, tags, parent, project |
get_project |
Single project by ID — status, review interval, next task |
get_tag |
Single tag by ID — availability, parent hierarchy |
List & Filter
| Tool | Description |
|---|---|
list_tasks |
Filter by date, availability, flags, tags, project, parent subtree, search — with pagination, field selection, and presence-flag derivation |
list_projects |
Filter by status, folder, review schedule, flags |
list_tags |
List tags with parent hierarchy |
list_folders |
List folders with parent hierarchy |
list_perspectives |
List custom perspectives |
Write
| Tool | Description |
|---|---|
add_tasks |
Create tasks with full field control — parent, tags, dates, flags, notes, repetition rules, parallel/sequential, completes-with-children |
edit_tasks |
Patch semantics — update fields, move tasks, complete/drop, manage tags, repetition rules, and hierarchy properties |
All read tools are idempotent. Write tools reference projects and tags by name or ID.
🔍 Tool Examples
Filter tasks (list_tasks):
{
"query": {
"flagged": true,
"due": "soon",
"availability": "remaining",
"include": ["notes"],
"limit": 10
}
}
Create a task (add_tasks):
{
"items": [{
"name": "Review Q3 roadmap",
"parent": "Work Projects",
"tags": ["Planning"],
"dueDate": "2026-03-15T17:00:00",
"flagged": true,
"estimatedMinutes": 30,
"note": "Focus on v1.3-v1.5 milestones"
}]
}
Edit with patch semantics (edit_tasks):
{
"items": [{
"id": "oRx3bL_UYq7",
"dueDate": null,
"actions": {
"tags": {"add": ["Urgent"]},
"move": {"ending": "Work Projects"}
}
}]
}
Patch semantics cheat sheet:
| Input | Meaning |
|---|---|
| Field omitted | No change |
Field set to null |
Clear the value |
| Field set to a value | Update |
🗺️ Roadmap
| Version | Focus |
|---|---|
| v1.0 | Foundation — read tools, three-layer arch, test suite ✅ |
| v1.1 | Performance — SQLite caching, 30–60x speedup ✅ |
| v1.2 | Writes & Lookups — add/edit tasks, get-by-ID ✅ |
| v1.2.1 | Architectural Cleanup — contracts, service refactor, golden master tests ✅ |
| v1.2.2 | FastMCP v3 Migration ✅ |
| v1.2.3 | Repetition Rule Write Support ✅ |
| v1.3 | Read Tools — SQL filtering, list/count, 5 new tools ✅ |
| v1.3.1 | First-Class References — name resolution, $inbox, rich refs ✅ |
| v1.3.2 | Date Filtering — 7 dimensions, shortcuts, calendar math ✅ |
| v1.3.3 | Task Ordering — dotted notation, outline order ✅ |
| v1.4 | Response Shaping & Batch Processing ✅ |
| v1.4.1 | Task Properties & Subtree — presence flags, auto-complete, parallel/sequential, parent filter ✅ |
| v1.4.2 | UNTIL Format Hotfix — parser accepts RFC 5545 DATE form; builder aligns with OmniFocus UI ✅ |
| v1.4.3 | First-Run UX — welcome banners in bridge.js that frame OmniFocus's permission dialog with two-click instructions; startup log line ✅ |
| v1.5 | Project Writes — add/edit projects, review marking |
| v1.6 | UI & Perspectives — perspective switching, deep links |
| v1.7 | Smart Perspective Content — perspective-aware response shapes |
| v1.8 | Production Hardening — retry, crash recovery, serial execution |
🔗 Links
- 📖 Full Documentation — features, architecture, examples
- 📦 PyPI — package page
- 🐛 Issues
- 💬 Discussions
📄 License
Proprietary — all rights reserved. Free to use, not to redistribute. License under review.
🤝 Contributing
See CONTRIBUTING.md for guidelines. In short: fork, branch, test, PR.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。