一个基础入门Demo从核心工作流程到服务端与客户端的实践开发,完整展现MCP在工具调用与模型协同中的技术实现。在MCP Client端开发中分别使用官方Claude模型和DeepSeek模型服务进行开发验证,将从以下方面介绍:
1. MCP 工作流程
2. MCP Server端开发
3. 调试MCP Server服务
4. MCP Client端开发
一、MCP 工作流程
MCP的核心执行流程如下:
MCP Client--Server--LLM交互过程如下:
MCP Client--Server--LLM工作流程:
1. 客户端从服务器获取可用的工具列表;
2. 用户的查询连同工具描述一起发送给模型服务(如Claude/DeepSeek);
3. 模型服务决定使用哪些工具(如果有的话);
4. 客户端通过服务器执行任何请求的工具调用;
5. 结果被发送回模型服务;
6. 模型服务提供自然语言响应;
7. 响应显示给用户。
二、MCP Server端开发
为了便于理解和快速上手,Demo程序使用官方weather服务。
系统要求
Python >= 3.10
Python MCP SDK >= 1.2.0
环境准备
安装 uv 并设置Python 项目和环境:
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
MacOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
重启Shell终端,以确保 uv 命令被识别。
创建项目
Windows
# 为项目创建一个新 directory
uv init weather
cd weather
# 创建 virtual environment 并激活它
uv venv
.venv\Scripts\activate
# 安装 dependencies
uv add mcp[cli] httpx
MacOS/Linux
# 为项目创建一个新 directory
uv init weather
cd weather
# 创建 virtual environment 并激活它
uv venv
source .venv/bin/activate
# 安装 dependencies
uv add "mcp[cli]" httpx
官方完整代码
https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py
其中Tool execution handler 负责实际执行每个 tool 的逻辑,核心代码如下:
初始化并运行 Server服务:
uv run weather.py
三、调试Server服务
可以采用MCP Inspector 或 Claude Desktop两种方式进行功能调试:
1. MCP Inspector 调试
venv环境下启动Inspector服务
mcp dev weather.py
Inspector服务调试过程如下 :
调试MCP Server Tool,功能无误可以看到对应的Tool Result输出。
2. Claude Desktop调试
在配置文件claude_desktop_config.json中添加:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\weather",
"run",
"weather.py"
]
}
}
}
保存后重启Claude Desktop。
Claude Desktop识别Server程序后,
单击锤子 icon 后,可以看到列出两个tools:
如果MCP Server 未被 Claude Desktop 接收,可查看服务日志以获取 debug 提示。默认日志目录:
C:\Users\xxx\AppData\Roaming\Claude\logs\mcp-*.log
详细Debug方法可参考:
https://modelcontextprotocol.io/docs/tools/debugging#debugging-in-claude-desktop
通过询问天气情况来测试MCP Server tool 功能:
四、MCP Client端开发
构建一个连接到 MCP 服务器的 LLM 驱动的聊天机器人客户端,分别使用官方Claude模型和DeepSeek模型服务。
1. 官方Claude服务
创建项目
# 创建项目目录
uv init mcp-client
cd mcp-client
# 创建虚拟环境
uv venv
# 激活虚拟环境
# 在 Windows 上:
.venv\Scripts\activate
# 在 Unix 或 MacOS 上:
source .venv/bin/activate
# 安装所需的包
uv add mcp anthropic python-dotenv
官方代码
https://github.com/modelcontextprotocol/quickstart-resources/blob/main/mcp-client-python/client.py
官方使用Claude模型,关键代码如下
运行客户端
指定 weather MCP Server,运行客户端:
uv run client.py path/to/weather.py
客户端工作流程:
(1)连接到指定的服务器;
(2)列出可用的工具;
(3)启动一个交互式聊天会话,用户可以:
a. 输入查询
b. 查看工具执行
c. 获取 Claude 的最终响应
2. DeepSeek模型服务
核心代码:
##
async def process_query(self, query: str) -> str:
"""
使用DeepSeek模型处理查询并调用可用的 MCP 工具 (Function Calling)
"""
messages = [{"role": "user", "content": query}]
response = await self.session.list_tools()
available_tools = [{
"type": "function",
"function": {
"name": tool.name,
"description": tool.description,
"input_schema": tool.inputSchema
}
} for tool in response.tools]
print(available_tools)
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
tools=available_tools
)
# 处理返回的内容
content = response.choices[0]
print(f'response choice={content}')
if content.finish_reason == "tool_calls":
# 如何是需要使用工具,就解析工具
tool_call = content.message.tool_calls[0]
tool_name = tool_call.function.name
tool_args = json.loads(tool_call.function.arguments)
# 执行工具
result = await self.session.call_tool(tool_name,
tool_args)
print(
f"\n\n[Calling tool {tool_name} with args {tool_args}]\n\n")
# 将模型返回的调用哪个工具数据和工具执行完成后的数据都存入messages中
messages.append(content.message.model_dump())
messages.append({
"role": "tool",
"content": result.content[0].text,
"tool_call_id": tool_call.id,
})
# 将上面的结果再返回给大模型用于生产最终的结果
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
)
return response.choices[0].message.content
return content.message.content
运行并验证客户端
五、结语
本文为开发者提供了从零搭建MCP应用的常用路径,还通过多模型服务(Claude/DeepSeek)的对比验证,体现了MCP的兼容性与可扩展性。后续可进一步探索复杂工具链的集成、服务性能优化,或结合其他LLM(如GPT、本地化模型)深化场景应用,力求能够快速掌握MCP开发的核心技能,并基于实际需求拓展更丰富的智能化应用场景。