aicode8
AI AgentsUpdated: 2026-09-10

MCP troubleshooting: locating and fixing high-frequency failures

The most common production failures for MCP and their root-cause fixes.

On this page

Quick answer

Which major version of the MCP SDK should I use?

Use @modelcontextprotocol/sdk ^1.0 (stdio transport). The SDK changes between majors, so check the migration guide before upgrading.

Machine-readable page data: /data/mcp-troubleshooting.json

In-depth analysis

MCP (Model Context Protocol) is an open standard released in 2024 that lets large language models connect to tools and data sources through one uniform protocol. Write a Server once and any MCP-compatible agent (Claude Desktop, Cursor) discovers and calls it. Troubleshoot by three layers — build, deploy, runtime — diagnose by symptom, never blind-trial.

MCP · Config example
// mcp-server.ts — @modelcontextprotocol/sdk ^1.0 stdio read-only Server
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = new McpServer({ name: 'docs-readonly', version: '1.0.0' });
server.tool('read_doc', { path: schema.string() }, async ({ path }) => {
  // scope is minimized to read-only — never expose write or full filesystem access
  return { content: [{ type: 'text', text: readAllowed(path) }] };
});

const transport = new StdioServerTransport();
await server.connect(transport);

// Client registration in claude_desktop_config.json:
// "mcpServers": { "docs": { "command": "node", "args": ["mcp-server.ts"] } }
Best practices:Diagnose in three layers: build, deploy, runtime. Check zod/type errors first instead of blindly deleting the lockfile. A 404 returning soft 200 means inspect _headers.
Pitfalls:stdio and SSE/HTTP transports cannot be mixed on the same Server. Remote endpoints must use Bearer auth with the scope minimized to read-only — otherwise you are effectively shipping your source code naked. Declare the tool list explicitly rather than exposing blanket file-read permissions. On build failure check zod/type errors first, do not blindly delete the lockfile. A 404 returning soft 200 means check _headers.

MCP Troubleshooting · Key takeaways

  • Build, deploy, or runtime layer identified
  • Relevant logs and status codes captured
  • Fix verified and reproducible
  • Fix notes recorded for reuse

FAQ & pitfalls

Can MCP stdio and HTTP transports be mixed?

No — one Server picks one transport. Remote endpoints must use Bearer auth with the scope minimized to read-only, or you are effectively shipping your source naked.

How do I authenticate an MCP Server deployed at the edge?

Remote MCP uses Bearer-authenticated SSE or HTTP, with scope limited to read-only tools. Local stdio stays off the network — never expose it to avoid privilege escalation.

Share & save

My shelf0
← Back to homeTopic: Mcp Troubleshooting

What readers are asking

Questions that keep coming back in reader feedback, already answered.

  1. 01
    Can one MCP server speak both stdio and HTTP?

    No — a server picks a single transport. A remote endpoint must carry Bearer auth and scope its tools to read-only, otherwise you are exposing source execution to the public internet.

    See the full guide →
  2. 02
    How should auth work when an MCP server runs at the edge?

    Remote MCP goes over SSE or HTTP with a Bearer token, and tools get read-only scope; local stdio is never network-exposed. Do not put both transports behind the same server.

    See the full guide →
  3. 03
    Why is my Astro component's interactivity not working?

    Components ship as zero-JS HTML by default, so an interactive one needs a client:* directive (client:load, client:visible, …). Without it the script is never bundled into the page.

    See the full guide →
All questions →

Follow along as I build with AI

Get the honest, real-time record: what I build, what breaks, and what I learn — from a non-technical founder. No jargon, no fluff.

We respect your inbox. One click to unsubscribe, anytime.