使用说明
MCP演示:AI工具和代理编排
用于构建模型上下文协议(MCP)服务器、连接MCP客户端以及通过LangChain/LangGraph代理编排工具的Python示例。
此存储库旨在便于其他开发人员克隆、运行、理解和扩展。它使README专注于处理项目所需的信息,而较长的演练则存在于 PROJECT_ANALYSIS.md.
这表明了什么
- 使用以下工具构建自定义MCP工具和资源
FastMCP. - 演示多个MCP传输:
stdio,sse,以及streamable-http. - 将MCP服务器连接到直接客户端和LangChain/LangGraph ReAct代理。
- 用途
uv具有锁定的依赖关系图,用于可重复的本地设置。 - 包括确定性测试和stdio MCP传输集成测试。
- 通过Ruff和Pytest检查保持CI就位。
项目地图
McpDemo/
├── 01_basic_mcp/ # Config-driven client using external MCP servers
├── 02_mcpcrashcourse/
│ ├── server/weather.py # FastMCP weather alerts + echo resource
│ ├── mcpserver/server.py # Weather alerts + forecast MCP server
│ ├── mcpserver/client-*.py # stdio and SSE clients
│ └── weather.json # Portable MCP server config
├── 03_mcplangchain/
│ ├── mathserver.py # FastMCP math tools
│ ├── weather.py # Streamable HTTP weather tool
│ └── client.py # LangChain multi-server agent client
├── mcpdemo/ # Shared weather helpers and typed config
├── tests/ # Unit tests for deterministic behavior
├── .github/workflows/ci.yml # Ruff + Pytest workflow
├── pyproject.toml # Project metadata and dependencies
└── uv.lock # Locked dependency graph
在哪里工作
02_mcpcrashcourse/mcpserver/server.py-主气象MCP服务器get_alerts和get_forecast.mcpdemo/weather_tools.py-共享国家气象局请求和格式化助手。tests/-确定性测试加上stdio MCP服务器/客户端集成检查。02_mcpcrashcourse/mcpserver/client-stdio.py和client-sse.py-直接客户端示例stdio和sse.03_mcplangchain/client.py-聚合MCP工具的LangChain/LangGraph代理客户端。mcpdemo/langchain_settings.py-键入提供程序、型号和MCP服务器配置的设置。03_mcplangchain/mathserver.py-用于测试编排的小型确定性数学服务器。pyproject.toml-依赖关系、Ruff配置和Pytest配置。
快速开始
先决条件:
- python
3.11+ uv- Node.js+
npx用于由使用的外部服务器01_basic_mcp/browser_mcp.json - 可选:
GROQ_API_KEY在.env面向LLM支持的客户
git clone <repo-url>
cd McpDemo
uv sync --all-groups
可选的 .env:
GROQ_API_KEY=your_key_here
GROQ_MODEL=qwen-qwq-32b
MCP_WEATHER_URL=http://localhost:8000/mcp
验证项目
在打开PR之前运行以下检查:
uv sync --frozen --all-groups
uv run ruff check .
uv run pytest
GitHub Actions工作流对推送和拉取请求运行相同的lint和测试检查。
运行示例
| 工作流 | 运行方式 | 命令 |
|---|---|---|
| 基本外部MCP聊天 | 01_basic_mcp/ |
uv run python app.py |
| 天气MCP检查器 | 仓库根目录 | uv run mcp dev 02_mcpcrashcourse/server/weather.py |
| 天气stdio客户端 | 02_mcpcrashcourse/mcpserver/ |
uv run python client-stdio.py |
| 天气SSE服务器 | 仓库根目录 | uv run python 02_mcpcrashcourse/mcpserver/server.py |
| 天气SSE客户端 | 回购根 | uv run python 02_mcpcrashcourse/mcpserver/client-sse.py |
| LangChain天气服务器 | 仓库根 | uv run python 03_mcplangchain/weather.py |
| LangChain多服务器客户端 | 03_mcplangchain/ |
uv run python client.py |
工具表面示例
get_alerts(state: str)-获取并格式化当前的美国天气警报。get_forecast(latitude: float, longitude: float)-解析天气网格点并返回预报时段。add(a: int, b: int)-确定性MCP数学工具。multiple(a: int, b: int)-确定性MCP数学工具。get_weather(location: str)-用于代理演示的简单流式HTTP天气工具。echo://{message}-MCP资源示例。
开发说明
- 保持
uv作为单一依赖管理器,将更新提交给uv.lock. - 保持测试的确定性:模拟网络调用,避免在CI中要求LLM密钥。
- 将可重用的工具逻辑放在小函数后面,以便在MCP运行时之外进行测试。
- 使用
.env仅适用于需要提供者密钥的本地交互式客户端。 - 比起README中的大型教程转储,更喜欢添加有重点的示例。
码头工人
构建并运行应急课程MCP天气服务器:
docker build -f 02_mcpcrashcourse/mcpserver/Dockerfile -t mcp-weather-demo .
docker run --rm -p 8000:8000 mcp-weather-demo
审阅者注意事项
重要的审查路径可以快速检查:依赖关系安装 uv sync --frozen --all-groups,确定性测试在没有LLM密钥的情况下运行,交互式示例与CI安全检查分开保存。
有关更深入的逐文件演练,请参见 PROJECT_ANALYSIS.md.