企业工具编排服务器

MCP企业工具编排服务器是一个标准化工具发现和调用的生产级服务器,支持SQL、文件系统和网络搜索等企业工具,供LangGraph代理动态构建工具列表。

  • by Akash-1512
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Akash-1512/mcp-tool-server

使用说明

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次工具调用后强制生成答案的合成节点。