What Is an MCP Client? The Complete 2026 Guide

How Claude Desktop, Cursor, VS Code, Python, and LangChain Connect to Model Context Protocol Servers

Alexander Gusev

Founder, Planetary Labour

An MCP client is the connector logic inside an AI application that talks to an MCP server on behalf of a model like Claude or GPT. Every time Claude Desktop reads a local file, Cursor queries a database, or a Slack bot pulls a Notion page, an MCP client is doing the work behind the scenes: opening a session, discovering available tools, and routing calls back and forth over the Model Context Protocol. This guide breaks down exactly what an MCP client is, how it differs from an MCP server, and how to configure or build one across Claude Desktop, Cursor, VS Code, Python, LangChain, n8n, and more.

Key Takeaways

  • An MCP client is host-side software that opens one stateful JSON-RPC 2.0 session per MCP server it connects to
  • Clients consume, servers provide — the server exposes tools, resources, and prompts; the client discovers and calls them
  • Every major AI surface now ships a client, including Claude Desktop, Claude Code, Cursor, VS Code, Slack, n8n, and OpenAI's Responses API
  • Dynamic Client Registration (DCR) lets clients auto-register with new OAuth-protected servers instead of requiring manual setup

MCP Ecosystem Growth 2026

97M+
Monthly MCP SDK downloads (Mar. 2026)
81K+
GitHub stars across MCP repositories
5,000+
Community MCP servers to connect to
2
Core transports: stdio & Streamable HTTP

Sources: Model Context Protocol Blog, MCP Specification Timeline

What Is an MCP Client?

The Model Context Protocol (MCP) is an open standard, originally released by Anthropic in November 2024, that lets AI models connect to external tools and data through a consistent interface instead of a one-off integration for every service. MCP defines three roles: the host (the application you actually use, like Claude Desktop), the client (the connector the host creates), and the server (the program that exposes real capabilities, like reading files or querying a database).

An MCP client lives inside the host and manages exactly one connection to exactly one server. It performs the protocol handshake, negotiates capabilities, and translates the model's intent — "check my calendar" — into a structured JSON-RPC 2.0 call the server understands. If a host connects to five different MCP servers, it instantiates five separate MCP clients, each with its own isolated session and permission boundary.

  • Session-bound — one client maps to one server, keeping context and permissions isolated
  • Capability-aware — it discovers a server's tools, resources, and prompts before using them
  • Transport-flexible — it can talk over local stdio or remote Streamable HTTP
  • Everywhere by 2026 — built into consumer apps, IDEs, workflow tools, and raw SDKs alike

A Simple Analogy

Think of an MCP server as a restaurant kitchen and the MCP client as the waiter. The kitchen (server) can cook specific dishes (tools) and knows the menu (resources). The waiter (client) doesn't cook anything — it takes the order from the guest (the AI model), relays it to the kitchen in a format the kitchen understands, and brings the result back. You never talk to the kitchen directly; the waiter is the interface.

MCP Client vs MCP Server (and Host)

"MCP client vs server" is one of the most common points of confusion for developers new to the protocol, mostly because a third role — the host — usually gets left out of the conversation. Here is how the three fit together.

MCP Host vs Client vs Server: Who Does What?

ComponentRoleExample
HostThe application the user interacts with; owns the AI model and the UIClaude Desktop, Cursor, VS Code
ClientCreated by the host; manages one JSON-RPC session with one serverThe internal connector object inside Claude Desktop
ServerExposes tools, resources, and prompts to whichever client connectsA filesystem, Git, or Postgres MCP server

MCP Client vs MCP Server: Key Differences

MCP Client

  • Consumes tools, doesn't define them
  • Lives inside the host application
  • Initiates the connection and the handshake
  • Decides which capabilities to actually call

MCP Server

  • Defines and exposes tools, resources, prompts
  • Runs independently, as a subprocess or remote service
  • Accepts connections from any compliant client
  • Enforces its own permission and rate-limit rules

In short: the server owns the capability, the client owns the connection. You'll build a custom MCP server when you want to expose your own data or systems to AI models. You interact with an MCP client every time you configure Claude Desktop, Cursor, or another host to use one.

How an MCP Client Works

Under the hood, MCP runs on JSON-RPC 2.0. A client and server exchange a small, well-defined set of messages to negotiate what's available and then act on it.

🖥️

Host Application

Claude Desktop, Cursor, VS Code, your app

🔌

MCP Client

1 client per server · JSON-RPC 2.0 session

🗄️

MCP Server

Exposes tools, resources & prompts

A single host can run many MCP clients in parallel — one dedicated, stateful connection per MCP server.

The Client-Server Handshake

  1. 1
    initialize — the client opens the connection and both sides exchange protocol versions and capabilities
  2. 2
    list_tools / list_resources / list_prompts — the client discovers what the server offers
  3. 3
    call_tool / read_resource — the client executes an action or fetches data on the model's behalf
  4. 4
    notifications — the server can push updates (like a changed resource list) back to the client at any time

stdio vs Streamable HTTP

stdio transport

The client spawns the server as a local subprocess and exchanges JSON-RPC messages over standard input and output. Simplest option, zero network exposure — the default for local tools like filesystem or Git servers.

Streamable HTTP transport

Introduced in the 2025-03-26 revision, a single HTTP endpoint supports POST and GET, with optional Server-Sent Events for server-to-client streaming. Used for remote, hosted, or multi-tenant MCP servers.

What Changed in the 2026-07-28 Specification

The latest MCP release makes the transport layer fully stateless — no more protocol-level sessions or Mcp-Session-Id headers — so any server instance behind a standard load balancer can answer any client request. It also adds Multi Round-Trip Requests, header-based routing, cacheable list results, and hardened authorization. For a client developer, the practical effect is simpler horizontal scaling on the server side and fewer sticky-session bugs.

MCP Clients by Application: Claude, Cursor, VS Code & More

By mid-2026, an MCP client ships inside nearly every serious AI surface. The table below compares how the biggest ones handle transport and authentication before the detailed breakdowns underneath.

ClientTypeTransportAuthBest For
Claude DesktopConsumer host appstdio + Streamable HTTPOAuth 2.1 / DCRLocal tools, personal workflows
Claude CodeCLI / IDE host appstdio + Streamable HTTPOAuth 2.1 / DCRCoding agents, repo automation
CursorIDE host appstdio + Streamable HTTPOAuth 2.1AI-assisted coding
VS Code (Copilot)IDE host appstdio + Streamable HTTPOAuth 2.1Enterprise dev teams
Slackbot MCP ClientSaaS host appStreamable HTTPOAuth 2.1 / DCRTeam-wide tool access in Slack
n8n MCP Client ToolWorkflow automation nodestdio + Streamable HTTPBearer / header / OAuth2No-code automation pipelines
Postman MCP RequestsAPI testing clientstdio + Streamable HTTPBearer / OAuth2Debugging servers before deploy
Python SDK (mcp)Programmatic librarystdio + Streamable HTTPManual / OAuthCustom agents, scripts, backends
langchain-mcp-adaptersFramework adapterstdio + Streamable HTTPInherits server configLangGraph agents
OpenAI Responses API / Agents SDKProgrammatic + host appStreamable HTTPOAuth 2.1ChatGPT connectors, custom agents

Claude Desktop MCP Client

Claude Desktop was one of the first mainstream hosts to ship native MCP support. Every server you add spins up its own client, isolated from the others.

Config file location

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json. It's reachable in-app via Settings → Developer → Edit Config.

Desktop Extensions (.mcpb)

For popular servers, Anthropic's packaged Desktop Extensions install with a double-click, so you never have to hand-edit JSON. Custom or private servers still go through the config file.

Cursor MCP Client

Cursor exposes MCP through a settings UI with one-click install for popular servers, plus a project-level .cursor/mcp.json for anything custom. It uses the same mcpServers schema as Claude Desktop, so most configs port over unchanged.

VS Code MCP Client

VS Code has shipped native MCP support since version 1.99 (early 2026), surfaced through GitHub Copilot Chat's agent mode.

The one gotcha

VS Code's config root key is servers, not mcpServers — copy-pasting a Claude Desktop or Cursor snippet without changing that key is the most common setup failure developers report.

Slack MCP Client

Slack's Slackbot MCP Client went generally available on June 18, 2026. Once you connect an MCP server, Slackbot auto-discovers its tools and invokes them from natural conversation — with a launch partner ecosystem of 20+ apps including Atlassian, Canva, Linear, Miro, and Notion. See the Slack MCP developer docs for setup.

n8n MCP Client

n8n's MCP Client Tool node attaches to an AI Agent node alongside your model of choice (OpenAI, Anthropic, or a local model via Ollama), and supports Bearer, generic header, multi-header, and OAuth2 authentication. It's the fastest path to wiring MCP servers into a no-code automation workflow.

Postman MCP Client

Postman's MCP requests let you pick a server capability, auto-generate the JSON-RPC message, send it, and inspect the raw response across dedicated Tools, Resources, and Prompts tabs — effectively a client built for debugging and validating a server before it ever reaches Claude Desktop or VS Code in production.

OpenAI MCP Client

OpenAI adopted MCP in March 2025 and now supports it across the Responses API (simple request-response tool calling), the Agents SDK (stateful multi-agent workflows), ChatGPT Developer Mode connectors, and the Apps SDK for building interactive tools inside ChatGPT itself.

MCP Client Config Generator

Pick your host below to generate a ready-to-paste MCP client config for a filesystem server. Swap the command, args, and server name for any other MCP server you want to connect.

claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"]
    }
  }
}

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json. Restart Claude Desktop after saving, or install the server as a one-click Desktop Extension (.mcpb) instead.

Building Your Own MCP Client

Configuring an existing host covers most day-to-day use. But if you're building a custom agent, a backend service, or a framework integration, you'll write MCP client code directly.

Python MCP Client

The official Python SDK (pip install mcp) gives you stdio_client and ClientSession as the core building blocks for a python mcp client:

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

server_params = StdioServerParameters(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"],
)

async def main():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await session.list_tools()
            result = await session.call_tool("read_file", {"path": "README.md"})
            print(result)

LangChain MCP Client

langchain-mcp-adapters wraps one or many MCP servers behind a single MultiServerMCPClient and converts their tools into native LangChain tools — ready to hand to a LangGraph agent:

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient({
    "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"],
        "transport": "stdio",
    },
    "docs": {
        "url": "https://mcp.example.com/mcp",
        "transport": "streamable_http",
    },
})

tools = await client.get_tools()

Ollama MCP Client

Ollama itself doesn't ship an MCP client — instead, it plugs in as the local model provider behind a client, most commonly n8n's AI Agent node or a custom Python script using the raw SDK. This is popular for privacy-sensitive workflows that keep both the model and the tool calls fully on-device. One known limitation as of early 2026: some local models routed through Ollama are less reliable at reliably triggering MCP tool calls compared to hosted frontier models, so test tool-use accuracy before relying on it in production.

Which SDK Should You Use?

Use the raw Python or TypeScript SDK when you want full control and minimal dependencies. Use langchain-mcp-adapters when you already run LangGraph agents and want MCP tools to slot in as regular LangChain tools without extra glue code. Both talk the same wire protocol, so switching later doesn't require touching your MCP servers at all.

MCP Dynamic Client Registration (DCR) & OAuth

Once an MCP server lives on the internet instead of your laptop, someone has to prove the client is allowed to connect. The MCP 2025-06-18 authorization spec formalized this by making remote MCP servers act as OAuth 2.1 resource servers, discoverable through Protected Resource Metadata.

Dynamic Client Registration (DCR), based on RFC 7591, is the piece that removes friction from that flow. Instead of a developer manually requesting a client ID from every new server's dashboard, the MCP client registers itself programmatically the first time it meets a new authorization server, gets a client ID back automatically, and continues the standard OAuth authorization code flow from there.

How the Flow Works

  1. 1
    The client calls a protected resource and receives an HTTP 401 with a WWW-Authenticate header pointing to the resource metadata
  2. 2
    The client discovers the authorization server and, via DCR, registers itself to receive a client ID
  3. 3
    The user completes a standard OAuth 2.1 consent screen, and the client receives a resource-bound access token
  4. 4
    Every subsequent call includes that token; resource indicators stop it from being replayed against a different server

DCR Is Optional, Not Required

Later MCP authorization revisions introduced Client ID Metadata Documents (CIMD) as a lighter-weight alternative for clients that can host a static metadata URL. Servers can support DCR, CIMD, both, or neither — a client that expects to work with arbitrary third-party servers should be able to fall back gracefully when its preferred registration method isn't available.

How to Choose the Right MCP Client

Most developers won't build a client from scratch — they'll pick which existing one fits their workflow. Weigh these factors:

1Where does the work actually happen?

Writing code, day to day? Cursor or VS Code. Chatting through documents and files? Claude Desktop. Automating a business process without writing code? n8n's MCP Client Tool.

2Local or remote servers?

stdio is simpler and keeps everything on-device; Streamable HTTP is required for shared, hosted, or multi-user servers and brings OAuth into the picture.

3Do you need programmatic control?

If you're building your own agent or backend, reach for the Python or TypeScript SDK directly, or langchain-mcp-adapters if you're already standardized on LangGraph.

4How will you test new servers?

Use Postman's MCP requests to validate a server's tools and responses before wiring it into a production host — catching schema mistakes early is far cheaper than debugging them inside a live agent.

Beyond a Single MCP Client: A Whole Autonomous GTM System

Configuring one MCP client at a time is fine for a personal workflow, but growth teams need something bigger: agents that already know how to reach your CMS, your social accounts, and your SEO pipeline without you wiring up a new server every week. Planetary Labour runs that layer for you — an AI-powered GTM engine that publishes SEO content, posts to X and Reddit, and builds domain authority around the clock, connected end-to-end to the tools your startup already runs on.

Explore Planetary Labour

Frequently Asked Questions

What is an MCP client?

An MCP client is the piece of software inside a host application, such as Claude Desktop, Cursor, or a custom Python script, that opens a 1:1 JSON-RPC connection to a single MCP server. It sends requests like list tools or call tool, receives structured responses, and hands the results back to the AI model. A host can run many MCP clients at once, one per connected server.

What is the difference between an MCP client and an MCP server?

An MCP server exposes tools, resources, and prompts that live on your side of the connection, such as a database query function or a file reader. An MCP client is the consumer that connects to that server, discovers what it offers, and calls it on behalf of the AI model. Servers provide capabilities; clients request and use them.

Is Claude Desktop an MCP client?

Yes. Claude Desktop is an MCP host application that creates an MCP client for every server you add in claude_desktop_config.json or install as a Desktop Extension. Each client keeps a separate stateful session, so Claude can use multiple servers, like a filesystem tool and a database tool, in the same conversation without them interfering with each other.

How do I build a Python MCP client?

Install the official mcp package, then use stdio_client with StdioServerParameters to launch a server subprocess, wrap the resulting streams in a ClientSession, call session.initialize(), and use session.list_tools() and session.call_tool() to interact with it. The full pattern is documented in the official Python SDK on GitHub and in Anthropic's MCP quickstart guide.

What is MCP dynamic client registration?

Dynamic Client Registration (DCR) is an OAuth mechanism, defined in RFC 7591 and adopted by the MCP 2025-06-18 authorization spec, that lets an MCP client automatically register itself with a new remote server's authorization server instead of requiring a developer to manually create and paste in a client ID. It removes a major setup step when connecting to third-party, OAuth-protected MCP servers.

Continue Learning