Skip to content

APIとMCPを画面の操作と同じ範囲にする - #25

Merged
riiimparm merged 3 commits into
mainfrom
cursor/mcp-api-parity-c20c
Nov 12, 2026
Merged

riiimparm merged 3 commits into
mainfrom
cursor/mcp-api-parity-c20c

Conversation

@riiimparm

@riiimparm riiimparm commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

概要

ローカルAPIとMCPから、画面と同じタスク・タグ・設定の操作ができるようにした。既存の GET/POST /tasks と PATCH/DELETE /tasks/:id の形は維持している。MCPは公式SDKの initialize、tools/list、tools/call に合わせ、画面の操作名でツールを出す。

チェックリスト

画面の操作 / ローカルAPI / MCP。できたものは ✅。

  • ✅ タスクの一覧・検索・絞り込み(状態、キーワード、プロジェクト、タグ、期限、MUST、確認待ち、親)
  • ✅ タスクを1件取得
  • ✅ タスク追加。既存の POST /tasks に加え、入力欄と同じ文(:プロジェクト、URL、日付、カンマ区切り)
  • ✅ タイトル・プロジェクト・期限・URL・タグ・MUST・確認待ち・親の更新。タイトル編集は画面と同じくプロジェクトとURLだけ解釈する
  • ✅ 完了 / 未完了。未完了の子がいる親は、画面と同じく子をまとめて終えないと完了できない。まとめて終える指定もある
  • ✅ 削除(子孫も消える)。既存の DELETE /tasks/:id は {deleted} を残し、一緒に消したIDを足した
  • ✅ 未完了の並び替え(親より前に動いた子は親子が外れる)
  • ✅ プロジェクト見出しの並び替え
  • ✅ タグの一覧・作成・更新・削除。キーワードに合うタスクへ自動付与
  • ✅ 設定の取得と部分更新(テーマ、言語、グループ表示、期限、タグ、URL、効果音、フォーカス分数、ショートカット文字列)
  • ✅ コピーメニューと同じ Markdown(今日完了 / 完了全部 / 未完了)
  • ✅ リザルト集計
  • ✅ フォーカス時間の記録
  • ✅ タスクとタグの全削除(confirm が delete のときだけ。設定は残る)
  • ✅ Google連携の公開状態と、シークレットを含まない同期スイッチ。今すぐ同期とタスクリスト一覧は起動中のアプリだけが実行する
  • ✅ APIが data.json を書いたあと、画面がタスク・タグ・設定・テーマ・言語・フォーカスショートカットを読み直す
  • 見送り: 元に戻す。メモリ上だけで data.json に無い
  • 見送り: フォーカスタイマーの開始・停止・延長。動いているタイマーは画面の状態
  • 見送り: ショートカットのOS登録そのもの。APIは文字列を保存し、起動中の画面が変更を受け取ったときに登録する
  • 見送り: Googleのブラウザ接続・切断とクライアントシークレットの入力。シークレットはアプリの設定画面だけが扱う
  • 見送り: URLをブラウザで開く、アプリの更新、ウィンドウを閉じる確認、セクションの開閉、効果音の再生、クリップボードへの書き込み。コピーは Markdown の文字列を返す
  • 見送り: 期限がウィンドウ外のときの確認ダイアログ。APIは日付をそのまま受ける
  • 見送り: キーボード選択や一括選択のUI状態。複数IDの完了・削除はAPIとMCPでできる

互換

既存のHTTPは、認証、unauthorized、title is required、task not found、status must be todo or done などの応答を維持する。一覧に count、削除に alsoDeleted を足しただけで、以前からあるフィールドは変えていない。

MCPのツール名は list_tasks / create_task / update_task / delete_task から、下の操作名に変えた。

tauri-plugin-process は 2.3.1、tauri-plugin-updater は 2.12.0 に固定した。それより新しい版は Tauri 2.12(Rust 1.90)が必要で、mise.toml の Rust 1.88 とロック中の Tauri 2.11.2 から外れる。

検証

  • pnpm test: 23件成功。MCPクライアント(SDKの Client + stdio)で initialize、ping、tools/list、tools/call を確認した。追加、検索、親子、子が残る完了の失敗、cascade、削除、設定、フォーカス、タグ、Google状態にシークレットが出ないこと、未知のツールと引数不足の isError を含む
  • cargo test --manifest-path src-tauri/core/Cargo.toml: 単体3件、HTTP 11件成功
  • pnpm build(tsc と vite build)成功
  • cargo check --manifest-path src-tauri/Cargo.toml --locked 成功
  • GitHub Actions の CI / check は成功(push と pull_request の2本。test、build、cargo test)

MCPの使い方

アプリを起動し、リポジトリで pnpm install したあと、stdio で node mcp/server.js を起動する。接続先はアプリが書く api.json(macOS は ~/Library/Application Support/com.fasttask.desktop/api.json)。FASTTASK_PORT と FASTTASK_TOKEN で上書きできる。

claude mcp add fasttask -- node /absolute/path/to/FastTask/mcp/server.js

ツール:

  • search_tasks タスクを探す
  • get_task 1件取得
  • add_tasks 入力欄と同じ文、またはフィールド指定で追加
  • edit_task タイトル、プロジェクト、期限、URL、タグ、MUST、確認待ち、親
  • set_task_status 完了 / 未完了。子が残るときは cascade
  • delete_tasks 削除(子孫も消える)
  • reorder_tasks 未完了の並び替え
  • reorder_projects プロジェクト見出しの並び替え
  • list_tags / save_tag / delete_tag タグ
  • get_settings / update_settings 表示設定
  • copy_list コピーと同じ Markdown
  • daily_result リザルト
  • record_focus フォーカス時間
  • clear_all_data タスクとタグの全削除(confirm: "delete")
  • google_sync 連携の状態、同期スイッチ、今すぐ同期、タスクリスト一覧

既存の作成・更新・削除はそのままに、検索、並び替え、タグ、設定、コピー、リザルトを同じ data.json で扱えるようにする。
画面は外部からのデータ変更で設定とテーマも読み直す。Googleの今すぐ同期はアプリプロセスだけが行う。
initialize、tools/list、tools/call を SDK 経由にし、画面の操作に対応するツール名で出す。
@riiimparm riiimparm self-assigned this Nov 12, 2026
@riiimparm
riiimparm merged commit baa2e10 into main Nov 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant