使用说明
MCP企业工具编排服务器
为什么存在
LangChain工具在代理构建时是硬编码的——添加工具意味着 重新部署代理。MCP(模型上下文协议)通过以下方式解决了这个问题 规范代理如何在运行时从实时服务器发现工具。 该项目实现了一个暴露真实企业的生产级MCP服务器 工具(SQL、文件系统、web搜索),由构建的LangGraph代理使用 它的工具列表是从正在运行的服务器动态生成的,不需要重新部署。
建筑
┌─────────────────┐ JWT + JSON-RPC ┌──────────────────────┐
│ LangGraph │ ──── /tools/list ──────▶ │ MCP Server │
│ Agent │ ◀─── tool definitions ── │ (FastAPI) │
│ │ │ │
│ Runtime tool │ ──── /tools/call ──────▶ │ Tool Registry │
│ discovery │ ◀─── tool result ─────── │ (YAML-driven) │
└─────────────────┘ └──────────┬───────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
SQLite Filesystem DuckDuckGo
(IT Assets) (files/) (web search)
快速入门(本地演示-零成本)
# 1. Clone and install
git clone https://github.com/Akash-1512/mcp-tool-server.git
cd mcp-tool-server
pip install -r requirements.txt
# 2. Copy env template and fill GROQ_API_KEY and JWT_SECRET
cp .env.example .env
# 3. Seed the database
python -c "import sqlite3, pathlib; conn = sqlite3.connect('data/enterprise.db'); \
conn.executescript(pathlib.Path('data/seed.sql').read_text()); conn.commit(); conn.close()"
# 4. Start MCP server
uvicorn mcp_server.main:app --port 8003
# 5. In a second terminal — run the Streamlit UI
streamlit run ui/chat_ui.py
堆栈
| 图层 | 本地演示 | 制作 |
|---|---|---|
| LLM | Groq llama-3.1-8b-instant(免费) | Azure OpenAI GPT-4o |
| 数据库 | SQLite | Azure SQL |
| 文件存储 | 本地文件系统 | Azure Blob存储 |
| 网络搜索 | DuckDuckGo(无关键字) | Azure Bing搜索 |
| 身份验证 | PyJWT HS256 | Azure AD OAuth 2.0 |
| 部署 | Docker本地 | Azure容器应用 |
项目状态
| 里程碑 | 版本 | 状态 |
|---|---|---|
| 回购脚手架 | v0.1.0 | ✅ |
| IT资产种子数据 | v0.2.0 | ✅ |
| MCP服务器核心 | v0.3.0 | ✅ |
| sql_query_tool | v0.4.0 | ✅ |
| 文件搜索工具 | v0.5.0 | ✅ |
| 网络搜索工具 | v0.6.0 | ✅ |
| JWT身份验证 | v0.7.0 | ✅ |
| LangGraph代理 | v0.8.0 | ✅ |
| 流媒体用户界面 | v0.9.0 | ✅ |
| CI/CD+文档 | v1.0.0 | ✅ |
已知限制
- DuckDuckGo对来自同一IP的重复呼叫进行严格的速率限制。 重试逻辑处理瞬态限制,但持续测试需要 Azure Bing搜索(代码中注释的生产路径)。
- SQLite没有并发写支持——在sql_tool.py中,WAL模式被标记为FIXME。
- llama-3.1-8b-instant需要系统中的显式模式+示例查询 提示生成正确的JOIN语法。GPT-4o没有这个限制。
- AgentState中的tool_call_trace尚未填充--UI跟踪面板 显示为空。计划进行下一次迭代。
作出取舍
看 docs/tradeoff.md 获取完整的权衡文档。
- SQLite与Azure SQL: 零基础设施演示,seed.sql确保 再现性。按比例并发读取需要WAL模式。
- PyJWT HS256与Azure AD: 对称密钥适合演示。生产 需要RS256和Azure AD JWKS端点验证。
- DuckDuckGo vs Azure Bing: 免费,没有钥匙。负载下不可靠-- Azure Bing具有SLA和适当的速率限制。
- 骆驼-3.1-8b瞬间vs GPT-4o: 免费套餐,快速。需要更多 明确提示正确生成SQL。
我尝试过但没有奏效
- DuckDuckGo使用同一会话重试: 在以下情况下重用DDGS()实例 RatelimitException会毒害内部状态。通过创建一个新的 重试实例——在持续期间仍被IP级别限制阻止 开发测试。
- 美洲驼3-8b-8192: 在Groq中期建造时退役。切换到 骆驼-3.1-8b瞬间。
- 没有args模式的结构化工具: LangChain发送空参数 对于没有明确Pydantic模式的工具。通过构建动态来修复 通过MCP inputSchema属性中的create_model()创建模式。
- 没有合成节点的代理循环: 小型模型调用工具 重复而不产生最终答案。用专用 在3次工具调用后强制生成答案的合成节点。
