autogen与mcp测试
使用GitHub模型的MCP客户端、工具服务器和单代理FastAPI服务示例。
快速开始
1.先决条件
- Python>=3.10
- 紫外线 已安装(快速依赖性解析器)
2.克隆和安装
git clone
cd mcp-testing
uv sync # installs dependencies from pyproject.toml3.环境文件
复制示例并根据需要进行定制:
cp .env.example server/.env
cp .env.example tools/.env编辑每个 .env 添加您的 OPENAI_API_KEY (GitHub PAT与models.read)。可选:添加 OPENWEATHER_API_KEY 天气工具。
4.运行服务
首先启动工具服务器(默认端口8090):
uv run mcp-test-tools在第二个终端中启动API服务器(默认端口8080):
uv run mcp-test-server可选Streamlit客户端(如果存在):
uv run mcp-test-client或者通过助手启动所有内容:
uv run run-all5.测试终点
curl -s localhost:8080/health | jq
curl -s -X POST localhost:8080/chat -H 'Content-Type: application/json' -d '{"message":"add 3 and 5"}' | jq服务器
服务器是系统的入口点。外部请求将进行交互 通过REST与服务器连接。服务器将包括一个代理编排器 它可以访问多种工具。这些工具单独提供 可通过MCP访问的服务。
LLM客户端
该应用程序通过与OpenAI兼容的API端点以GitHub模型为目标。 通过以下方式更改所有组件的模型 LLM_MODEL (默认值: gpt-4.1-mini). 使用官方 openai Python SDK指向GitHub模型的基本URL。
工具
工具在服务器发送事件(SSE)上公开的单独FastMCP进程中运行:
当前工具:
calculator–基本算术(加/减/乘/除)get_weather–使用OpenWeather API获取城市的当前天气(需要OPENWEATHER_API_KEY)read_file–从本地读取文本文件data/目录(安全路径检查)
每个工具都会记录开始、结束、延迟和错误,并生成 request_id.
配置
两者 server 和 tools 进程从加载环境变量 .env 文件。
GitHub模型所需的最小变量:
OPENAI_API_KEY=
# Optional overrides:
OPENAI_BASE_URL=https://models.inference.ai.azure.com
LLM_MODEL=gpt-4.1-mini笔记:
OPENAI_BASE_URL如果省略,则默认为内部值。- 你可以交换
LLM_MODEL任何支持的GitHub模型(例如。gpt-4.1,gpt-4.1-nano等等)。 - 除非重新启用遥测仪器,否则不再需要新的Relic变量。
可选变量:
OPENWEATHER_API_KEY–启用get_weather工具。LOG_LEVEL–调整日志的详细程度(DEBUG,INFO等等)。TOOL_HOSTNAME/TOOL_PORT–覆盖默认工具服务器位置。NEW_RELIC_ENABLED–设置为1如果满足以下条件,则启用仪器newrelic.ini存在。
端点
服务器(FastAPI):
GET /health–简单的活性检查。POST /chat–身体{ "message": "..." };返回最终助理响应加上arequest_id以及持续时间。
执行
使用 uv 脚本:
uv run mcp-test-tools–启动MCP SSE服务器工具。uv run mcp-test-server–启动FastAPI聊天服务器。uv run mcp-test-client–(如果存在)启动Streamlit客户端。uv run run-all–在一个流程管理器中启动工具+服务器(+客户端,如果可用)。
日志记录
结构化日志包括相关性ID(request_id)以及时间度量。 避免使用 message 在测井 extra;我们以前缀 user_message 相反。 所有日志都转到stdout;您可以使用日志转发器进行管道传输或收集。
安全说明
- 这
read_file工具限制对的访问data/仅目录。 - 不要提交真正的API密钥。使用
.env从VCS中排除的文件。 - 天气工具具有较短的超时时间(5秒)和网络故障的错误处理功能。
延伸
通过装饰功能添加新工具 @mcp.tool("name") 在 tools/tools_server.py. 代理人在 server/agent.py 如果包含适配器初始化,则会自动加载它们。
故障排除
| 问题 | 原因 | 修复 |
|---|---|---|
FileNotFoundError: ../newrelic.ini | 从其他CWD运行 | 使用提供的条件初始化(NEW_RELIC_ENABLED)或移动 newrelic.ini 项目根。 |
| 401/型号错误 | 错误或缺失 OPENAI_API_KEY | 重新生成PAT models.read 范围;再出口环境。 |
| 天气工具返回配置错误 | 缺失 OPENWEATHER_API_KEY | 为两者添加密钥 tools/.env 和 server/.env 如果代理推理使用它 |
| 高延迟 | 冷模型/客户端实例化每个请求 | 考虑缓存 OpenAIChatCompletionClient 在 app.state. |
| 除零错误 | 用户要求无效操作 | 计算器工具故意返回错误字符串;代理人应该处理。 |
下一个想法
- 代理到代理转录端点(多代理聊天),用于更丰富的演示。
- 通过MCP集成Azure资源工具以进行云状态检查。
- 结构化JSON日志记录(用自定义格式化程序替换格式字符串)。
