MCP 进阶
OpenClaw MCP 高级配置:固定端口、超时与重试
用过 基础 MCP 接入 之后,下一步遇到的问题往往是:MCP server 端口随机分配怎么固定?调用超时怎么调?重试策略怎么写?这篇文章把 OpenClaw MCP 的进阶配置一次讲清。
问题一:MCP server 端口随机,如何固定?
OpenClaw 启动 MCP server 时,stdio 模式不涉及端口;HTTP / SSE 模式则会监听一个端口。如果你不指定端口,默认会随机选一个未被占用的端口。这在以下场景会出问题:
- 你想用反向代理(Nginx / Caddy)转发到 MCP server
- 你想用防火墙规则只放行特定端口
- 你的 MCP 客户端写死了端口号
- 容器之间通过端口互访
固定端口的两种方式
方式 A:在 MCP server 启动命令里指定
大部分 MCP server 实现都接受 --port 或 PORT 环境变量。在 OpenClaw 的 MCP 配置里:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "--port", "3845", "/path/to/dir"],
"env": { "PORT": "3845" }
}
}
}方式 B:使用 stdio 模式(推荐)
如果你不需要外部访问 MCP server(绝大多数本地 MCP 用例都不需要),直接用 stdio 模式就好 — OpenClaw 通过标准输入输出和 server 进程通信,根本不需要端口:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
}
}
}stdio 模式更简单、更安全、不占端口、不会被外部攻击。除非你明确需要 HTTP / SSE,否则都用 stdio。
问题二:MCP 调用超时怎么设?
OpenClaw 调用 MCP 工具时,每个 MCP server 有独立的超时配置。默认值通常是 30 秒。对于慢工具(爬虫、大文件处理、跨网络 API)需要调高。
在 MCP 配置里设置 timeout
{
"mcpServers": {
"slow-scraper": {
"command": "node",
"args": ["scraper-server.js"],
"timeout": 120000
}
}
}单位是毫秒。120000 表示 120 秒。
分场景的 timeout 推荐值
| 场景 | 建议 timeout |
|---|---|
| 本地文件操作(filesystem MCP) | 10-30s |
| 本地数据库查询 | 30-60s |
| 外部 API 调用(GitHub, Slack) | 30-60s |
| 网页抓取(单页) | 60-90s |
| 网页抓取(多页 / 深度爬) | 120-300s |
| 大文件处理 / 视频转码 | 300-600s |
问题三:MCP 调用失败怎么重试?
OpenClaw 默认不会自动重试失败的 MCP 调用 — 因为很多 MCP 工具有副作用(写文件、发请求),重试可能造成重复操作。你需要显式开启:
{
"mcpServers": {
"github-api": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"retry": {
"maxAttempts": 3,
"backoffMs": 1000
}
}
}
}建议只对读操作开启重试。写操作改用幂等设计(带 idempotency key)或在 agent 端处理失败。
问题四:MCP server 启动失败怎么排查?
OpenClaw 启动 MCP server 失败时,错误信息通常被吞掉。打开详细日志的方法:
# 容器内执行
DEBUG=mcp:* openclaw start
# 或在配置里
{
"logging": {
"mcp": "debug"
}
}常见错误及解决方案:
spawn ENOENT— MCP server 命令找不到。检查command是否在 PATH 里,或用绝对路径。EADDRINUSE— 端口被占用。换一个端口或改用 stdio 模式。Permission denied— MCP server 没执行权限。chmod +x或在容器里以 root 运行。npm ERR! could not determine executable— npx 包名拼错。确认@modelcontextprotocol/server-X包真实存在。- 启动后立即退出 — MCP server 自己崩了。把
command单独在终端跑一次,看真正的错误。
问题五:怎么验证 MCP 接入成功?
改完配置后让 OpenClaw reload,然后给 agent 发:"列出你目前能用的所有工具"。正常情况下 MCP 提供的工具会出现在列表里,工具名格式通常是 <mcp-server-name>_<tool>。
如果列表里没有 — 一定是 MCP server 启动失败了,按上一节的方法看 debug 日志。
问题六:MCP 调用很慢怎么优化?
- 本地优先 — 把 MCP server 跑在和 OpenClaw 同一台机器(同一个容器或 host network),避免跨网络调用的 RTT。
- 持久连接 — stdio 模式保持长连接,比 HTTP 短连接快得多。
- 缓存层 — 对幂等的 MCP 调用(查询类)在 agent 这一侧加 5-60s 缓存。
- 少用 MCP,多用 Skills — OpenClaw 原生 Skill 走进程内调用,比跨进程的 MCP 快一个数量级。只有真的需要外部能力时才用 MCP。
常见问题
OpenClaw 支持 MCP 1.0 还是 0.x?
当前 OpenClaw 主线支持 MCP 1.0 标准(streamable HTTP + stdio)。0.x 时代的 SSE-only server 仍然兼容,但建议升级到 1.0 server 以获得更好的连接稳定性。
能不能同时挂多个 MCP server?
可以。在 mcpServers 字段里加多条就行。OpenClaw 会启动每个 server 并把它们的工具合并到 agent 的工具列表。
MCP server 的安全性怎么保证?
MCP server 是和 OpenClaw 跑在同一权限下的子进程。如果你装第三方 MCP server,等于给它了 OpenClaw 容器的所有权限。建议:只装可信来源的 server;用 stdio 模式(不暴露端口);在 OpenClaw 配置里限制 MCP 工具的 allowList。
OpenClaw Launch 托管能用 MCP 吗?
可以。在 仪表盘 的 MCP 配置里粘贴你的 MCP server 配置,托管平台会在你的实例里启动这些 server。本地 MCP server(需要访问你电脑文件)则需要走 stdio + 反向连接的方式,更复杂;建议把"读本地文件"这类需求用 OpenClaw 自带的 fs Skill 实现。