Learn MCP
Evergreen guides for evaluating, connecting, building, and operating Model Context Protocol integrations.
Understand
What MCP is, how remote servers differ from local ones, and when building one is worth it.
- What is the Model Context Protocol?
A developer introduction to MCP roles, tools, resources, prompts, transports, and the two protocol lifecycle eras.
- Remote vs. Local MCP Servers
How stdio and Streamable HTTP servers differ in sessions, authentication, deployment, CORS, and compatibility.
- Should you build an MCP server?
A decision framework for choosing MCP, a normal API, direct function calling, client-specific apps or skills, or an integration gateway.
- What is MCP? A plain-English explanation
What the Model Context Protocol is, what problem it solves, and what happens when an AI assistant uses a connected server, explained without code.
- What can you do with MCP?
Six practical uses of MCP servers, from searching your own documents to coding agents and unattended automation, each with a real public server and its honest limits.
- Is MCP safe?
What a connected MCP server can see and do, how tool poisoning and prompt injection work, what OAuth consent and tool approvals protect, and how to vet a server before you connect it.
- MCP vs API vs function calling
How MCP relates to ordinary APIs and to model function calling, with a comparison table and guidance on when each one is the right layer.
- MCP glossary
Forty-one Model Context Protocol terms in alphabetical order, from API key to transport, each defined in one or two sentences and linked by anchor.
- A short history of MCP: from launch to the 2026 specification
The Model Context Protocol from its November 2024 launch to the stateless 2026-07-28 revision: governance, adoption, and what each specification revision changed for users.
- mcptest.io vs MCP Inspector, MCPJam, Glama and Postman
An honest comparison of five MCP testing tools on install, remote OAuth, browser CORS evidence, shareable reports, catalogs, CI and price, with what each does best.
- Remote MCP testing tools compared (2026)
Eight MCP testing tools, from the official Inspector and conformance suite to MCPJam, Glama, Postman, two compliance CLIs and mcptest.io, compared on OAuth, CORS evidence, output validation, reports, CI, price and license.
- mcptest.io vs the glama.ai inspector
Two zero-install browser inspectors for remote MCP servers compared on connection path, OAuth, CORS evidence, report sharing and badges, catalog, diagnostics, structured output, price and openness.
- How to vet an MCP server before you connect it: assessment, audit and allowlisting
Turn an MCP server assessment into an approval decision with recorded evidence, a limited pilot, organisation allowlisting and a repeatable audit trail.
Use
Connect clients to remote servers, compare host support, and get through OAuth.
- How to connect to a remote MCP server
A client-oriented walkthrough for testing an authless or OAuth-protected Streamable HTTP endpoint and diagnosing the first connection.
- MCP clients compared
Compare the documented transports, authentication paths, capabilities, configuration, and approval controls in six widely used MCP clients.
- OAuth for MCP explained
Follow the MCP authorization sequence from a 401 challenge through resource and issuer discovery, PKCE and client registration, token exchange, and retry.
- How to add a remote MCP server to Claude
Step-by-step setup for remote MCP servers in claude.ai custom connectors, Claude Desktop and Claude Code, with the plan differences and the real failure modes for each.
- How to connect a remote MCP server to ChatGPT
Add a custom MCP server to ChatGPT from Plugins, understand why the option is missing on many accounts, and know when deep research needs search and fetch tools.
- How to connect a remote MCP server to Cursor
Configure a remote MCP server in Cursor's mcp.json, complete OAuth, and fix the Client Closed, Loading tools and No tools found states from the MCP Logs.
- How to connect a remote MCP server to VS Code
Add a remote HTTP MCP server for GitHub Copilot in VS Code at workspace or user level, complete OAuth, and fix the sign-in that never starts.
- How to connect a remote MCP server to Windsurf, Gemini CLI and Codex
Remote MCP setup for Windsurf (now Devin Desktop), Gemini CLI and OpenAI Codex, including which transport each key selects and when you need the mcp-remote bridge.
- Remote MCP server returns 401 Unauthorized: the cross-client checklist
Eight checks, in order, for an MCP server that answers 401 in Claude, ChatGPT, Cursor, VS Code or any other client, with what the playground shows when each one is the cause.
- MCP server connected but no tools: how to find the cause
When a client shows the server as connected but lists no tools, read the raw JSON-RPC exchange to tell a missing capability, a failed tools/list, a lost session, a version mismatch, caching and auth-gated listing apart.
- How to connect a remote MCP server to Zed
Add a remote MCP server to Zed's context_servers setting, sign in with OAuth or pass a header, control which tools the agent may call, and fix the failures Zed users report.
- How to connect a remote MCP server to JetBrains AI Assistant
Add a remote MCP server to AI Assistant in IntelliJ IDEA, PyCharm, and the other JetBrains IDEs, work around the missing OAuth and header support with a tested mcp-remote bridge, and tell AI Assistant apart from Junie and the IDE's own MCP server.
- How to connect a remote MCP server to GitHub Copilot CLI and the Copilot coding agent
Add a remote MCP server to Copilot CLI with copilot mcp add or mcp-config.json, sign in with OAuth or pass a header from your environment, and configure the same server for Copilot cloud agent with COPILOT_MCP_ secrets.
- Chat with your own data: connect a database, spreadsheet or docs to Claude or ChatGPT with MCP
Connect Supabase, Airtable or Notion to your assistant, start with a small read-only question, and check permissions and results in mcptest.io before trusting the answers.
- Use MCP connectors on your phone and by voice
Check Claude and ChatGPT mobile and voice support as of October 2026, distinguish custom-server setup from plugin use, and test a small read action before going hands-free.
Build
Design, test, and harden a production remote MCP server.
- How to Test a Remote MCP Server (Step by Step)
A step-by-step guide to validating stateless 2026 and stateful 2025 remote MCP servers, in the playground and from the command line.
- Designing a production MCP server
Design focused tools and schemas, control context cost, choose a deployment state model, and build observable, rate-limited failure handling.
- MCP server evaluation and trust checklist
Evaluate a server's publisher, code and hosting, permissions, authentication, write behavior, evidence, logging, and revocation before connecting it.
- How to test an MCP server before you deploy it
What a client does on connect, the order mcptest checks it in, how to read the release decision, and how to run the same gate in CI.
- How to convert a local stdio MCP server to a remote server
Move a stdio server to Streamable HTTP in TypeScript or Python, choose stateless 2026 or stateful 2025 behavior, add authorization, and update client configuration.
- Deploying a remote MCP server on Cloudflare Workers, Vercel, or your own host
Deploy a Streamable HTTP MCP server to Cloudflare Workers, Vercel, or a Node or Python host behind a reverse proxy, and avoid the platform defaults that show up as transport diagnostics.
- Building a remote MCP server with Claude Code or Codex
A practical loop for building a remote MCP server with a coding agent, with a starting prompt, an AGENTS.md or CLAUDE.md validation section, a way to feed mcptest findings back, and the mistakes agents make most.
- MCP server CORS headers: the reference for browser clients
The exact Allow-Origin, Allow-Methods, Allow-Headers, Expose-Headers, and Max-Age values a remote MCP server needs for browser clients, how the preflight works, and tested examples for Express, Hono, Cloudflare Workers, and FastAPI.
- Fixing MCP 406 Not Acceptable, 415 Unsupported Media Type, and 405 Method Not Allowed
The Accept rule, request and response content types, and GET stream optionality in Streamable HTTP, with measured TypeScript and Python SDK behavior and the fix for each status.
- MCP tool output schemas and structured content
Declare an outputSchema, return structuredContent alongside content, understand what clients validate and which JSON Schema dialect applies, avoid the common violations, and read how mcptest reports a contract break.
- How to make your MCP server discoverable: server cards, .well-known and the registry
Publish a SEP-2127 Server Card at your endpoint, list it in an AI Catalog at /.well-known/ai-catalog.json, serve OAuth metadata clients can read, and publish to the official MCP Registry, with copy-paste examples and a free checker.
- Which MCP tool changes break clients, and how to ship them safely
Clients cache tools/list, so a deploy that changes a tool can break agents that still hold the old schema. Which changes break callers, which only change behavior, why list_changed does not save a stateless server, and how to version and ship changes safely.
- Build a remote MCP server with Express
A complete, tested Express server for MCP with the official SDK v2 adapters, Host and Origin checks, CORS, an OAuth bearer check against a hosted identity provider, and the result mcptest reports for it.
- Build a remote MCP server with Hono, on Node, Bun, or Cloudflare Workers
One tested Hono file that serves MCP with the SDK v2 adapter, CORS, and an OAuth bearer check, and runs unchanged on Node.js, Bun, and Cloudflare Workers, with the runtime-specific pitfalls for each.
- Build a remote MCP server with FastAPI and the Python SDK
A complete, tested FastAPI app that mounts the Python SDK's MCPServer with stateless Streamable HTTP, Host and Origin checks, CORS, and a JWT token verifier for a hosted identity provider, plus what mcptest reported for it.
- Build a remote MCP server in Next.js with route handlers and mcp-handler
A tested Next.js App Router MCP server built with mcp-handler 2.x, with OAuth through withMcpAuth, the protected resource metadata route, Origin checks and CORS that mcp-handler leaves to you, and what mcptest reported for it.
- Build a remote MCP server on Cloudflare Workers with the Agents SDK
A tested Worker built with createMcpHandler from the agents package, with Host and Origin checks, CORS for several origins, an OAuth bearer check for a hosted identity provider, why GET /mcp answers 405 (cloudflare/agents#403), and what mcptest reported.
- MCP server authentication patterns: API keys, bearer tokens, and OAuth with a hosted identity provider
The three ways to protect a remote MCP server, tested code for an API key gate and an OAuth resource server, the settings WorkOS AuthKit, Auth0, and Stytch need, and which clients can use each pattern.
- Deploy a remote MCP server on Vercel Functions
Run a tested stateless MCP sample on Vercel Functions, configure duration and browser CORS, and check production domains, cold starts and SSE in mcptest.io.
- Deploy a remote MCP server on AWS Lambda with a streaming function URL
Run a stateless MCP Lambda adapter locally, deploy a RESPONSE_STREAM function URL, and understand API Gateway streaming, payload limits, timeouts and browser CORS.
- Deploy a remote MCP server on Google Cloud Run
Deploy a tested stateless MCP container to Cloud Run, account for scale-to-zero, request timeouts and best-effort session affinity, then check CORS and SSE in mcptest.io.
- Deploy a remote MCP server on Fly.io
Run a tested stateless MCP container on Fly Machines, configure autostop, proxy idle timeouts and custom domains, then verify browser CORS and SSE on mcptest.io.
- Secure a remote MCP server with Auth0 OAuth 2.1
Configure Auth0 for MCP with protected resource metadata, resource audience checks, PKCE and CIMD or DCR, including October 2026 Early Access and tenant limitations.
- Secure a remote MCP server with Clerk OAuth 2.1
Use Clerk as an MCP authorization server with CIMD or DCR, protected resource metadata, explicit OAuth-token verification and scope checks, and an audience-binding compatibility gate.
- Secure a remote MCP server with WorkOS AuthKit
Configure WorkOS AuthKit and Connect for MCP with CIMD, resource indicators, protected resource metadata and exact JWT audience checks, then test OAuth on mcptest.io.
- Secure a remote MCP server with Stytch Connected Apps
Use Stytch Connected Apps for MCP OAuth with CIMD or DCR, protected resource metadata, public-client PKCE, custom audience checks and explicit resource-binding limitations.
- Test your remote MCP server in CI with GitHub Actions
Gate a remote MCP deploy on client compatibility and tool changes against the last release, with a readable PR comment and optional public report.
- MCP 'Session not found' (404): why it happens after deploys and how to fix it
Diagnose stale MCP sessions after restarts and replica changes, choose durable session ownership or stateless HTTP, and actively test recovery before release.
- MCP OAuth protected resource does not match expected: cause and fix
Diagnose an OAuth resource identity mismatch, compare the endpoint path with protected-resource metadata, and decide whether the client configuration or server must change.
- VS Code MCP OAuth redirect URIs: loopback ports and login failures
Fix rejected VS Code MCP redirect URIs and trace the case where an OAuth page opens but connecting fails, from registration to token exchange.
- Failed to discover OAuth metadata: MCP fixes
Trace failed MCP OAuth discovery from the challenge to issuer metadata, separating refresh failures, wrong paths and browser CORS.
- does not support dynamic client registration: MCP
Resolve incompatible MCP OAuth client registration by distinguishing missing DCR, pre-registered client configuration and CIMD support.
- invalid_redirect_uri: MCP OAuth callback fixes
Find the stage rejecting an MCP OAuth callback and align registered, advertised and requested redirect URIs without weakening validation.
- SSE error: Non-200 status code (404)
Separate legacy SSE routing failures from optional Streamable HTTP GET failures and stale sessions using the request method and response body.
- Streamable HTTP error: Error POSTing to endpoint
Decode the HTTP status and response behind a Streamable HTTP POST error to distinguish routing, authentication, media types and gateway failures.
- SSE stream disconnected: TypeError: terminated
Diagnose truncated MCP streams, idle proxy deadlines and premature response cleanup, and distinguish normal stream completion from lost replies.
- MCP error -32000: Connection closed
Trace closed MCP connections to session recovery, process failures or dropped streams without assuming that the generic code identifies a server bug.
- MCP error -32001: Request timed out
Distinguish MCP request deadlines from connection setup, lost initialization replies and gateway timeouts, with bounded SDK timeout and progress examples.
- Invalid Host header: MCP DNS rebinding fixes
Repair MCP Host allowlists behind Docker and reverse proxies while retaining DNS rebinding protection, with Python and TypeScript SDK examples.
Reference
Error decoders and checklists to keep open while you debug.
- MCP Server Errors: Causes and Fixes
Find exact MCP client errors by symptom, then diagnose OAuth discovery, registration, Host rejection, HTTP routing, lost streams and request timeouts.
- MCP protocol versions explained
What changed in each MCP revision from 2024-11-05 to 2026-07-28, how clients negotiate and fall back between them, and what stateless means in 2026.
- MCP HTTP headers reference
Every HTTP header a remote MCP server and client exchange over Streamable HTTP, with direction, versions, example values, failure symptoms and the mcptest diagnostic that fires.
- MCP error codes
JSON-RPC 2.0 reserved codes, MCP-defined codes from -32002 to -32042, the HTTP status each maps to on Streamable HTTP, and isError tool results versus protocol errors.
- MCP OAuth 2.1 reference
Reference for MCP authorization covering RFC 9728 and RFC 8414 discovery, PKCE S256, CIMD versus dynamic registration, RFC 8707 audience, step-up, refresh, iss validation, confused deputy, and what a browser client can do.
- MCP transport diagnostics reference
Each mcptest diagnostic id, from transport.accept-header-406 to tool.output-contract-violation, with what was observed, severity, release impact, cause, fixes for three stacks, and the reports behind it.
- Which clients support remote MCP servers
Which MCP clients connect to remote servers, over which transports, with which OAuth registration and static credentials, and what each one cannot do, with a verification date on every row.
- What changed in MCP, October 2026
MCP changes from 2026-09-20 to 2026-10-20: the Server Cards SEP is final, six official SDKs shipped releases, and Claude connectors and Devin Desktop now negotiate 2026-07-28.