ACP vs MCP: エージェント型コーディングにおける違いとは?
Content Marketing Manager
AI コーディングエージェントは、同時に多くの対話を行っています。ユーザーからプロンプトを受け取るだけでなく、IDE とも対話し、差分を表示したり、ファイルに手を加える前に確認を求めたりします。さらに同時に、失敗したビルドを取得したりデータベースにクエリを実行したりと、ツールとも対話しています。
こうした対話を標準化するのが、2 つのオープンプロトコルです。このガイドでは ACP と MCP を実務の観点から比較し、それぞれのプロトコルの役割と使いどころを解説します。
ACP (Agent Client Protocol) はコードエディターと AI コーディングエージェントをつなぎます。MCP (Model Context Protocol) は、そのエージェントをツールやデータにつなぎます。「vs」という表現はどちらかを選ぶ必要があるように聞こえますが、両者は補完し合うレイヤーであり、同時に使うのが一般的です。
Agent Client Protocol (ACP) とは?
ACP は、コードエディターと AI コーディングエージェントをつなぐオープン標準です。ACP が解決するのは接続の問題です。共通のプロトコルがなければ、エディターはエージェントごとに独自の連携を作り、エージェントはエディターごとに API を実装しなければなりません。エディターやエージェントが 1 つ増えるたびに、つなぎ込みのコードが膨れ上がっていきます。
ACP を使えば、双方が 1 つのプロトコルを実装するだけで、どの ACP 対応エージェントもどの ACP 対応エディターでも動作します。Language Server Protocol (LSP) は、1 つの補完・診断サーバーをあらゆるエディターで使えるようにする標準で、言語ツールに対して同じことを実現しました。ACP はこの考え方をエージェントに当てはめたものです。
開発者にとっての実際のメリットは、エージェントの選択とエディターの選択を切り離せることです。今日は Zed の中で Gemini CLI を動かし、明日は Goose を試す。その間ずっと、エディターもキーバインドもワークフローもそのままです。逆方向もできます。使い込んだエージェントを手放すことなく、Zed から Neovim に乗り換えられます。
ターミナルで動くエージェントにもメリットがあります。スクロールバックの中で目を凝らして差分を追う代わりに、エディターのネイティブな差分ビューで、シンタックスハイライト付きのまま、いつもの承認・却下の流れでエージェントの変更案をレビューできます。
ACP の仕組み
仕組みは言語サーバーと同じパターンです。エディターはエージェントをサブプロセス (エディターが起動して管理する子プログラム) として起動し、両者は JSON-RPC メッセージをやり取りします。JSON-RPC は、名前付きのリクエストとレスポンスを JSON で送り合うための規約です。エディターとエージェントは、あらゆるプログラムが持つプレーンテキストの入出力ストリームである stdio を介して通信します。
このトランスポートの上で、作業はセッション単位で進みます。エディターがセッションを開き、開発者のプロンプトを 1 つずつターンとして送信します。エージェントは作業しながら進捗の更新をストリーミングで返します。そのため、エディターは 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) に統合されました。A2A は Google が作成し、後に Linux Foundation に移管されました。エージェント間の委任はそれ自体が独立したレイヤーであり、ACP も MCP もカバーしていません。
Model Context Protocol (MCP) とは?
MCP は、AI アプリケーションやエージェントをツールやデータにつなぐオープン標準です。Anthropic が作成し、後に Linux Foundation 傘下の指定基金である Agentic AI Foundation に寄贈しました。
MCP サーバーは、CI システム、データベース、課題トラッカーなど、エージェントにアクセスさせたいものをラップします。サーバーは stdio を介してローカルで、または HTTP を介してリモートで動作します。各サーバーは、あらゆる MCP クライアント (接続の反対側にいるエージェントや AI アプリ) に対して 3 つのプリミティブを公開します。
- ツール: モデルが呼び出せるアクション
- リソース: モデルが読み取れるデータ
- プロンプト: 再利用可能なテンプレート
MCP は幅広く採用されています。ChatGPT、Claude、Cursor、Gemini、Microsoft Copilot、VS Code はいずれも MCP をサポートしており、公式レジストリには数千のサーバーが登録されています。エージェントに CI/CD へのアクセスを与える方法は MCP だけではありません。そのトレードオフについては、MCP と CLI の比較で解説しています。
たとえば CircleCI MCP サーバーは CircleCI をラップしています。これを接続すると、エージェントは「最新のビルドが失敗したのはなぜ?」という質問に対し、サーバーの get_build_failure_logs ツールを呼び出して実際のログを読み、答えられます。同じサーバーで、不安定なテストの検出、.circleci/config.yml の検証、ワークフローの再実行も行えます。CircleCI MCP サーバーで使えるツールの一覧はドキュメントに掲載されています。
ACP と MCP の主な違いと使い分け
| ACP (Agent Client Protocol) | MCP (Model Context Protocol) | |
|---|---|---|
| 接続するもの | エディターとコーディングエージェント | エージェントとそのツールやデータ |
| 答える問い | どのエージェントを、どのエディターで使うか? | エージェントは何にアクセスできるか? |
| エージェントの役割 | エディターに仕える | ツールを利用する |
| 作成者 / ガバナンス | Zed。Zed と JetBrains が共同で管理 | Anthropic。Agentic AI Foundation が管理 |
| ワイヤーフォーマット | stdio 上の JSON-RPC | stdio または HTTP 上の JSON-RPC |
| 主な操作 | セッション、プロンプトのターン、ストリーミング更新、許可リクエスト、差分 | ツール呼び出し、リソースの読み取り、プロンプトテンプレート |
| たとえるなら | エージェント版の LSP | AI ツール版の USB-C |
エージェントは 2 つのプロトコルの間に位置しており、重要な違いはそれぞれの対話の向きにあります。
- ACP では、エディターが尋ね、エージェントが答えます。プロンプトが入り、進捗と差分がストリーミングで返ってきます。
- MCP では、エージェントが尋ね、サーバーが答えます。エージェントがツールを呼び出し、サーバーが結果を返します。
2 つのプロトコルは連携するように設計されています。ACP は可能な限り MCP の JSON 表現を再利用し、エディターの UX のために独自の型を追加しています。その代表が差分、つまりエディターがエージェントの変更案をレビュー用にどう表示するかです。
どのプロトコルが関係するかは、エージェントがどこで動いているかによって決まります。エージェントは、コマンドラインで動いていてもエディター内で動いていても、ほぼどこからでも MCP サーバーにアクセスできます。一方、ACP が関係するのはエディターが介在する場合だけです。エージェントをどこから呼び出しているかを考えてみましょう。
- ターミナルで動くエージェント (Claude Code、Codex CLI): ACP はスタックに含まれません。ACP が関係するのは、エージェントがエディター内で動く場合だけです。MCP はどちらの場合にも当てはまります。
- エディター内で動くエージェント (Zed または JetBrains IDE): これらのエディターでは、ACP によってエージェントが IDE の機能に組み込まれます。MCP は、そのエージェントがアクセスできる範囲を決めます。
- VS Code または Cursor: どちらのエディターも ACP エージェントをネイティブにはホストしません。ただし、Cursor 自身の CLI は、他のエディターで動く ACP エージェントです。MCP は完全に当てはまり、どちらも MCP をファーストクラスでサポートしています。
ACP は MCP の代わりになる?
なりません。両者は異なるレイヤーで動作し、重なり合うことはありません。ACP は、エディターとエージェントの間の対話 (セッション、プロンプト、編集、許可) を標準化します。MCP は、エージェントとツールの間の対話 (ツール呼び出しとリソース) を標準化します。両方を同時に使うのが一般的です。そして、この 2 つの形を決めたプロトコルがもう 1 つあります。
LSP の位置付け
ACP と MCP はどちらも、中核となる考え方を Language Server Protocol から借りています。LSP は言語ツールについて同じ接続の問題を解決しました。プロトコルを一度実装すれば、どの言語サーバーもどのエディターでも動作します。MCP の仕様は LSP に直接言及しており、「Language Server Protocol からいくらかの着想を得ている」と述べています。Zed も ACP について同じことを述べています。
LSP、MCP、ACP を並べてみると、同じパターンが繰り返されていることがわかります。3 つとも JSON-RPC を使い、それぞれが 1 つの関係を切り出しています。
- LSP はエディターに言語インテリジェンス (補完、診断、定義へのジャンプ) を与えます。
- ACP はそのエディターにコーディングエージェントを組み込みます。
- MCP はエージェントにツールとデータを渡します。
エージェント型のスタックでも、LSP には今なお役割があります。LSP によって、エージェントはテキストを grep する代わりに、コンパイラー並みのコードインテリジェンスを得られます。
ACP と MCP を組み合わせて使う
全体像は 1 行にまとまります。ACP はエディターをエージェントにつなぎ、MCP はそのエージェントをツールにつなぎます。
実務上よくある疑問は、CircleCI サーバーのようにエージェントに設定した MCP サーバーが、エディターに移っても使えるかどうかです。答えは「使える」で、ツールはどちらの側からも提供できます。Claude Code のようなエージェントハーネス内で MCP サーバーを設定している場合、それを ACP で接続すれば、その MCP 設定がエディターにも引き継がれます。エージェントに設定したサーバーは、エージェントと一緒に移動します。
エディターも独自のサーバーを転送できます。セッションの開始時に、ACP クライアントは設定済みの MCP サーバーを、session/new (エディターがセッションを開くために送るリクエスト) の mcpServers パラメーターを通じてエージェントに渡します。
MCP のツールはエージェントが実行できるコードであるため、セキュリティは両方のプロトコルにまたがる課題です。ローカルサーバーは環境変数で認証するため、組織管理者用のトークンよりも、スコープを絞ったトークンを使うほうが安全です。ガードレールとなるのはクライアントの許可プロンプトであり、エージェントがエディター内で動いている場合、そのプロンプトを画面に届けるのが ACP です。
まとめ
ACP と MCP は、同じスタックの異なるレイヤーを担っています。ACP は、どのエージェントをエディターで動かすか、そしてエディターがその変更案をどうレビューするかを扱います。MCP は、そのエージェントが何にアクセスできるかを扱います。ターミナルで動くエージェントに必要なのは MCP だけですが、エディターに移った瞬間から両方のプロトコルが関わってきます。
違いを実感する一番の近道は、実際にスタックを動かしてみることです。Zed または JetBrains IDE で ACP エージェントを動かし、CircleCI MCP サーバーを接続して、直近のビルドについて 1 つ質問してみてください。CircleCI の無料アカウントに登録して、今すぐビルドを始めましょう。