Skip to main content
Glama

OpenClaw MCP Server

npm version CI License: MIT GHCR

🦞 Model Context Protocol (MCP) server for OpenClaw AI assistant integration.

Demo

Why I Built This

Hey! I created this MCP server because I didn't want to rely solely on messaging channels to communicate with OpenClaw. What really excites me is the ability to connect OpenClaw to the Claude web UI. Essentially, my chat can delegate tasks to my Claw bot, which then handles everything else β€” like spinning up Claude Code to fix issues for me.

Think of it as an AI assistant orchestrating another AI assistant. Pretty cool, right?

Quick Start

Pre-built images are published to GitHub Container Registry on every release.

docker pull ghcr.io/freema/openclaw-mcp:latest

Create a 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} - 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

Generate secrets and start:

export MCP_CLIENT_SECRET=$(openssl rand -hex 32) export OPENCLAW_GATEWAY_TOKEN=your-gateway-token docker compose up -d

Then in Claude.ai add a custom MCP connector pointing to your server with MCP_CLIENT_ID=openclaw and your MCP_CLIENT_SECRET.

Tip: Pin a specific version instead of latest for production: ghcr.io/freema/openclaw-mcp:1.1.0

Local (Claude Desktop)

npx openclaw-mcp

Add to your Claude Desktop config:

{ "mcpServers": { "openclaw": { "command": "npx", "args": ["openclaw-mcp"], "env": { "OPENCLAW_URL": "http://127.0.0.1:18789", "OPENCLAW_GATEWAY_TOKEN": "your-gateway-token" } } } }

Remote (Claude.ai) without 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

Important: When running behind a reverse proxy (Caddy, nginx, etc.), you must set MCP_ISSUER_URL (or --issuer-url) to your public HTTPS URL. Without this, OAuth metadata will advertise http://localhost:3000 and clients will fail to authenticate.

See Installation Guide for details.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 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) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Available Tools

Sync Tools

Tool

Description

openclaw_chat

Send messages to OpenClaw and get responses

openclaw_status

Check OpenClaw gateway health

Async Tools (for long-running operations)

Tool

Description

openclaw_chat_async

Queue a message, get task_id immediately

openclaw_task_status

Check task progress and get results

openclaw_task_list

List all tasks with filtering

openclaw_task_cancel

Cancel a pending task

Documentation

  • Installation β€” Setup for Claude Desktop & Claude.ai

  • Configuration β€” Environment variables & options

  • Deployment β€” Docker & production setup

  • Threat Model β€” What Claude can/can't trigger, trust boundaries & attack surfaces

  • Logging β€” What gets logged, where, and what is never logged

  • Development β€” Contributing & adding tools

  • Security β€” Security policy & best practices

Security

⚠️ Always enable authentication in production!

# 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

Configure CORS to restrict access:

CORS_ORIGINS=https://claude.ai,https://your-app.com

See Configuration for all security options.

Requirements

  • Node.js β‰₯ 20

  • OpenClaw gateway running with HTTP API enabled:

    // openclaw.json { "gateway": { "http": { "endpoints": { "chatCompletions": { "enabled": true } } } } }

License

MIT

Author

Created by TomΓ‘Ε‘ Grasl

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