🔧 OpenClaw MCP 工具编排实战

📅 2026年5月19日 | 🏷️ MCP 专题 | ⏱️ 阅读时间:18分钟

让 AI Agent 调用外部工具,就像给周星驰电影里的大内密探零零发装备——每个工具都有用武之地。

🎬 什么是 MCP (Model Context Protocol)?

凌晨2点15分,我盯着屏幕上密密麻麻的工具列表,突然明白了——MCP 就是 AI Agent 的"工具箱协议"

世界上有一种协议叫 MCP,它让 AI Agent 能调用外部工具,就像王家卫电影里的角色,每个人都有自己的专属道具。

🔍 MCP 核心概念

  • MCP Server:提供工具的服务端(如文件系统、数据库、API)
  • MCP Client:调用工具的客户端(OpenClaw Agent)
  • Tool:具体的功能单元(如 read_file、query_db)
  • Protocol:标准化的通信协议(基于 JSON-RPC 2.0)

🚀 快速开始:配置你的第一个 MCP Server

1. 安装 MCP Server

# 示例:安装文件系统 MCP Server
npm install -g @modelcontextprotocol/server-filesystem

# 示例:安装 SQLite MCP Server
npm install -g @modelcontextprotocol/server-sqlite

# 查看已安装的 MCP Servers
openclaw mcp list

2. 配置 OpenClaw 加载 MCP Server

# 编辑 OpenClaw 配置文件
vim ~/.openclaw/config.json

# 添加 MCP 配置
{
    "mcpServers": {
        "filesystem": {
            "command": "mcp-server-filesystem",
            "args": ["/path/to/allowed/directory"],
            "env": {}
        },
        "sqlite": {
            "command": "mcp-server-sqlite",
            "args": ["/path/to/database.db"],
            "env": {}
        }
    }
}

# 重启 OpenClaw 加载配置
openclaw restart

3. 验证 MCP Server 是否正常工作

# 列出所有可用的 MCP 工具
openclaw mcp tools

# 输出示例:
# ✓ filesystem (3 tools)
#   - read_file: 读取文件内容
#   - write_file: 写入文件内容
#   - list_directory: 列出目录内容
# 
# ✓ sqlite (2 tools)
#   - query: 执行 SQL 查询
#   - insert: 插入数据

# 测试调用工具
openclaw mcp call filesystem read_file --path=/etc/hostname
💡 最佳实践: 只给 MCP Server 最小权限目录,避免它访问系统敏感文件(如 /etc/passwd、~/.ssh/)。

🎨 实战案例1:用 MCP 构建文件管理 Agent

场景:Agent 需要读取、分析、整理本地文件。

Step 1: 配置文件系统 MCP

{
    "mcpServers": {
        "docs": {
            "command": "mcp-server-filesystem",
            "args": ["/home/user/documents"],
            "env": {}
        }
    }
}

Step 2: Agent 调用示例

# 用户请求
"帮我整理 /home/user/documents 下的 PDF 文件,按日期分类"

# Agent 执行流程(伪代码)
1. tools.list_directory(path="/home/user/documents")
   -> 返回文件列表
   
2. 过滤出 .pdf 文件
   
3. 对每个 PDF:
   tools.read_file(path="/home/user/documents/xxx.pdf")
   -> 提取创建时间(或从文件名解析)
   
4. tools.write_file(
     path="/home/user/documents/2026-05/xxx.pdf",
     content=binary_data
   )
   
5. 返回整理结果

🎨 实战案例2:数据库查询 Agent

场景:用户用自然语言查询数据库。

# 配置 SQLite MCP
{
    "mcpServers": {
        "mydb": {
            "command": "mcp-server-sqlite",
            "args": ["/home/user/data.db"],
            "env": {}
        }
    }
}

# 用户请求
"查询2026年5月的销售额,按产品分类汇总"

# Agent 执行
1. 将自然语言转换为 SQL:
   SELECT product, SUM(amount) 
   FROM sales 
   WHERE date >= '2026-05-01' AND date < '2026-06-01'
   GROUP BY product;
   
2. tools.call("mydb", "query", {sql: "..."})
   -> 返回查询结果
   
3. 格式化结果并回复用户
🎯 实战技巧: 对于复杂查询,让 Agent 先 explain 执行计划,确认无误后再真正执行,避免误操作。

🎨 实战案例3:多工具协同(MCP Orchestration)

场景:Agent 需要组合多个 MCP 工具完成复杂任务。

# 配置多个 MCP Servers
{
    "mcpServers": {
        "web": {
            "command": "mcp-server-fetch",
            "args": []
        },
        "llm": {
            "command": "mcp-server-ollama",
            "args": ["--model", "llama3"]
        },
        "db": {
            "command": "mcp-server-sqlite",
            "args": ["/data/news.db"]
        }
    }
}

# 任务:抓取新闻 → 用 LLM 总结 → 存入数据库
# Agent 工作流:

1. tools.call("web", "fetch", {url: "https://news.example.com/latest"})
   -> 返回 HTML 内容
   
2. tools.call("llm", "summarize", {text: html_content})
   -> 返回新闻摘要
   
3. tools.call("db", "insert", {
     table: "news",
     values: {
       title: "...",
       summary: "...",
       date: "2026-05-19"
     }
   })
   
4. 返回:已保存 10 条新闻摘要到数据库

🔒 MCP 安全最佳实践

安全检查清单

  • ✅ 限制文件系统访问范围(只给必要目录)
  • ✅ 数据库使用只读账号(除非必需写权限)
  • ✅ API Keys 通过环境变量传递(不要硬编码)
  • ✅ 网络请求白名单(限制访问的域名)
  • ✅ 日志记录所有工具调用(审计追踪)
  • ✅ 设置超时时间(防止工具卡死)

安全配置示例

{
    "mcpServers": {
        "safe-filesystem": {
            "command": "mcp-server-filesystem",
            "args": ["/safe/directory"],
            "env": {
                "LOG_LEVEL": "info"
            },
            "timeout": 30000,  // 30秒超时
            "allowedHosts": ["localhost", "trusted-api.com"]
        }
    }
}

📊 监控与调试

# 查看 MCP 调用日志
tail -f ~/.openclaw/logs/mcp.log

# 监控工具调用性能
openclaw mcp stats

# 输出示例:
# Tool: filesystem.read_file
#   Calls: 1,234
#   Avg Time: 45ms
#   Errors: 3 (0.24%)
# 
# Tool: sqlite.query
#   Calls: 567
#   Avg Time: 120ms
#   Errors: 12 (2.1%)

# 调试单个工具调用
openclaw mcp debug filesystem read_file --path=/test.txt

🌟 总结与进阶

3分37秒,我决定了要帮 OpenClaw 做 MCP 生态——因为工具编排是 Agent 能力的倍增器。

你已经学会了:

进阶学习: 开发自己的 MCP Server(使用 Python/Node.js SDK),贡献到 官方仓库

🔗 相关资源

🔗 相关推荐

📄 文章
OpenClaw 入门指南
📄 文章
OpenClaw 完全教程
📄 文章
OpenClaw 最佳实践
📄 文章
OpenClaw 自动化工作流
📄 文章
OpenClaw 配置详解

📚 相关推荐阅读

📖 术语百科
Function Calling
🛠️ 工具指南
ClawHub 技能市场
📄 文章
OpenClaw 入门
📖 术语百科
Agent 工作流
📖 术语百科
Sub-Agent
📄 文章
AI Agent

📚 推荐阅读

这些文章可能对你有帮助

🛠️ MCP集成教程 📖 MCP术语详解 📖 MCP协议深入 🛠️ MCP无状态迁移 🛠️ 工具库 📖 术语百科