🧩 AnythingLLM本地MCP框架
一个模块化的本地插件系统,能够 任何事情LLM 与多人沟通 MCP服务器 在隔离的Docker容器中运行。\ 它提供了一个单一的、安全的HTTP接入点,同时保持每个MCP完全沙盒化和独立。
______________________________________________________________________
安装:
git clone https://github.com/danny0094/mcp-bridge-stack cd mcp-bridge-stack docker compose up -d docker ps
🚀 概述
该框架通过以下方式扩展了AnythingLLM 克劳德喜欢本地MCP环境,完全使用Docker容器构建。
✨ 特性
- 安全清洁: Docker中没有主机或Docker访问。
- 模块化: 每个MCP都在自己的轻量级FastAPI容器中运行。
- 桥梁控制: LLM只与
mini-bridge,从不直接使用MCP。 - 动态注册表: MCP服务器从以下位置自动加载
mcp_registry.json. - 自动重新加载: 配置更改是实时应用的,不需要重新启动容器。
- MCP示例: 包含
Dummy-MCP(握手测试)和工作MCP-Time模块返回系统时间。
______________________________________________________________________
🧠 架构图
───────────────────────────────────────────────
Docker Network: danny-ai-net
───────────────────────────────────────────────
│
├─ anythingllm (Port 3001)
│ ↳ Main app (UI + chat logic)
│ ↳ Sends all queries → mini-bridge
│
├─ mini-bridge (Port 4100)
│ ↳ Central gateway between AnythingLLM and all MCPs
│ ↳ Routes requests via Decision Model
│ ↳ Auto-reloads mcp_registry.json dynamically
│
│ Workflow:
│ User → AnythingLLM → mini-bridge
│ ├─→ Decision-Agent (/route)
│ │ ↳ Decides which MCP to call
│ │ ↳ Returns JSON { "tool": "time" }
│ └─→ Forwards to chosen MCP via MCP-Hub
│
├─ decision-agent (prompt_injector) (Port 4300)
│ ↳ Lightweight model (Gemma 270M)
│ ↳ Analyses prompt context
│ ↳ Decides when to trigger MCP calls
│ ↳ Responds with structured tool decision
│
├─ mcp-hub (Port 4400)
│ ↳ Central registry + router for all MCP modules
│ ↳ Provides endpoints:
│ • /list – list all MCPs
│ • /status/ – health check
│ • /route – forward via hub
│
├─ dummy-mcp (Port 4200)
│ ↳ Test MCP – returns handshake / status info
│
├─ mcp-time (Port 4210)
│ ↳ Returns current UTC or local time via JSON-RPC
│
└─ (future) mcp-docs / mcp-weather / ...
↳ Extend system modularly – new MCPs auto-register in hub
───────────────────────────────────────────────
│
└─ Dual Model Flow:
Decision Model 🧭 (Gemma 270M) → Tool choice
Main Model 🧠 (Gemma 12B / DeepSeek 8B) → Reasoning + response
───────────────────────────────────────────────______________________________________________________________________
⚙️ 文件概述
mini_bridge.py
核心网关组件将AnythingLLM请求转发到相应的MCP。
REGISTRY_PATH = "/app/config/mcp_registry.json"
CHECK_INTERVAL = 3 # seconds for auto reload此文件从以下位置动态加载所有活动的MCP服务器 config/mcp_registry.json.
决策转发:
decision = await client.post("http://decision-agent:4300/route", json=payload)
route = decision.json().get("tool", "dummy") # fallback这定义了网桥如何与决策代理通信(例如端口4300)。
______________________________________________________________________
mini_prompt_injector.py
作为 决策模型代理它拦截消息并确定应触发哪个MCP。
环境变量:
OLLAMA_URL = os.getenv("OLLAMA_URL", "http://ollama:11434/api/chat")
MCP_HUB_URL = os.getenv("MCP_HUB_URL", "http://host.docker.internal:4000")OLLAMA_URL→ 您的Ollama服务器(必须以结尾/api/chat)MCP_HUB_URL→ MCP集线器访问的内部URL(同一网络)
型号配置:
DECISION_MODEL = "gemma3:270m"
ANSWER_MODEL = "gemma3:12b"- 决策模型 → 选择正确的MCP工具。
- 答案模型 → 生成最终推理和响应。
系统提示:\ 可自定义的提示会自动传递给答案模型。\ 使用它来定义行为规则、语气或响应格式。
______________________________________________________________________
mcp_hub.py
连接所有MCP服务器的中央注册表和路由器。
添加新的MCP容器时,只需扩展 TOOLS 字典:
TOOLS = {
"time": os.getenv("MCP_TIME_URL", "http://host.docker.internal:4210/"),
"weather": os.getenv("MCP_WEATHER_URL", "http://host.docker.internal:4220/"),
"docs": os.getenv("MCP_DOCS_URL", "http://host.docker.internal:4230/")
}每个新条目都会添加一个可通过以下方式查看的实时MCP端点 /list 和 /status.
______________________________________________________________________
🧩 双模系统
| 图层 | 模型 | 角色 | 描述 |
|---|---|---|---|
| 🧭 决策层 | Gemma 3 270M | 路由/工具选择 | 分析提示上下文并决定调用哪个MCP |
| 🧠 主层 | Gemma 3 12B/DeepSeek R1 8B | 推理/响应 | 生成面向用户的最终答案 |
______________________________________________________________________
💡 示例用例
“现在多晚了?”→ 任何事情LLM→ 迷你桥→ 决策代理人→ MCP时间→ 通过主模型返回的响应。
______________________________________________________________________
🧱 未来模块
您可以使用更多MCP轻松扩展系统:
mcp-weather→ 获取本地天气数据mcp-docs→ 处理文档搜索mcp-audio→ 转录或处理语音输入
每个额外的MCP只需要:
- 它自己的小型FastAPI容器。
- 报关进口
mcp_registry.json或mcp_hub.py. - 网络标签在
docker-compose.yml.
______________________________________________________________________
🧰 信用证和票据
建造于 丹尼 (2025)作为模块化AI实验的AnythingLLM本地扩展。\ 灵感来自Claude的MCP设计,但完全为本地离线使用而打造。
______________________________________________________________________
📄 *有关文档或更新,请访问该项目的GitHub页面。*
