OpenClaw 如何对接 MCP Server(Model Context Protocol)

吾爱分享 AI领域评论1,403字数 1881阅读6分16秒阅读模式
OpenClaw 如何对接 MCP Server(Model Context Protocol)插图

直奔主题

先说结论,OpenClaw 需要使用“mcporter”技能(需自行安装)来接入 MCP 服务器。“MCPorter 的配置格式与 Cursor 的在核心结构上是一致的。两者都使用 mcpServers 作为顶级键来定义 MCP 服务器条目,并且 MCPorter 可以直接导入和使用 Cursor 的配置文件”。所以你其实可以直接用 Cursor 里面的 MCP 配置,或者还有一个更简单的方法就是把你现有的 MCP 配置直接丢给 OpenClaw,让它自己去配置“mcporter”。

下面是详细说明

OpenClaw 通过内置的 mcporter 技能接入 MCP 工具。该技能提供 CLI 来管理 MCP 服务器(HTTP/stdio),并在 OpenClaw 中作为工具调用 MCP 服务。以下是接入步骤:

1. 安装 mcporter 技能

  • mcporter 技能定义在 skills/mcporter/SKILL.md,支持通过 npm 安装 mcporter 二进制 1
  • 安装命令示例:
npm install -g mcporter
OpenClaw 如何对接 MCP Server(Model Context Protocol)插图1

2. 使用 mcporter 管理 MCP 服务器

  • 列出服务器:mcporter list
  • 查看服务器 schema:mcporter list <server> --schema
  • 调用工具:
  • 选择器:mcporter call linear.list_issues team=ENG limit:5
  • 函数语法:mcporter call "linear.create_issue(title: \"Bug\")"
  • 完整 URL:mcporter call https://api.example.com/mcp.fetch url:https://example.com
  • stdio:mcporter call --stdio "bun run ./server.ts" scrape url=https://example.com [2](#0-1)
  • 认证与配置:
  • OAuth:mcporter auth <server | url> [--reset]
  • 配置管理:mcporter config list|get|add|remove|import|login|logout [3](#0-2)

3. 在 OpenClaw 中使用 MCP 工具

  • 技能安装后,OpenClaw 代理可在会话中调用 mcporter 命令,从而访问 MCP 工具。
  • 技能元数据指定了依赖 mcporter 二进制,OpenClaw 会在执行时检查并调用 4

4. 配置覆盖(可选)

  • 在测试或特殊场景,可通过临时 MCP 配置文件覆盖默认配置(例如禁用 MCP 服务器) 5
  • 示例:生成空 MCP 配置并注入 CLI 参数:
  const mcpConfigPath = path.join(tempDir, "claude-mcp.json");
  await fs.writeFile(mcpConfigPath, `${JSON.stringify({ mcpServers: {} }, null, 2)}\n`);
  cliArgs = withMcpConfigOverrides(baseCliArgs, mcpConfigPath);

5. 守护进程与代码生成(可选)

  • 运行守护进程:mcporter daemon start|status|stop|restart [6](#0-5)
  • 生成 CLI 或 TS 客户端代码:
  • CLI:mcporter generate-cli --server <name>
  • TS:mcporter emit-ts <server> --mode client|types [7](#0-6)

Notes

  • MCP 工具通过 mcporter 技能桥接,而非 OpenClaw 原生 Tools 系统。
  • 默认配置文件为 ./config/mcporter.json,可用 --config 覆盖 8
  • 在测试环境中,OpenClaw 可通过环境变量 OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG 控制是否禁用 MCP 配置 9

Wiki pages you might want to explore:

Citations

File: skills/mcporter/SKILL.md (L6-20)

  {
    "openclaw":
      {
        "emoji": "📦",
        "requires": { "bins": ["mcporter"] },
        "install":
          [
            {
              "id": "node",
              "kind": "node",
              "package": "mcporter",
              "bins": ["mcporter"],
              "label": "Install mcporter (node)",
            },
          ],

File: skills/mcporter/SKILL.md (L31-41)

- `mcporter list`
- `mcporter list <server> --schema`
- `mcporter call <server.tool> key=value`

Call tools

- Selector: `mcporter call linear.list_issues team=ENG limit:5`
- Function syntax: `mcporter call "linear.create_issue(title: \"Bug\")"`
- Full URL: `mcporter call https://api.example.com/mcp.fetch url:https://example.com`
- Stdio: `mcporter call --stdio "bun run ./server.ts" scrape url=https://example.com`
- JSON payload: `mcporter call <server.tool> --args '{"limit":5}'`

File: skills/mcporter/SKILL.md (L43-46)

Auth + config

- OAuth: `mcporter auth <server | url> [--reset]`
- Config: `mcporter config list|get|add|remove|import|login|logout`

File: skills/mcporter/SKILL.md (L48-50)

Daemon

- `mcporter daemon start|status|stop|restart`

File: skills/mcporter/SKILL.md (L52-56)

Codegen

- CLI: `mcporter generate-cli --server <name>` or `--command <url>`
- Inspect: `mcporter inspect-cli <path> [--json]`
- TS: `mcporter emit-ts <server> --mode client|types`

File: skills/mcporter/SKILL.md (L58-61)

Notes

- Config default: `./config/mcporter.json` (override with `--config`).
- Prefer `--output json` for machine-readable results.

File: src/gateway/gateway-cli-backend.live.test.ts (L111-119)

function withMcpConfigOverrides(args: string[], mcpConfigPath: string): string[] {
  const next = [...args];
  if (!next.includes("--strict-mcp-config")) {
    next.push("--strict-mcp-config");
  }
  if (!next.includes("--mcp-config")) {
    next.push("--mcp-config", mcpConfigPath);
  }
  return next;

File: src/gateway/gateway-cli-backend.live.test.ts (L273-279)

    const disableMcpConfig = process.env.OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG !== "0";
    let cliArgs = baseCliArgs;
    if (providerId === "claude-cli" && disableMcpConfig) {
      const mcpConfigPath = path.join(tempDir, "claude-mcp.json");
      await fs.writeFile(mcpConfigPath, `${JSON.stringify({ mcpServers: {} }, null, 2)}\n`);
      cliArgs = withMcpConfigOverrides(baseCliArgs, mcpConfigPath);
    }

在 OpenClaw 中,你需要将 Cursor 风格的 mcpServers 配置转换为 mcporter 的配置格式,并通过 mcporter 技能来调用这些 MCP 工具。OpenClaw 不直接读取 mcpServers 对象,而是使用 mcporter 作为 MCP 客户端桥接。


转换步骤

1. 创建 mcporter 配置文件

在 OpenClaw 工作区或项目目录下创建 ./config/mcporter.json(默认路径,可用 --config 覆盖 1 ),将你的 mcpServers 条目按以下规则映射:

Cursor mcpServers 字段mcporter 配置方式
type: "streamable-http" + url在 mcporter 中直接使用该 URL 进行调用,无需预配置服务器
url(普通 HTTP/SSE)同上,调用时使用完整 URL
command + args(stdio)在 mcporter 中使用 --stdio 模式,将 commandargs 作为要执行的命令
headers(例如 Authorization)mcporter 目前不直接支持持久化 headers,需在调用时通过工具参数或环境变量传递(见下文示例)

2. 示例:mcporter 调用方式

  • HTTP/SSE 服务器(如 deepwiki、wordpress)
  mcporter call https://mcp.deepwiki.com/sse.<tool> <args>
  mcporter call https://123.com/wp-json/mcp/mcp-adapter-default-server.<tool> <args>

若需 headers(如 wordpress 的 Authorization),可尝试:

  mcporter call https://123.com/wp-json/mcp/mcp-adapter-default-server.<tool> --args '{"param":"value"}' --output json

并在 mcporter 的未来版本或配置中检查是否支持 headers 注入(当前技能文档未列出持久化 headers 配置 2 )。

  • stdio 服务器(如 chrome-devtools、123-mcp)
  mcporter call --stdio "npx -y chrome-devtools-mcp@latest" <tool> <args>
  mcporter call --stdio "php -d memory_limit=512M -d display_errors=0 -d error_reporting=E_ERROR /opt/homebrew/Cellar/wp-cli/2.12.0/bin/wp --path=/Applications/ServBay/www/123.cn mcp-adapter serve --server=mcp-adapter-default-server --user=071ace" <tool> <args>

3. 在 OpenClaw 中使用

  • 确保 mcporter 技能已安装(OpenClaw 会根据技能元数据自动检查 mcporter 二进制 3 )。
  • 在与 OpenClaw 代理的对话中,直接让代理执行上述 mcporter call 命令即可调用 MCP 工具。代理会使用 exec 工具运行 mcporter

4. 可选:守护进程

如果你希望长期运行 stdio 服务器,可以用 mcporter 守护进程管理(但你的配置多为 ad-hoc,通常不需要):

mcporter daemon start

4


注意事项

  • 配置文件差异:OpenClaw 不直接使用 mcpServers JSON 对象,而是通过 mcporter 的命令行和其自身的 mcporter.json(如果需要)来管理服务器。你的 Cursor 配置需转换为调用命令,而非直接复用配置文件。
  • 认证与 headers:对于需要 Authorization 头的服务(如 wordpress),如果 mcporter 不支持持久化 headers,你可能需要在每次调用时通过工具参数传递,或等待 mcporter 支持该功能。当前技能文档未列出 headers 配置项 5
  • 工具发现:使用 mcporter list <server> --schema 查看可用工具,然后按 mcporter call <server.tool> 格式调用 6

Notes

  • OpenClaw 的 MCP 接入完全依赖 mcporter 技能,而非原生 MCP 客户端配置。因此,你需要将 mcpServers 中的每个条目转换为 mcporter call 命令或 mcporter 配置(如果 mcporter 支持持久化服务器定义)。
  • 如果 mcporter 未来支持服务器定义文件,你可以将 mcpServers 迁移到 mcporter.json;目前,直接使用命令调用是最直接的方式。
  • 在测试环境中,OpenClaw 可通过环境变量禁用 MCP 配置,但这通常不影响 mcporter 命令的执行 7

Wiki pages you might want to explore:

Citations

File: skills/mcporter/SKILL.md (L6-12)

  {
    "openclaw":
      {
        "emoji": "📦",
        "requires": { "bins": ["mcporter"] },
        "install":
          [

File: skills/mcporter/SKILL.md (L31-41)

- `mcporter list`
- `mcporter list <server> --schema`
- `mcporter call <server.tool> key=value`

Call tools

- Selector: `mcporter call linear.list_issues team=ENG limit:5`
- Function syntax: `mcporter call "linear.create_issue(title: \"Bug\")"`
- Full URL: `mcporter call https://api.example.com/mcp.fetch url:https://example.com`
- Stdio: `mcporter call --stdio "bun run ./server.ts" scrape url=https://example.com`
- JSON payload: `mcporter call <server.tool> --args '{"limit":5}'`

File: skills/mcporter/SKILL.md (L43-46)

Auth + config

- OAuth: `mcporter auth <server | url> [--reset]`
- Config: `mcporter config list|get|add|remove|import|login|logout`

File: skills/mcporter/SKILL.md (L48-50)

Daemon

- `mcporter daemon start|status|stop|restart`

File: skills/mcporter/SKILL.md (L58-61)

Notes

- Config default: `./config/mcporter.json` (override with `--config`).
- Prefer `--output json` for machine-readable results.

 最后更新:2026-3-2
吾爱分享

发表评论