Skip to main content

MCP server exposing OmniFocus as structured task infrastructure for AI agents

Project description

๐ŸŽฏ OmniFocus Operator

The last OmniFocus MCP Server you'll ever need.

Python 3.12+ PyPI Tests 2561 Coverage 97% macOS only

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.

OmniFocus first-run permission dialog showing OmniFocus Operator's welcome banner with two steps: tick the 'Automatically run' checkbox, then click Run Script

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.

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,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.4.4 Batch Limit Increase โ€” add_tasks / edit_tasks accept up to 150 items per call โœ…
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


๐Ÿ“„ 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omnifocus_operator-1.4.4.tar.gz (233.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omnifocus_operator-1.4.4-py3-none-any.whl (171.1 kB view details)

Uploaded Python 3

File details

Details for the file omnifocus_operator-1.4.4.tar.gz.

File metadata

  • Download URL: omnifocus_operator-1.4.4.tar.gz
  • Upload date:
  • Size: 233.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for omnifocus_operator-1.4.4.tar.gz
Algorithm Hash digest
SHA256 753b337bc462a3a4030270551cc1ae1308925c28a5ab9d453f23bf164976f855
MD5 2b93aab2df93a7753e2ce6ddbc752ef3
BLAKE2b-256 3d762c3e89ee071b6dc528162d1dedfb0021e973acc553e9fa439dca7c8fec19

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnifocus_operator-1.4.4.tar.gz:

Publisher: publish.yml on HelloThisIsFlo/omnifocus-operator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnifocus_operator-1.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for omnifocus_operator-1.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 117581b3cd84d486315a3cb45f9fe105358cdd225057d2095a3679c7d57e9134
MD5 fdb96b9f6a02b7a7d6af147af343c586
BLAKE2b-256 2af256d3a671ed6273f746034afc9056930daef2f7f533ceb42babab295500e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnifocus_operator-1.4.4-py3-none-any.whl:

Publisher: publish.yml on HelloThisIsFlo/omnifocus-operator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page