MCP 集成

Cell 内的 MCP(Model Context Protocol)Server 注册与连接管理,以及三层浏览器/桌面自动化。


MCP 概念

MCP 是 wesgine 扩展 Cell 能力的核心机制。每个 Cell 可以注册多个 MCP Server,其暴露的工具自动出现在 Cell 的 ToolRegistry 中,模型可直接调用。

Cell A 的 MCP 工具对 Cell B 的 Agent 物理不可见(AX-1 隔离)。


MCP API

Server 管理

方法路径说明
GET/mcpMCP Server 列表
POST/mcp注册/更新 MCP Server
DELETE/mcp/{name}删除 MCP Server

连接控制

方法路径说明
POST/mcp/{name}/probe探测连通性
POST/mcp/{name}/connect建立连接
POST/mcp/{name}/disconnect断开连接

工具调用

方法路径说明
POST/mcp/{name}/call调用工具
GET/mcp/eventsSSE 事件流

SDK 调用

// 注册
err := cell.MCPs().Upsert(ctx, mcp.ServerConfig{
    Name:      "legal-mcp",
    Transport: "stdio",
    Command:   []string{"/opt/mcp/legal/bin/server"},
})

// 列出
servers, err := cell.MCPs().List(ctx)

// 探测
result, err := cell.MCPs().Probe(ctx, "legal-mcp")

// 连接
err := cell.MCPs().Connect(ctx, "legal-mcp")

// 断开
err := cell.MCPs().Disconnect(ctx, "legal-mcp")

// 调用
result, err := cell.MCPs().Call(ctx, "legal-mcp", mcp.CallRequest{
    Tool:   "search_cases",
    Params: map[string]any{"query": "合同纠纷"},
})

MCP 工具集成

MCP Server 注册后,其暴露的工具自动出现在 Cell ToolRegistry:

Cell ToolRegistry
├── 引擎内置工具 (read, write, exec, grep, ...)
├── SDK 注册工具 (cell.Tools().Register)
├── MCP 代理工具 (cell.MCPs().Upsert)  ← MCP 工具在这里
├── Adapter 派生工具 (kb/email/cron/...)
└── Per-run 临时工具 (RunParams.Tools)

模型看到的是统一的工具列表,无需感知工具来自 MCP 还是内置。


配额(INV-QUOTA-05)

MaxMCPServers 遵循外设配额统一规则:

规则说明
唯一增长点MCP Upsert 是唯一能让集合变大的地方
整体替换幂等UpdateSpec 的 MCPs 替换对 cap 幂等
覆盖已有名字 delta=0upsert 是编辑手势
注意无运行时存储MCPs 的集合就是 CellSpec,运行期越界持久化后下次重启才拒绝

三层浏览器/桌面自动化

wesgine 提供三层自动化 adapter,按使用场景选择:

HeadlessBrowser(服务端匿名抓取)

spec := wesgine.CellSpec{
    HeadlessBrowser: &wesgine.HeadlessBrowserConfig{
        // 使用 chromedp
    },
}
特性说明
运行时位置服务端
技术chromedp
用途匿名网页抓取
用户登录态❌ 无
CellSpec 字段.HeadlessBrowser(非 nil 即启用)

API:

方法路径说明
GET/headless-browser/state状态查询

Playwright(用户浏览器自动化)

spec := wesgine.CellSpec{
    Playwright: &wesgine.PlaywrightConfig{
        // mode: user + extension
    },
}
特性说明
运行时位置服务端 subprocess + 用户浏览器
技术Playwright MCP
用途用户浏览器自动化(登录态可用)
CellSpec 字段.Playwright

API:

方法路径说明
GET/playwright/status连接状态
PUT/playwright/token更新扩展 auto-connect token

Desktop(桌面自动化 Device Agent)

spec := wesgine.CellSpec{
    Desktop: &wesgine.DesktopConfig{
        Command:   "/opt/device-agent/bin/agent",
        Transport: "stdio",
    },
}
特性说明
运行时位置客户端 binary(AX-5)
技术MCP over stdio
用途OS 级桌面自动化(截屏/剪贴板/应用控制)
CellSpec 字段.Desktop

API:

方法路径说明
GET/desktop/statusAgent 连接状态

选择指南

新能力 X →
├── 服务端匿名爬取?        → CellSpec.HeadlessBrowser
├── 用户浏览器(登录态)?   → CellSpec.Playwright
├── 桌面/剪贴板/截屏?      → CellSpec.Desktop + 客户端二进制
├── 其他客户端硬件?        → AX-5:消费应用自建 Device Agent + cell.MCPs()
└── 新外设协议?            → adapter/ + Cell 声明式装配

MCP Server 配置示例

stdio 方式

cell.MCPs().Upsert(ctx, mcp.ServerConfig{
    Name:      "legal-research",
    Transport: "stdio",
    Command:   []string{"/opt/mcp/legal/bin/server"},
    Env:       map[string]string{"DB_HOST": "localhost"},
})

SSE 方式

cell.MCPs().Upsert(ctx, mcp.ServerConfig{
    Name:      "crm-integration",
    Transport: "sse",
    URL:       "http://crm-mcp.internal:8080/sse",
})

最佳实践

  1. 使用 probe 验证连通性:注册后调用 /mcp/{name}/probe
  2. MCP Server 独立部署:作为独立进程或容器运行
  3. 按场景选择自动化层:匿名抓取用 Headless,登录态用 Playwright,桌面用 Desktop
  4. 注意配额:MCP Server 无运行时存储,越界写入下次重启才暴露