基于DeepSeek的MCP应用开发实践

一个基础入门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

# 为项目创建一个新 directoryuv init weathercd weather# 创建 virtual environment 并激活它uv venv.venv\Scripts\activate# 安装 dependenciesuv add mcp[cli] httpx

MacOS/Linux

# 为项目创建一个新 directoryuv init weathercd weather# 创建 virtual environment 并激活它uv venvsource .venv/bin/activate# 安装 dependenciesuv 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-clientcd 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开发的核心技能,并基于实际需求拓展更丰富的智能化应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呱牛 do IT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值