MCP server exposing OmniFocus as structured task infrastructure for AI agents
Project description
๐ฏ 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,086 tests.
โ See the full landing page โ features, architecture, benchmarks, and comparison
๐ Quick Start
Prerequisites: macOS, OmniFocus 4, Python 3.12+
Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"omnifocus-operator": {
"command": "uvx",
"args": ["omnifocus-operator"]
}
}
}
That's it. No install step โ uvx downloads, isolates, and runs the server automatically.
Or just ask your agent:
Set up the OmniFocus Operator MCP server for me โ uvx omnifocus-operator
Development install (contributors)
git clone https://github.com/HelloThisIsFlo/omnifocus-operator.git
cd omnifocus-operator
uv sync
See CONTRIBUTING.md for dev workflow 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,086 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, search โ with pagination and field selection |
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 |
edit_tasks |
Patch semantics โ update fields, move tasks, complete/drop, manage tags and repetition rules |
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.5 | Project Writes โ add/edit projects, review marking |
| v1.6 | UI & Perspectives โ perspective switching, deep links |
| v1.7 | 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omnifocus_operator-1.4.1.tar.gz.
File metadata
- Download URL: omnifocus_operator-1.4.1.tar.gz
- Upload date:
- Size: 217.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bc690c84d8bcd1cf7d4745a077b4a6fbff2564241ae2a8cb8872fdfafc42b79
|
|
| MD5 |
189ccfe36b68071c71a0d6608dc85d9c
|
|
| BLAKE2b-256 |
0c8cc0a120efff17bc35ea4c0e133cc802566be75ea88ae6e2f1b77499bc7bcb
|
Provenance
The following attestation bundles were made for omnifocus_operator-1.4.1.tar.gz:
Publisher:
publish.yml on HelloThisIsFlo/omnifocus-operator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omnifocus_operator-1.4.1.tar.gz -
Subject digest:
4bc690c84d8bcd1cf7d4745a077b4a6fbff2564241ae2a8cb8872fdfafc42b79 - Sigstore transparency entry: 1371915615
- Sigstore integration time:
-
Permalink:
HelloThisIsFlo/omnifocus-operator@b05b0aaf512ebbce9248014ef0e1c8431a1c2c71 -
Branch / Tag:
refs/tags/v1.4.1 - Owner: https://github.com/HelloThisIsFlo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b05b0aaf512ebbce9248014ef0e1c8431a1c2c71 -
Trigger Event:
push
-
Statement type:
File details
Details for the file omnifocus_operator-1.4.1-py3-none-any.whl.
File metadata
- Download URL: omnifocus_operator-1.4.1-py3-none-any.whl
- Upload date:
- Size: 169.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa413e8a482acecdd53ba615b38ce6c2955afb4b0c003682a0cfdfa0f8ff64d6
|
|
| MD5 |
e88d4fece84dfa92ac67d06bc366ce11
|
|
| BLAKE2b-256 |
49ddd518efe686ecd5bb22a88a2c924e5e8c142a935da42ae07392dcf3300faa
|
Provenance
The following attestation bundles were made for omnifocus_operator-1.4.1-py3-none-any.whl:
Publisher:
publish.yml on HelloThisIsFlo/omnifocus-operator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omnifocus_operator-1.4.1-py3-none-any.whl -
Subject digest:
fa413e8a482acecdd53ba615b38ce6c2955afb4b0c003682a0cfdfa0f8ff64d6 - Sigstore transparency entry: 1371915696
- Sigstore integration time:
-
Permalink:
HelloThisIsFlo/omnifocus-operator@b05b0aaf512ebbce9248014ef0e1c8431a1c2c71 -
Branch / Tag:
refs/tags/v1.4.1 - Owner: https://github.com/HelloThisIsFlo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b05b0aaf512ebbce9248014ef0e1c8431a1c2c71 -
Trigger Event:
push
-
Statement type: