一、前言
MCP 全称模型上下文协议,而上下文指的是模型可以接入的内容,比如 prompt、resource和 tool。MCP 的出现允许社区共享 MCP 服务器,同时也支持平台无缝切换。
比如可以用 Cline、Claude等调用同一个MCP 服务器,而不需要修改 MCP 服务器的内容,只需要修改客户端配置即可。
今天我们来学习如何用Cline 调用自己的 MCP 服务器。
二、创建MCP服务器
首先创建一个项目,并使用 uv 作为运行环境:
mkdir mcpservercd mcpserveruv inituv add fastmcp
然后可以使用 FastMCP 创建一个 MCP 服务器。这里以获取天气为例,具体代码如下:
from datetime import datetimefrom fastmcp import FastMCPmcp = FastMCP()@mcp.tool()def get_today(): """ 获取今天的时间,精确到秒 :return: 年月日时分秒的字符串 """ return datetime.today().strftime('%Y.%m.%d %H-%M-%S')@mcp.tool()def get_weather(city: str, date: str): """ 获取 city 的天气情况 :param city: 城市 :param date: 日期 :return: 城市天气情况的描述 """ return f"{city} {date} 天晴,18度。"if __name__ == '__main__': mcp.run()
创建服务器后,可以来到Cline 配置 MCP 服务器了。
三、配置MCP服务器
首先确保 Visual Studio Code 安装了 Cline 插件,然后选中 Cline 插件,依次点击图中位置:
点击后就可以开始编辑 MCP 服务器了。具体配置如下:
{ "mcpServers": { "weather": { "disabled": false, "timeout": 60, "type": "stdio", "command": "uv", "args": [ "--directory", "/Users/zackfair/apps/mcpserver", "run", "server.py" ] } }}
首先是顶层的 mcpServers,以键值对形式配置所有的 MCP 服务器。这里配置了一个 weather 服务,weather 对应的配置如下:
{ "disabled": false, "timeout": 60, "type": "stdio", "command": "uv", "args": [ "--directory", "/Users/zackfair/apps/mcpserver", "run", "server.py" ]}
其含义如下:
- disabled:是否禁用timeout:服务器超时时间type:通信方式,stdio 表示标准 IO,即在客户端本地运行程序command:运行命令args:命令参数
最终效果像是在客户端运行如下命令:
cd /Users/zackfair/apps/mcpserveruv run server.py
配置完成后,就可以在 Cline 中调用该 MCP 服务器:
四、访问远程服务器
MCP 提供了 stdio 和 sse 方式的调用,我们对 MCP 服务器进行简单修改:
mcp.run('sse', host='0.0.0.0', port=8000, path='/mcp')
只需要将 mcp的运行参数修改一下,然后手动运行 MCP 服务器即可:
uv run server.py
然后在配置文件中添加新的 mcpServer:
{ "mcpServers": { "weather": {...}, "weather2": { "autoApprove": [], "disabled": false, "timeout": 60, "url": "http://localhost:8000/mcp", "type": "sse" } }}
这里参数基本一致,url 根据实际情况来修改host、port 和 path即可。
使用 stdio 方式 MCP 服务器实际是在客户端机器上执行,而使用 sse 形式服务器可以在本机执行也可以在远程机器执行。
五、总结
在 Cline 中,我们可以通过上述方式配置别人写好的服务器,也可以直接在Cline 的 Marketplace 中下载共享的 MCP 服务器。如图所示:
除了 Cline,在 Claude等其他 MCP 平台配置也是一样的。因为都是基于 MCP 协议,而协议规定的内容是一致的,因此 MCP 客户端服务器都是可以共享使用。