OpenClaw 对 MCP(Model Context Protocol)的支持

吾爱分享 AI领域评论10字数 846阅读2分49秒阅读模式
OpenClaw 对 MCP(Model Context Protocol)的支持插图

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 正在运行,并且:

  1. Gateway URL:通常是 ws://localhost:18789
  2. 认证:如果启用了认证,需要提供 token 或 password
  3. 权限:确保你的客户端有权限访问所需的工具和功能

7. 实际应用场景

  • IDE 集成:在 VS Code、JetBrains 等编辑器中集成 OpenClaw
  • 自定义客户端:构建专门的聊天界面或控制面板
  • 自动化脚本:通过脚本与 OpenClaw 代理交互
  • 多代理协调:在多个代理之间协调任务

8. 调试和测试

你可以使用交互式客户端进行测试:

# 启动交互式客户端
openclaw acp client

# 然后输入你的提示进行测试
> Hello, what can you do?

 
吾爱分享

发表评论