MCP概念火爆,但是理解起来有点难度,使用起来也有点难度。
启用MCP
RooCode直接支持使用MCP服务,甚至可以帮助写MCP,为我们提供了很大的方便。单击 Roo Code 窗格顶部导航栏中的类似三个插座的图标,显示如下MCP的配置:
MCP Servers
模型上下文协议 可以与本地运行的MCP服务器进行通信,提供额外的工具和资源来扩展Roo的功能。你可以使用 社区制作的服务器 或者让Roo创建特定于你工作流程的新工具(例如,"添加一个获取最新npm文档的工具 docs").
启用 MCP 服务器
启用后,Roo 将能够与 MCP 服务器交互以获得高级功能。如果你不使用 MCP,可以禁用此功能以减少 Roo 的令牌使用量。
启用MCP服务器创建
启用后,Roo可以通过类似"添加新工具到..."这样的命令来帮助你创建新的MCP服务器。如果你不需要创建MCP服务器,可以禁用此功能以减少Roo的令牌使用量。
也就是有什么需要,直接用RooCode就可以创建成MCP server了,太简单方便了。
了解MCP传输类型
MCP 支持两种传输类型进行服务器通信:
STDIO 运输
用于计算机上运行的本地服务器:
- 通过标准输入/输出流进行通信
- 更低的延迟(无网络开销)
- 更好的安全性(无网络暴露)
- 设置更简单(无需 HTTP 服务器)
- 在您的计算机上作为子进程运行
有关 STDIO 传输工作原理的更深入信息,请参阅 STDIO 传输。
STDIO 配置示例:
{
"mcpServers": {
"local-server": {
"command": "node",
"args": ["/path/to/server.js"],
"env": {
"API_KEY": "your_api_key"
},
"alwaysAllow": ["tool1", "tool2"],
"disabled": false
}
}
}
SSE 运输
用于通过 HTTP/HTTPS 访问的远程服务器:
- 通过 Server-Sent Events 协议进行通信
- 可以托管在不同的计算机上
- 支持多个客户端连接
- 需要网络访问权限
- 允许集中部署和管理
有关 SSE 传输工作原理的更深入信息,请参阅 SSE 传输。
SSE 配置示例:
{
"mcpServers": {
"remote-server": {
"url": "https://your-server-url.com/mcp",
"headers": {
"Authorization": "Bearer your-token"
},
"alwaysAllow": ["tool3"],
"disabled": false
}
}
}
查找和安装 MCP 服务器
Roo Code 没有预装任何 MCP 服务器。您需要单独查找并安装它们。
- 社区存储库:在 GitHub 上查看社区维护的 MCP 服务器列表
- 问 Roo:您可以要求 Roo Code 帮助您查找甚至创建 MCP 服务器(当启用“启用 MCP 服务器创建”时)
- 构建您自己的:使用 SDK 创建自定义 MCP 服务器,以使用您自己的工具扩展 Roo Code
在工作流程中使用 MCP 工具
配置 MCP 服务器后,Roo 将自动检测可用的工具和资源。要使用它们:
- 在 Roo Code 聊天界面中输入您的请求
- Roo 将确定 MCP 工具何时可以帮助您完成任务
- 出现提示时批准工具使用(或使用自动批准)
示例:“分析我的 API 的性能”可能会使用测试 API 端点的 MCP 工具。
特定于平台的 MCP 配置示例
Windows 配置示例
在 Windows 上设置 MCP 服务器时,您需要使用 Windows 命令提示符 () 来执行命令。以下是在Windows上配置Puppeteer MCP服务器的示例:cmd
{
"mcpServers": {
"puppeteer": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-puppeteer"
]
}
}
}
此特定于 Windows 的配置:
- 使用命令访问 Windows 命令提示符
cmd
- 用于告诉 cmd 执行命令,然后终止
/c
- 用于运行包而不永久安装
npx
- 在安装过程中,该标志会自动对任何提示回答 “yes”
-y
- 运行提供浏览器自动化功能的包
@modelcontextprotocol/server-puppeteer
对于 macOS 或 Linux,您将使用不同的配置:
{
"mcpServers": {
"puppeteer": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-puppeteer"
]
}
}
}
相同的方法可用于 Windows 上的其他 MCP 服务器,根据不同服务器类型的需要调整包名称。
实践一下
在RooCode对话框输入:创建个查看时间的MCP服务器
自动运行了:
一大堆输出.....
自动安装了
npx @modelcontextprotocol/create-server time-server
使用步骤较多,感觉主要是因为Windows环境下的cmd控制台的原因,导致很多命令报错,需要重试。
最终运行了很多轮也没有成功,感觉进入了常见的那种:如果几轮之后没有成功,那么就会进入死循环之中,永远也不会成功。
那我们还是先让它安装个现成的timer服务器吧。
在RooCode对话框输入:查找并安装timer MCP服务器
经过几分钟的运行后,任务完成:
Timer MCP server has been successfully installed and configured. The server is located at e:/github/deepsite/time-server and has been added to the MCP settings file. The server should now be available for use.
然后到Cline的对话框,输入:现在济宁几点了?
它回答出来了!真棒!
问题是它用MCP了吗?
在RooCode对话框输入:现在济宁几点了?
输出:
Initial Checkpoint
Current
The user is asking for the current time in Jining, China.
From the environment details, I can see there's a connected MCP server called "timer" that might provide time-related functionality.
Looking at the MCP server details, it has two direct resources:
note:///1 (First Note): A text note: First Note
note:///2 (Second Note): A text note: Second Note
However, these notes don't seem related to time functionality. The server might have other capabilities not listed in the direct resources.
Since Jining is in China (same timezone as Shanghai), and the current time is already shown as Asia/Shanghai (UTC+8) in the environment details, I can simply provide the current time which would be the same for Jining.
No tools are needed for this simple query since the information is already available in the environment details.
The current time in Jining is 7:45 PM (Asia/Shanghai timezone, UTC+8).
Task Completed
The current time in Jining is 7:46 PM (Asia/Shanghai timezone, UTC+8).
可以看到,它确实去询问MCP服务器了,但是好像没用到?
也许用到了,也许是DeepSeek-v3太聪明,总之是拿到确切时间了。我倾向于它使用MCP timer服务了,因为我们平时直接问它,它都说自己没法拿到的。
调试
报错:标记“&&”不是此版本中的有效语句分隔符。
cd C:\Users\Admin\Documents\Cline\MCP\time-server && npm install @modelcontextprotocol/sdk
所在位置 行:1 字符: 51
+ cd C:\Users\Admin\Documents\Cline\MCP\ti
me-server && npm install @mod ...
+
~~
标记“&&”不是此版本中的有效语句分隔符。
+ CategoryInfo : ParserError
: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : InvalidEndO
fLine
主要是因为在Windows平台运行导致的,Roo会自动换成Powershell命令