Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Xiaobai Print MCPgenerate an OpenClaw skill wrapper from the local bridge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
xiaobai-print
This repository now centers on the wrapper-skill flow:
Run a local HTTP bridge
Read the bridge tool list
Generate one or more OpenClaw skill directories
Let each skill call the bridge through a local
invoke.js
The repository still includes the stdio MCP server for Claude Desktop / Cursor, but the recommended OpenClaw path is:
OpenClaw skill -> scripts/invoke.js -> local HTTP bridge -> remote MCP
Build
npm install
npm run buildExecutables
xiaobai-print-mcp: stdio MCP serverxiaobai-print-bridge: local HTTP bridge for generated skillsgenerate-openclaw-skill: skill generator that reads the bridge tool list
Run The Local Bridge
Start the local HTTP bridge on 127.0.0.1:8787:
MY_MCP_UPSTREAM_URL="https://mcp.gongfudou.com/mcp/openclaw/sse" \
MY_MCP_TOKEN="your-token" \
xiaobai-print-bridgeOr use the compiled file directly:
node dist/bridge/http.js --host 127.0.0.1 --port 8787Bridge endpoints:
GET /healthGET /mcp/toolsPOST /mcp/tools/{toolName}
The bridge accepts Authorization: Bearer <token> per request. If the request omits Authorization, it falls back to MY_MCP_TOKEN / OPENCLAW_TOKEN.
Generate OpenClaw Skills
Generate a single skill from the local bridge:
generate-openclaw-skill \
--bridge-url http://127.0.0.1:8787 \
--out ./skill \
--skill-name my-mcpSplit tools into multiple skill directories by tool-name prefix:
generate-openclaw-skill \
--bridge-url http://127.0.0.1:8787 \
--out ./skills \
--skill-name my-mcp \
--split-by prefixOptional discovery auth:
generate-openclaw-skill \
--bridge-url http://127.0.0.1:8787 \
--out ./skill \
--token "$MY_MCP_TOKEN"Generated output for a single skill:
skill/
SKILL.md
scripts/
invoke.js
schema/
tools.jsonGenerated output for --split-by prefix:
skills/
schema/
tools.json
my-mcp-search/
SKILL.md
scripts/
invoke.js
schema/
tools.json
my-mcp-ticket/
...The generated wrapper uses:
MY_MCP_TOKENfor the bearer tokenMY_MCP_BASE_URLfor the local bridge URL
If MY_MCP_BASE_URL is not set, the wrapper falls back to the bridge URL used during generation.
OpenClaw Configuration
Recommended skill configuration:
{
"skills": {
"entries": {
"my-mcp": {
"enabled": true,
"apiKey": "your-token-here",
"env": {
"MY_MCP_BASE_URL": "http://127.0.0.1:8787"
}
}
}
}
}The generated SKILL.md declares:
metadata.openclaw.requires.env = ["MY_MCP_TOKEN"]metadata.openclaw.primaryEnv = "MY_MCP_TOKEN"
That lets OpenClaw inject skills.entries.<skill>.apiKey as MY_MCP_TOKEN.
MCP Server Mode
The original stdio MCP server is still available:
node dist/index.jsEnvironment variables:
Variable | Required | Description |
| Yes | Bearer token for the upstream remote MCP |
| No | Upstream remote MCP endpoint URL |
Examples
A checked-in generated example lives in examples/search-docs-skill/.
The bundled print skill now also follows the wrapper-based layout:
skills/xiaobai-print/
SKILL.md
scripts/
invoke.js
schema/
tools.jsonThis server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.