Skip to main content
Glama
README.md
# OmniFocus MCP Server

An [MCP](https://modelcontextprotocol.io) server that lets AI assistants read and write your OmniFocus database. Talk to
Claude (or any MCP client) in natural language and it handles the OmniFocus automation for you.

> **Personal Project Notice**: A hobby project for my workflow automation. MIT licensed -- use or adapt freely, but
> provided as-is.

## What You Can Do

Once configured, talk to your assistant naturally:

- "What do I need to do today?"
- "Show me everything that's overdue"
- "Add 'Call dentist' to my inbox, due Friday"
- "Create a project for the kitchen remodel with these tasks..."
- "I just finished a meeting, here are my notes..." (parses into tasks)
- "How's my weekly review looking?"

The server exposes four tools that cover the full OmniFocus API:

| Tool                | Purpose     | Operations                                                 |
| ------------------- | ----------- | ---------------------------------------------------------- |
| `omnifocus_read`    | Query data  | Tasks, projects, tags, perspectives, folders               |
| `omnifocus_write`   | Modify data | Create, update, complete, delete, batch, tag management    |
| `omnifocus_analyze` | Analytics   | Productivity stats, velocity, patterns, workflows, reviews |
| `system`            | Diagnostics | Version info, performance metrics, cache stats             |

Five built-in GTD prompts (weekly review, inbox processing, Eisenhower matrix, and more) are available via the MCP
prompt protocol. See [Getting Started](docs/user/GETTING_STARTED.md) for details.

## Requirements

- **macOS** with **OmniFocus 4.7+** (the server communicates with OmniFocus via Apple's automation APIs)
- **Node.js 18+**

## Quick Start

```bash
git clone https://github.com/kip-d/omnifocus-mcp.git
cd omnifocus-mcp
npm install
npm run build
```

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "omnifocus": {
      "command": "node",
      "args": ["/absolute/path/to/omnifocus-mcp/dist/index.js"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add omnifocus -- node /absolute/path/to/omnifocus-mcp/dist/index.js
```

**Optional:** Install the [GTD skill](docs/skills/omnifocus-assistant/SKILL.md) for enhanced intent recognition and
workflow guidance:

```bash
ln -s /absolute/path/to/omnifocus-mcp/docs/skills/omnifocus-assistant ~/.claude/skills/omnifocus-assistant
```

### Other Clients

Cursor, Windsurf, Cline, and Zed all support local stdio MCP servers. Use the same `node dist/index.js` command; refer
to each client's documentation for config file location.

### Remote Access (HTTP)

The server supports HTTP transport for accessing OmniFocus from another machine (e.g., via Tailscale):

```bash
node dist/index.js --http --port 3000
```

See the [HTTP Transport Guide](docs/user/HTTP-TRANSPORT.md) for setup, authentication, and client configuration.

## Documentation

| Audience   | Document                                        | Purpose                              |
| ---------- | ----------------------------------------------- | ------------------------------------ |
| Users      | [Getting Started](docs/user/GETTING_STARTED.md) | First conversation, natural language |
| Users      | [Troubleshooting](docs/user/TROUBLESHOOTING.md) | Common issues and solutions          |
| Users      | [Smart Capture](docs/user/SMART_CAPTURE.md)     | Parse meeting notes into tasks       |
| Users      | [HTTP Transport](docs/user/HTTP-TRANSPORT.md)   | Remote access setup                  |
| Developers | [Developer Guide](docs/dev/DEVELOPER_GUIDE.md)  | API examples, tool call formats      |
| Developers | [Architecture](docs/dev/ARCHITECTURE.md)        | JXA + OmniJS Bridge internals        |
| Developers | [API Reference](docs/api/README.md)             | API reference versions               |
| Developers | [Patterns and Solutions](docs/dev/PATTERNS.md)  | Symptom lookup, common fixes         |
| Developers | [Documentation Map](docs/DOCS_MAP.md)           | Full index of documentation          |

## Testing

| Suite       | Command                    | Tests           | Time   |
| ----------- | -------------------------- | --------------- | ------ |
| Unit        | `npm run test:unit`        | 1634 (70 files) | ~2s    |
| Integration | `npm run test:integration` | 73              | ~4 min |
| All         | `npm test`                 | Both suites     | ~4 min |

Integration tests require OmniFocus running on macOS and exercise real database queries. Timing scales with database
size (the ~4 min figure is against a ~2,500 task database). Set `DISABLE_INTEGRATION_TESTS=true` to skip them.

## Limitations

- **macOS only** -- The server communicates with OmniFocus via Apple's JXA and OmniAutomation APIs, which require macOS.
  Remote access from other platforms is possible via [HTTP transport](docs/user/HTTP-TRANSPORT.md).

See [Troubleshooting](docs/user/TROUBLESHOOTING.md) for common issues.

## License

MIT License -- see LICENSE file.

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: analysis, reading, writing, and system utilities. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tools follow a consistent 'omnifocus_verb' pattern, making it predictable and easy for agents to understand the action each tool performs.

Tool Count3/5

With only 4 tools for a complex domain like OmniFocus, the count feels low. However, each tool is richly featured, especially read and write, which compensates somewhat.

Completeness4/5

The tool surface covers most essential operations: CRUD for tasks/projects, folder creation, tag management, analytics, and system diagnostics. Minor gaps exist, such as no explicit perspective management.

Maintenance

ActivityActive
ResponsivenessNo issues