Retour au blog
20 juin 2026

The Developer's Guide to Configuring Custom MCP Servers for Claude & Cursor

Configure custom MCP servers for Claude and Cursor with local-first JSON, stdio transport, and zero-error validation.

The Developer's Guide to Configuring Custom MCP Servers for Claude & Cursor

The New Standard: MCP Is USB-C for AI

The Model Context Protocol gives AI clients a standard port for tools, data, and local execution. Treat it like USB-C for AI: one protocol, many devices, predictable negotiation, no bespoke adapter layer for every integration.

Before MCP, developers hardcoded context into prompts, pasted database schemas into chat windows, or wrote brittle plugin glue for each AI client. That model does not scale. Autonomous agents need live context, not stale prompt baggage. They need to query a local SQLite database, inspect a private repository, call an internal API, read a ticket queue, or run a deterministic formatter without leaking data to a remote vendor.

MCP changes the contract. Instead of stuffing context into the prompt, you expose capabilities through an MCP server. Claude Desktop, Cursor, and other MCP clients discover those capabilities at runtime. The client asks the server what tools, resources, and prompts it supports. The server answers through a structured protocol. The agent then invokes those tools with typed parameters.


The Architecture: Client, Server, Transport

MCP looks simple because the protocol hides the mess. Underneath, every integration has three layers.

1. Client: Claude Desktop or Cursor

The client runs the agent interface. In this guide, that means Claude Desktop custom tools and Cursor local MCP integrations. The client owns model interaction, tool discovery, and server lifecycle management. Claude Desktop starts custom MCP servers from claude_desktop_config.json. Cursor starts local MCP servers from .cursor/mcp.json.

2. Server: Your Node, Python, or Binary Process

The MCP server exposes tools and resources. You can write it in Node.js, Python, Rust, or Go. A server usually implements initialize, tools/list, and tools/call. A database server might expose query_sql, while a deployment server might expose rollback_release.

3. Transport: stdio vs SSE

MCP supports different transports, but most local developer workflows use stdio.

stdio for Local Execution

With stdio, the AI client launches your server as a child process. The client writes JSON-RPC messages to the server’s standard input. The server writes JSON-RPC responses to standard output.

  • Local-first execution.
  • No open network port.
  • Direct access to local files or databases.

SSE for Remote MCP Servers

With SSE, the client connects to a remote server over HTTP using Server-Sent Events. This model suits hosted tools, shared org integrations, and centralized services.


The Configuration Nightmare: One Comma Can Kill the Agent

Today, developers wire custom MCP servers by editing hidden JSON files by hand. One invalid character can break the entire integration.

Claude Desktop expects configuration in claude_desktop_config.json.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Cursor uses MCP configuration through: .cursor/mcp.json

Why MCP Config Breaks So Easily

MCP clients need exact process-launch metadata. JSON gives you no mercy:

  • A missing comma invalidates the entire file.
  • A trailing comma breaks strict parsers.
  • A wrong absolute path prevents process startup.
  • A missing API key breaks server initialization.
  • A bad environment variable name causes runtime auth failures.

The worst part: the client often fails during boot without clear logs. That silence turns MCP server setup into configuration archaeology.


The Correct Shape of a Local MCP Config

A robust local MCP config needs clear boundaries. Notice the important detail: command contains only the executable. The args array contains each argument separately.

Node.js Example:

{
  "mcpServers": {
    "internal-api": {
      "command": "node",
      "args": ["/Users/dev/mcp/internal-api-server/dist/index.js"],
      "env": {
        "INTERNAL_API_BASE_URL": "https://api.internal.example",
        "INTERNAL_API_TOKEN": "replace-me"
      }
    }
  }
}

Python Example:

{
  "mcpServers": {
    "local-db": {
      "command": "python3",
      "args": ["/Users/dev/mcp/local-db/server.py", "--database", "/Users/dev/data/app.sqlite"],
      "env": { "LOG_LEVEL": "info" }
    }
  }
}

JSON-RPC 2.0 Debugging: Where MCP Gets Ruthless

MCP uses JSON-RPC 2.0 message semantics. It punishes malformed streams. Your MCP server must keep stdout clean. If your server writes debug logs to stdout, you contaminate the JSON-RPC channel and the client breaks immediately.

A clean server process follows this rule:

  • stdin: JSON-RPC input.
  • stdout: JSON-RPC output only.
  • stderr: logs, diagnostics, and debug traces.

The Solution: Stop Hand-Writing MCP Config

Writing MCP configuration manually is an obsolete workflow. FmtDev solves this with a local-first tooling approach.

1. Visual MCP Config Builder

It gives you a visual, zero-error form for building MCP configs without hand-editing fragile JSON.

  • Define MCP server names, commands, and arguments.
  • Validate schemas in real-time.
  • Generate copy-ready config blocks for Claude and Cursor.

2. JSON-RPC 2.0 & MCP Protocol Inspector

When the config looks right but the tools don't appear, move down the stack. This tool helps developers validate raw protocol traffic instead of guessing. Validate id, method, params, and result fields directly.


Troubleshooting Matrix

SymptomLikely CauseFix
Tool never appears in ClaudeInvalid JSON in configValidate JSON and restart Claude
Tool never appears in CursorInvalid .cursor/mcp.jsonValidate JSON and restart Cursor
Server works in terminal but not clientMissing environment variableAdd values under env block
Server starts then disconnectsLogs written to stdoutWrite logs to stderr only
Client reports protocol errorMalformed JSON-RPC 2.0Inspect payloads with MCP Protocol Inspector
Command not foundWrong command valueUse executable only, move flags to args

Conclusion: Ship the Config Like Infrastructure

MCP server configuration now sits on the critical path for AI-assisted development. Treat it like infrastructure, not scratchpad JSON. Use FmtDev’s Visual MCP Config Builder to generate correct configuration and use our Protocol Inspector to validate your streams.

For unlimited offline usage and private config generation, use FmtDev Sovereign Suite and keep your AI engineering workflow local to your machine.

Outil associé

Prêt à utiliser l'outil Générateur et Validateur de Configuration de Serveurs MCP ? Toute l'exécution est locale.

Ouvrir Générateur et Validateur de Configuration de Serveurs MCP