AIコーディングエージェントは同時に多くの会話を処理します。ユーザーからのプロンプトだけでなく、エージェントはIDEともやり取りし、差分を表示したり、ファイルに変更を加える前に確認を求めたりします。同時にツールとも通信し、失敗したビルドを取得したり、データベースをクエリしたりします。
2つのオープンなプロトコルがこれらの会話を標準化しています。このガイドでは、ACPとMCPを実際的な観点から比較します。それぞれのプロトコルが何を行い、いつ適用されるかを解説します。
ACP(Agent Client Protocol)はコードエディタとAIコーディングエージェントを接続します。MCP(Model Context Protocol)はそのエージェントをツールやデータに接続します。「vs」という表現は選択を意味しますが、それらは補完的なレイヤーであり、両方を同時に実行するのが一般的です。
Agent Client Protocol(ACP)とは?
ACPは、コードエディタとAIコーディングエージェントを接続するオープンスタンダードです。共有プロトコルがなければ、すべてのエディタがすべてのエージェントに対してカスタム統合を構築し、すべてのエージェントがすべてのエディタのAPIを実装することになります。新たなエディタやエージェントが登場するたびに、グルーコードが倍増します。
ACPでは、両側が1つのプロトコルを実装するだけで、任意のACPエージェントが任意のACPエディタで動作します。Language Server Protocol(LSP)は、1つのオートコンプリート・診断サーバーをすべてのエディタで動作させる標準であり、言語ツールでも同様のことを実現しました。ACPはその考え方をエージェントに適用します。
開発者にとっての実用的なメリットは、エージェントの選択とエディタの選択が分離できる点です。今日ZedでGemini CLIを実行し、明日Gooseを試すことができ、エディタ、キーバインド、ワークフローを維持できます。逆方向も可能です。エージェントをすでにチューニング済みであれば、それを手放さずにZedからNeovimに移行できます。
ターミナルエージェントにも利点があります。スクロールバックで差分を凝視する代わりに、エージェントが提案した変更をエディタのネイティブ差分ビューで確認でき、シンタックスハイライトや通常の承認・却下フローを利用できます。
ACPの仕組み
仕組みは言語サーバーと同様のパターンに従います。エディタはエージェントをサブプロセスとして起動し、子プログラムを開始・所有します。両者はJSON-RPCメッセージを交換します。これは、名前付きリクエストとレスポンスをJSONとして送信するための規約です。エディタとエージェントは、すべてのプログラムが持つプレーンテキストの入出力ストリームであるstdio上で通信します。
このトランスポートの上では、セッション単位で作業が行われます。エディタはセッションを開き、開発者からの各プロンプトをターンとして送信します。エージェントは作業の進行状況をストリーミングで返します。これにより、エディタは2分間沈黙してから結果を返すのではなく、リアルタイムで進行状況を表示できます。
接続は双方向で動作し、これがコードをチャットウィンドウに貼り付ける方法よりもACPが優れている点です。エージェントはエディタの未保存バッファを読み取れるため、実際に表示しているコードに対して作業でき、ディスク上の古いコピーではありません。編集を行う前に権限を要求する必要があるため、すべての変更でユーザーがループに残ります。また、エディタ管理のターミナルでコマンドを実行でき、出力を監視できます。エディタはエージェントが実行できることを決定し、エージェントは単独では得られないより豊かなコンテキストを取得します。
ACPはApache 2.0ライセンスでオープンに開発されています。公式エージェントディレクトリには、GoogleのGemini CLI、OpenAIのCodex CLI、BlockのGoose、CursorのCLIエージェント、GitHub Copilot CLIなど数十のエージェントが登録されています。クライアントはZedやJetBrains IDEからNeovim、Emacs、marimoノートブックまで多岐にわたります。クライアントディレクトリで完全なリストを確認できます。VS Codeにはネイティブサポートがなく、コミュニティ拡張がそのギャップを埋めています。
どのACPか?
ACPという名前を持つ無関係のプロトコルが3つあります。この記事では、上記で定義したエディタとエージェントを接続するAgent Client Protocolを扱います。ACPを調べている読者は、他の2つに出くわす可能性があります。
| プロトコル | 接続対象 | 本記事での関連性 |
|---|---|---|
| Agent Client Protocol(Zed/JetBrains) | エディタとコーディングエージェント | 本記事の主題 |
| Agent Communication Protocol(IBM/BeeAI) | エージェントとエージェント | A2Aに統合済み |
| Agentic Commerce Protocol(OpenAI/Stripe) | AIチェックアウトとマーチャント | コーディングとは無関係 |
IBMのAgent Communication ProtocolはA2A(Agent2Agent)に統合されました。これはエージェントが互いに作業を委譲できる標準です。GoogleがA2Aを作成し、後にLinux Foundationに移管しました。エージェント間の委譲は独自のレイヤーであり、ACPもMCPもカバーしていません。
Model Context Protocol(MCP)とは?
MCPは、AIアプリケーションやエージェントをツールやデータに接続するオープンスタンダードです。Anthropicが作成し、後にLinux Foundation傘下のAgentic AI Foundationに寄贈されました。
MCPサーバーは、エージェントがアクセスすべきもの(CIシステム、データベース、課題トラッカーなど)をラップします。サーバーはstdio経由でローカルに、またはHTTP経由でリモートに実行されます。各サーバーはMCPクライアント(接続の反対側にあるエージェントまたはAIアプリ)に3つのプリミティブを公開します。
- Tools: モデルが呼び出せるアクション
- Resources: 読み取れるデータ
- Prompts: 再利用可能なテンプレート
採用は広く、ChatGPT、Claude、Cursor、Gemini、Microsoft Copilot、VS CodeはいずれもMCPサポートを搭載しており、公式レジストリには数千のサーバーが登録されています。MCPはエージェントにCI/CDアクセスを提供する唯一の方法ではありません。MCP vs CLIの比較でそのトレードオフを解説しています。
例えばCircleCI MCP serverはCircleCIをラップします。これを接続すると、エージェントは「最新のビルドが失敗した理由は?」という質問に対して、サーバーのget_build_failure_logsツールを呼び出して実際のログを読み取ることで回答できます。同じサーバーはフレイキーテストの検出、.circleci/config.ymlの検証、ワークフローの再実行も行います。ドキュメントにはCircleCI MCPサーバーで利用可能なすべてのツールが記載されています。
ACP vs MCP: 主な違いとそれぞれの使い所
| ACP(Agent Client Protocol) | MCP(Model Context Protocol) | |
|---|---|---|
| 接続対象 | エディタとコーディングエージェント | エージェントとそのツール・データ |
| 解決する質問 | どのエージェントをどのエディタで使うか? | エージェントは何に触れられるか? |
| エージェントの役割 | エディタにサービスを提供 | ツールを消費 |
| 作成元 / ガバナンス | Zed; ZedとJetBrainsの共同ガバナンス | Anthropic; Agentic AI Foundationがガバナンス |
| ワイヤフォーマット | JSON-RPC over stdio | JSON-RPC over stdioまたはHTTP |
| コア操作 | セッション、プロンプトターン、ストリーミング更新、権限リクエスト、差分 | ツールコール、リソース読み取り、プロンプトテンプレート |
| 類推 | エージェント向けのLSP | AIツール向けのUSB-C |
エージェントは2つのプロトコルの間に位置し、各会話の方向が重要な違いです。
- ACPでは、エディタが質問し、エージェントが回答します。プロンプトが入力され、進行状況と差分がストリーミングで返されます。
- MCPでは、エージェントが質問し、サーバーが回答します。ツールを呼び出し、サーバーが結果を返します。
2つのプロトコルは連携するよう設計されています。ACPはMCPのJSON表現を可能な限り再利用し、特に差分(エディタがエージェントの提案変更をレビュー用にどのようにレンダリングするか)などエディタUX向けのカスタム型を追加しています。
エージェントの実行場所によって、どのプロトコルが関連するかが決まります。エージェントはコマンドラインから実行されているかエディタ内で実行されているかに関わらず、ほぼどこからでもMCPサーバーにアクセスできます。ただしACPはエディタが関与する場合にのみ関連します。エージェントをどこから呼び出しているかを考えてください。
- ターミナル内のエージェント(Claude Code、Codex CLI): ACPはスタックに含まれません。エージェントがエディタ内で実行される場合にのみ意味を持ちます。MCPはどちらの場合も適用されます。
- エディタ内のエージェント(ZedまたはJetBrains IDE): これらのエディタ内では、ACPがエージェントをIDEの機能に接続する方法です。MCPはそれらのエージェントが到達できるものを表します。
- VS CodeまたはCursor: どちらのエディタもACPエージェントをネイティブにホストしていませんが、Cursor独自のCLIはACPエージェントであり、他のエディタで実行可能です。MCPは完全に適用され、どちらもファーストクラスのMCPサポートを備えています。
ACPはMCPの置き換えか?
いいえ。異なるレイヤーで動作し、重複しません。ACPはエディタとエージェントの会話を標準化します。セッション、プロンプト、編集、権限です。MCPはエージェントとツールの会話を標準化します。ツールコールとリソースです。両方を同時に実行するのが一般的です。両方に影響を与えたもう1つのプロトコルがあります。
LSPの位置づけ
ACPとMCPはともに、Language Server Protocolからコアアイデアを借用しています。LSPは言語ツールに対して同じ配線の問題を解決しました。プロトコルを1度実装すれば、任意の言語サーバーが任意のエディタで動作します。MCP仕様はこれを直接引用し、「Language Server Protocolから着想を得ている」と述べています。ZedもACPについて同様に述べています。
LSP、MCP、ACPを並べてみると、同じパターンが繰り返されています。すべてがJSON-RPCを話し、それぞれが単一の関係をアンバンドルします。
- LSPはエディタに言語インテリジェンス(補完、診断、定義ジャンプ)を提供します。
- ACPはそのエディタにコーディングエージェントを配置します。
- MCPはエージェントにツールとデータを渡します。
LSPはエージェントスタックにおいても役割を果たします。エージェントがテキストをgrepするのではなく、コンパイラ級のコードインテリジェンスを取得する方法です。
ACPとMCPを併用する
全体像は1行で表せます。ACPはエディタをエージェントに接続し、MCPはそのエージェントをツールに接続します。
実用的な疑問の1つは、エージェント内で設定されたMCPサーバー(CircleCIサーバーなど)がエディタへの移動後も存続するかどうかです。存続します。ツールはどちら側からも到達可能です。Claude Codeのようなエージェントハーネス内でMCPサーバーを設定している場合、それをACPに接続すれば、そのMCP設定をエディタに持ち込めます。エージェント内で設定されたサーバーはエージェントとともに移動します。
エディタも独自のサーバーを転送できます。セッション開始時に、ACPクライアントは設定済みのMCPサーバーを、セッションを開くためにエディタが送信するリクエストであるsession/newのmcpServersパラメータを通じてエージェントに渡します。
セキュリティは両プロトコルにまたがります。MCPツールはエージェントが実行できるコードだからです。ローカルサーバーは環境変数で認証するため、狭いスコープのトークンが組織管理者トークンより優れています。クライアントの権限プロンプトがガードレールであり、エージェントがエディタ内で実行される場合、ACPがそれらのプロンプトを画面に伝えます。
結論
ACPとMCPは同じスタックの異なるレイヤーを占めています。ACPはどのエージェントがエディタで実行され、エディタがその提案変更をどのようにレビューするかを扱います。MCPは、そのエージェントが何に触れられるかを扱います。ターミナル内のエージェントにはMCPのみが必要ですが、エディタに移動した瞬間、両方のプロトコルが関与します。
違いを最も早く感じる方法は、スタックを実行することです。ZedまたはJetBrains IDE内のACPエージェント、CircleCI MCP server、そして最後のビルドに関する1つの質問です。CircleCIの無料アカウントにサインアップして、今すぐビルドを始めましょう。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.