MCP 集成 - OpenClaw | JR Academy

MCP 集成

如果你用过 Claude Code 或者 Cursor,大概率已经接触过 MCP 了。MCP(Model Context Protocol)是 Anthropic 搞的一个开放协议,让 AI 应用能标准化地接入外部工具和数据源。OpenClaw 原生支持 MCP,能接入 13,000+ MCP Servers

MCP 和 Skills 有什么区别

我一开始也搞混过这俩,搞半天才弄明白。

核心区别在于:MCP Server 提供代码级的工具能力,Skill 提供 Markdown 级的流程指导

MCP Server 是独立运行的程序,用任何语言写都行(TypeScript、Python、Go...),通过 stdio 或 SSE 两种传输方式和 OpenClaw 通信。它暴露的是具体的工具函数——比如"查询数据库"、"创建 GitHub Issue"、"发送 Slack 消息"。Claude Code、Cursor、Windsurf 这些工具都能用同一个 MCP Server,这就是"开放标准"的好处。

Skill 是放在 Agent workspace 的 ./skills/ 目录下的 SKILL.md 文件,用 Markdown 写。它不提供新的工具能力,而是告诉 Agent "在什么场景下、按什么步骤、用哪些已有工具来完成任务"。只能在 OpenClaw 里用,是 OpenClaw 的私有概念。

怎么选呢?如果你需要新的工具能力(比如连接公司内部 API),写 MCP Server。如果你需要编排已有工具来完成特定流程(比如"收到 GitHub Alert 邮件后自动分析并创建 Issue"),写 Skill。两者经常配合使用——Skill 里引用 MCP Server 提供的工具。

配置 MCP Server

三种方式,看你的场景。

配置文件(最常用)

编辑 ~/.openclaw/openclaw.json(JSON5 格式):

{
	mcp: {
		servers: {
			filesystem: {
				command: 'npx',
				args: ['-y', '@modelcontextprotocol/server-filesystem', '/Users/me/Documents']
			},
			github: {
				command: 'npx',
				args: ['-y', '@modelcontextprotocol/server-github'],
				env: {
					GITHUB_TOKEN: 'ghp_...'
				}
			},
			sqlite: {
				command: 'npx',
				args: ['-y', '@modelcontextprotocol/server-sqlite', '~/data/mydb.sqlite']
			}
		}
	}
}

上面这些都是走 stdio 传输的——OpenClaw 启动 MCP Server 子进程,通过标准输入输出通信。这是最常见的方式,本地跑的 MCP Server 基本都用这个。

命令行快速添加

不想手写 JSON 的话用命令行:

openclaw mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents
openclaw mcp add github -- npx -y @modelcontextprotocol/server-github

对了,这个命令有时候会报个 warning 说什么配置文件格式不对之类的。不影响使用,忽略就好。我第一次碰到的时候还紧张了半天,结果啥事没有...

SSE 远程连接

连远程的 MCP Server 用 SSE(Server-Sent Events)传输

{
	mcp: {
		servers: {
			'remote-api': {
				url: 'https://mcp-server.example.com/sse',
				headers: {
					Authorization: 'Bearer your-token'
				}
			}
		}
	}
}

stdio 是本地用的,SSE 是远程用的。如果你要把 MCP Server 部署到服务器上给团队共享,就用 SSE 方式。有些第三方 MCP 服务(比如 Composio)直接提供 SSE 端点,配上 API Key 就能用。

常用 MCP Servers

列几个我自己实际在用或者觉得最实用的,完整列表去 GitHub 上的 MCP Servers 仓库看吧。

开发工具方向server-github 做 GitHub 操作(这个几乎必装对吧?),server-filesystem 操作文件系统,server-sqliteserver-postgres 连数据库。

搜索和研究server-brave-search 做网络搜索,隐私方面比 Google 好一些。server-fetch 抓取和解析网页。anchor-browser 做浏览器自动化,不过说实话这个我用得不多,稳定性一般。OpenClaw 自己也有 Browser 控制功能,通过专用的 Chrome/Chromium 实例来操作。

效率工具server-google-calendar 管日程,server-slack 管 Slack 消息和频道,server-notion 连 Notion。

集成平台Composio 值得一提——它把几百个 SaaS 应用包装成 MCP Server,配一个 Composio 的 MCP 就能连 Gmail、Google Sheets、Trello、HubSpot 一大堆。省得一个一个配。

模型路由OpenRouter 可以作为 LLM 提供者接入,让你通过一个 API Key 访问几十个不同的模型。虽然不是 MCP Server,但在多 Agent 场景下配合 OpenClaw 用特别方便——不同 Agent 走不同模型,统一用 OpenRouter 管理。

实战:配 GitHub MCP

这个应该是用得最多的了,让 OpenClaw 直接操作你的 GitHub 仓库。

先去 GitHub → Settings → Developer Settings → Personal Access Tokens,生成一个新 Token,勾上 reporead:org 权限。坑爹的是 GitHub 现在有 classic token 和 fine-grained token 两种,都能用,但 fine-grained 的权限选择界面有点绕。我个人图省事用的 classic。

然后加到配置里:

{
	mcp: {
		servers: {
			github: {
				command: 'npx',
				args: ['-y', '@modelcontextprotocol/server-github'],
				env: {
					GITHUB_TOKEN: 'ghp_xxxxxxxxxxxx'
				}
			}
		}
	}
}

配好了就能这样用:

你: 列出我的 GitHub 仓库中最近更新的 5 个项目
Bot: 最近更新的仓库:
     1. my-project (2 小时前)
     2. blog (昨天)
     ...

你: 查看 my-project 仓库有没有未处理的 Issue
Bot: my-project 有 3 个 open issue:
     #12: 登录页面 CSS 问题
     #15: API 超时处理
     #18: 添加暗黑模式

管理已配置的 MCP Servers

openclaw mcp list          # 列出已配置的
openclaw mcp test github   # 测试连接是否正常
openclaw mcp tools github  # 看这个 Server 提供了哪些工具
openclaw mcp remove github # 移除

补充一点:mcp test 这个命令配完之后务必跑一下。我去年十二月配 sqlite server 的时候路径写错了个字母,写的 ~/date/mydb.sqlite 而不是 ~/data/mydb.sqlite,直到用的时候才发现连不上,报了个 SQLITE_CANTOPEN 的错误。要是当时跑一下 test 就能省掉半小时的排查时间。

写自己的 MCP Server

如果要接入公司内部系统,可以自己写一个。官方 SDK 支持 TypeScript 和 Python,用起来还挺顺的,比我预想的简单:

// my-mcp-server.ts
import { Server } from '@modelcontextprotocol/sdk/server';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio';

const server = new Server({
	name: 'my-internal-api',
	version: '1.0.0'
});

// 注册工具
server.setRequestHandler('tools/list', async () => ({
	tools: [
		{
			name: 'query_internal_db',
			description: '查询公司内部数据库',
			inputSchema: {
				type: 'object',
				properties: {
					sql: { type: 'string', description: 'SQL 查询语句' }
				},
				required: ['sql']
			}
		}
	]
}));

server.setRequestHandler('tools/call', async request => {
	if (request.params.name === 'query_internal_db') {
		const result = await queryDB(request.params.arguments.sql);
		return { content: [{ type: 'text', text: JSON.stringify(result) }] };
	}
});

// stdio 传输——本地用
const transport = new StdioServerTransport();
await server.connect(transport);

如果要远程部署给团队共享,把 StdioServerTransport 换成 SSEServerTransport 就行:

import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse';

// SSE 传输——远程用,跑一个 HTTP 服务
const transport = new SSEServerTransport('/sse', response);
await server.connect(transport);

写完在 ~/.openclaw/openclaw.json 里加上就能用了:

{
	mcp: {
		servers: {
			// 本地 stdio 方式
			internal: {
				command: 'npx',
				args: ['tsx', './my-mcp-server.ts']
			},
			// 或者远程 SSE 方式
			'internal-remote': {
				url: 'https://internal-mcp.company.com/sse',
				headers: { Authorization: 'Bearer team-token' }
			}
		}
	}
}

Python 也有官方 SDK,写法类似。选什么语言看你团队习惯就好,MCP 协议本身是语言无关的。

延伸阅读

如果你在学 AI Engineer 方向的话,MCP 是绕不开的。可以看看这两篇:

相关资源:MCP 官方文档官方 MCP Servers 列表awesome-openclaw(13,000+ MCP Servers 索引)。


下一篇讲 OpenClaw 的安全最佳实践,生产环境用的话一定要看。