使应用程序智能化:构建MCP客户端
一个实践研讨会,教你如何通过逐步增强一个简单的聊天应用程序来构建模型上下文协议(MCP)客户端。学习如何集成工具、资源和提示,以创建可以与外部系统交互的智能应用程序。
你将学到什么
本次研讨会演示了如何将基本的Claude聊天代理转换为功能齐全的MCP客户端,该客户端可以:
- 通过stdio连接到MCP服务器
- 发现并使用服务器提供的工具
- 加载和注入上下文资源
- 应用提示模板进行行为指导
- 实现代理循环模式
先决条件
- Python 3.12或更高版本
- 人类API密钥(在这里买一个)
- 基本熟悉Python和async/await
安装
1.安装uv
此项目使用 紫外线 用于快速、可靠的Python依赖管理。
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Or with pip
pip install uv2.克隆存储库
git clone
cd making-apps-intelligent3.安装依赖项
uv sync4.配置您的API密钥
# Copy the example environment file
cp .env.example .env
# Edit .env and add your Anthropic API key
# ANTHROPIC_API_KEY=your_api_key_here存储库结构
研讨会分为渐进的步骤,每个步骤都建立在前一个步骤的基础上:
making-apps-intelligent/
├── 00_base_application/ # Simple chat agent (baseline)
├── 01_create_client_module/ # MCP client with connection lifecycle
├── 02_supporting_tools/ # Tool discovery and execution
├── 03_supporting_resources/ # Resource loading and context injection
├── 04_supporting_prompts/ # Prompt templates and complete integration
├── calculator_server.py # Example MCP server for testing
├── pyproject.toml # Project dependencies
└── .env.example # API key template关于示例服务器
这 calculator_server.py 是一个简单的MCP服务器,它提供:
- 工具:数学运算(加、减、乘、除)
- 资源:数学常数(pi、e、黄金比例)和公式
- 提示:分步解决问题的模板
此服务器允许您在不需要外部服务的情况下测试所有MCP客户端功能。
______________________________________________________________________
工作坊步骤
步骤0:基础应用程序
新增内容:
- 简单的CLI聊天界面
- 对话历史管理
- Claude API基本集成
已实施的概念:
- 与Claude同步消息交换
- 用户输入/输出处理
- 会话上下文维护
如何跑步:
uv run python 00_base_application/agent.py要尝试的示例查询:
You: Hello! How are you?
You: What is the capital of France?
You: Can you explain what gravity is?注意事项:
- 代理维护对话历史记录
- 无法获取工具或外部知识
- 简单的请求/响应模式
______________________________________________________________________
步骤1:创建客户端模块
新增内容:
MCPClient类与连接管理- 异步/等待模式实现
- Stdio服务器连接设置
已实施的概念:
- MCP客户端初始化和生命周期
- 用于资源清理的AsyncExitStack
- 基于子进程的服务器通信
- 会话握手和初始化
如何跑步:
uv run python 01_create_client_module/agent.py要尝试的示例查询:
You: Hello! Can you help me with math?
You: What can you do?注意事项:
- 应用程序转换为异步(asyncio.run)
- 客户端在启动时连接到计算器服务器
- 退出时优雅的断开连接
- 没有功能差异-工具未使用
______________________________________________________________________
第二步:辅助工具
新增内容:
get_available_tools()-发现服务器功能use_tool()-执行工具并处理结果- 代理循环模式实现
已实施的概念:
- Claude API的工具发现和格式化
- 通过MCP协议执行工具
- 代理循环(Claude决定何时使用工具)
- 多回转工具使用对话
- 内容类型处理(文本、图像、资源)
如何跑步:
uv run python 02_supporting_tools/agent.py要尝试的示例查询:
You: What is 25 multiplied by 17?
You: Calculate (45 + 67) * 3
You: If I have 1000 dollars and spend 234, how much is left?
You: What's 15 divided by 3, then add 10?注意事项:
- 启动时显示服务器工具
[Using tool: ...]消息显示工具执行- Claude决定何时需要工具
- 可以按顺序使用多个工具
- 结果被整合到克劳德的回应中
______________________________________________________________________
第三步:支持资源
新增内容:
get_available_resources()-列出可用数据get_resource(uri)-获取资源内容- 资源上下文注入模式
已实施的概念:
- 资源发现和元数据检索
- 基于URI的资源访问
- 用户消息中的上下文注入
- 多模态内容(文本和图像)
- 工具(代理)和资源(上下文)之间的区别
如何跑步:
uv run python 03_supporting_resources/agent.py要尝试的示例查询:
You: What is the value of pi?
You: Tell me about the golden ratio
You: What's the quadratic formula?
You: How does Euler's number relate to compound interest?注意事项:
- 在每次查询之前加载资源
[Loading resource: ...]消息显示加载的内容- 克劳德可以访问数学常数和公式
- 资源提供背景知识
- 无需使用工具即可回答有关资源内容的问题
______________________________________________________________________
第四步:支持提示
新增内容:
get_available_prompts()-列出提示模板load_prompt(name, arguments)-获取和呈现提示- 所有三个MCP原语的完全集成
已实施的概念:
- 提示模板发现
- 参数化提示加载
- 提示为系统说明
- 三种MCP基本类型协同工作:
- 工具:代理执行(克劳德决定何时执行) - 资源:背景上下文(预加载) - 提示:行为指导(系统说明)
如何跑步:
uv run python 04_supporting_prompts/agent.py要尝试的示例查询:
You: What is 156 times 23?
You: Calculate the area of a circle with radius 5
You: Solve: 2x + 5 = 13
You: What's the difference between pi and e?
You: Help me solve: (3 + 4) * (10 - 2)注意事项:
- 启动时显示的所有服务器功能
[Loading prompt: ...]显示提示用法- 提示指导克劳德如何处理问题
- 完全集成:提示引导、资源通知、工具执行
- Claude可以将这三者结合起来进行复杂的查询
______________________________________________________________________
了解MCP原语
工具
何时使用: 用于动作和计算
- 克劳德决定何时处决他们
- 在对话过程中动态使用
- 示例:计算器函数、API调用、文件操作
资源
何时使用: 了解背景信息
- 发送消息前已预加载
- 提供始终可用的上下文
- 示例:文档、常量、配置数据
提示
何时使用: 用于行为指导
- 定义助理的行为方式
- 可以针对不同的场景进行参数化
- 示例:音调设置、响应格式、领域专业知识
后续步骤
完成本次研讨会后,您可以:
- 连接到现有服务器
- 探索 MCP服务器存储库 - 连接到数据库、API和文件系统 - 在一个客户端中组合多个服务器
- 增强客户
- 添加智能资源选择 - 实现基于上下文的提示切换 - 添加对流式响应的支持 - 构建更复杂的UI - 连接到新的MCP注册表 - 构建客户提供的功能,如根和启发。测试服务器可以按原样使用它们。
故障排除
“ANTHROPIC_API_KEY未设置”错误
确保您已创建 .env 使用API密钥文件:
cp .env.example .env
# Edit .env and add: ANTHROPIC_API_KEY=your_actual_key导入错误或缺少依赖项
重新安装依赖关系:
uv sync --force计算器服务器未连接
服务器由客户端自动启动。如果您看到连接错误:
- 确保
calculator_server.py存在于项目根目录中 - 检查uv是否可以运行Python脚本:
uv run python --version
