部署MCP服务和Cline交互的最简实践

简介

什么是MCP?

MCP全称Model Context Protocol,模型上下文协议,它将AI模型和应用程序之间通信交互协议进行了统一,这让开发者只需要专注于应用程序的开发,而如何将开发的应用程序集成到AI模型中,MCP做了很好的规范和定义,应用程序只需简单集成MCP SDK即可优雅嵌入AI模型,非常方便

Cline是什么?

Cline是VC Code上的一款AI插件,在这里我们可以将其理解为一个支持MCP协议的客户端,同类型的客户端还有Cursor、Claude App等。因为Cline免费,所以下面笔者将以Cline作为实践的MCP客户端

MCP中的toots功能

MCP主要提供五种功能,分别是resources、prompts、tools 、toots和sampling,笔者将以使用更多的tools来实践和介绍

toots,是MCP服务中可以被LLM调用的函数,当然这需要用户同意使用MCP服务提供的tools后才会被调用,不过目前的MCP客户端都可以设置LLM决定调用哪些tools之后,不需要用户批准自动进行调用

使用Python编写最简MCP服务

使用Python 编写mcp服务要求已安装 Python 3.10 或更高版本

笔者这里用Windows电脑做的测试,首先打开Windows 命令控制台,执行

`powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`

这会为你安装uv,uv是python的一个高性能包管理工具,旨在替代传统的pip

下载好uv之后,需要重新打开一个控制台让uv的PATH生效。然后到一个目录创建服务工程

# 创建工程,进入工程目录
uv init weather
cd weather

# 创建 virtual environment 并激活它
uv venv
.venv\Scripts\activate

# 安装 dependencies
uv add mcp[cli] httpx

# 创建文件weather.py

完成上面的配置后,工程目录结构大致如下

在这里插入图片描述
编辑weather.py,代码如下

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
def get_weather(location: str) -> str:
    """获取指定地点的天气预报。
    参数:
        location (str): 城市名,如 'New York'。
    返回:
        str: 天气信息。
    """
    return f"{location} 的天气:温度 25°C,晴朗"

if __name__ == "__main__":
    mcp.run(transport="sse")

这个mcp server非常简单,可以查询天气,但是笔者这里把天气信息进行了硬编码。代码部分到此为止,这里值得注意的是 mcp.run(transport='sse')

mcp客户端在使用mcp服务时,是需要和mcp服务进行通信的,其大致原理笔者将会在文末补充。进程间通信就需要一些通信手段,目前MCP主要采用的通信手段有两种,分别是stdio传输SSE传输

stdio传输和SSE传输

当你的MCP服务是一个使用你的本地机器资源为你提供服务的应用时,你可以采用stdio的方式进行通信。采用stdio的通信方式不需要你启动服务本身,MCP客户端(例如Cline)会在合适的时机通过你配置的路径启动MCP服务,必要的参数通过命令行参数的方式提供给MCP服务,以此实现通信。当然,这种方式的MCP服务只能你本地机器可以使用

与之对应的是采用SSE进行通信的MCP服务。采用SEE方式的服务需要你手动运行服务,并再后台运行等待随时被调用,MCP客户端通过网络访问服务。这样的好处就是可以让你的服务给更多人使用

回到我们的Demo,mcp.run(transport='sse')就表示我们的服务采用sse的方式和MCP客户端通信

run

因为我们采用SEE的方式和MCP服务通信,所以这里需要我们手动运行服务,执行命令uv run weather.py

在这里插入图片描述
有以上日志出现说明你的服务已经成功run起来,MCP客户端可以通过http://0.0.0.0:8000和服务通信

服务搭建好了,我们去Cline客户端配置

Cline插件配置

我们选择Cline作为MCP客户端

在这里插入图片描述
在VS Code插件商店搜索下载Cline,这会让你的VS Code左侧多出一个Cline的按钮。点击进入cline的界面,笔者这里选择了OpenRouter的API,模型选择了deepseek/deepseek-char:free,免费。需要注意的是选择了OpenRouter之后,需要先获取API Key才能选择模型,这里如何获取API Key各位可以通过其它文章设置,笔者这里不再赘述

配置好之后我们可以去chat页面聊天验证是否配置成功

请添加图片描述
有回答说明你配置成功,到这里我们还需要去配置MCP服务

请添加图片描述
进入MCP服务配置页面之后,选择Remote Servers。填写Server Name和Server URL,完成后点击Add Server。这些操作实则会生成一个名为cline_mcp_settints.json的文件,该文件定义了Cline插件可以使用的所有MCP服务,文件内容如下:

{
  "mcpServers": {
    "'weather": {
    	"disabled": true,
    	"timeout": 60,
    	"url":"http://192.168.136.207:8000/sse",
    	"transportType":"sse'
    }
  }
}

这个配置文件格式在Cursor中也是能够使用的

因为此时你的MCP服务正在后台运行,所以理论上Cline已经和你的服务成功建立连接了

请添加图片描述
如果没有错误,这里将显示绿点

我们再次回到chat界面进行聊天

请添加图片描述
笔者这里询问今天杭州的天气,可以看到Deepseek模型选择调用本地的MCP回答这个问题,Hangzhou 的天气:温度 25°C,晴朗就是MCP服务返回的原始回答。最后的回答是杭州今天的天气:温度 25°C,晴朗,这里Deepseek并没有更多的修饰我们的回答,某些上下文中,Deepseek会修饰MCP 服务返回的原始回答,让最终回答更符合我们提问时的上下文语境

好了,到这里我们的最简实践完成了,当然你的MCP服务可以比这里复杂得更多,总结一下,我们完成了

  • 使用Python部署了一个MCP服务
  • MCP服务使用SEE和MCP客户端通信
  • MCP服务提供一个天气查询的tools
  • 使用Cline作为MCP客户端,配置好LLM和MCP服务器之后,当提问天气相关的问题时,大模型将会使用MCP服务提供的tool

以上是我们实践的内容,那具体原理是什么呢?

MCP原理简介

在MCP客户端和服务端建立通信后,MCP服务会通过标准协议发送自己提供了哪些能力和对应的查询接口以及传参方式,笔者将其理解为能力集

有能力集之后,用户向LLM提问时,MCP客户端会按照一定的格式,把这些能力集和用户的提问一同发送给LLM,提示LLM有一些能力集可以扩展LLM的能力,同时告诉LLM这些能力集如何使用,如何传参

LLM收到这些打包的信息之后,分析用户的提问是否能够用上能力集,如果能够使用能力集中的tool,LLM会将tool所需的入参从用户的提问中提取出来,最后使用标准协议将数据返回给MCP客户端,返回的数据还包括使用哪个MCP Server?使用哪个tool?

MCP客户端收到LLM的指令后会去调用对应MCP Server提供的tool,MCP客户端从tool获取到答案之后,会再请求一次LLM,这次请求数据中会有用户的原始提问、MCP Server的调用过程以及返回结果,LLM收到请求后对数据进行整理,返回给MCP客户端最终的输出结果

在这里插入图片描述
上图是笔者理解的MCP工作的流程图。据此我们可以知道,MCP的通用性非常的强,几乎可以兼容市面上所有的LLM,因为MCP不需要LLM具有什么额外的能力,只要LLM能够看懂MCP Client给出的提示词就能融入到MCP框架中,这很巧妙

总结

MCP像USB-C接口一样,它定义了从数据源、客户端、服务到LLM之间,从通信到调用过程的一整套协议,让LLM能满足个性化的定制需求,同时也能享受像USB-C那样即插即用的便捷,非常值得大家去了解和学习


公众号名称:zl.rs

<think>好的,用户的问题是关于如何使用Cline部署MCP或在MCP中集成Cline。首先,我需要明确这两个工具的关系用途。根据提供的引用资料,Cline是一个需要配置MCP服务器的工具,而MCP(可能是某种中间件或服务提供平台)有TypeScript版本的支持。引用[1]提到运行MCP官网的TypeScript样例,并在本地创建TypeScript版本的MCP,然后配置服务器地址。引用[2]则展示了在Cline中使用MCP工具,比如git服务,需要安装对应的mcp-server并配置。 用户可能希望将ClineMCP结合使用,可能是为了利用Cline的界面或功能来操作MCP提供的服务。需要分步骤说明部署集成的方法。首先,可能需要安装MCP的TypeScript版本,然后进行编译配置。接着在Cline中配置MCP服务器的地址,以便进行本地调试或远程连接。 需要注意的是,用户可能遇到依赖管理的问题,比如npm的包安装错误,或者Python环境配置的问题,如引用[2]中提到的pythonpython3的区别。此外,MCP服务器的配置需要正确指定命令参数,尤其是路径模块名称。 另外,用户可能希望了解具体的操作步骤,比如如何运行官方样例,如何创建本地项目,如何编译TypeScript代码,以及如何在Cline中设置服务器地址。可能还需要提供问题排查的提示,比如依赖安装失败如何处理,服务器配置错误如何调试。 后,生成相关问题时要考虑用户可能的后续疑问,比如如何扩展MCP的功能,如何优化配置,或者如何处理特定错误。需要确保回答结构清晰,步骤详细,并且引用资料中的信息正确应用。</think>### 如何通过 Cline 部署或集成 MCP #### 1. **基础环境准备** - **安装依赖工具链** 确保已安装 Node.js、TypeScript 编译器 Python 环境(用于部分 MCP 服务)。 - 例如,TypeScript 编译需通过 `npm install -g typescript` 全局安装。 - 引用[1]中提到的 MCP-TypeScript 版本需通过 `npm` 管理依赖。 - **配置 Cline 环境** 在 Cline 中安装 Marketplace 的 MCP 相关插件(如 `mcp-server-git`),引用[2]中通过 `pip install mcp-server-git` 手动安装并配置服务器地址。 --- #### 2. **部署 MCP 服务** - **运行 MCP 官方示例** 根据引用[1],步骤如下: 1. 下载 MCP 官网 TypeScript 示例(如 `Quickstart` 项目)。 2. 执行 `npm install` 安装依赖。 3. 通过 `tsc` 编译 TypeScript 代码为 JavaScript。 4. 启动本地 MCP 服务,通常使用 `node dist/index.js`。 - **自定义 MCP 项目** 在本地创建 TypeScript 项目并集成 MCP 功能: ```bash mkdir mcp-custom && cd mcp-custom npm init -y npm install @mcp/core typescript @types/node tsc --init # 生成 tsconfig.json ``` --- #### 3. **ClineMCP 的集成** - **配置 MCP 服务器地址** 在 Cline 的 `Configure MCP Servers` 中设置本地或远程 MCP 服务路径,引用[2]示例: ```json { "mcpServers": { "custom-service": { "command": "node", "args": ["dist/index.js"], "disabled": false } } } ``` - 若服务路径错误会导致连接失败,需检查路径端口是否匹配。 - **调试与验证** 在 Cline 中执行基础命令(如 `git_status`),观察是否调用 MCP 服务返回结果。若失败,需检查: 1. MCP 服务日志是否有报错。 2. Cline 配置中的命令参数是否正确(如 `python` 需改为 `python3`)。 --- #### 4. **常见问题解决** - **依赖冲突** - 若 `npm install` 失败,尝试清除缓存 `npm cache clean --force` 或使用 `yarn` 替代。 - **TypeScript 编译错误** - 检查 `tsconfig.json` 中模块加载路径输出目录(如 `outDir: "dist"`)。 - **MCP 服务未响应** - 通过 `netstat -ano | grep <端口号>` 确认服务是否监听目标端口。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl.rs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值