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+

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.

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

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,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.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.3.tar.gz (220.2 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.3-py3-none-any.whl (170.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: omnifocus_operator-1.4.3.tar.gz
  • Upload date:
  • Size: 220.2 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.3.tar.gz
Algorithm Hash digest
SHA256 33c50edbc6e69e1eb37fabd53e6530c7b9db2edb63ed1fa1c96413fb87905d02
MD5 a96e8ac6abacf7e7b0c081ae3596b806
BLAKE2b-256 fa52efca7df964303aa551f0593921d56cfbb32f8b10a111adef25dc6b335ded

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnifocus_operator-1.4.3.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.3-py3-none-any.whl.

File metadata

File hashes

Hashes for omnifocus_operator-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1e49a48f3b44fb82b78d80ae42a2db92c6639666af901b8167aa6e0d93b68ac9
MD5 0cf0e348fd2d0c58b5e78648b4e00256
BLAKE2b-256 5eb2a2188f9e25441aa676d1406e45123a96ebdb9f88513a1e8becc02a142478

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnifocus_operator-1.4.3-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