OpenClaw MCP服务器

OpenClaw MCP服务器是一个模型上下文协议服务器,为Claude Code和其他MCP兼容客户端提供OpenClaw网关工具访问,支持消息传递、会话管理、调度任务、设备控制、网页搜索、文本转语音等功能。

  • by Helms-AI
  • JavaScript
  • 本地部署
  • 15 星标
  • 更新于
在 GitHub 查看 Helms-AI/openclaw-mcp-server

使用说明

OpenClaw MCP服务器

MCP(模型上下文协议)服务器,向Claude Code和其他MCP兼容客户端公开OpenClaw网关工具。

特性

允许Claude Code(和任何MCP客户端)访问:

  • 消息传递 --通过Telegram、WhatsApp、Discord、Slack、Signal、iMessage、谷歌聊天发送消息
  • 会话 --列出、检查并与其他OpenClaw课程交流
  • 调度 --为自动化任务创建和管理cron作业
  • 节点 --控制配对设备(通知、摄像头、位置、远程命令)
  • 网络 --搜索和获取网络内容
  • 记忆 --搜索OpenClaw的内存文件
  • 文本转语音 --文本到语音转换
  • 网关 --状态和配置访问

先决条件

  • Node.js 18+
  • OpenClaw网关在本地运行(默认值: http://127.0.0.1:18789)
  • 网关身份验证令牌(如果已配置)

安装

# Clone and install
cd /path/to/openclaw-mcp-server
npm install
npm run build

# Or install globally
npm install -g .

配置

环境变量

变量 描述 默认值
OPENCLAW_GATEWAY_URL 网关HTTP URL http://127.0.0.1:18789
OPENCLAW_GATEWAY_TOKEN 身份验证令牌(如果需要) (无)

客户端设置

OpenClaw MCP服务器可与任何兼容MCP的客户端配合使用。以下是常见客户端的配置说明。

克劳德桌面版

添加到您的Claude Desktop配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "openclaw": {
      "command": "node",
      "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
      }
    }
  }
}

备注:编辑配置文件后重新启动Claude Desktop。

克劳德代码(CLI)

使用Claude Code CLI添加:

# Using the CLI
claude mcp add openclaw -- node /path/to/openclaw-mcp-server/dist/index.js

# Or with environment variables
claude mcp add openclaw -e OPENCLAW_GATEWAY_TOKEN=your-token -- node /path/to/openclaw-mcp-server/dist/index.js

或手动编辑 ~/.claude/settings.json:

{
  "mcpServers": {
    "openclaw": {
      "command": "node",
      "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
      }
    }
  }
}

Zed编辑

添加到Zed设置文件(用打开 Zed: Open Settings 或编辑 ~/.config/zed/settings.json):

{
  "context_servers": {
    "openclaw": {
      "command": {
        "path": "node",
        "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"]
      },
      "settings": {
        "env": {
          "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
        }
      }
    }
  }
}

备注:添加配置后,您可能需要重新加载Zed。

Cline(VSCode扩展)

  1. 打开VSCode设置(Cmd/Ctrl+,)
  2. 搜索“临床:MCP服务器”
  3. 点击“在settings.json中编辑”
  4. 添加OpenClaw服务器配置:
{
  "cline.mcpServers": {
    "openclaw": {
      "command": "node",
      "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
      }
    }
  }
}

或者,使用临床MCP设置UI:

  1. 打开Cline面板
  2. 点击设置/齿轮图标
  3. 导航到MCP服务器部分
  4. 使用以下命令添加服务器: node /absolute/path/to/openclaw-mcp-server/dist/index.js

备注:配置更改后重新加载VSCode窗口。

Windsurf编辑器

添加到Windsurf的配置文件(~/.windsurf/settings.json 或通过设置UI):

{
  "mcp.servers": {
    "openclaw": {
      "command": "node",
      "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
      }
    }
  }
}

或者使用Windsurf设置UI:

  1. 打开设置(Cmd/Ctrl+,)
  2. 导航到“MCP服务器”
  3. 点击“添加服务器”
  4. 输入服务器详细信息:
    • 姓名: openclaw
    • 命令: node
    • Args: /absolute/path/to/openclaw-mcp-server/dist/index.js
    • 环境变量: OPENCLAW_GATEWAY_TOKEN=your-token-here

备注:添加配置后重新启动Windsurf。

其他MCP客户端

对于任何其他MCP兼容客户端,请使用标准MCP服务器配置格式:

{
  "command": "node",
  "args": ["/absolute/path/to/openclaw-mcp-server/dist/index.js"],
  "env": {
    "OPENCLAW_GATEWAY_TOKEN": "your-token-here"
  }
}

重要说明

  • 绝对路径:始终使用绝对路径(例如。, /Users/username/... 或 C:\Users\...)在配置文件中,不是相对路径或 ~
  • 令牌安全:如果您的OpenClaw网关需要身份验证,请设置 OPENCLAW_GATEWAY_TOKEN 环境变量
  • 网关URL:如果您的网关未在默认情况下运行 http://127.0.0.1:18789,set OPENCLAW_GATEWAY_URL 在环境变量中
  • 服务器重新启动:更改MCP服务器配置后,大多数客户端都需要重新启动或重新加载

可用工具

消息传递

openclaw_message_send

通过OpenClaw向各种消息平台(Telegram、WhatsApp、Discord、Slack、Signal、iMessage、Google Chat)发送消息。

自然语言示例:

  • “给@john发一条电报,说‘下午3点开会’”
  • “在Slack上给我的团队发消息:'部署已完成'”
  • “向Discord上的开发频道发送无声通知”

参数:

  • message (字符串,必填)-要发送的消息文本
  • channel (字符串,可选)-通道类型: telegram, whatsapp, discord, slack, signal, imessage, googlechat
  • target (字符串,可选)-目标聊天/用户ID或名称
  • replyTo (字符串,可选)-要回复的消息ID
  • silent (布尔值,可选)-无需通知即可静默发送

输入示例:

{
  "channel": "telegram",
  "target": "@username",
  "message": "Hello from OpenClaw!",
  "silent": false
}

输出示例:

{
  "success": true,
  "messageId": "msg_123456",
  "timestamp": "2026-02-02T10:30:00Z"
}

openclaw_message_broadcast

跨消息传递平台向多个目标广播消息。

自然语言示例:

  • “向我的所有Telegram群组广播‘今晚10点服务器维护’”
  • 在WhatsApp上向Alice、Bob和Charlie发送关于项目更新的消息
  • “通知我联系人列表中的所有人此事件”

参数:

  • message (字符串,必填)-要广播的消息文本
  • targets (字符串数组,必填)-目标ID列表
  • channel (字符串,可选)-通道类型

输入示例:

{
  "channel": "telegram",
  "targets": ["@user1", "@user2", "@user3"],
  "message": "Important announcement for everyone!"
}

输出示例:

{
  "success": true,
  "sent": 3,
  "failed": 0,
  "results": [
    { "target": "@user1", "status": "delivered" },
    { "target": "@user2", "status": "delivered" },
    { "target": "@user3", "status": "delivered" }
  ]
}

会话

openclaw_sessions_list

列出具有可选过滤功能的活动OpenClaw会话。

自然语言示例:

  • “显示最近一小时的所有活动会话”
  • “列出我的Telegram会话及其最近的消息”
  • “在过去的30分钟里,有哪些会话处于活动状态?”

参数:

  • kinds (字符串数组,可选)-按会话种类/类型筛选
  • activeMinutes (数字,可选)-按N分钟内的活动筛选
  • limit (number,可选)-要返回的最大会话数
  • messageLimit (数字,可选)-每个会话包括最后N条消息

输入示例:

{
  "activeMinutes": 60,
  "limit": 10,
  "messageLimit": 5
}

输出示例:

{
  "sessions": [
    {
      "sessionKey": "sess_abc123",
      "kind": "telegram",
      "label": "Main Chat",
      "active": true,
      "lastActivity": "2026-02-02T10:25:00Z",
      "messageCount": 127,
      "recentMessages": [
        { "role": "user", "content": "What's the weather?" },
        { "role": "assistant", "content": "Let me check..." }
      ]
    }
  ],
  "total": 1
}

openclaw_sessions_history

获取特定会话的完整消息历史记录。

自然语言示例:

  • “显示会话sess_abc123的对话历史记录”
  • “从我的主会话中获取最后100条消息”
  • “获取Telegram会话的所有工具调用的历史记录”

参数:

  • sessionKey (字符串,必填)-用于获取历史记录的会话密钥
  • limit (number,可选)-要返回的最大消息数
  • includeTools (布尔值,可选)-在历史记录中包含工具调用

输入示例:

{
  "sessionKey": "sess_abc123",
  "limit": 50,
  "includeTools": true
}

输出示例:

{
  "sessionKey": "sess_abc123",
  "messages": [
    {
      "timestamp": "2026-02-02T10:00:00Z",
      "role": "user",
      "content": "Search for OpenClaw documentation"
    },
    {
      "timestamp": "2026-02-02T10:00:05Z",
      "role": "assistant",
      "content": "I'll search for that...",
      "toolCalls": [
        { "tool": "web_search", "args": { "query": "OpenClaw documentation" } }
      ]
    }
  ],
  "total": 127
}

openclaw_sessions_send

向另一个活动的OpenClaw会话发送消息。

自然语言示例:

  • “询问助理2是否完成了数据分析”
  • “向监控会话发送一条消息,询问当前状态”
  • “告诉后台会话暂停其工作”

参数:

  • message (字符串,必填)-要发送的消息
  • sessionKey (字符串,可选)-目标会话密钥
  • label (字符串,可选)-目标会话标签(sessionKey的替代品)
  • timeoutSeconds (数字,可选)-响应超时

输入示例:

{
  "label": "Assistant-2",
  "message": "Can you help with the data analysis task?",
  "timeoutSeconds": 30
}

输出示例:

{
  "success": true,
  "response": "Sure, I'll start working on the data analysis right away.",
  "responseTime": 2.4
}

openclaw_sessions_spawn

在隔离会话中生成一个后台子代理,用于自主执行任务。

自然语言示例:

  • “生成后台代理以监视服务器日志中的错误”
  • “创建一个子代理来研究竞争对手,并在30分钟内总结结果”
  • “在我处理其他任务的同时,启动一个单独的会话来处理客户支持消息”

参数:

  • task (字符串,必填)-子代理的任务描述
  • agentId (字符串,可选)-要使用的特定代理ID
  • model (字符串,可选)-要使用的型号(例如,“claude-sonnet-4”)
  • label (字符串,可选)-人类可读的会话标签
  • runTimeoutSeconds (数字,可选)-最长执行时间

输入示例:

{
  "task": "Monitor the server logs and alert me if any errors occur in the next hour",
  "label": "Log Monitor",
  "model": "claude-sonnet-4",
  "runTimeoutSeconds": 3600
}

输出示例:

{
  "success": true,
  "sessionKey": "sess_xyz789",
  "label": "Log Monitor",
  "status": "running",
  "startTime": "2026-02-02T10:30:00Z"
}

调度

openclaw_cron_list

列出所有计划的cron作业。

自然语言示例:

  • “显示我的所有计划任务”
  • “列出所有cron作业,包括已禁用的作业”
  • “我设置了哪些自动化任务?”

参数:

  • includeDisabled (布尔值,可选)-在列表中包含已禁用的作业

输入示例:

{
  "includeDisabled": true
}

输出示例:

{
  "jobs": [
    {
      "id": "job_001",
      "name": "Daily Backup",
      "schedule": { "hour": 2, "minute": 0 },
      "enabled": true,
      "nextRun": "2026-02-03T02:00:00Z",
      "lastRun": "2026-02-02T02:00:00Z"
    },
    {
      "id": "job_002",
      "name": "Weekly Report",
      "schedule": { "dayOfWeek": 1, "hour": 9, "minute": 0 },
      "enabled": false
    }
  ],
  "total": 2
}

openclaw_cron_add

创建新的定时cron作业。

自然语言示例:

  • “安排每天凌晨2点的备份”
  • “创建一个定时任务,每天早上7点向我发送天气更新”
  • “设置每周一上午9点生成的周报”

参数:

  • job (对象,必填)-作业定义包含:
    • name (string)-作业名称
    • schedule (对象)-时间表规范(分钟、小时、星期等)
    • payload (对象)-任务有效载荷/配置
    • sessionTarget (string)-目标会话: main 或 isolated
    • enabled (boolean)-作业是否启用

输入示例:

{
  "job": {
    "name": "Morning Weather Alert",
    "schedule": {
      "hour": 7,
      "minute": 0
    },
    "payload": {
      "action": "send_message",
      "channel": "telegram",
      "message": "Good morning! Here's today's weather forecast."
    },
    "sessionTarget": "main",
    "enabled": true
  }
}

输出示例:

{
  "success": true,
  "jobId": "job_003",
  "nextRun": "2026-02-03T07:00:00Z"
}

openclaw_cron_remove

删除计划的cron作业。

自然语言示例:

  • “删除早晨天气警报作业”
  • “删除cron作业job_003”
  • “取消每日备份任务”

参数:

  • jobId (字符串,必填)-要删除的作业ID

输入示例:

{
  "jobId": "job_003"
}

输出示例:

{
  "success": true,
  "message": "Job job_003 removed successfully"
}

openclaw_cron_run

触发cron作业,使其在计划时间之外立即运行。

自然语言示例:

  • “立即运行备份作业”
  • “立即触发周报”
  • “立即执行job_001”

参数:

  • jobId (字符串,必填)-要执行的作业ID

输入示例:

{
  "jobId": "job_001"
}

输出示例:

{
  "success": true,
  "executionId": "exec_12345",
  "startTime": "2026-02-02T10:30:00Z",
  "status": "completed",
  "result": "Backup completed successfully"
}

节点(配对设备)

openclaw_nodes_status

获取所有配对节点(移动设备、远程机器)的状态信息。

自然语言示例:

  • “显示我所有连接设备的状态”
  • “哪些节点当前处于联机状态?”
  • “我的iPhone电池电量是多少?”

参数: 无

输入示例:

{}

输出示例:

{
  "nodes": [
    {
      "id": "node_iphone",
      "name": "iPhone 15 Pro",
      "type": "mobile",
      "platform": "ios",
      "online": true,
      "lastSeen": "2026-02-02T10:29:00Z",
      "battery": 87,
      "capabilities": ["camera", "location", "notifications"]
    },
    {
      "id": "node_laptop",
      "name": "MacBook Pro",
      "type": "computer",
      "platform": "macos",
      "online": true,
      "lastSeen": "2026-02-02T10:30:00Z"
    }
  ],
  "total": 2
}

openclaw_nodes_notify

向配对节点发送推送通知。

自然语言示例:

  • “向我的iPhone发送通知:'任务已成功完成'”
  • “以高优先级提醒我的手机部署已完成”
  • “通知我的所有设备晚餐准备好了”

参数:

  • title (字符串,必填)-通知标题
  • body (字符串,必填)-通知正文/消息
  • node (字符串,可选)-节点ID或名称(默认为所有节点)
  • priority (字符串,可选)-优先级: passive, active, timeSensitive

输入示例:

{
  "node": "node_iphone",
  "title": "Task Complete",
  "body": "Your data analysis has finished processing.",
  "priority": "timeSensitive"
}

输出示例:

{
  "success": true,
  "delivered": true,
  "node": "node_iphone",
  "timestamp": "2026-02-02T10:30:00Z"
}

openclaw_nodes_camera_snap

从节点的相机中捕获照片。

自然语言示例:

  • “用iPhone的后置摄像头拍照”
  • “用手机上的两个摄像头拍一张照片”
  • “从前置摄像头拍摄高质量图像”

参数:

  • node (字符串,可选)-节点ID或名称
  • facing (字符串,可选)-要使用的相机: front, back, both
  • quality (数字,可选)-图像质量0-100

输入示例:

{
  "node": "node_iphone",
  "facing": "back",
  "quality": 85
}

输出示例:

{
  "success": true,
  "images": [
    {
      "camera": "back",
      "url": "https://openclaw.gateway/images/img_abc123.jpg",
      "size": 2456789,
      "timestamp": "2026-02-02T10:30:00Z"
    }
  ]
}

openclaw_nodes_location

从配对节点获取当前位置。

自然语言示例:

  • “我的iPhone现在在哪里?”
  • “获取我手机的精确位置”
  • “显示node_iphone的当前位置”

参数:

  • node (字符串,可选)-节点ID或名称
  • desiredAccuracy (字符串,可选)-精度等级: coarse, balanced, precise

输入示例:

{
  "node": "node_iphone",
  "desiredAccuracy": "precise"
}

输出示例:

{
  "success": true,
  "location": {
    "latitude": 37.7749,
    "longitude": -122.4194,
    "accuracy": 10,
    "altitude": 52,
    "timestamp": "2026-02-02T10:30:00Z",
    "address": "San Francisco, CA"
  }
}

openclaw_nodes_run

在配对节点上执行命令。

自然语言示例:

  • “在我的笔记本电脑上运行'ls-la'”
  • “在远程服务器上执行git pull”
  • “通过运行'df-h'检查node_laptop上的磁盘空间”

参数:

  • command (字符串数组,必填)-要执行的命令和参数
  • node (字符串,可选)-节点ID或名称
  • cwd (string,可选)-命令执行的工作目录
  • timeoutMs (数字,可选)-命令超时(毫秒)

输入示例:

{
  "node": "node_laptop",
  "command": ["ls", "-la", "/home/user/projects"],
  "timeoutMs": 5000
}

输出示例:

{
  "success": true,
  "stdout": "total 48\ndrwxr-xr-x  6 user staff  192 Feb  2 10:00 .\ndrwxr-xr-x 12 user staff  384 Feb  1 09:00 ..\n...",
  "stderr": "",
  "exitCode": 0,
  "executionTime": 124
}

网络

openclaw_web_search

使用Brave Search API搜索网页。

自然语言示例:

  • “在网上搜索‘2026年最佳TypeScript实践’”
  • “查找过去一周关于人工智能助手的最新文章”
  • “在线查找OpenClaw文档”

参数:

  • query (字符串,必填)-搜索查询
  • count (number,可选)-要返回的结果数(1-10)
  • country (字符串,可选)-本地化结果的2个字母的国家代码
  • freshness (字符串,可选)-时间过滤器: pd (过去一天), pw (上周), pm (上个月), py (去年)

输入示例:

{
  "query": "OpenClaw AI assistant",
  "count": 5,
  "freshness": "pm"
}

输出示例:

{
  "results": [
    {
      "title": "OpenClaw - Personal AI Assistant Platform",
      "url": "https://example.com/openclaw",
      "description": "OpenClaw is an advanced AI assistant platform...",
      "age": "2 days ago"
    },
    {
      "title": "Getting Started with OpenClaw",
      "url": "https://docs.example.com/openclaw/intro",
      "description": "Learn how to set up and use OpenClaw...",
      "age": "1 week ago"
    }
  ],
  "totalResults": 5
}

openclaw_web_fetch

从URL中提取可读内容。

自然语言示例:

  • “从以下位置获取内容https://example.com/article并将其提取为降价”
  • “从这篇博客文章中获取文本:https://blog.example.com/post"
  • “在此URL下载并总结文章”

参数:

  • url (字符串,必填)-要获取的URL
  • extractMode (字符串,可选)-提取格式: markdown 或 text
  • maxChars (数字,可选)-返回的最大字符数

输入示例:

{
  "url": "https://example.com/article",
  "extractMode": "markdown",
  "maxChars": 5000
}

输出示例:

{
  "success": true,
  "url": "https://example.com/article",
  "title": "Understanding AI Assistants",
  "content": "# Understanding AI Assistants\n\nAI assistants have revolutionized...",
  "length": 3456,
  "extracted": "2026-02-02T10:30:00Z"
}

网关和实用程序

openclaw_gateway_status

获取OpenClaw网关会话的当前状态。

自然语言示例:

  • “我当前会话的状态如何?”
  • “显示网关状态”
  • “这个会议活跃了多久?”

参数:

  • sessionKey (字符串,可选)-要查询的特定会话密钥

输入示例:

{
  "sessionKey": "sess_abc123"
}

输出示例:

{
  "sessionKey": "sess_abc123",
  "status": "active",
  "uptime": 3600,
  "messageCount": 127,
  "toolCallCount": 45,
  "lastActivity": "2026-02-02T10:30:00Z",
  "connectedNodes": 2
}

openclaw_gateway_config_get

检索当前网关配置设置。

自然语言示例:

  • “显示网关配置”
  • “我的网关中启用了哪些功能?”
  • “获取当前网关设置”

参数: 无

输入示例:

{}

输出示例:

{
  "version": "1.2.0",
  "config": {
    "maxSessions": 50,
    "enabledChannels": ["telegram", "slack", "discord"],
    "features": {
      "webSearch": true,
      "tts": true,
      "nodes": true
    }
  }
}

openclaw_tts

将文本转换为语音音频。

自然语言示例:

  • “将‘Hello world’转换为语音”
  • “生成一个音频文件,说明‘任务已完成’”
  • “为Telegram创建一条语音消息,说‘迟到了,快到’”

参数:

  • text (字符串,必填)-要转换为语音的文本
  • channel (字符串,可选)-用于格式优化的目标通道

输入示例:

{
  "text": "Hello, this is a text to speech test.",
  "channel": "telegram"
}

输出示例:

{
  "success": true,
  "audioUrl": "https://openclaw.gateway/audio/tts_xyz789.mp3",
  "duration": 3.2,
  "format": "mp3",
  "size": 51200
}

openclaw_memory_search

使用语义搜索搜索OpenClaw的内存文件。

自然语言示例:

  • “在我的记忆中搜索有关天气的对话”
  • “查找上周提到的项目截止日期”
  • “查看我们讨论的部署过程”

参数:

  • query (字符串,必填)-搜索查询
  • maxResults (number,可选)-要返回的最大结果数
  • minScore (数字,可选)-最低相关性得分(0-1)

输入示例:

{
  "query": "weather forecast discussions from last week",
  "maxResults": 5,
  "minScore": 0.7
}

输出示例:

{
  "results": [
    {
      "content": "We discussed the weather forecast for San Francisco...",
      "timestamp": "2026-01-28T14:30:00Z",
      "score": 0.89,
      "source": "session_log_2026-01-28"
    },
    {
      "content": "The forecast indicated rain for the weekend...",
      "timestamp": "2026-01-27T10:15:00Z",
      "score": 0.82,
      "source": "session_log_2026-01-27"
    }
  ],
  "total": 5
}

发展

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Run built version
npm start

测试

使用MCP检查器测试服务器:

npx @modelcontextprotocol/inspector node dist/index.js

或直接测试:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js

许可证

麻省理工学院

作者

赫尔姆斯AI