MCP Client Configuration
August 18, 2026 · View on GitHub
Two protocol eras are served at once. A client that speaks 2026-07-28 needs
no configuration and no handshake: it discovers the server with
server/discover and states its version in every request. A handshake client
uses 2025-11-25, and 2025-06-18 remains supported for existing clients.
Claude Desktop
Edit claude_desktop_config.json — ~/Library/Application Support/Claude/ on
macOS, %APPDATA%\Claude\ on Windows — and restart Claude Desktop:
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
Codex
[mcp_servers.coding_tools]
command = "uvx"
args = ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
Claude Code
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
Or from the command line:
claude mcp add coding-tools -- uvx coding-tools-mcp --stdio --workspace /path/to/repo
Cursor
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
VS Code
GitHub Copilot reads .vscode/mcp.json in the workspace:
{
"servers": {
"coding-tools": {
"type": "stdio",
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
For the local HTTP server instead, use "type": "http" with "url" and
"headers" keys.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json and restart Windsurf:
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
Gemini CLI
One command, project scope by default:
gemini mcp add coding-tools -- uvx coding-tools-mcp --stdio --workspace /path/to/repo
Or edit ~/.gemini/settings.json (user scope) or .gemini/settings.json
(project scope):
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": ["coding-tools-mcp", "--stdio", "--workspace", "/path/to/repo"]
}
}
}
For the local HTTP server, transport http replaces the command entirely:
gemini mcp add --transport http coding-tools http://127.0.0.1:8765/mcp
Authenticated endpoints take --header "Authorization: Bearer <token>". Keep
the server name free of underscores: Gemini CLI derives tool names from it and
splits on the first one.
Continue, Cursor, Cline, And Generic HTTP Clients
Configure a Streamable HTTP MCP server at:
http://127.0.0.1:8765/mcp
The server is designed for local loopback use. Do not bind it to a public interface without external authentication and sandboxing.
Remote MCP
For remote MCP clients, keep the server on loopback and expose it through an HTTPS tunnel with authentication. The fixed tool set includes mutation and command execution:
CODING_TOOLS_MCP_AUTH_MODE=bearer \
integrations/tunnels/tunnel.sh cloudflared /path/to/repo
Configure the remote MCP client with:
URL: https://<tunnel-host>/mcp
Static bearer-token auth is available for clients that support custom
Authorization headers. OAuth-aware MCP clients can use --oauth-mode, which
publishes protected-resource and authorization-server discovery plus RFC 7591
dynamic registration and a PKCE authorization flow. Clients that support
neither require an external authenticated proxy. See Remote MCP.
ChatGPT
ChatGPT is a cloud client: it cannot launch a local process, so it needs the authenticated HTTPS tunnel from Remote MCP, and its custom connectors offer OAuth or no authentication — there is no static bearer header to enter.
CODING_TOOLS_MCP_AUTH_MODE=oauth integrations/tunnels/tunnel.sh cloudflared /path/to/repo
In ChatGPT, enable developer mode (Settings → Connectors → Advanced
settings), then create a custom connector pointing at
https://<tunnel-host>/mcp. If ChatGPT discovers the OAuth endpoints itself,
the authorization page asks for the password the script printed. If the
connector form asks for details instead, fill them in:
- Authorization URL:
https://<tunnel-host>/oauth/authorize - Token URL:
https://<tunnel-host>/oauth/token - Client ID and secret: from a pre-registered client — start the tunnel with
CODING_TOOLS_MCP_OAUTH_CLIENT_ID,CODING_TOOLS_MCP_OAUTH_CLIENT_SECRET, andCODING_TOOLS_MCP_OAUTH_REDIRECT_URISset to the redirect URI ChatGPT shows.
Grok
grok.com is also cloud-only. Start the same OAuth tunnel, then add a custom
connector at grok.com/connectors (Settings → Connectors) with
https://<tunnel-host>/mcp; Grok completes the OAuth flow in a popup.
The xAI API takes the static bearer tunnel instead — a request's remote MCP tool entry pins the server and the header:
{
"server_url": "https://<tunnel-host>/mcp",
"server_label": "coding_tools",
"authorization": "<CODING_TOOLS_MCP_AUTH_TOKEN>"
}
Only Streamable HTTP and SSE transports are supported on Grok's side, which is what the tunnel already speaks.