omnifocus-mcp-server 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +151 -7
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,40 @@
1
- # omnifocus-mcp-server
1
+ # OmniFocus MCP
2
2
 
3
- Feature-complete [Model Context Protocol](https://modelcontextprotocol.io/) server for [OmniFocus](https://www.omnigroup.com/omnifocus). Full CRUD access to tasks, projects, folders, tags, and perspectives — 50 tools, 2 resources, and 3 prompts.
3
+ [![npm version](https://img.shields.io/npm/v/omnifocus-mcp-server.svg)](https://www.npmjs.com/package/omnifocus-mcp-server)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ > ✔️ Turn prompts into projects.
7
+
8
+ Feature-complete [Model Context Protocol](https://modelcontextprotocol.io/) server for [OmniFocus](https://www.omnigroup.com/omnifocus). Full read/write access to tasks, projects, folders, tags, and perspectives — 50 tools, 2 resources, and 3 prompts.
9
+
10
+ Uses [Omni Automation](https://omni-automation.com/) (OmniJS) under the hood, executing scripts via JXA and `osascript`. This is why macOS is required.
11
+
12
+ ![Demo](assets/demo.gif)
13
+
14
+ ## Table of Contents
15
+
16
+ - [Examples](#examples)
17
+ - [Install](#install)
18
+ - [Requirements](#requirements)
19
+ - [Security](#security)
20
+ - [Tools](#tools)
21
+ - [Resources](#resources)
22
+ - [Prompts](#prompts)
23
+ - [Troubleshooting](#troubleshooting)
24
+ - [Development](#development)
25
+ - [License](#license)
26
+
27
+ ## Examples
28
+
29
+ > "Create a project called 'Q3 Launch' in my Work folder with subtasks for design review, copy writing, and QA — all due next Friday, assigned sequentially."
30
+
31
+ > "What's overdue? Flag anything due this week that isn't flagged yet."
32
+
33
+ > "Move all tasks tagged 'waiting' in the 'Website Redesign' project to a new 'Blocked' project."
34
+
35
+ > "Run my weekly review — go through stale projects, process inbox, and summarize what needs attention."
36
+
37
+ > "How many tasks do I have tagged 'errand'? List the ones that are available."
4
38
 
5
39
  ## Install
6
40
 
@@ -38,6 +72,73 @@ Or add to `.claude/settings.json`:
38
72
  }
39
73
  ```
40
74
 
75
+ <details>
76
+ <summary><strong>Cursor</strong></summary>
77
+
78
+ Add to `.cursor/mcp.json` in your project or `~/.cursor/mcp.json` globally:
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "omnifocus": {
84
+ "command": "npx",
85
+ "args": ["-y", "omnifocus-mcp-server"]
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ </details>
92
+
93
+ <details>
94
+ <summary><strong>Windsurf</strong></summary>
95
+
96
+ Add to `~/.codeium/windsurf/mcp_config.json`:
97
+
98
+ ```json
99
+ {
100
+ "mcpServers": {
101
+ "omnifocus": {
102
+ "command": "npx",
103
+ "args": ["-y", "omnifocus-mcp-server"]
104
+ }
105
+ }
106
+ }
107
+ ```
108
+
109
+ </details>
110
+
111
+ <details>
112
+ <summary><strong>Codex CLI</strong></summary>
113
+
114
+ Add to `~/.codex/config.toml`:
115
+
116
+ ```toml
117
+ [mcp_servers.omnifocus]
118
+ command = "npx"
119
+ args = ["-y", "omnifocus-mcp-server"]
120
+ ```
121
+
122
+ </details>
123
+
124
+ <details>
125
+ <summary><strong>Gemini CLI</strong></summary>
126
+
127
+ Add to `~/.gemini/settings.json`:
128
+
129
+ ```json
130
+ {
131
+ "mcpServers": {
132
+ "omnifocus": {
133
+ "command": "npx",
134
+ "args": ["-y", "omnifocus-mcp-server"]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ </details>
141
+
41
142
  ## Requirements
42
143
 
43
144
  - macOS (OmniFocus is macOS-only)
@@ -45,7 +146,13 @@ Or add to `.claude/settings.json`:
45
146
  - Node.js >= 18
46
147
  - Automation permission granted in System Settings > Privacy & Security > Automation
47
148
 
48
- ## Tools (50)
149
+ ## Security
150
+
151
+ This server has **full read/write access** to your OmniFocus database. It can create, modify, and delete tasks, projects, folders, and tags. Only connect it to AI clients and models you trust.
152
+
153
+ No data leaves your machine — all communication happens locally via `osascript`.
154
+
155
+ ## Tools
49
156
 
50
157
  ### Tasks (23)
51
158
 
@@ -69,7 +176,7 @@ Or add to `.claude/settings.json`:
69
176
  | `get_inbox_tasks` | Get all inbox tasks |
70
177
  | `get_flagged_tasks` | Get all available flagged tasks |
71
178
  | `get_today_completed_tasks` | Get tasks completed today |
72
- | `get_task_count` | Count tasks matching filters (faster than list) |
179
+ | `get_task_count` | Count tasks matching filters use instead of `list_tasks` when you only need a number, not the full task data |
73
180
  | `convert_task_to_project` | Convert a task into a project, preserving subtasks |
74
181
  | `batch_create_tasks` | Create multiple tasks at once with subtask hierarchies |
75
182
  | `batch_complete_tasks` | Complete multiple tasks at once |
@@ -138,9 +245,42 @@ Or add to `.claude/settings.json`:
138
245
 
139
246
  | Prompt | Description |
140
247
  |--------|-------------|
141
- | `weekly-review` | Guided weekly review of projects and tasks |
142
- | `inbox-processing` | Process inbox items using GTD methodology |
143
- | `daily-planning` | Plan today's tasks based on due dates, flags, and completions |
248
+ | `weekly-review` | Walk through your GTD weekly review: check projects due for review, process leftover inbox items, reassess flagged tasks, and get a structured summary. Marks projects as reviewed when done. |
249
+ | `inbox-processing` | Process inbox items one-by-one using GTD methodology — delete non-actionable items, do anything under 2 minutes, and organize the rest into projects with tags and dates. |
250
+ | `daily-planning` | Build a prioritized plan for today based on due dates, flagged items, and what you've already completed. Surfaces overdue tasks and estimates your workload. |
251
+
252
+ ## Troubleshooting
253
+
254
+ ### "Not authorized" or no response from OmniFocus
255
+
256
+ Make sure Automation permissions are granted. Go to **System Settings > Privacy & Security > Automation** and ensure your terminal app (Terminal, iTerm, etc.) is allowed to control OmniFocus.
257
+
258
+ ### Changes not taking effect after rebuild
259
+
260
+ If you're developing locally, multiple MCP server processes may be running (from Claude Desktop, Claude Code, etc.). Kill them all and restart:
261
+
262
+ ```bash
263
+ pkill -f "omnifocus-mcp-server"
264
+ # or if running from source:
265
+ pkill -f "omnifocus/mcp/dist/index.js"
266
+ ```
267
+
268
+ ### Stale `npx` cache
269
+
270
+ If `npx` is running an old version, clear the cache:
271
+
272
+ ```bash
273
+ npx clear-npx-cache
274
+ # then re-run your MCP client
275
+ ```
276
+
277
+ ### OmniFocus 3 compatibility
278
+
279
+ OmniFocus 3 works if Omni Automation is enabled. Go to **OmniFocus > Preferences > General** and check "Omni Automation". Some features (like certain perspective types) may behave differently.
280
+
281
+ ### Tool calls are slow
282
+
283
+ Each tool call runs an `osascript` process to communicate with OmniFocus. This typically takes 200-500ms per call. Batch tools (`batch_create_tasks`, `batch_complete_tasks`, `batch_delete_tasks`) are much faster for bulk operations than calling individual tools in a loop.
144
284
 
145
285
  ## Development
146
286
 
@@ -160,6 +300,10 @@ Tests against a real OmniFocus instance (creates and cleans up test items):
160
300
  OMNIFOCUS_LIVE=1 npm run test:integration
161
301
  ```
162
302
 
303
+ ### Contributing
304
+
305
+ PRs welcome. Please run `npm test` before submitting and include tests for new tools.
306
+
163
307
  ## License
164
308
 
165
309
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnifocus-mcp-server",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for OmniFocus via Omni Automation API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",