概要
コードモードでは、AIエージェントがツールを1つずつモデル経由で呼び出す代わりに、複数の MCP ツールを呼び出す短いプログラムを1つ実行します。トークンとラウンドトリップを節約できる理由、効果がある場合とない場合、そして AnythingMCP での動作方法(保存済みコードツール、インラインコード、エージェントによる提案を、分離されたランナーで実行)を解説します。
TL;DR: 通常の MCP では、AIエージェントはツールを1つ呼び出し、結果をすべて読み、判断して、次のツールを呼び出す、という流れを繰り返します。各ステップはモデルを経由するラウンドトリップであり、途中の結果はすべてモデルのコンテキストウィンドウを通過します。コードモードでは、エージェント(または管理者が事前に)短い JavaScript プログラムを書き、その中で呼び出しを行い、結果を絞り込み・結合して、答えだけを返します。AnythingMCP では、このプログラムは分離されたランナー内で実行され、呼び出し元がすでに使用を許可されている MCP ツール以外には何にもアクセスできません。コードモードはセルフホスト版 AnythingMCP の v0.52.0 以降で利用でき、AnythingMCP Cloud では近日公開予定です。有効にするまではオフになっています。
課題:ツール呼び出しがモデルを経由する
営業責任者が、CRM と ERP に接続されたアシスタントに次のような質問をするとします。
「未払いの期限超過請求書が残っているお客様の、進行中の見積はどれですか?」
ステップごとにツールを1回呼び出す方式では、エージェントは次のように動きます。
- CRM を呼び出して進行中の見積を一覧取得し(たとえば40件)、40件すべてをコンテキストに読み込む。
- 顧客ごとに ERP を呼び出して未払いの請求書を調べる。さらに40回の呼び出しと、コンテキストに40件の結果が加わる。
- それらを頭の中で突き合わせて、答えを書く。
呼び出しのたびに1ターンが発生します。モデルが呼び出しを書き、クライアントが実行し、結果がモデルに戻り、モデルがそれを読んで次の呼び出しを書きます。答えに必要なのはせいぜい5行なのに、完全な結果がコンテキストに残り続けます。その結果、トークン(モデルが読むものはすべて課金対象で、コンテキストウィンドウも消費します)、時間(数十ターン)、精度(40件のリストを読んで比較する場面はモデルが間違えやすい部分です)の面でコストがかかります。
発想:代わりにモデルにプログラムを書かせる
言語モデルは短いプログラムを書くのが得意です。そこでエージェントは、自分で呼び出しを行う代わりに、プログラムを1つ書きます。
const quotes = await amcp.run('crm_list_open_quotes', {});
const overdue = [];
for (const q of quotes) {
const invoices = await amcp.run('erp_open_invoices', { customer: q.customerId });
const late = invoices.filter((i) => i.dueDate < new Date().toISOString().slice(0, 10));
if (late.length) overdue.push({ quote: q.number, customer: q.customerName, overdueInvoices: late.length });
}
return overdue;
ツール名は説明用の例です。実際には、お使いのコネクタのツールになります。
プログラムはツールのすぐ隣で実行されます。40件の見積レコードと40件の請求書リストがモデルのコンテキストに入ることはなく、返されたリストだけが入ります。41ターンが1ターンになります。この考え方は2025年に「code mode」や「code execution with MCP」といった名前で広まりました。AnythingMCP では、これをゲートウェイの統制された機能として実装しています。
| ステップごとに1回のツール呼び出し | コードモード | |
|---|---|---|
| モデルを経由するターン数 | 呼び出しごとに1回(例では41回) | 1回 |
| コンテキストに入るもの | 途中の結果すべて | プログラムとその戻り値 |
| ループ、フィルタ、結合 | モデルが読んで処理 | コードが正確に処理 |
| 向いている用途 | 単発の検索、判断が必要なステップ | 反復的で機械的な複数ステップの作業 |
AnythingMCP での3つの形態
保存済みコードツール。 管理者がプログラムを一度書き、ツールとして保存します。たとえば customer_overview(customer) は、ERP と CRM を読み取り、1つのサマリーを返します。AIクライアントから見れば通常の MCP ツールであり、一覧に表示され、ロールごとに権限が設定され、監査されます。エージェントはそれを呼び出すだけです。最初のコードツールを作成する。
インラインコード(code_execute)。 有効化されているサーバーでは、エージェントがその場でプログラムを書いて実行できます。対象はユーザーが使用を許可されているツールです。常に読み取り専用で、常に呼び出し元自身の権限で実行されます。
提案(code_propose_tool)。 エージェントが残す価値のある複数ステップのパターンに気づいたとき、それを保存済みコードツールとして提案できます。提案は何も実行せず、何も作成しません。管理者がプログラムを確認し、Create tool をクリックします。提案の承認方法。
安全性を守る仕組み
モデルが書いたコードは、構造上、信頼できないものです。プロンプトインジェクションを含むツール結果によって、モデルが書く内容が誘導される可能性があるためです。そのため AnythingMCP は、それを自身のプロセス内では決して実行しません。実行はすべて、別の code-runner サービスに送られ、1回の実行ごとに1つの厳重に制限されたサブプロセスが使われます。ネットワーク、ファイルシステム、環境変数、シークレットはありません。外に出る唯一の手段は amcp.run で、ゲートウェイは呼び出し元のロールに基づいて応答し、直接のツール呼び出しと同じ読み取り/書き込みルールを適用します。すべての実行と、その中のすべてのツール呼び出しが監査ログに記録されます。詳しいモデルは AIエージェントのための安全なコード実行 をご覧ください。
コードモードが役立つ場合と役立たない場合
役立つのは、作業が機械的で反復的な場合です。たとえば、100件の商品に対する同じ検索、2つのシステムにまたがる合計、請求書と注文の照合、毎回同じ5回の呼び出しが必要なレポートなどです。3つのレシピをご覧ください。
役立たないのは、呼び出しが1回だけの場合(1回の呼び出しをプログラムで包んでも、ステップが増えるだけです)、または、読んだ内容に応じてステップごとにモデルの判断が必要な場合(「この契約書を読んで、次に何を確認するか決める」など)です。書き込みは意図的に制限されています。インラインコードは決して書き込みを行わず、保存済みコードツールが書き込みツールを呼び出せるのは、Enterprise で管理者が許可した場合のみです。
提供状況と制限
| セルフホスト版(v0.52.0+) | AnythingMCP Cloud | |
|---|---|---|
| コードモード | 利用可能、デフォルトではオフ | 近日公開 |
| 要件 | code-runner サービス、および MCP サーバーごとにコードモードを有効化 | – |
v0.52 で発表されたエディションごとの内容は次のとおりです。
| Community | Starter | Team | Enterprise | |
|---|---|---|---|---|
| 保存済みコードツール | 3 | 5 | 20 | 無制限 |
| インラインコードとエージェントによる提案 | – | – | ✓ | ✓ |
| 書き込み可能なコードツール、「run as definer」 | – | – | – | ✓ |
1回の実行は、10秒、500回のツール呼び出し(同時16回まで)、返却データ1 MB までに制限されています。コードツールは、ワークスペース自身の MCP サーバーでのみ提供され、ディレクトリ型AIクライアントが使用する共有の /mcp エンドポイントでは提供されません。プランを比較する。
FAQ
コードモードは MCP の代替ですか? いいえ。MCP ツールの使い方の1つです。プログラムは、エージェントが直接呼び出せるのと同じツールを、同じゲートウェイと権限を通じて呼び出します。
どのAIクライアントが対応していますか?
すべてです。保存済みコードツールは通常の MCP ツールであり、code_execute はプログラムを引数として受け取る通常のツールです。Claude、ChatGPT、Copilot、Gemini、Cursor のいずれも、両方を呼び出せます。
使える言語は?
JavaScript で、async 関数の本体として記述します。インポートやパッケージは使えません。プログラムで使えるのは amcp と言語そのものだけです。
どのくらい節約できますか? タスクによって大きく異なります。単発の検索では何も節約できません。途中の結果を数十件もコンテキストに読み込むようなタスクでは、戻り値だけがモデルに返されるため、それらのトークンとターンの大半を節約できます。
関連記事
- 最初のコードツールをステップごとに作成する:ERP の注文と CRM のアカウントを1回の呼び出しで
- AIエージェントのための安全なコード実行:分離されたランナーの仕組み
- コードモードのレシピ:月次売上、請求書の照合、100件の価格検索
- エージェントがコードツールを提案し、管理者が承認する
- MCP とは?
- MCP のガバナンス、ユーザーロールと権限
このガイドは役に立ちましたか?