Mcpbolt
Wire MCP servers into any AI coding tool from one paste
Ask AI about Mcpbolt
Powered by Claude Β· Grounded in docs
I know everything about Mcpbolt. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
mcpbolt β‘
Wire any MCP server into every AI coding tool β from one paste.
You copy an MCP config from anywhere. mcpbolt detects the format, asks which tools to install into, and writes the correct config file for each. No manual JSON editing across 10 different apps.
npx mcpbolt
Why
Every AI coding tool stores MCP configs differently:
- Claude Desktop uses
mcpServersin a JSON file deep in~/Library - VS Code uses
serverswith an explicittypefield - Zed uses
context_serversinside its settings - Codex uses TOML
- Continue uses YAML
Whenever you find a new MCP server, you have to manually translate and copy the config into each tool. mcpbolt does that translation automatically.
Install
CLI
Run without installing (recommended):
npx mcpbolt
Or install globally:
npm install -g mcpbolt
Requirements: Node.js 18+
Mac menu bar app (MCPBoltBar)
A native macOS menu bar app for browsing, importing, and removing MCP servers without touching the terminal.
brew install --cask vishmathpati/mcpbolt/mcpboltbar
Or grab the zip directly from Releases.
Requirements: macOS Monterey (12) or newer.
Usage
Just run it and paste:
$ npx mcpbolt
mcpbolt β‘ β wire MCP servers into any AI coding tool
Paste config below. Press Enter twice (or Ctrl+D) when done:
> { "mcpServers": { "supabase": { "url": "https://mcp.supabase.com/mcp" } } }
>
Detected
Format: JSON (Claude Desktop / VS Code / Cursor / Zed)
Servers: 1 β supabase
β Server name βΊ supabase
β Select targets βΊ Claude Desktop, Claude Code (global), Cursor (global), VS Code (project)
β Preview changes before writing? βΊ Yes
Preview
Claude Desktop (user) β ~/Library/Application Support/Claude/claude_desktop_config.json
Claude Code (user) β ~/.claude.json
Cursor (user) β ~/.cursor/mcp.json
VS Code (project) β .vscode/mcp.json
β Write files now? βΊ Yes
β Wired "supabase" into 4 targets.
β Quit and reopen Claude Desktop to load the new server.
β Open Cursor β Settings β MCP and click Refresh to activate.
β Run "Developer: Reload Window" in VS Code (Cmd+Shift+P).
Accepted input formats
Paste any of these β mcpbolt auto-detects the format:
Claude Desktop / Cursor / Windsurf JSON
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
}
}
}
VS Code JSON (servers + type)
{
"servers": {
"playwright": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@playwright/mcp"]
}
}
}
Remote HTTP / SSE server
{
"mcpServers": {
"supabase": {
"url": "https://mcp.supabase.com/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
npx one-liner
npx -y @modelcontextprotocol/server-filesystem /Users/me/projects
Docker command
docker run -i --rm mcp/brave-search
Bare URL
https://mcp.example.com/sse
Continue YAML
mcpServers:
- name: filesystem
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem"]
Codex TOML
[mcp_servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem"]
Supported tools
| Company | Tool | Config location |
|---|---|---|
| Anthropic | Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Anthropic | Claude Code (global) | ~/.claude.json |
| Anthropic | Claude Code (project) | .mcp.json |
| Cursor | Cursor (global) | ~/.cursor/mcp.json |
| Cursor | Cursor (project) | .cursor/mcp.json |
| Microsoft | VS Code (global) | ~/Library/Application Support/Code/User/mcp.json |
| Microsoft | VS Code (project) | .vscode/mcp.json |
| OpenAI | Codex CLI (global) | ~/.codex/config.toml |
| OpenAI | Codex CLI (project) | .codex/config.toml |
| Codeium | Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Zed | Zed (global) | ~/.config/zed/settings.json |
| Zed | Zed (project) | .zed/settings.json |
| Continue | Continue | ~/.continue/config.yaml |
| Gemini CLI (global) | ~/.gemini/settings.json | |
| Gemini CLI (project) | .gemini/settings.json | |
| Roo Code | Roo Code (project) | .roo/mcp.json |
mcpbolt auto-detects which tools are installed on your machine and pre-checks them in the selector.
How it works
Paste (any format)
β
Auto-detect format
β
Parse β Internal IR
{ name, transport, command/args/env or url/headers }
β
You pick targets
β
Render native config per tool
(mcpServers / servers / context_servers / TOML / YAML)
β
Merge into existing file (never overwrites sibling keys)
Backup written to .bak first
β
Dry-run preview β confirm β write
Every existing config is preserved. mcpbolt reads the file, inserts or updates the one server entry, and writes back. A .bak backup is created alongside every file that gets modified.
Safety
- Merge, never overwrite β only the target server key is touched; everything else in your config is preserved
- Backup before write β
.bakfile created next to every modified config - Dry-run by default β preview all changes before anything is written
- Auto-detect installed tools β only shows tools it finds on your machine
Contributing
Adding support for a new tool is one file.
1. Create src/targets/newtool.ts implementing the Target interface:
import type { Target, Scope } from './_base.ts'
import { irToClaudeShape } from './_base.ts'
import { mergeJson } from '../core/merger.ts'
export const myTool: Target = {
id: 'my-tool',
company: 'Acme',
name: 'My Tool',
scopes: ['user', 'project'],
detect() {
return /* check if tool is installed */
},
configPath(scope: Scope) {
return scope === 'user' ? '~/.mytool/mcp.json' : '.mytool/mcp.json'
},
toNative(ir) {
return irToClaudeShape(ir) // or write your own shape
},
write(scope, ir, dryRun) {
return mergeJson(this.configPath(scope), 'mcpServers', ir.name, this.toNative(ir), dryRun)
},
restartHint: 'Restart My Tool to load the new server.',
}
2. Register it in src/targets/index.ts:
import { myTool } from './newtool.ts'
export const ALL_TARGETS: Target[] = [
// ... existing targets
myTool,
]
That's it. The CLI picks it up automatically.
Shape helpers available in _base.ts:
| Helper | Output format | Used by |
|---|---|---|
irToClaudeShape | { command, args, env } | Claude, Cursor, Windsurf, Gemini, Roo |
irToVsCodeShape | { type, command, args, env } | VS Code |
irToZedShape | { command: { path, args, env } } | Zed |
irToCodexShape | { command, args, env } (for TOML) | Codex |
Merger helpers available in core/merger.ts:
| Helper | Use for |
|---|---|
mergeJson | Standard JSON config with a flat server map |
mergeJsonNested | JSON where servers live inside a nested key (e.g. Zed's settings.json) |
mergeYamlArray | YAML config where servers are an array (e.g. Continue) |
mergeToml | TOML config (e.g. Codex) |
Development
# Clone
git clone https://github.com/vishmathpati/mcpwire.git
cd mcpwire
# Install deps
bun install
# Run locally
bun dev
# Run tests
bun test.ts
# Build
bun run build
License
MIT β vishmathpati
