MCP連携
AnyyはProfileとそのプロジェクト設定を使い、ローカルのstdioコマンドとリモートHTTP MCPサーバーに接続します。各サーバーに有効設定、接続設定、ツール公開方式があります。追加は既定で有効な遅延設定を保存するだけで、プローブやツール一覧の選択は求めません。無効で保存するには--disableを使います。
接続の前提条件
クライアントの対応トランスポートはstdioとStreamable HTTP(http)です。独立したsseトランスポートは拒否されますが、HTTPはStreamable HTTPの一部としてイベントストリームを扱えます。リモートエンドポイントは、ループバックHTTP URLを除きHTTPSが必要です。
stdioでは、Anyyを実行するマシンにサーバー実行ファイルと依存関係をインストールします。npxコマンドにはそのマシン上のNode.js/npmが必要です。Anyyはこれらのランタイムを同梱せず、サーバーのインストールもしません。継承されるプロセス環境はPATHとHOMEなどに限られるため、他の必要値はサーバーのenvで明示します。HTTPサーバーにローカルNode.jsは不要です。
Profileとプロジェクトの設定
全体のサーバー定義はProfileのconfig.yamlのmcp.client.serversにあります。プロジェクトファイルはそのProfileの正規Workspace内の.anyy/mcp.json(現在は<ProfileHome>/workspace/.anyy/mcp.json)です。会話の切り替えやSession作業ディレクトリの変更で別のプロジェクトファイルが選ばれることはありません。
プロジェクトファイルはmcpServersオブジェクトを使います。
{
"mcpServers": {
"context": {"enabled": false, "exposure": "deferred"},
"project-docs": {"url": "https://mcp.example.com", "exposure": "codemode"}
}
}
完全なプロジェクト定義は、同名のProfile定義を置換します。command、url、typeがない項目は部分上書きで、同名のProfileサーバーが必要です。含められるのはenabled、exposure、toolExposureだけです。指定値は継承値を置換し、toolExposureは順序付き規則オブジェクト全体を置換します。認証を含む他フィールドはProfile定義から継承します。完全なプロジェクト定義ではプロバイダーのauth参照を設定できません。
anyy mcp show SERVER_IDで選択された設定ソースとプロジェクト上書きを確認します。不正なプロジェクト設定は、黙って別定義になるのではなく設定診断に表示されます。
プロジェクト定義を追加・削除する
anyy mcp add project-docs --local --url https://mcp.example.com
anyy mcp remove project-docs --local
--local(または-l)はこのProfileのプロジェクトファイルだけに書き込みます。addは--forceなしで同名項目を置換し、removeはその項目だけを削除してProfile定義と保存済み許可を保持し、項目がなければエラーを報告します。このファイル編集は実行中サーバーを再接続しません。起動または待機中のsession.reloadが新定義を読み込みます。同名上書きを削除するとProfile定義が再び使われます。--localなしでは通常のProfile動作になります。
値とパス
通常のadd/configure/setとDashboard保存は、機密らしい環境変数名、ヘッダー名、OAuthクライアントシークレットであっても入力文字列をそのまま保存します。自動でSecret参照にはしません。既存のAnyy管理シークレットには明示的なsecret:参照を使います。通常文字列には下記の式の動作が残ります。
値の式を使うのはstdio環境値、HTTPヘッダー値、OAuthのclientSecretだけです。$VARと${VAR}はAnyyプロセス環境を読み、$$は文字どおりの$、$!は文字どおりの!になります。!で始まる値はローカルシェルコマンドを実行し、前後空白を除いた出力を使います。評価は1回だけで、展開した値を再評価しません。コマンドはAnyyのプロセス作業ディレクトリで実行され、上限は10秒と出力1 MiBです。
Profile定義では、正確な接頭辞env:、secret:、file:で始まる値は既存の認証情報リゾルバーが先に解決し、その結果が最終です。完全なプロジェクト定義では接頭辞は文字どおりの文章です。部分上書きはProfile定義の解釈を継承します。URLやclientId、scope、callbackUrlなど他のOAuthフィールドは式を使いません。
コマンドと引数のパスは先頭の~を展開し、cwdはホーム相対やWorkspace相対パスにも対応します。$や!の式は実行しません。stdioの作業ディレクトリは、通知するWorkspaceルートとも、!command用のプロセスディレクトリとも別です。
ローカルサーバーを追加する
anyy mcp add context \
--transport stdio \
--command npx \
--exposure codemode \
--args -y @upstash/context7-mcp
Anyyのオプションは--argsや--より前に置き、後の引数はサーバーへ渡します。任意の--cwd DIRはstdio用で、保存されたcwdと同じ絶対、Workspace相対、先頭ホーム形式を受け付けます。入力パスの空白は除去しません。--env KEY=VALUEを必要なだけ繰り返し、機密値にはシークレット参照を使います。ローカルサーバーはAnyyのOSアクセス権で動作します。
リモートサーバーを追加する
anyy mcp add remote-docs --url https://mcp.example.com
anyy mcp add provider-docs --url https://mcp.example.com --auth '{"provider":"provider-id"}'
anyy mcp add header-docs --url https://mcp.example.com --header Authorization=secret:mcp/header-docs/token
HTTPはプロバイダー参照もAuthorizationヘッダーもない場合、自動OAuthに対応します。匿名サーバーはサインインなしで接続できます。初期トークンがないだけで再認証が必要とは限りません。authはプロバイダーJSONオブジェクト、oauthは別の型付きオプションオブジェクトです。たとえば既存登録には--oauth '{"clientId":"registered-client"}'を渡します。旧文字列セレクターoauth、header、noneは拒否されます。
ログイン前にサーバーを保存します。
anyy mcp login remote-docs
サーバーが保存済みOAuthクライアント認証情報を拒否した場合、Anyyは拒否されたローカル認可状態を消去して1回復旧でき、再サインインを求める場合があります。ツール呼び出しは再送しません。コード交換のverifierがない場合、そのログイン試行は終了します。
ブラウザーコールバックと手動リダイレクト
anyy mcp login remote-docs --timeout 300を実行するか、Dashboardの保存済みサーバーまたはTUI設定のTools & MCPでSign inを選びます。ブラウザーで認可を完了します。ブラウザーがAnyy実行マシンに到達できなければ、アドレスバーの完全なリダイレクトURLをそのログイン入力欄へ貼り付けます。このURLは非公開に保ってください。
CLIの既定タイムアウトは300秒で、認可だけが対象です。接続確認やログイン後の再接続は含みません。最初に接続を確認し、準備済みならAlready signed inと報告します。通常の接続エラーではログインを始めません。明示CLIログインは保存済みの無効サーバーでも、ツールを有効にせず認証できます。非対話型ターミナルではブラウザーコールバックだけを待ち、貼り付けURLを読みません。
TUIはCtrl+Yで完全な認可リンクをコピーし、Escでキャンセルします。Dashboardのログインを閉じるかページを離れると、保留ログインはキャンセルされます。完了すると一時リンクと入力を消去します。
ツール呼び出しに対話的OAuth許可や追加スコープが必要なら、接続はサインイン必要と報告します。CLI、Dashboard、TUIから明示的に開始してください。失敗した呼び出しは自動更新・再送しません。キャンセルすると専用のサインインキャンセル結果でその試行を終え、裏で認可を続けることはありません。
別プロセスからのログイン
別のログインプロセスが同じProfile/サーバーの認証情報を保存すると、認証待ち接続はモデルターン開始時にそれを確認します。そのターン用に準備済みの要求は元のツール宣言を保持し、新たなツールは後の要求準備時に現れます。Anyyはバックグラウンドで認証情報をポーリングしません。手動設定編集には起動または待機中Sessionのリソース再読み込みが必要です。認証情報の変更はこの検出経路では、通常の失敗/閉じた接続を再起動しません。
サインアウト
anyy mcp logout remote-docs
設定済みの正確なServer IDを使います。現在のローカル認証情報項目を削除し接続を閉じますが、サーバー設定とキャッシュ済みツール/リソース/指示は保持します。保存項目がなければ正常な無操作です。リモートトークンは失効せず、認識される古いフォールバックには再度logoutが必要な場合があります。常駐Profileが使えればそこを使い、タイムアウトや応答失敗をオフラインのファイル変更許可とはしません。
MCPはツールカタログを定期ポーリングしません。接続、明示操作、実際のツール一覧変更通知で検出・更新します。通知接続と対応セッション復旧は維持されます。
サーバー別のconnect_timeout_msは廃止済みです。古い設定から削除してください。call_timeout_msは初期化、検出、ツール要求それぞれに適用され、接続開始全体の追加期限はありません。対象となる初期HTTP失敗は、最終接続エラー前に2回再試行する場合があります。
HTTPストリームとトークン更新
初期化後、既定HTTPトランスポートはサーバー要求と通知用に独立したGETストリームを開きます。プロバイダー認証はそのGETを含む各実際のHTTP送出時に現在トークンを取得し、Providerトークンの別MCPコピーは保存しません。この動作でDashboardやProfileのスイッチは追加されません。
HTTPクライアントは設定ヘッダーを保持し、ループバックサーバーにlocalhostのOriginを追加しません。明示設定されたOriginは上書きされません。サーバー自身のOrigin検証は引き続き適用されます。
サーバーがカーソルを提供した場合、中断イベントストリームを再開できます。GETと最後のイベントIDでそのストリームを続け、ツール呼び出しを再送しません。カーソルがなく、応答前にレスポンスストリームが終われば、その要求は失敗します。接続を閉じると復旧を停止します。
同じProfile/サーバー認証情報を使うプロセスは、トークン更新も調整し、追加更新要求前に保存トークンを読み直します。すべてのクラッシュやリース喪失からの復旧を保証するものではありません。
初期化とWorkspaceルート
サーバーの初期化結果には、文字列のprotocolVersion、オブジェクトのcapabilities、serverInfo内の文字列nameとversionが必要です。任意のinstructionsも文字列である必要があります。不正なら接続済みとせず閉じます。指示の欠落、空文字列、前後空白付きは区別し、プロンプト要約側が表示用に空白を除去します。
roots/listを要求するサーバーには、常駐Workspaceの正規ディレクトリを1つのファイルルートとして返します。このルートはMCPマネージャー作成時に固定され、会話や論理Workspaceを変えても共有接続のルートは変わりません。
ローカルstdioプロセスは既定でそのディレクトリを使います。設定cwdには絶対パス、そのディレクトリからの相対パス、先頭ホーム構文が使え、コマンド/引数パスも先頭ホーム構文に対応します。cwdの空白は保持します。プロセスcwdを変えても通知Workspaceルートは変わりません。ルートはコンテキストであり、ファイルシステム権限境界ではありません。
ツールの公開と検出
| 公開方式 | 用途 |
|---|---|
codemode | 既定。Codemodeで検出・呼び出し |
deferred | ツール検索で検出 |
direct | モデルに直接宣言 |
hidden | モデルとCodemodeの検出に公開しない |
順序付きtoolExposureオブジェクトはサーバー既定値を上書きします。完全一致名が優先し、なければ最初に一致するワイルドカードが優先します。検出プロンプトなしで設定できます。
anyy mcp configure context --exposure deferred
anyy mcp set context description 'Documentation tools'
anyy mcp set context toolExposure '{"get-*":"deferred","*":"hidden"}'
有効状態と公開設定は、選択した定義元ファイルまたは既存プロジェクト上書きに保存します。公開変更はサーバーを再接続せず宣言を更新し、有効/無効はそのサーバーだけに作用します。保存後に接続が失敗したら状態を確認してください。保存設定は残ります。
プロジェクト上書きがまだないProfileサーバーでは、anyy mcp disable SERVER_ID --projectまたはenable SERVER_ID --projectで有効状態だけをプロジェクトファイルに保存します。このオプションは完全プロジェクト定義や上書き済みサーバーには使えず、通常のenable/disableは選択ソースを使います。
configure --descriptionと--tool-exposure、汎用のset/unsetは生のProfile定義を編集します。configure --exposureや--enableと併用せず別コマンドにします。プロジェクトのtoolExposure上書きは、隠れたProfile定義ではなくプロジェクト項目を編集します。
これらのフィールドは固定されたPi v1.2 MCP設定と登録に従います。AnyyのRPC tool_exposureはRPCマップ境界でも順序を保つJSON文字列で、保存設定には順序付きtoolExposure値が1つ入ります。
MCPツールはmcp-*個人ツールセットを生成・有効化しません。通常の個人ツールセット、Role、親のツール名制限は別です。全体のmcp.client.enabled、tools.include、tools.exclude、tools.trusted、--include、--exclude、--activate-toolset、旧選択プロンプトは廃止済みです。古い設定から削除してください。無視せず拒否されます。
プロンプト内のサーバー要約
実行開始時にmcp_serversセクションを追加します。Codemodeまたは遅延検出用に設定された有効サーバーを、接続中のものも含めて一覧にします。直接のみ、非表示のみ、無効なサーバーは省略し、両検出経路のある混合サーバーはCodemodeラベルを使います。一覧は検出の手掛かりで、接続成功の受領証ではありません。
設定した説明を優先します。なければ利用可能なサーバー指示の先頭行を要約に使います。名前を整列し、要約を短くし、上限付き一覧は省略サーバー数も数えます。説明は簡潔にし、認証情報を入れないでください。
このセクションは実行の後続ツールターンでも固定です。説明、設定、新たな指示の変更は次のプロンプトで反映します。対象サーバーがなければセクションは除かれます。
ツールを確認して呼び出す
anyy mcp show context
anyy mcp probe context
anyy mcp test context
anyy mcp list
anyy mcp status --json
anyy mcp logs context
anyy mcp reload context
# If the inspected server advertises a search tool with a query field:
anyy mcp call docs.search --args '{"query":"Anyy"}'
上の呼び出しは例です。show/probeに表示された元のサーバーツール名と正確な引数を使います。モデル向けMCP名は名前空間付きで、サニタイズや衝突回避の接尾辞が付く場合があります。Codemode検出はJavaScript識別子を返します。名前を組み立てずライブ宣言を使ってください。Codemodeの検出とツール検索を参照してください。
anyy mcp reloadは読み込み済み設定で再接続し、編集ファイルを読み直しません。起動と待機中Sessionのsession.reload RPCはProfile/プロジェクトファイルを読み直します。独立MCPファイル監視はありません。変更の適用を参照してください。
プローブは任意で、保存や有効化の必須条件ではありません。単一のtools一覧にはname、visible_name、description、exposure、offeredが含まれます。offeredは現在サーバーが提供しているという意味で、承認結果ではありません。準備済み呼び出しは実行時に現在サーバーと提供状況を解決します。
新しい直接呼び出しはツールの現在JSON Schemaで検証します。設定置換前に準備された呼び出しは宣言スキーマと検証済み引数を保ち、実行時に現在サーバーを解決します。置換は古い実行中接続を閉じ、新サーバーへ再送しません。選択したモデルツールとanyy mcp callは書き込みも含め直接実行します。Profile所有権、サーバー認証、認証情報保護、通常のツール名制限は適用されます。旧承認/実行ポリシーキーは引き続き拒否します。
リソースとテンプレート
共通リソースツールは3つあります。
| ツール | 入力 | プログラム向け結果 |
|---|---|---|
list_mcp_resources | 任意のserver、cursor | resources、任意のserver、nextCursor、errors |
list_mcp_resource_templates | 任意のserver、cursor | resourceTemplates、任意のserver、nextCursor、errors |
read_mcp_resource | 必須server、uri | {server, uri, contents} |
サーバーを指定して1ページを一覧し、次はnextCursorを渡します。サーバー省略では対象サーバーの全ページを取得します。カーソルにはサーバー指定が必要です。統合一覧は成功結果を保ち、失敗サーバーをerrorsで示します。単一サーバーの失敗は呼び出しをrejectします。
対象はリソース能力を報告し、サーバー公開が非hiddenの有効サーバーです。共通ツールは対象の最も広い公開方式、direct、次にcodemode、次にdeferredを使います。能力判明後に表示し、撤回時には登録済み定義を隠します。リソース一覧は起動時ではなく呼び出し時に取得します。
読み取りは完全なプログラム向けJSONを保持します。モデル出力はテキスト、画像、保存ファイル参照を使い、長文には共通の20 KiB上限を適用します。MCP App UIリソースは一覧から除きます。配信失敗で成功済みのリソース読み取りを繰り返しません。
旧サーバー別リソース/プロンプトツール名とtools.resources/tools.promptsスイッチは廃止済みです。falseやnullでも存在すると拒否されるため削除します。状態にはresources_advertised、prompts_advertised、server_capabilitiesを残し、旧enabled/posture/countフィールドは除去します。生のSDKプロンプトメソッドは、生成AgentツールではなくプロトコルAPIのままです。
別のMCPクライアントをAnyyに接続する
anyy mcp serveは常駐アシスタントの会話、メッセージ、イベントのインターフェースをstdioで公開します。既定ツールはconversations_list、conversation_get、messages_read、events_poll、events_wait、messages_sendです。
mcp.server.scopesはconversationsとmessagingだけに対応します。省略すると両方、[]ではツールなしです。承認一覧/応答ツールは削除済みです。旧approvalsスコープ、未実装スコープのプレースホルダー、廃止したexpose_approvals/expose_toolsキーは拒否します。操作は引き続き既存Gateway RPCを通ります。
会話結果API
messages_sendが受け付けるのはsession_idとtextだけです。
{"session_id":"ses_example","text":"Summarize my tasks"}
session.submitで入力を受理し、execution.awaitを元のsubmission_idで呼びます。結果のJSONテキスト内容には次が含まれます。
| フィールド | 意味 |
|---|---|
submission | 元の受理記録。submission_idを含む |
execution | その入力の実際の呼び出しに対して観測した状態と結果 |
messages | その呼び出しの記録参照から読み込んだ順序付き結果メッセージ |
timed_out | 結果が利用可能になる前に観測期限が切れたか |
同じSessionの後続プロンプトがこれらのメッセージを置換することはありません。messages_readは履歴照会で、代わりの回答ソースにはなりません。通常の保護と添付処理は適用されます。
成功完了または実際の確認待ち中断ではMCP結果がisError=falseです。suspendedは確認ハンドルを保ち、アシスタントが入力を必要としている状態で、最終回答ではありません。失敗、中断、入力消去、タイムアウト、非最終状態はisError=trueです。待機レーンが成功なのはoutcome=succeededの場合だけです。
Gateway RPCを直接使うクライアントは、受理時の両IDを保持します。
{"execution_id":"exec_example","submission_id":"sub_example","timeout_ms":30000}
execution.awaitは{execution, submission_id, timed_out, messages}を返します。待機は元の予約/選択実行と復旧の系統を追い、入力選択前の準備失敗も含みます。未選択入力を消去すると、outcome=interrupted、stop_reason=input_cleared、結果メッセージなしで解決します。待機でキュー入力が有効化されることはありません。
タイムアウトはtimed_out=trueと空のmessagesを返します。タイムアウトや呼び出し元キャンセルは観測だけを終え、受理済み作業は続きます。execution_idだけでは再利用レーンを観測するだけで、特定の送信プロンプトの結果は識別しません。タイムアウトした要求を再送する前にセッションを確認します。
無効化と削除
anyy mcp disable context
anyy mcp remove context
無効化は設定を保持します。Profile設定内のMCPサーバー定義を削除すると、その定義とAnyy管理の認証情報が削除されます。remove --localはプロジェクト項目だけを消し許可を保持します。通常の個人ツールセットは保持されます。Profile内のMCPサーバー定義に対する操作の--forceはスクリプトでの置換/削除を確認するもので、Profile所有権や認証情報処理は回避しません。
トラブルシューティング
| 問題 | 確認する項目 |
|---|---|
| ローカルサーバーが起動しない | コマンド、引数、実行ファイル、環境 |
| リモートサーバーが未認可 | プロバイダー参照、OAuth状態、保護ヘッダー |
| ツールが利用できない | サーバーの有効状態、公開方式、現在の提供状況 |
| ツールスキーマが変わった | 現在の定義を確認し、有効な引数で再試行 |
| ランタイムが古いファイル内容を表示する | 待機中Sessionの再読み込みか再起動で設定を読み直し、選択ソースを確認 |
フォームと確認操作はDashboardのMCPを参照してください。
結果と添付ファイル
プログラム向け結果は、structuredContent内のnull、false、数値、文字列、配列を含む受理済みMCP値を保持します。contentブロックがあれば、そのブロックをモデル内容に変換し、structuredContentを別途追加しません。content配列が空でstructuredContentがあれば、そのJSONをモデル用テキストブロックにします。この代替テキストにも通常の認証情報保護と20 KiB出力処理を適用します。出力スキーマは宣言されるプログラム向け戻り値に作用し、リモート構造化結果をローカル検証ゲートにはしません。モデル内容はテキストと画像の順序を保ちます。音声や未知ブロックにはPiのテキストプレースホルダーを使い、埋め込みリソースはテキスト/画像または保存バイナリになります。20 KiB超のテキストは保存した全文と先頭/末尾表示を使います。
resolveされたリモートisErrorもエラー結果です。トランスポートやJSON-RPC例外は呼び出しをrejectします。画像/保存ファイル配信は既存のSession所有Artifact経路を使い、順序を保ち、配信失敗でリモート呼び出しを繰り返しません。テキストは保存前に保護します。変換が完了待ちをする前に全ブロックの保存が始まるため、不正ブロックで変換がrejectされても、開始済み保存が完了する場合があります。
通常のネットワーク失敗ではツール呼び出しを自動再送しません。期限切れセッションの復旧は別のケースです。OAuth登録、トークン更新、トランスポート要件は外部サービスによって異なります。依存する前に実際の接続とツール結果を確認してください。