omnifocus-sync-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@omnifocus-sync-mcplist my flagged tasks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
omnifocus-sync-mcp
A headless MCP server that reads and writes OmniFocus data by talking directly to the Omni Sync Server over WebDAV — no Mac, no running OmniFocus app. It implements OmniFocus's client-side end-to-end encryption in TypeScript, so it can run anywhere Node runs (a Linux NAS, a container, a cloud box).
Every other OmniFocus MCP server automates the local macOS app via AppleScript/JXA. This one speaks the cloud sync protocol instead, which is what lets it run headless.
⚠️ Alpha / use at your own risk. This talks to your real task database. The read and write paths have been validated end-to-end against a live Omni Sync Server account (add + delete transactions round-trip correctly), and the crypto and parsing have an offline test suite — but this hasn't been exercised across every OmniFocus version or edge case. Keep a backup (in OmniFocus: File → Back Up Database), and consider a throwaway account while evaluating. See Safety.
How it works
An OmniFocus sync store is a WebDAV collection (OmniFocus.ofocus/) containing:
a baseline transaction and a chain of delta transactions, each a
.zipholding acontents.xmldescribing object creates/updates/deletes;.clientfiles registering each device and the transaction "tail" it has synced to;an
encryptedplist holding the wrapped document keys.
This server:
Resolves the shard —
sync.omnigroup.com302-redirects each account to asyncN.omnigroup.comhost; the client follows it.Authenticates with HTTP Digest (what Omni Sync Server negotiates).
Decrypts using the OmniFileStore format: PBKDF2 derives a wrapping key from your passphrase, RFC 3394 unwraps the document key slots, and each file is AES-128-CTR + HMAC-SHA256 in 64 KiB segments (encrypt-then-MAC).
Replays the transaction chain into an in-memory object model.
Writes by building a new
contents.xml, zipping, encrypting,PUT-ting it as a new transaction descending from the current head tail, and refreshing its.clientregistration so other clients treat it as a real participant.
The crypto and format were reimplemented from Omni's own open-source frameworks
(OmniGroup/OmniGroup, notably
OmniFileStore/EncryptionFormat.md and DecryptionExample.py) plus community
reverse-engineering (tomzx/ofocus-format,
rubyfocus). See CREDITS.
Related MCP server: OmniFocus MCP Server
Install
git clone https://github.com/rosskukulinski/omnifocus-sync-mcp.git
cd omnifocus-sync-mcp
npm install
npm run buildConfigure
Set credentials via environment variables (see .env.example):
Variable | Required | Description |
| yes | Omni Sync Server account name |
| yes | Omni Sync Server account password |
| no | Defaults to the sync password (OmniFocus's default) |
| no | Defaults to |
| no | Defaults to |
| no | Display name for this client's |
| no | Where the stable client id is stored |
| no |
|
Try it without an MCP client
A diagnostic CLI exercises the sync path directly:
export OMNIFOCUS_SYNC_USERNAME=... OMNIFOCUS_SYNC_PASSWORD=...
npm run probe -- sync # show database counts
npm run probe -- list flagged # list flagged tasks
npm run probe -- projects # list projects
npm run probe -- add "Buy milk" # add an inbox taskUse as an MCP server
Run over stdio. Example Claude Desktop / Claude Code config:
{
"mcpServers": {
"omnifocus": {
"command": "node",
"args": ["/absolute/path/to/omnifocus-sync-mcp/dist/index.js"],
"env": {
"OMNIFOCUS_SYNC_USERNAME": "your-account",
"OMNIFOCUS_SYNC_PASSWORD": "your-password"
}
}
}
}Tools
Tool | Description |
| Reload the database from the server; returns counts |
| List tasks ( |
| Full detail for one task by id |
| List projects with folder path and status |
| Create a task (inbox or in a project) |
| Mark a task complete |
| Edit name/note/flag/due/defer; clear dates |
| Delete a task by id |
Safety
Back up first, and prefer a test account until you trust the write path.
Start with
OMNIFOCUS_READ_ONLY=1to explore safely.Writes are append-only transactions; a bad write forks history rather than destroying data, and OmniFocus merges forks on its next sync — but that is a safety net, not a guarantee.
Secrets come from the environment only; nothing is written to this repo. The client identity file (
client.json) contains no secrets.
Development
npm test # offline test suite (crypto round-trips, parse/write, digest)
npm run dev -- ... # run the CLI via tsx without buildingThe offline tests cover the risky parts without a network or a real account: the
OmniFileStore encrypt/decrypt round-trip at every segment boundary, MAC tamper
detection, the passphrase→PBKDF2→key-unwrap pipeline, contents.xml build/parse
round-trips, partial-update merge semantics, and the full zip→encrypt→decrypt→parse
read path.
Credits
Built by reimplementing formats documented and open-sourced by others:
OmniGroup/OmniGroup — Omni's own frameworks;
OmniFileStore/EncryptionFormat.mdandDecryptionExample.pyare the authoritative encryption spec, andOmniFoundation/XML/OFXMLIdentifier.mthe id format.tomzx/ofocus-format — the
.ofocustransaction/format write-up.jyruzicka/rubyfocus, kumpelblase2/focus — prior-art parsers.
Not affiliated with or endorsed by The Omni Group. "OmniFocus" is their trademark.
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables automation and management of OmniFocus tasks, projects, and tags using natural language and programmable interfaces from VS Code, command line, or any MCP-compatible client.Last updated12MIT
- AlicenseAqualityFmaintenanceAn MCP server that provides full read/write access to OmniFocus, enabling AI assistants to manage tasks, projects, folders, tags, and perspectives via 51 tools, resources, and prompts.Last updated513815MIT
- Flicense-qualityAmaintenanceA 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.Last updated6
- Alicense-qualityCmaintenanceMCP server that gives AI assistants full control over OmniFocus on macOS, including tasks, projects, tags, folders, perspectives, forecast, notifications, and review workflows.Last updated41MIT
Related MCP Connectors
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
MCP server for generating rough-draft project plans from natural-language prompts.
The everything Zotero MCP server — Web API v3 + local API, safe writes, citations, search.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rosskukulinski/omnifocus-sync-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server