使用说明
MCP人工智能助理
通过模型上下文协议可插入的AI工具
一个模块化的生产级AI代理平台,具有运行时工具发现、多工具编排和全栈可观察性。通过启动容器可以添加新功能——无需重新启动代理,无需更改代码,也无需重新部署。
建立在 Anthropic模型上下文协议(MCP),该项目演示了可插拔AI工具的生产级架构:LangChain ReAct代理通过网络发现与MCP兼容的工具服务器,动态构建与LangChain兼容的工具绑定,并编排多步工具链来回答用户查询。
100%本地。 与Ollama一起完全在您的机器上运行。没有API密钥,没有云成本。
主要特点
- 可插拔工具架构 --每个工具服务器都是一个独立的服务,有自己的容器。在不接触代理的情况下添加、删除或更新工具。
- 动态工具发现 --代理在运行时通过SSE自动检测MCP服务器。新工具会在服务器启动后几秒钟内出现。
- 多工具链 --ReAct代理自主地按顺序编排多个工具来回答复杂的查询(例如,搜索网络,然后汇总,然后保存注释)。
- 智能缓存 --Redis使用可配置的TTL缓存工具结果。重复查询会完全跳过工具调用。
- 完全可观察性 --Prometheus指标(8种仪器),带有预构建的Grafana仪表板,涵盖工具延迟、成功率、缓存命中率和HTTP性能。
- 对话记忆 --每个会话的聊天历史记录,以便代理记住各个回合的上下文。
- PostgreSQL日志记录 --每次工具调用和对话都会使用完整的分析端点进行记录。
- 一个命令部署 —
docker compose up提起10个集装箱,全部接线。
建筑
🏗️ 建筑
它是如何工作的: 代理通过SSE连接到每个MCP服务器,调用 list_tools() 为了发现可用的工具及其JSON模式,将这些模式转换为与LangChain兼容的Pydantic模型,并将其绑定为ReAct代理的工具。当LLM决定使用工具时,代理打开与相应服务器的SSE连接并调用 call_tool() 与论点。结果通过代理返回给用户。
技术栈
| 层 | 技术 | 目的 |
|---|---|---|
| LLM | Ollama+Qwen3:1.7b | 局部推理、工具调用 |
| 代理框架 | LangChain | 使用工具编排重新激活代理 |
| 代理的API | FastAPI | 异步REST API |
| 工具协议 | MCP(SSE传输) | 标准化工具发现和执行 |
| UI | Streamlit | 带分析仪表板的聊天界面 |
| 缓存 | Redis | TTL工具结果缓存 |
| 数据库 | PostgreSQL | 对话和工具调用日志 |
| 监控 | 普罗米修斯+格拉法纳 | 指标收集和可视化 |
| 编排 | Docker Compose | 10容器部署 |
MCP工具服务器
| 服务器 | 端口 | 工具 | 描述 |
|---|---|---|---|
| 笔记管理器 | 8001 | save_note, get_notes, search_notes |
带有标签过滤和关键字搜索的持久笔记存储 |
| 网络搜索 | 8002 | web_search, fetch_url |
DuckDuckGo搜索和网页内容提取 |
| 文档摘要生成器 | 8003 | summarize_text, extract_key_points |
基于LLM的文本摘要和关键点提取 |
| 计算器 | 8004 | calculate, convert_units |
安全数学评估(基于AST)和单位转换 |
每个服务器还公开一个 health_check 工具。 总共13个工具 跨4台服务器。
快速开始
先决条件
- Python>=3.11 (用3.14.2测试)
- Docker 桌面版 (分配了4 GB+RAM)
- 奥拉玛 与Qwen3:1.7b拉
ollama pull qwen3:1.7b
跑
git clone https://github.com/gulabjamun04/mcp-ai-assistant.git
cd mcp-ai-assistant
docker compose up --build -d
等待约60秒,让所有服务恢复健康,然后:
| 服务 | URL |
|---|---|
| 聊天界面 | http://localhost:8501 |
| 代理API | http://localhost:8000/docs |
| 伯爵 | http://localhost:3000 (管理员/管理员) |
| 普罗米修斯 | http://localhost:9090 |
将模型拉入Docker的Ollama
# After containers are up, pull the model into the containerized Ollama
./scripts/pull_model.sh
动态发现演示
查看核心价值主张的实际应用——在代理运行时启动一个新的工具服务器,它会自动获取新的工具:
python scripts/demo.py
Step 1: 10 tools from 3 servers
Step 2: "What is 15% of 250?" → LLM answers alone (no tools)
Step 3: 🚀 Starting calculator container...
Step 4: ✅ 3 new tools discovered → 13 tools from 4 servers
Step 5: Same question → routes to [calculate] tool
Step 6: "Convert 100 km to miles" → [convert_units] tool
零代码更改。零重启。
API终点
| 方法 | 端点 | 描述 |
|---|---|---|
POST |
/chat |
发送消息,获取工具使用信息的回复 |
GET |
/tools |
列出所有发现的MCP工具 |
POST |
/tools/refresh |
触发手动工具重新发现 |
GET |
/health |
代理和服务器运行状况 |
GET |
/cache/stats |
缓存命中/未命中统计数据 |
DELETE |
/cache/clear |
刷新缓存的工具结果 |
GET |
/analytics/tools |
工具使用分析 |
GET |
/analytics/sessions |
会话统计 |
GET |
/analytics/recent |
最近20次工具调用 |
GET |
/metrics |
普罗米修斯指标 |
监控
Grafana仪表板(MCP AI Assistant)是自动配置的,包括:
| 面板 | 公制 |
|---|---|
| 刀具调用总数 | mcp_tool_invocations_total |
| 活动会话 | mcp_active_sessions |
| 缓存命中率 | mcp_cache_operations_total |
| 可用工具 | mcp_available_tools |
| 随时间推移的工具调用 | rate(mcp_tool_invocations_total[5m]) |
| 平均工具延迟 | mcp_tool_duration_seconds |
| 工具成功率 | 成功率/按工具统计的总数 |
| HTTP请求速率 | mcp_http_requests_total |
| 响应时间百分比 | P50/P95/P99 |
| 错误率 | 5xx+工具错误 |
访问地址: http://localhost:3000 (管理员/管理员)。
添加新工具服务器
这种架构的全部意义在于,添加新功能是微不足道的:
1.创建服务器 --使用MCP SDK的单个Python文件:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-server", host="0.0.0.0", port=8005)
@mcp.tool()
def my_tool(query: str) -> dict:
"""Tool description for the LLM."""
return {"result": do_something(query)}
if __name__ == "__main__":
mcp.run(transport="sse")
2.创建一个Docker文件:
FROM python:3.11-slim
WORKDIR /app
RUN pip install --no-cache-dir mcp
COPY mcp_servers/__init__.py ./mcp_servers/__init__.py
COPY mcp_servers/my_server/ ./mcp_servers/my_server/
EXPOSE 8005
CMD ["python", "-m", "mcp_servers.my_server.server"]
3.添加到 docker-compose.yml 和 agent/config.py.
4.启动它:
docker compose up -d my-server
curl -X POST http://localhost:8000/tools/refresh
5.完成。 代理会立即发现并使用新工具。
项目结构
mcp-ai-assistant/
├── agent/ # Core AI agent (FastAPI)
│ ├── agent.py # LangChain ReAct agent + session memory
│ ├── cache.py # Redis caching layer
│ ├── config.py # Settings from .env
│ ├── database.py # PostgreSQL logging + analytics
│ ├── main.py # FastAPI app + endpoints
│ ├── mcp_client.py # MCP tool registry + discovery
│ └── metrics.py # Prometheus instrumentation
│
├── mcp_servers/ # MCP tool servers (one per subdirectory)
│ ├── note_manager/ # Note storage (port 8001)
│ ├── web_search/ # Web search + fetch (port 8002)
│ ├── doc_summarizer/ # Text summarization (port 8003)
│ └── calculator/ # Math + unit conversion (port 8004)
│
├── ui/ # Streamlit chat interface
│ ├── app.py # Entry point
│ ├── api.py # Backend API client
│ └── components/ # Chat, sidebar, analytics pages
│
├── monitoring/ # Observability
│ ├── prometheus/prometheus.yml # Scrape config
│ └── grafana/ # Dashboard + provisioning
│
├── docker/ # Docker build files
│ ├── Dockerfile.agent
│ └── init.sql # PostgreSQL schema
│
├── scripts/
│ ├── demo.py # Dynamic discovery demo
│ ├── test_docker.py # Docker integration tests
│ ├── pull_model.sh # Pull Ollama model into container
│ └── run_local.py # Local development launcher
│
├── tests/ # 161 unit tests
│ ├── test_note_manager.py
│ ├── test_web_search.py
│ ├── test_doc_summarizer.py
│ ├── test_calculator.py
│ ├── test_cache.py
│ └── test_database.py
│
├── docker-compose.yml # 10-service orchestration
├── requirements.txt
└── .env # Environment configuration
测试
# Run all 161 tests
python -m pytest tests/ -v
# Run a specific server's tests
python -m pytest tests/test_calculator.py -v
# Run Docker integration tests (requires docker compose up)
python scripts/test_docker.py
主要特点
运行时工具发现——代理通过SSE自动注册MCP服务器,并动态绑定JSON模式定义的工具。
零停机扩展性——检测到新的工具容器并在几秒钟内可用,无需重新启动代理。
多步工具编排——每个查询最多可重新执行3个以上工具的代理序列(例如,搜索→ 总结→ 坚持)。
分布式架构——4个隔离的MCP服务器,在10个Docker容器中暴露13个工具。
生产可观察性——Prometheus指标(8个仪器),带有Grafana仪表板,涵盖延迟(P50/P95/P99)、工具成功率、缓存指标和HTTP吞吐量。
缓存优化层——基于Redis TTL的缓存减少了冗余的LLM和工具执行。
结构化日志和分析——PostgreSQL支持的具有分析端点的调用日志。
截图
聊天界面
与ReAct代理的多工具对话——在一个会话中搜索网络、保存笔记、总结文档和计算值。
分析仪表板
会话指标、工具使用细分和最近的活动——所有这些都由PostgreSQL日志提供支持。
Grafana监测
实时可观察性:工具延迟、缓存命中率、HTTP性能和活动会话。
监测和可观察性
自动配置的MCP AI Assistant Grafana仪表板包括:
刀具调用总数
活跃会话
缓存命中率
可用工具计数
工具成功率(每个工具)
平均工具延迟
调用率
HTTP请求速率
响应时间百分比(P50/P95/P99)
错误率
所有指标都通过/metrics公开,并由Prometheus抓取。
动态工具发现
一个新的MCP服务器启动,代理自动拿起它的工具——零重启,零代码更改。
贡献
欢迎捐款。要添加功能,请执行以下操作:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/my-feature) - 为您的更改编写测试
- 确保所有测试通过(
python -m pytest tests/ -v) - 打开拉取请求
许可证
该项目根据MIT许可证获得许可。看 许可证 了解详情。
作者
希维什·戴夫
