Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Full CRUD MCP server for OmniFocus via Omni Automation — tasks, projects, folders, tags, recurrence.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": [
"-y",
"@scardis/omnifocus-mcp"
]
}
}
}ターミナルでこれを実行します
claude mcp add omnifocus -- npx -y @scardis/omnifocus-mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": [
"-y",
"@scardis/omnifocus-mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"omnifocus": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@scardis/omnifocus-mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント steveardis で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.1)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Claude Checkpoint MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP server that checkpoints Claude Code session context to survive crashes and token limits
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
An MCP server for OmniFocus that exposes the full Omni Automation JavaScript API to LLM callers.
macOS only. Requires OmniFocus running on the same machine. The entire implementation runs OmniJS snippets inside OmniFocus via osascript -l JavaScript — no AppleScript string generation, no scripting dictionary limitations.
The package is published to npm as @scardis/omnifocus-mcp.
Add to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):
{
"mcpServers": { "omnifocus": { "command": "npx", "args": ["-y", "@scardis/omnifocus-mcp"] } } }
git clone https://github.com/steveardis/omnifocus-mcp.git
cd omnifocus-mcp npm install npm run build
Then configure your MCP client:
{
"mcpServers": { "omnifocus": { "command": "node", "args": ["/absolute/path/to/omnifocus-mcp/dist/server.js"] } } }
| Tool | Description |
|---|---|
list_projects | Projects with optional filtering by status, folderId, flagged. Default excludes done/dropped. Limit (default 100). |
get_project | Full project detail by stable ID |
list_tasks | Tasks scoped by projectId, folderId, inbox: true, or all: true with optional status/tag/due/flagged filters. Limit (default 200). |
get_task | Full task detail by stable ID — includes defer/planned/due dates, tags, repetition rule, parentTaskId |
list_folders | Folders with optional status filter. Limit (default 200). |
get_folder | Full folder detail by stable ID, including child folder and project IDs |
list_tags | Tags with optional status filter. Limit (default 200). |
get_tag | Full tag detail by stable ID, including child tag IDs |
resolve_name | Resolve a name to stable ID candidates — never silently disambiguates; returns all matches |
| Tool | Description |
|---|---|
create_task | Create a task in inbox, project, or as subtask. Supports defer/planned/due dates, tags, flagged, estimated minutes, and repetition rules. |
edit_task | Edit any task field. Pass null to clear dates or repetition. Omitted fields are unchanged. |
complete_task | Mark a task complete |
drop_task | Mark a task dropped |
delete_task | Permanently delete a task and all subtasks |
create_project | Create a project, optionally in a folder. Supports type, status, review interval, tags. |
edit_project | Edit project fields |
complete_project | Mark a project complete |
drop_project | Mark a project dropped |
delete_project | Permanently delete a project and all its tasks |
create_folder | Create a folder, optionally nested |
edit_folder | Rename a folder |
delete_folder | Permanently delete a folder and entire subtree |
create_tag | Create a tag, optionally nested |
edit_tag | Edit tag name or status |
delete_tag | Permanently delete a tag and child tags |
move_task | Move a task to a project or make it a subtask of another task |
move_project | Move a project to a folder or to top level |
Every entity returned by this server includes a stable id field (id.primaryKey from OmniFocus). Use this ID in subsequent calls rather than names. Names can be ambiguous; IDs are not.
If you have a name but not an ID, use resolve_name. It returns a list — if multiple candidates are returned, inspect the path field and ask the user to disambiguate before proceeding with any write operation.
Two notable alternatives exist: themotionmachine/OmniFocus-MCP and jqlts1/omnifocus-mcp-enhanced (a fork of the above with additional tools).
Scripting API. The alternatives use the JXA scripting dictionary or AppleScript to drive OmniFocus. This server makes a single JXA call — Application('OmniFocus').evaluateJavascript() — and runs all logic as OmniJS (Omni Automation) inside OmniFocus. This gives access to the full Omni Automation API surface (recurrence rules, review intervals, perspectives, forecast, attachments, URL automation, etc.) rather than the more limited scripting dictionary.
Argument injection. The alternatives construct osascript commands via string interpolation, which can break on apostrophes, quotes, backslashes, and unicode in names. This server serializes all arguments with JSON.stringify into a JS literal.
Entity addressing. The alternatives address entities primarily by name. This server returns a stable id (id.primaryKey) for every entity and provides resolve_name to map a name to ID candidates — returning all matches with full paths rather than silently picking one when names are ambiguous.
Full CRUD. This server supports creating, editing, completing, dropping, deleting, and moving tasks, projects, folders, and tags — plus repetition rules and OmniFocus 4's planned date.
# Type-check without building
npm run typecheck
npm test
npm run build
Publishing a new version is documented in RELEASING.md.
npm test
⚠️ Integration tests run against your real OmniFocus database.
Each test run creates a temporary top-level folder named
__MCP_TEST_ __and deletes it on teardown. If a test run is interrupted before teardown, run the cleanup script:
`bash
npm run test:cleanup-fixtures
`
⚠️ Sync warning: By default, integration tests refuse to run if OmniFocus sync is enabled, to prevent test fixtures from propagating to your other devices. Disable OmniFocus sync first, or set
MCP_TEST_ALLOW_SYNC=1to opt in (fixtures will sync):
# Default (refuses if sync enabled)
npm run test:integration
MCP_TEST_ALLOW_SYNC=1 npm run test:integration
npm run test:cleanup-fixtures
This removes any __MCP_TEST_*__ folders and orphaned __mcp_*__ projects/tags left in OmniFocus from interrupted test runs.
Contributions are welcome! Here's how to get started:
npm installnpm testnpm run test:integrationnpm run typecheck — must pass with no errorsnpm test — all unit tests must passnpm run test:integration — all integration tests must pass (macOS only)The server runs OmniJS snippets inside OmniFocus via osascript -l JavaScript. Each tool has three layers:
src/schemas/shapes.ts) — Zod schemas for input validation and output parsingsrc/snippets/*.js) — OmniJS code that runs inside OmniFocus. Plain ES5 JavaScript (no imports, no TypeScript). Arguments are injected via __ARGS__ placeholder.src/tools/*.ts) — Validates input, calls runSnippet(), parses the resultWhen adding a new tool:
src/schemas/shapes.ts and export from src/schemas/index.tssrc/snippets/ALLOWED_SNIPPETS in src/runtime/snippetLoader.tssrc/tools/ and register it in src/tools/index.tsSnippets run inside OmniFocus's JavaScript runtime, not Node.js. Key constraints:
var, function(){}, no arrow functions in older OmniFocus versionsflattenedTasks, flattenedProjects, moveTasks, etc.) are available directlyreturn JSON.stringify({ ok: true, data: ... })NotFoundError, ValidationError) which the bridge catches and wrapsMIT