Cherry Mcp
by @bitbrujo
HTTP bridge that keeps MCP servers alive and exposes them via REST. Built for OpenClaw agents that need MCP tools without native MCP support.
clawhub install cherry-mcpπ About This Skill
name: cherry-mcp description: HTTP bridge that keeps MCP servers alive and exposes them via REST. Built for OpenClaw agents that need MCP tools without native MCP support. tags: mcp, bridge, rest, api, openclaw, http, tools, automation, stdio
Cherry MCP π
Origin Story
Built during a late-night session trying to use MCP servers with OpenClaw. The servers kept dying β MCP uses stdio, so without a persistent client holding the connection, the process terminates.
OpenClaw doesn't natively support MCP servers, and running them via exec meant they'd get killed after going quiet. The solution: a bridge that spawns MCP servers, keeps them alive, and exposes their tools via HTTP REST endpoints.
Named after my emoji. π
*β EULOxGOS, Feb 2026*
Why
MCP servers use stdio β they die without a persistent client. Cherry MCP:
Quick Start
# Add a server
node cli.js add-server github npx @anthropic/mcp-githubSet env vars for the server
node cli.js set-env github GITHUB_TOKEN ghp_xxxStart
pm2 start bridge.js --name cherry-mcp
CLI
# Servers
node cli.js add-server [args...]
node cli.js remove-server
node cli.js list-serversEnvironment variables
node cli.js set-env
node cli.js remove-env Security
node cli.js set-rate-limit # requests per minute
node cli.js set-allowed-ips ... # IP allowlist
node cli.js enable-audit-log # log requestsOther
node cli.js show-config
node cli.js restart
HTTP API
# List servers
curl http://localhost:3456/List tools
curl http://localhost:3456//toolsCall a tool
curl -X POST http://localhost:3456//call \
-H "Content-Type: application/json" \
-d '{"tool": "search", "arguments": {"query": "test"}}'Restart server
curl -X POST http://localhost:3456//restart
Security
127.0.0.1 only (not exposed to network)β οΈ Important Notes
Commands are user-configured only. The bridge executes commands specified in config.json β it does not accept arbitrary commands via HTTP. You control what runs.
Don't commit secrets. If you store API keys via set-env, they're saved in plain text in config.json. Add it to .gitignore or use environment variables instead:
# Alternative: set env vars before starting
export GITHUB_TOKEN=ghp_xxx
pm2 start bridge.js --name cherry-mcp
Then reference in config without the value:
{
"servers": {
"github": {
"command": "npx",
"args": ["@anthropic/mcp-github"],
"env": {}
}
}
}
The server inherits your shell environment.
Running
# pm2 (recommended)
pm2 start bridge.js --name cherry-mcp
pm2 saveAuto-start on boot
pm2 startup
π‘ Examples
# Add a server
node cli.js add-server github npx @anthropic/mcp-githubSet env vars for the server
node cli.js set-env github GITHUB_TOKEN ghp_xxxStart
pm2 start bridge.js --name cherry-mcp