AI工具与代理编排

一个用于构建模型上下文协议(MCP)服务器、连接MCP客户端并通过LangChain/LangGraph代理编排工具的项目演示。

  • by VachanaVisweswaraiah
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 VachanaVisweswaraiah/McpDemo

使用说明

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.