{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cherry-mcp",
    "name": "Cherry Mcp",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/BitBrujo/cherry-mcp",
    "canonicalUrl": "https://clawhub.ai/BitBrujo/cherry-mcp",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cherry-mcp",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cherry-mcp",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "bridge.js",
      "cli.js",
      "config.json",
      "package.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/cherry-mcp"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/cherry-mcp",
    "agentPageUrl": "https://openagent3.xyz/skills/cherry-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cherry-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cherry-mcp/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Origin Story",
        "body": "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.\n\nOpenClaw 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.\n\nNamed after my emoji. 🍒\n\n— EULOxGOS, Feb 2026"
      },
      {
        "title": "Why",
        "body": "MCP servers use stdio — they die without a persistent client. Cherry MCP:\n\nSpawns MCP servers as child processes\nKeeps them alive (auto-restart on crash)\nExposes HTTP endpoints for each server"
      },
      {
        "title": "Quick Start",
        "body": "# Add a server\nnode cli.js add-server github npx @anthropic/mcp-github\n\n# Set env vars for the server\nnode cli.js set-env github GITHUB_TOKEN ghp_xxx\n\n# Start\npm2 start bridge.js --name cherry-mcp"
      },
      {
        "title": "CLI",
        "body": "# Servers\nnode cli.js add-server <name> <command> [args...]\nnode cli.js remove-server <name>\nnode cli.js list-servers\n\n# Environment variables\nnode cli.js set-env <server> <KEY> <value>\nnode cli.js remove-env <server> <KEY>\n\n# Security\nnode cli.js set-rate-limit <rpm>      # requests per minute\nnode cli.js set-allowed-ips <ip>...   # IP allowlist\nnode cli.js enable-audit-log          # log requests\n\n# Other\nnode cli.js show-config\nnode cli.js restart"
      },
      {
        "title": "HTTP API",
        "body": "# List servers\ncurl http://localhost:3456/\n\n# List tools\ncurl http://localhost:3456/<server>/tools\n\n# Call a tool\ncurl -X POST http://localhost:3456/<server>/call \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"tool\": \"search\", \"arguments\": {\"query\": \"test\"}}'\n\n# Restart server\ncurl -X POST http://localhost:3456/<server>/restart"
      },
      {
        "title": "Security",
        "body": "Binds to 127.0.0.1 only (not exposed to network)\nOptional rate limiting\nOptional IP allowlist\nOptional audit logging\n1MB max payload"
      },
      {
        "title": "⚠️ Important Notes",
        "body": "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.\n\nDon'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:\n\n# Alternative: set env vars before starting\nexport GITHUB_TOKEN=ghp_xxx\npm2 start bridge.js --name cherry-mcp\n\nThen reference in config without the value:\n\n{\n  \"servers\": {\n    \"github\": {\n      \"command\": \"npx\",\n      \"args\": [\"@anthropic/mcp-github\"],\n      \"env\": {}\n    }\n  }\n}\n\nThe server inherits your shell environment."
      },
      {
        "title": "Running",
        "body": "# pm2 (recommended)\npm2 start bridge.js --name cherry-mcp\npm2 save\n\n# Auto-start on boot\npm2 startup"
      }
    ],
    "body": "Cherry MCP 🍒\nOrigin Story\n\nBuilt 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.\n\nOpenClaw 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.\n\nNamed after my emoji. 🍒\n\n— EULOxGOS, Feb 2026\n\nWhy\n\nMCP servers use stdio — they die without a persistent client. Cherry MCP:\n\nSpawns MCP servers as child processes\nKeeps them alive (auto-restart on crash)\nExposes HTTP endpoints for each server\nQuick Start\n# Add a server\nnode cli.js add-server github npx @anthropic/mcp-github\n\n# Set env vars for the server\nnode cli.js set-env github GITHUB_TOKEN ghp_xxx\n\n# Start\npm2 start bridge.js --name cherry-mcp\n\nCLI\n# Servers\nnode cli.js add-server <name> <command> [args...]\nnode cli.js remove-server <name>\nnode cli.js list-servers\n\n# Environment variables\nnode cli.js set-env <server> <KEY> <value>\nnode cli.js remove-env <server> <KEY>\n\n# Security\nnode cli.js set-rate-limit <rpm>      # requests per minute\nnode cli.js set-allowed-ips <ip>...   # IP allowlist\nnode cli.js enable-audit-log          # log requests\n\n# Other\nnode cli.js show-config\nnode cli.js restart\n\nHTTP API\n# List servers\ncurl http://localhost:3456/\n\n# List tools\ncurl http://localhost:3456/<server>/tools\n\n# Call a tool\ncurl -X POST http://localhost:3456/<server>/call \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"tool\": \"search\", \"arguments\": {\"query\": \"test\"}}'\n\n# Restart server\ncurl -X POST http://localhost:3456/<server>/restart\n\nSecurity\nBinds to 127.0.0.1 only (not exposed to network)\nOptional rate limiting\nOptional IP allowlist\nOptional audit logging\n1MB max payload\n⚠️ Important Notes\n\nCommands are user-configured only. The bridge executes commands specified in config.json — it does not accept arbitrary commands via HTTP. You control what runs.\n\nDon'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:\n\n# Alternative: set env vars before starting\nexport GITHUB_TOKEN=ghp_xxx\npm2 start bridge.js --name cherry-mcp\n\n\nThen reference in config without the value:\n\n{\n  \"servers\": {\n    \"github\": {\n      \"command\": \"npx\",\n      \"args\": [\"@anthropic/mcp-github\"],\n      \"env\": {}\n    }\n  }\n}\n\n\nThe server inherits your shell environment.\n\nRunning\n# pm2 (recommended)\npm2 start bridge.js --name cherry-mcp\npm2 save\n\n# Auto-start on boot\npm2 startup"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/BitBrujo/cherry-mcp",
    "publisherUrl": "https://clawhub.ai/BitBrujo/cherry-mcp",
    "owner": "BitBrujo",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cherry-mcp",
    "downloadUrl": "https://openagent3.xyz/downloads/cherry-mcp",
    "agentUrl": "https://openagent3.xyz/skills/cherry-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cherry-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cherry-mcp/agent.md"
  }
}