外部のAIクライアント(MCPクライアント、スクリプト、その他のツール)が、MCPサーバーとREST/GraphQL APIを通じてAITMと連携する方法を説明します。

AITM MCP & API

MCPサーバー

AITMは2つのMCPサーバーを公開しています。

  • aitm-core(35ツール) — プロジェクト(onboarding、list_projects、get_project_status)、TaskのCRUD(create_task、list_tasks、get_task、update_task、delete_task、search_tasks)、ライフサイクル(run_task、stop_task、stop_project_tasks、stop_all_tasks、resume_task、skip_step、requeue_task — 破壊的、archive_task、restore_task、reorder_task)、Taskデータ(get_task_result、get_task_console、get_task_logs、get_pipeline_status)、プロンプトの最適化(optimize_prompt、apply_optimization)、アーカイブ検索(search_archive)、設定(get_settings、update_settings)、ライセンス(license_status、license_activate、license_deactivate、license_upload_offline_token、license_remove_offline_token)、およびserver_restart/server_stop。
  • aitm-extended(43ツール) — テスト環境(test_env_status、test_app_build、test_app_start、test_app_stop、test_project_pull、get_test_history)、スクリーンショット(get_screenshot_manifest、get_screenshot、get_screenshot_history)、Contract(search_contracts、get_contract_detail、get_module_summary、find_precedent_tasks、get_danger_zones、investigate_variable、blast_radius、context_for、contracts_health、contracts_resync)、ドキュメントと変数(search_docs、get_docs_for_variable、get_behavior_chain、search_variables、get_variable_tree、get_dom_page、search_dom)、セルフチェック(run_selfcheck)とバックアップ(create_backup)、会話(list_conversations、get_conversation、delete_conversation)、Chat/Brainstormのメッセージ送信(send_chat_message、send_brainstorm_message)、Skills(list_skills、skill_create、skill_list、skill_search、skill_get、skill_update、skill_delete)、Merge queue(get_merge_queue)、resolve_conflict、およびサービスヘルス(get_service_health)。

トランスポート:stdio(ローカル、両サーバーのデフォルト)と、ポート3335(デフォルト、--mcp-portで変更可能)のStreamable HTTP。後者には必須のベアラートークン(AITM_MCP_TOKENまたはconfig.mcp.httpAuthToken、フェイルクローズド — トークンなしではHTTPモードでサーバーが起動を拒否します)と、任意のTLS(--tls-cert/--tls-key)があります。このリポジトリのデフォルトの.mcp.jsonに登録されているのはaitm-coreのみ(stdio)で、aitm-extendedは別途起動します(任意で--http付き)。

例:MCPクライアントの接続(stdio)

{
  "mcpServers": {
    "aitm-core": {
      "command": "npx",
      "args": ["tsx", "src/mcp/AitmCoreMcpServer.ts", "--rest-url", "http://localhost:3333"]
    }
  }
}

例:リモートMCPクライアント(HTTP)

{
  "mcpServers": {
    "aitm-core-remote": {
      "url": "https://your-host:3335",
      "headers": { "Authorization": "Bearer <AITM_MCP_TOKEN>" }
    }
  }
}

REST API

ベースはhttp://localhost:3333、JSON形式です。ポート:3333はREST/GraphQL/UI、3334はHTTPS、3335はMCP Streamable HTTP。

エンドポイント用途
GET /api/onboardingAgentの自己初期化
GET /api/tasksTaskの一覧(projectId?、limit?)
GET /api/tasks/allページネーション/フィルター可能なTask一覧
POST /api/tasksTaskの作成
POST /api/tasks/chain依存するTaskのチェーンを作成
GET /api/tasks/:idTaskの詳細
PATCH /api/tasks/:idTaskの部分更新
DELETE /api/tasks/:idTaskの完全削除
POST /api/tasks/:id/runpendingのTaskを開始
POST /api/tasks/:id/stop単一のTaskを停止
POST /api/tasks/stop-allグローバル停止(任意のtabId/projectIdフィルター)
POST /api/projects/:projectId/tasks/stop-all1つのプロジェクトのすべてのTaskを停止
POST /api/tasks/:id/resumefailed/stopped/conflictのTaskを再開
POST /api/tasks/:id/skip特定のPipelineステップをスキップ
POST /api/tasks/:id/archive完了したTaskをアーカイブ
POST /api/tasks/:id/restoreアーカイブ済みTaskを復元(ブランチがすでにマージ済み/存在しない場合は拒否)
POST /api/tasks/:id/requeue、/reorder再キュー / キュー順序の変更
GET /api/tasks/:id/result|console|logs|pipelineTaskの結果、コンソール出力、ログ、Pipelineの状態
GET /api/archiveアーカイブ済みTaskの検索
GET /api/statusTab/プロジェクトの状態(stale-while-revalidateキャッシュ)
GET /api/projectsTab/プロジェクトの一覧
GET/PUT/PATCH /api/settings設定の読み取りと更新
POST /api/backup/createバックアップの作成
GET /api/merge/queueMerge queueの状態
GET /api/service-health監視対象サービスのヘルス
GET /api/versionサーバーのバージョン(semver、ビルド日、リリースモード)
GET /api/license/statusライセンスの状態
POST /api/license/activateライセンスの有効化(licenseKey、instanceLabel、email)
POST /api/server/restart|stopサーバーの再起動または停止
POST /graphqlナレッジエンドポイント — Contract、変数、ドキュメント

これは最もよく使われるエンドポイントを厳選したもので、完全な一覧ではありません — REST APIには、src/rest/RestApi.tsと専用ルーター(skills、contracts、DOMタグ、i18n、スクリーンショット、テストインフラ、リリースなど)にまたがって100を超えるエンドポイントがあります。

パラメータリファレンス — 最もよく使う操作

操作パラメータ
POST /api/taskstabId、projectId、title(60文字以内)、prompt(50 KB以内)、任意でpriority(low|medium|high、デフォルトはmedium)、useWorktree/usePipeline/autoMergeDev(デフォルトはtrue)、skipSteps、dependsOn、overridePreFlight
POST /api/tasks/chainPOST /api/tasksと同じ形のオブジェクトの配列 — 2番目以降の各項目には自動的にdependsOn:[previous id]が設定されます
POST /api/tasks/:id/stopreason?
POST /api/tasks/:id/resumefromStepIndex?、instructions?、skipSteps? — fromStepIndexがない場合は、最初のfailed/stoppedのステップが自動的に検出されます
POST /api/tasks/:id/skipstepIndexまたはstepName(いずれか一方が必須) — ステップはpendingであるか、実行中でないTaskのfailed/stoppedである必要があります
POST /api/tasks/:id/archiveforce?、reason? — ステータスがfinished/stopped/failed/conflictの場合のみ
POST /api/tasks/:id/restoreボディなし — アーカイブ済みTaskのみ。ブランチがすでにmergedまたはbranch-missingの場合は409
MCPツールパラメータ
create_tasktitle、prompt、tabId、projectId(必須)、任意でpriority、useWorktree、usePipeline、autoMergeDev、skipSteps[]、dependsOn[]
list_tasksstatus?、tabId?、projectId?
get_taskid
run_taskid
resume_taskid、任意でfromStepIndex、instructions、skipSteps

例:Taskの作成

curl -X POST http://localhost:3333/api/tasks \
  -H 'Content-Type: application/json' \
  -d '{"title":"Fix auth bug","prompt":"READ CLAUDE.md first...","tabId":"ctm","projectId":"ctm-dashboard","priority":"high","useWorktree":true,"usePipeline":true,"autoMergeDev":true}'

注:titleは最大60文字、promptは最大50 KBです。useWorktree/usePipeline/autoMergeDevのデフォルトはtrue、priorityのデフォルトはmediumです。

例:依存するTaskのチェーン

curl -X POST http://localhost:3333/api/tasks/chain \
  -H 'Content-Type: application/json' \
  -d '[
    {"title":"Add DB column","prompt":"...","tabId":"ctm","projectId":"ctm-dashboard"},
    {"title":"Use column in API","prompt":"...","tabId":"ctm","projectId":"ctm-dashboard"}
  ]'

2番目以降の各項目には自動的にdependsOn:[previous id]が設定されるため、2番目のTaskは最初のTaskがdevにマージされるまで待機します。

例:Taskの停止と再開

curl -X POST http://localhost:3333/api/tasks/42/stop \
  -H 'Content-Type: application/json' -d '{"reason":"manual stop"}'

curl -X POST http://localhost:3333/api/tasks/42/resume \
  -H 'Content-Type: application/json' -d '{}'

ヒント

  • ローカル(同一マシン)での連携にはstdioトランスポートを使いましょう — よりシンプルで、トークンも不要です。
  • リモートアクセスでは、必ずAITM_MCP_TOKENを設定してください — これがないとサーバーはフェイルクローズドとなり、HTTPモードで起動を拒否します。
  • Contractや変数の探索には、/graphqlを手作業で呼び出すよりもaitm-extendedのツールを使うことをお勧めします。
  • GET /api/statusはキャッシュから即座に応答し、バックグラウンドで更新されます — 常に最新の状態を反映しているとは限りません。