
OpenClaw 确实支持 MCP(在 OpenClaw 中被称为 ACP - Agent Control Protocol),这是通过 @agentclientprotocol/sdk 依赖实现的。
1. 基本概念
- MCP/ACP:Model Context Protocol(在 OpenClaw 中称为 Agent Control Protocol)是一个标准化协议,用于在 AI 代理和客户端(如 IDE、编辑器等)之间建立通信。
- 目的:允许外部工具和客户端与 OpenClaw 代理进行交互,发送提示、接收响应、管理会话等。
2. 对接方式
OpenClaw 提供了两种主要的对接方式:
A. 作为 ACP 服务器(推荐)
使用 openclaw acp 命令启动一个 ACP 服务器,它会通过 WebSocket 连接到 OpenClaw Gateway:
# 基本用法
openclaw acp
# 指定 Gateway URL 和认证信息
openclaw acp --url ws://localhost:18789 --token your-token
# 指定默认会话
openclaw acp --session "agent:main:main"
B. 作为 ACP 客户端
使用 openclaw acp client 命令启动一个交互式 ACP 客户端:
# 交互式客户端
openclaw acp client
# 指定工作目录
openclaw acp client --cwd /path/to/project
3. 协议格式
ACP 使用 JSON-RPC 2.0 格式进行通信,主要方法包括:
客户端 → 代理(请求)
initialize- 初始化连接session_new- 创建新会话session_load- 加载现有会话session_prompt- 发送提示session_cancel- 取消当前操作
代理 → 客户端(通知)
session_update- 会话更新(消息块、工具调用等)session_request_permission- 请求权限
4. 数据格式示例
初始化请求
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "1.0.0",
"clientCapabilities": {
"fs": { "readTextFile": true, "writeTextFile": true },
"terminal": true
},
"clientInfo": {
"name": "your-client",
"version": "1.0.0"
}
}
}
创建会话
{
"jsonrpc": "2.0",
"id": 2,
"method": "session_new",
"params": {
"cwd": "/path/to/working/directory",
"mcpServers": []
}
}
发送提示
{
"jsonrpc": "2.0",
"id": 3,
"method": "session_prompt",
"params": {
"sessionId": "your-session-id",
"prompt": [
{
"type": "text",
"text": "Hello, how are you?"
}
]
}
}
会话更新通知
{
"jsonrpc": "2.0",
"method": "session_update",
"params": {
"sessionId": "your-session-id",
"update": {
"sessionUpdate": "agent_message_chunk",
"content": {
"type": "text",
"text": "Hello! I'm doing well."
}
}
}
}
5. 如何集成到你的应用
步骤 1:启动 ACP 服务器
# 在后台启动 ACP 服务器
openclaw acp --url ws://your-gateway-url --token your-token &
步骤 2:建立连接
使用 @agentclientprotocol/sdk 或直接实现 JSON-RPC 2.0 协议:
// 使用官方 SDK
import { ClientSideConnection, ndJsonStream } from '@agentclientprotocol/sdk';
const connection = new ClientSideConnection(
(client) => ({
sessionUpdate: async (params) => {
// 处理会话更新
console.log('Session update:', params);
},
requestPermission: async (params) => {
// 处理权限请求
return { outcome: { outcome: 'selected', optionId: 'allow' } };
}
}),
ndJsonStream(yourWritableStream, yourReadableStream)
);
// 初始化
await connection.initialize({
protocolVersion: '1.0.0',
clientCapabilities: { /* ... */ },
clientInfo: { /* ... */ }
});
// 创建会话
const { sessionId } = await connection.newSession({ cwd: process.cwd() });
// 发送提示
await connection.prompt({
sessionId,
prompt: [{ type: 'text', text: 'Your message here' }]
});
步骤 3:处理流式响应
ACP 支持流式响应,你可以实时接收代理的输出:
// 在 sessionUpdate 回调中处理不同类型的更新
switch (update.sessionUpdate) {
case 'agent_message_chunk':
// 处理文本块
process.stdout.write(update.content.text);
break;
case 'tool_call':
// 处理工具调用
console.log(`[Tool] ${update.title} (${update.status})`);
break;
case 'tool_call_update':
// 处理工具调用更新
console.log(`[Tool update] ${update.toolCallId}: ${update.status}`);
break;
}
6. 配置要求
确保你的 OpenClaw Gateway 正在运行,并且:
- Gateway URL:通常是
ws://localhost:18789 - 认证:如果启用了认证,需要提供 token 或 password
- 权限:确保你的客户端有权限访问所需的工具和功能
7. 实际应用场景
- IDE 集成:在 VS Code、JetBrains 等编辑器中集成 OpenClaw
- 自定义客户端:构建专门的聊天界面或控制面板
- 自动化脚本:通过脚本与 OpenClaw 代理交互
- 多代理协调:在多个代理之间协调任务
8. 调试和测试
你可以使用交互式客户端进行测试:
# 启动交互式客户端
openclaw acp client
# 然后输入你的提示进行测试
> Hello, what can you do?


评论