MCP原理与开发及与大模型交互流程
文章目录
- 简介
- 一个简单的MCP服务
- 通过MCP Client使用MCP服务
- MCP、AI客户端、大模型之间的交互流程
简介
模型上下文协议(MCP,Model Context Protocol)顾名思义它是一个协议,做开发的朋友看到Protocol是不是DNA动了。
TCP/IP协议、HTTP协议、UDP协议、RESP协议各种各样的协议,本质上就是定义了应用之间的交互格式和行为。
MCP协议也一样,定义了就是定义了MCP Server与MCP Host(MCP Client)之间的交互标准。
具体的标准可以看:MCP Specification
MCP Server通常是我们提供给AI的服务、工具,MCP Host通常是AI Agent,例如Cline、Cherry Studio之类。
MCP官网
一个简单的MCP服务
为了简化流程,我们这里就直接使用MCP为我们提供的SDK和例子,来简单的说明一下。
这里我们使用Python语言来实现,可以直接看modelcontextprotocol提供的:python-sdk
首先使用uv命令来初始化项目,并且把MCP的Python-sdk依赖包添加进来:
uv init
uv add "mcp[cli]"
不清楚uv是啥的可以参考:Python虚拟环境与包管理工具(uv、Conda)
添加我们的MCP服务:
from mcp.server.fastmcp import FastMCP# Create an MCP server
mcp = FastMCP("Demo")# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""Get a personalized greeting"""return f"Hello, {name}!"# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:"""Generate a greeting prompt"""styles = {"friendly": "Please write a warm, friendly greeting","formal": "Please write a formal, professional greeting","casual": "Please write a casual, relaxed greeting",}return f"{styles.get(style, styles['friendly'])} for someone named {name}."if __name__ == "__main__":mcp.run(transport="stdio")
通过MCP Client使用MCP服务
我们已经有一个MCP服务了,那如何使用这个服务呢?
这里我们使用国产的AI客户端Cherry Studio来测试,因为国产的对国内的很多大模型平台支持要好很多,避免很多网络问题。
可以去下面的链接查看、下载:
Cherry Studio
Cherry Studio 下载
下载,直接安装就可以了。
安装好,我们打开Cherry Studio,首先要设置一下大模型平台,这里我们选择硅基流动。
硅基流动
平台的模型广场上有很多大模型可供选择,很多是免费的,因为我们要使用Cherry Studio通过API调用,所以要先申请密钥。
当然,你也可以选择你自己熟悉的大模型平台,Key的申请基本上在个人中心找到。
然后我们就可以选择模型,来测试一下:
上面这是我们使用DeepSeek-V3没有使用MCP时的调用过程。
然后我们配置好我们的自己开发的MCP。
这里我们配置我们自己的MCP:
参数:
--directory
D:\project\python\learn-mcp
run
main.py
实际上Cherry Studio在需要MCP服务的时候,就会去执行下面的命令,来启动我们的MCP服务:
# 就是运行指定的Python文件,启动MCP服务
uv --directory D:\project\python\learn-mcp run main.py
像Cline这样的工具使用的Json工具,其实Cherry Studio也一样,只不过Cherry Studio为我们提供了用户界面配置的方式而已,实际上最终使用的还是像下面的Json。
{"mcpServers": {"YQbsNQ1zCOdbEV94oCJGr": {"name": "my-first-mcp-server","type": "stdio","description": "","isActive": true,"registryUrl": "https://pypi.tuna.tsinghua.edu.cn/simple","command": "uv","args": ["--directory","D:\\project\\python\\learn-mcp","run","main.py"]}}
}
然后,我们在设置一下MCP服务器,然后再让大模型【请帮忙计算:147258369 + 147258369】
我们可以看到最终大模型识别出了加法计算,并通过Cherry Studio这个Agent调用了我们的MCP服务得到了结果。
MCP、AI客户端、大模型之间的交互流程
整个的交互流程大概就是下面这个样子:
注意:MCP不是直接与大模型进行的交互,而是与Agent的进行交互。
Agent(MCP Client)与MCP Server交互是有MCP规定的标准化的,但是Agent与大模型之间的交互不是标准的,所以还是会出现牛头不对马嘴的情况。