Skip to main content
Glama

OpenClaw MCP μ„œλ²„

npm version CI License: MIT GHCR Website

🦞 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:latest

docker-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-mcp

Claude 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_chat

OpenClaw에 λ©”μ‹œμ§€λ₯Ό 보내고 응닡을 λ°›μŒ

openclaw_status

OpenClaw κ²Œμ΄νŠΈμ›¨μ΄ μƒνƒœ 확인

openclaw_instances

κ΅¬μ„±λœ λͺ¨λ“  OpenClaw μΈμŠ€ν„΄μŠ€ λ‚˜μ—΄

비동기식 도ꡬ (μž₯κΈ° μ‹€ν–‰ μž‘μ—…μš©)

도ꡬ

μ„€λͺ…

openclaw_chat_async

λ©”μ‹œμ§€λ₯Ό λŒ€κΈ°μ—΄μ— λ„£κ³  μ¦‰μ‹œ task_idλ₯Ό λ°›μŒ

openclaw_task_status

μž‘μ—… μ§„ν–‰ 상황 확인 및 κ²°κ³Ό μˆ˜μ‹ 

openclaw_task_list

필터링을 μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  μž‘μ—… λ‚˜μ—΄

openclaw_task_cancel

보λ₯˜ 쀑인 μž‘μ—… μ·¨μ†Œ

닀쀑 μΈμŠ€ν„΄μŠ€ λͺ¨λ“œ

단일 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