You've built an MCP server. It works in your terminal. Then a user reports it doesn't work in Cursor. Or Claude Desktop. Or VS Code. Welcome to MCP client fragmentation — the protocol is standard, but every client implements a slightly different subset of it.
The compatibility matrix
| Feature | Claude Desktop | Cursor | VS Code Copilot | Cline |
|---|---|---|---|---|
| stdio transport | ✓ | ✓ | ✓ | ✓ |
| SSE/HTTP transport | ✓ | partial | partial | ✓ |
| tools/list + tools/call | ✓ | ✓ | ✓ | ✓ |
| resources | ✓ | ✗ | partial | ✓ |
| prompts | ✓ | ✗ | ✗ | partial |
| sampling (server→client LLM calls) | ✓ | ✗ | ✗ | ✗ |
| structured output schemas | ✓ | ✓ | ✓ | ✓ |
| OAuth auth flow | ✓ | partial | partial | ✗ |
Status as of August 2026 — clients move fast, verify against your target versions.
What this means for server authors
-
Tools are the safe core. Every client supports
tools/listandtools/call. If your server's value is in tools, it works everywhere. - Resources and prompts are optional. Don't make them the primary interface — Cursor and VS Code users won't see them.
- Sampling is Claude-only. If your server depends on sampling, it's a Claude Desktop exclusive.
- Test against every client you claim to support. "Works with Claude" doesn't mean "works with Cursor."
How to test against all clients without installing them all
You don't need four machines. The core of every client is the same JSON-RPC handshake — initialize, list tools, call a tool. If your server passes that sequence cleanly, it will work in every client that supports the features you use.
MCP Workbench runs exactly this sequence against your server and shows the full traffic: the initialize response, the tool list, and live tool call results. It's the fastest way to verify your server speaks correct MCP before you ship it to users on any client.
Which client do you build MCP servers for? Let me know in the comments.
Top comments (0)