Setup

Requirements

Before your first agent session: OmniFocus → File → Back Up Database. The bridge is careful by design, but agents write freely — that is the point.

Download from Releasesarm64 for Apple Silicon, x86_64 for Intel. The binary bundles its own PHP runtime, provisions itself on first run (auth token, audit database — state lives in ~/Library/Application Support/MissingOmniFocusMCP/), and speaks stdio: your MCP client launches and manages it, so there is nothing to keep running.

Claude Desktop: download the .mcpb bundle and open it — one-click install.

Claude Code:

chmod +x missing-omnifocus-mcp-macos-arm64
xattr -d com.apple.quarantine missing-omnifocus-mcp-macos-arm64   # Gatekeeper, until releases are notarized
claude mcp add --scope user omnifocus -- /path/to/missing-omnifocus-mcp-macos-arm64 mcp:start omnifocus

The first call triggers a macOS prompt — “…wants to control OmniFocus”. Allow it.

Install — from source

For contributors, or if you want the shared HTTP transport:

git clone https://github.com/Pad19-Labs/The-Missing-OmniFocus-MCP.git
cd The-Missing-OmniFocus-MCP
./setup.sh   # offers to install PHP via php.new if missing

The script installs dependencies, creates .env with a fresh auth token, migrates the local audit database, and runs the test suite. It is safe to re-run.

Transports (source install)

stdio — simplest

Your MCP client spawns the bridge on demand and talks over stdin/stdout. Nothing to keep running.

Claude Code:

claude mcp add --scope user omnifocus -- php /absolute/path/to/bridge/artisan mcp:start omnifocus

Claude Desktop — fully quit the app first (⌘Q), then add to ~/Library/Application Support/Claude/claude_desktop_config.json and relaunch:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/full/path/to/php",
      "args": ["/absolute/path/to/bridge/artisan", "mcp:start", "omnifocus"]
    }
  }
}

Use the full path to your PHP binary (which php) — GUI apps do not inherit your shell’s PATH.

HTTP — one shared server

One persistent local server that every client hits. Start it any way you like:

php bridge/artisan serve --host=127.0.0.1 --port=8321

Register it with the token from bridge/.env:

claude mcp add --scope user --transport http omnifocus http://127.0.0.1:8321/mcp \
  --header "Authorization: Bearer YOUR_MCP_AUTH_TOKEN"

Security notes

Verify

Ask your agent: “Give me an overview of my OmniFocus database.” You should get counts, your folder tree, tags, and projects. Then try: “What’s in my inbox?”