基于DeepSeek的MCP应用开发实践

194 阅读4分钟

本文通过一个基础入门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 venvsource 
.venv/bin/activate
# 安装 dependencies
uv add "mcp[cli]" httpx

官方完整代码

github.com/modelcontex…

其中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输出。

  1. 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方法可参考:

modelcontextprotocol.io/docs/tools/…

通过询问天气情况来测试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

官方代码

github.com/modelcontex…

官方使用Claude模型,关键代码如下

运行客户端

指定 weather MCP Server,运行客户端:

uv run client.py path/to/weather.py 

客户端工作流程:

(1)连接到指定的服务器;

(2)列出可用的工具;

(3)启动一个交互式聊天会话,用户可以:

    a. 输入查询

    b. 查看工具执行

    c. 获取 Claude 的最终响应

  1. 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开发的核心技能,并基于实际需求拓展更丰富的智能化应用场景。