MCP vs ACP: Understanding the Difference

Two Protocols, Two Problems, One Ecosystem

If you've been following the AI tooling space lately, you've probably seen both MCP (Model Context Protocol) and ACP (Agent Client Protocol) pop up in the same conversations. I kept mixing them up at first β€” both use JSON-RPC 2.0, both run over stdio, both live in the AI-dev-tooling world. But once I actually read through the specs and built things with each, the distinction became very clear.

They solve different problems at different layers of the stack. This article is my attempt to clearly explain both and where they fit.


What is MCP (Model Context Protocol)?

MCP is an open-source standard β€” now part of LF Projects β€” for connecting AI applications to external systems: data sources, tools, and workflows.

The official analogy is apt: think of it as a USB-C port for AI applications. Just like USB-C provides a universal physical interface for charging, data transfer, and display output, MCP provides a universal protocol interface for an AI application to access:

  • Files and databases (resources)

  • APIs and executables (tools)

  • Prompt templates (prompts)

MCP Architecture

MCP follows a client-server model with three distinct participant roles:

MCP Host (AI Application, e.g. VS Code, Claude Desktop)
  β”œβ”€β”€ MCP Client 1 ──── MCP Server A (e.g. Filesystem)
  β”œβ”€β”€ MCP Client 2 ──── MCP Server B (e.g. Database)
  └── MCP Client 3 ──── MCP Server C (e.g. Remote API)
  • MCP Host: The AI application that manages clients (e.g. VS Code, Claude Desktop)

  • MCP Client: One per server connection, maintained by the host

  • MCP Server: Exposes context (tools, resources, prompts) to clients

MCP Transport

MCP supports two transport mechanisms:

Transport
Use case
Details

stdio

Local processes

stdin/stdout streams, zero network overhead

Streamable HTTP

Remote servers

HTTP POST + optional Server-Sent Events, supports OAuth

MCP Primitives

The three server-side primitives that define what an MCP server can offer:

Primitive
Purpose
Example

Tools

Executable functions the AI can call

run_query, read_file, http_get

Resources

Read-only data/context

Database schema, file contents

Prompts

Reusable LLM interaction templates

System prompts, few-shot examples

The client-side primitives that servers can request back from the host:

  • Sampling β€” ask the host AI to run an LLM completion

  • Elicitation β€” prompt the user for input or confirmation

  • Logging β€” send log messages back to the client

MCP Protocol Flow

Everything is JSON-RPC 2.0:


What is ACP (Agent Client Protocol)?

ACP is an open standard that standardizes how code editors communicate with AI coding agents. It emerged from the same frustration that drove LSP (Language Server Protocol) β€” every editor was building custom integrations for every agent, and every agent had to implement editor-specific APIs.

ACP solves this the same way LSP did for language tooling: define one protocol, implement it once on each side.

ACP's Problem Space

Without ACP:

  • Zed needs custom Cline integration, custom Copilot integration, custom OpenHands integration...

  • Each agent needs to know Zed-specific APIs, VS Code-specific APIs, JetBrains-specific APIs...

With ACP:

  • Editors implement ACP once

  • Agents implement ACP once

  • Everything interoperates

In 2026, agents like GitHub Copilot, Cline, Gemini CLI, OpenHands, Goose, Codex CLI, and Claude Agent all implement ACP.

ACP Architecture

ACP agents can also be MCP clients β€” the editor passes MCP server configuration to the agent, and the agent connects to those MCP servers for tool access. Both protocols are in play simultaneously.

ACP Message Flow

ACP Client Capabilities (Editor β†’ Agent)

The editor can expose these to agents:

Method
What it gives the agent

fs/read_text_file

Read any file in the project

fs/write_text_file

Write/patch files

terminal/create

Spawn and control a terminal

terminal/output

Retrieve terminal output and exit code

session/request_permission

Gate tool calls behind user approval

ACP's Design Principles

From the spec:

  1. MCP-friendly β€” reuses MCP's JSON types so integrators don't have to build new representations

  2. UX-first β€” designed to render diffs, show agent intent, stream output clearly

  3. Trusted β€” assumes the user is in control; agents ask permission before acting


The Core Difference, Side by Side

MCP

ACP

What it connects

AI apps ↔ data/tools/APIs

Code editors ↔ AI coding agents

Direction of capability

Servers expose context TO AI

Agents work inside editor, editor exposes FS/terminal TO agent

Primary analogy

USB-C port for AI

LSP for coding agents

Transport

stdio or Streamable HTTP

stdio (subprocess) or HTTP/WebSocket

Protocol

JSON-RPC 2.0

JSON-RPC 2.0 (reuses MCP types)

Core primitives

Tools, Resources, Prompts

Sessions, File system, Terminals, Diffs, Permissions

Lifecycle unit

Tool call / Resource read

Conversation session

Who's the "server"

The data/tool provider

The AI agent

Who's the "client"

The AI application

The code editor (IDE)

Scope

General AI applications

Code editors and coding agents

Relation to each other

Foundational layer

Builds on top β€” agents use MCP internally


How They Fit Together

The most important thing to understand: these two protocols are complementary, not competing.

The editor talks to the agent over ACP. The agent talks to external tools over MCP. The editor may optionally expose its own MCP server (proxied back through itself) to give the agent access to editor-native tooling.


When Would You Implement Each?

Implement MCP when you want to:

  • Expose a database, API, or toolset to any AI application

  • Add capabilities to Claude, VS Code Copilot, or any MCP-compatible AI

  • Build a reusable integration that many AI tools can consume

Implement ACP when you want to:

  • Build a coding agent that works inside any compatible editor

  • Build a code editor that supports any ACP-compatible agent

  • Create a first-class IDE experience for your AI assistant


Summary

MCP answers: "How does an AI application get context and call tools in external systems?"

ACP answers: "How does a code editor talk to an AI agent and give it access to the development environment?"

Both use JSON-RPC 2.0. Both run over stdio locally. ACP even reuses MCP's type definitions intentionally to reduce duplication. But their problem domains, their participants, and their lifecycles are fundamentally different.

Understanding the layer each protocol operates at makes it easy to know which one you need β€” or when you need both.


Further Reading

Last updated