Omnifocus について
Omnifocusは、macOSでOmniFocusのネイティブなOmni Automation APIを介して操作するMCPサーバーです。タスクやプロジェクトの管理、通知、添付ファイル、分析、データ書き出しに対応します。
主な機能
- 01タスクの作成・更新・完了
- 02プロジェクトとフォルダーの整理
- 03サブタスクとタグの管理
- 04通知の追加と確認
- 05添付ファイルの管理
- 06活動の分析とデータ書き出し
活用シーン
- 01期限前・期限超過・フラグ付きタスクの確認
- 02プロジェクトと階層型タスクリストの整理
- 03生産性や繰り返しタスクの傾向分析
- 04タスクとプロジェクトのデータ書き出し
MCP 対応
MCPクライアントに41個のツールを提供し、OmniFocusのタスク、プロジェクト、フォルダー、タグ、通知、添付ファイル、分析、書き出しを扱います。データベースへ直接アクセスせず、Omni Automationを通じて操作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
OmniFocus MCP サーバー
Omni Automation 経由で AI アシスタントが OmniFocus に完全にアクセスできるようにする MCP サーバーです。タスク、プロジェクト、フォルダー、タグ、サブタスクの階層、通知、添付ファイル、分析、データのエクスポートに対応する 41 個のツールを備えています。
仕組み
このサーバーは osascript -l JavaScript を実行して app.evaluateJavascript() を呼び出し、OmniFocus のネイティブな Omni Automation エンジン内でスクリプトを実行します。データベースに直接アクセスすることはなく、すべての操作は公式 API 経由で行われます。
インストール
git clone https://github.com/alexhanna/omnifocus-mcp.git
cd omnifocus-mcp
npm install
npm run build
MCP クライアントの設定
サーバーを MCP クライアントの設定に追加します。サーバーエントリーは次のようになります。
{
"mcpServers": {
"omnifocus": {
"command": "node",
"args": ["/path/to/omnifocus-mcp/dist/index.js"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}
設定ファイルの場所はクライアントによって異なります。
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json - Claude Code:
~/.claude/settings.jsonまたはプロジェクトの.mcp.json - その他の MCP クライアント:サーバーの設定方法について、クライアントのドキュメントを参照してください
要件
- macOS(osascript の実行に必要)
- OmniFocus 4.6 以降がインストールされていること
- Node.js 18 以降
- OmniFocus に対する macOS のオートメーション権限(初回使用時に付与されます。docs/PERMISSIONS.md を参照)
ツール
タスク(7 個のツール)
| ツール | 説明 |
|---|---|
list_tasks | 完了状況、フラグ、プロジェクト、タグ、日付、検索、受信箱、実行可能性で絞り込みます。30 秒間キャッシュされます。 |
get_task_count | データを返さずに、条件に一致するタスク数を数えます。 |
todays_agenda | 今日が期限のタスク、期限切れのタスク、またはフラグ付きのタスクを表示します。 |
create_task | 名前、メモ、フラグ、日付、タグ、プロジェクト、見積もり時間を指定してタスクを作成します。 |
update_task | タスクの任意のプロパティを変更します。プロジェクト間で移動できます。 |
complete_task | タスクを完了済みにします。 |
delete_task | タスクを削除します。 |
プロジェクト(5 個のツール)
| ツール | 説明 |
|---|---|
list_projects | ステータス、フラグ、フォルダーで絞り込みます。5 分間キャッシュされます。 |
create_project | フォルダーへの配置を指定して作成します(必要に応じてフォルダーを自動作成します)。 |
update_project | プロパティを変更し、フォルダー間で移動します。 |
complete_project | プロジェクトを完了済みにします(必要に応じてすべてのタスクも完了します)。 |
delete_project | プロジェクトを削除します。 |
フォルダー(6 個のツール)
| ツール | 説明 |
|---|---|
list_folders | ネストの深さとステータスの条件を指定して一覧表示します。 |
create_folder | フォルダーを作成します。必要に応じてネストできます。 |
update_folder | 名前を変更し、ステータスを変更します。 |
delete_folder | フォルダーを削除します(必要に応じて、先に内容を移動します)。 |
get_folder_contents | フォルダー内のプロジェクトとサブフォルダーを一覧表示します。 |
move_to_folder | プロジェクトまたはフォルダーを別のフォルダーに移動します。 |
タスク階層(5 個のツール)
| ツール | 説明 |
|---|---|
get_task_hierarchy | タスクとサブタスクの完全なツリーを取得します(深さを設定可能)。 |
create_subtask | 表示位置を指定して子タスクを作成します。 |
move_task | タスクを別の親タスクまたはプロジェクトのルートに移動します。 |
set_task_ordering | 順次/並列の実行方法と completedByChildren を設定します。 |
list_subtasks | タスクの直接の子タスクを一覧表示します。 |
タグ(2 個のツール)
| ツール | 説明 |
|---|---|
list_tags | すべてのタグを一覧表示します。オプションで(負荷の高い)使用統計を取得できます。 |
manage_tags | タグの作成、名前変更、削除、統合を行います。parentTag によるネストしたタグに対応しています。 |
通知(4 個のツール)
| ツール | 説明 |
|---|---|
list_notifications | タスクのすべての通知を一覧表示します。 |
add_notification | 絶対日時(日時指定)または相対日時(期限からのオフセット)の通知を追加します。 |
remove_notification | インデックスを指定して通知を削除します。 |
clear_notifications | タスクのすべての通知を削除します。 |
添付ファイル(4 個のツール)
| ツール | 説明 |
|---|---|
list_attachments | タスクの添付ファイルのメタデータとリンク済みファイルを一覧表示します。 |
add_linked_file | file:// パスをタスクにリンクします。 |
remove_attachment | インデックスを指定して埋め込み添付ファイルを削除します。 |
remove_linked_file | ファイルへの参照を解除します。 |
分析(3 個のツール)
| ツール | 説明 |
|---|---|
get_productivity_stats | 完了率、時間配分です。プロジェクト/タグ/日/週ごとにグループ化します。 |
get_task_velocity | 日/週/月ごとのタスク処理量です。 |
analyze_overdue_tasks | プロジェクト/タグ/経過期間/優先度ごとにグループ化した期限超過のパターンです。 |
定期タスク(2 個のツール)
| ツール | 説明 |
|---|---|
analyze_recurring_tasks | 頻度と期限を含む定期タスクの一覧です。 |
get_recurring_patterns | 定期タスクの頻度に関する統計です。 |
エクスポート(3 個のツール)
| ツール | 説明 |
|---|---|
export_tasks | フィールドを選択して、タスクを JSON または CSV としてエクスポートします。 |
export_projects | オプションで統計を含めて、プロジェクトをエクスポートします。 |
bulk_export | すべてのデータ(タスク、プロジェクト、タグ)をファイルにエクスポートします。 |
アーキテクチャ
src/
├── cache/ # TTL-based caching (30s tasks, 5min projects, 1h analytics)
├── omnifocus/
│ ├── OmniAutomation.ts # Bridge: osascript → evaluateJavascript()
│ ├── scripts/ # Omni Automation script templates
│ └── types.ts # Type definitions
├── tools/ # 41 MCP tools in 10 domain directories
│ ├── tasks/ ├── projects/ ├── folders/
│ ├── hierarchy/ ├── tags/ ├── notifications/
│ ├── attachments/ ├── analytics/ ├── recurring/
│ └── export/
├── utils/ # Logging, permission checking
└── index.ts # Server entry point
スクリプトの実行フロー:
- ツールが
omniAutomation.buildScript(template, params)を呼び出し、{{placeholders}}をJSON.stringifyでエスケープした値に置き換えます wrapScript()がスクリプトを try/catch の IIFE でラップします- ラップされたスクリプトを再度
JSON.stringifyでエスケープし、app.evaluateJavascript()に渡します osascript -l JavaScriptが外側の JXA ラッパーを実行します- JSON の結果を解析し、MCP 経由で返します
既知の制限事項
- 定期タスクを作成できません — 定期的なパターンは読み取れますが、繰り返しルールは作成できません
- パースペクティブを管理できません — Omni Automation API はパースペクティブの読み取り専用です
- 位置情報ベースのタグはありません — OmniFocus の UI で手動設定する必要があります
add_linked_fileはfile://URL のみを受け付けます — OmniFocus は http/https を拒否します- MCP サーバーはビルドをキャッシュします —
npm run buildの変更を反映するには Claude Code の再起動が必要です - 自動化によるレビュー/パースペクティブの管理はできません
開発
npm run build # Compile TypeScript
npm run dev # Watch mode
npm test # Unit tests (vitest)
npm run typecheck # Type check without building
ライセンス
MIT — LICENSE を参照
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。