openclaw-mcp
OpenClaw MCP μλ²
π¦ OpenClaw AI μ΄μμ€ν΄νΈ ν΅ν©μ μν MCP(Model Context Protocol) μλ²μ λλ€.
λ°λͺ¨
μ μ λκΈ°
μλ νμΈμ! μ λ λ©μμ§ μ±λμλ§ μμ‘΄νμ¬ OpenClawμ ν΅μ νκ³ μΆμ§ μμκΈ° λλ¬Έμ μ΄ MCP μλ²λ₯Ό λ§λ€μμ΅λλ€. μ κ° μ λ§ ν₯λ―Έλ‘κ² μκ°νλ λΆλΆμ OpenClawλ₯Ό Claude μΉ UIμ μ°κ²°νλ κΈ°λ₯μ λλ€. λ³Έμ§μ μΌλ‘ μ μ±ν μ΄ Claw λ΄μκ² μμ μ μμν μ μκ³ , κ·Έλ¬λ©΄ λ΄μ΄ Claude Codeλ₯Ό μ€ννμ¬ λ¬Έμ λ₯Ό ν΄κ²°νλ λ± λλ¨Έμ§ λͺ¨λ κ²μ μ²λ¦¬νκ² λ©λλ€.
AI μ΄μμ€ν΄νΈκ° λ€λ₯Έ AI μ΄μμ€ν΄νΈλ₯Ό μ‘°μ νλ κ²μ΄λΌκ³ μκ°νλ©΄ λ©λλ€. κ½€ λ©μ§μ§ μλμ?
λΉ λ₯Έ μμ
Docker (κΆμ₯)
μ¬μ λΉλλ μ΄λ―Έμ§λ 릴리μ€λ λλ§λ€ GitHub Container Registryμ κ²μλ©λλ€.
docker pull ghcr.io/freema/openclaw-mcp:latestdocker-compose.yml μμ±:
services:
mcp-bridge:
image: ghcr.io/freema/openclaw-mcp:latest
container_name: openclaw-mcp
restart: unless-stopped
ports:
- "3000:3000"
environment:
- OPENCLAW_URL=http://host.docker.internal:18789
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
- OPENCLAW_MODEL=openclaw
- AUTH_ENABLED=true
- MCP_CLIENT_ID=openclaw
- MCP_CLIENT_SECRET=${MCP_CLIENT_SECRET}
- MCP_ISSUER_URL=${MCP_ISSUER_URL:-}
- CORS_ORIGINS=https://claude.ai
extra_hosts:
- "host.docker.internal:host-gateway"
read_only: true
security_opt:
- no-new-privileges보μ λΉλ° μμ± λ° μμ:
export MCP_CLIENT_SECRET=$(openssl rand -hex 32)
export OPENCLAW_GATEWAY_TOKEN=your-gateway-token
docker compose up -dκ·Έλ° λ€μ Claude.aiμμ MCP_CLIENT_ID=openclaw λ° MCP_CLIENT_SECRETμ μ¬μ©νμ¬ μλ²λ₯Ό κ°λ¦¬ν€λ μ¬μ©μ μ§μ MCP 컀λ₯ν°λ₯Ό μΆκ°ν©λλ€.
ν: νλ‘λμ νκ²½μμλ
latestλμ νΉμ λ²μ μ κ³ μ νμΈμ:ghcr.io/freema/openclaw-mcp:1.1.0
λ‘컬 (Claude Desktop)
npx openclaw-mcpClaude Desktop μ€μ μ μΆκ°:
{
"mcpServers": {
"openclaw": {
"command": "npx",
"args": ["openclaw-mcp"],
"env": {
"OPENCLAW_URL": "http://127.0.0.1:18789",
"OPENCLAW_GATEWAY_TOKEN": "your-gateway-token",
"OPENCLAW_MODEL": "openclaw",
"OPENCLAW_TIMEOUT_MS": "300000"
}
}
}
}μ격 (Claude.ai) - Docker λ―Έμ¬μ©
AUTH_ENABLED=true MCP_CLIENT_ID=openclaw MCP_CLIENT_SECRET=your-secret \
MCP_ISSUER_URL=https://mcp.your-domain.com \
CORS_ORIGINS=https://claude.ai OPENCLAW_GATEWAY_TOKEN=your-gateway-token \
npx openclaw-mcp --transport sse --port 3000μ€μ: 리λ²μ€ νλ‘μ(Caddy, nginx λ±) λ€μμ μ€νν λλ
MCP_ISSUER_URL(λλ--issuer-url)μ κ³΅κ° HTTPS URLλ‘ μ€μ ν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ OAuth λ©νλ°μ΄ν°κ°http://localhost:3000μ μλ¦¬κ² λμ΄ ν΄λΌμ΄μΈνΈκ° μΈμ¦μ μ€ν¨νκ² λ©λλ€.
μμΈν λ΄μ©μ μ€μΉ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
μν€ν μ²
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your Server β
β β
β βββββββββββββββββββ βββββββββββββββββββββββββββ β
β β OpenClaw β β OpenClaw MCP β β
β β Gateway βββββββΊβ Bridge Server β β
β β :18789 β β :3000 β β
β β β β β β
β β OpenAI-compat β β - OAuth 2.1 auth β β
β β /v1/chat/... β β - CORS protection β β
β βββββββββββββββββββ β - Input validation β β
β ββββββββββββ¬βββββββββββββββ β
β β β
ββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββ
β HTTPS + OAuth 2.1
βΌ
βββββββββββββββββββ
β Claude.ai β
β (MCP Client) β
βββββββββββββββββββμ¬μ© κ°λ₯ν λꡬ
λκΈ°μ λꡬ
λꡬ | μ€λͺ |
| OpenClawμ λ©μμ§λ₯Ό 보λ΄κ³ μλ΅μ λ°μ |
| OpenClaw κ²μ΄νΈμ¨μ΄ μν νμΈ |
| ꡬμ±λ λͺ¨λ OpenClaw μΈμ€ν΄μ€ λμ΄ |
λΉλκΈ°μ λꡬ (μ₯κΈ° μ€ν μμ μ©)
λꡬ | μ€λͺ |
| λ©μμ§λ₯Ό λκΈ°μ΄μ λ£κ³ μ¦μ task_idλ₯Ό λ°μ |
| μμ μ§ν μν© νμΈ λ° κ²°κ³Ό μμ |
| νν°λ§μ μ¬μ©νμ¬ λͺ¨λ μμ λμ΄ |
| 보λ₯ μ€μΈ μμ μ·¨μ |
λ€μ€ μΈμ€ν΄μ€ λͺ¨λ
λ¨μΌ MCP μλ²μμ μ¬λ¬ OpenClaw κ²μ΄νΈμ¨μ΄λ₯Ό μ‘°μ νμΈμ. νλμ λΈλ¦¬μ§λ‘ μ¬λ¬ Clawλ₯Ό κ΄λ¦¬νμΈμ. νλ‘λμ , μ€ν μ΄μ§, κ°λ° λ± μνλ μ΄λ¦μΌλ‘ μμ²μ λΌμ°ν ν μ μμ΅λλ€(lobster-supreme λ° the-claw-abidesμ κ°μ μ΄λ¦λ μλ²½νκ² μ ν¨ν©λλ€).
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Claude.ai / Claude Desktop β
β (MCP Client) β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OpenClaw MCP Bridge Server β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Instance β β Instance β β Instance β β
β β Registry β β Resolver β β Validator β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β ββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββ΄ββββββββ β
β β Per-Instance OpenClaw Clients β β
β β (separate auth, timeout, URL per instance) β β
β ββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββ β
βββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β π¦ prod β β π¦ staging β β π¦ dev β
β (default) β β β β β
β :18789 β β :18789 β β :18789 β
β OpenClaw GW β β OpenClaw GW β β OpenClaw GW β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββμ€μ
OPENCLAW_INSTANCES='[
{"name": "prod", "url": "http://prod:18789", "token": "tok1", "default": true},
{"name": "staging", "url": "http://staging:18789", "token": "tok2"},
{"name": "dev", "url": "http://dev:18789", "token": "tok3"}
]'μ¬μ©λ²
λͺ¨λ λꡬλ νΉμ κ²μ΄νΈμ¨μ΄λ₯Ό λμμΌλ‘ νλ μ νμ instance λ§€κ°λ³μλ₯Ό νμ©ν©λλ€:
# Chat with staging instance
openclaw_chat message="Deploy status?" instance="staging"
# Check health of prod
openclaw_status instance="prod"
# List all configured instances
openclaw_instances
# Async task targeting dev
openclaw_chat_async message="Run tests" instance="dev"instanceκ° μλ΅λλ©΄ κΈ°λ³Έ μΈμ€ν΄μ€κ° μ¬μ©λ©λλ€. κ° μΈμ€ν΄μ€λ κ³ μ ν μΈμ¦ ν ν°, μκ° μ ν λ° URLμ κ°μ§λ©° μμ ν 격리λ©λλ€.
μ£Όμ κΈ°λ₯
무μ€λ¨ μ κ·Έλ μ΄λ β κΈ°μ‘΄ λ¨μΌ μΈμ€ν΄μ€ λ°°ν¬λ κ΅¬μ± λ³κ²½ μμ΄ μλν©λλ€.
μΈμ€ν΄μ€λ³ 격리 β λ³λμ μΈμ¦ ν ν°, μκ° μ ν λ° URL μ¬μ©.
λμ λΌμ°ν β Claudeκ° μμ²λ³λ‘ μ¬λ°λ₯Έ μΈμ€ν΄μ€λ₯Ό μ νν©λλ€.
μμ μΆμ β λΉλκΈ° μμ μ΄ λμ μΈμ€ν΄μ€λ₯Ό κΈ°μ΅ν©λλ€.
보μ β ν ν°μ
openclaw_instancesλ₯Ό ν΅ν΄ λ ΈμΆλμ§ μμ΅λλ€.
μ 체 μ°Έμ‘°λ κ΅¬μ± β λ€μ€ μΈμ€ν΄μ€ λͺ¨λλ₯Ό μ°Έμ‘°νμΈμ.
λ¬Έμ
μ€μΉ β Claude Desktop λ° Claude.ai μ€μ
κ΅¬μ± β νκ²½ λ³μ λ° μ΅μ
λ°°ν¬ β Docker λ° νλ‘λμ μ€μ
μν λͺ¨λΈ β Claudeκ° νΈλ¦¬κ±°ν μ μλ κ²κ³Ό μλ κ², μ λ’° κ²½κ³ λ° κ³΅κ²© νλ©΄
λ‘κΉ β κΈ°λ‘λλ λ΄μ©, μμΉ λ° μ λ κΈ°λ‘λμ§ μλ λ΄μ©
κ°λ° β κΈ°μ¬ λ° λꡬ μΆκ°
보μ β 보μ μ μ± λ° λͺ¨λ² μ¬λ‘
보μ
β οΈ νλ‘λμ νκ²½μμλ νμ μΈμ¦μ νμ±ννμΈμ!
# Generate secure client secret
export MCP_CLIENT_SECRET=$(openssl rand -hex 32)
# Run with auth enabled
AUTH_ENABLED=true MCP_CLIENT_ID=openclaw MCP_CLIENT_SECRET=$MCP_CLIENT_SECRET \
openclaw-mcp --transport sseμ‘μΈμ€λ₯Ό μ ννλ €λ©΄ CORSλ₯Ό ꡬμ±νμΈμ:
CORS_ORIGINS=https://claude.ai,https://your-app.comλͺ¨λ 보μ μ΅μ μ ꡬμ±μ μ°Έμ‘°νμΈμ.
μꡬ μ¬ν
Node.js β₯ 20
HTTP APIκ° νμ±νλ μνλ‘ μ€ν μ€μΈ OpenClaw κ²μ΄νΈμ¨μ΄:
// openclaw.json
{ "gateway": { "http": { "endpoints": { "chatCompletions": { "enabled": true } } } } }λΌμ΄μ μ€
MIT
μμ±μ
TomΓ‘Ε‘ Grasl μ μ
κ΄λ ¨ νλ‘μ νΈ
OpenClaw β μ΄ MCPκ° μ°κ²°λλ AI μ΄μμ€ν΄νΈ
MCP μ¬μ β Model Context Protocol λ¬Έμ
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/freema/openclaw-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server