MCP桥接器和快速注射器(Danny)
你好,我是Danny,一个独立开发人员、业余开发人员和安全狂热者。该项目提供了一个安全、Docker友好的 桥 对于AnythingLLM,允许跨Docker网络使用MCP(模型上下文协议)工具,而无需授予Docker本身启动其他容器的权限。
为什么是这个项目?
在Docker中运行的大多数AI或LLM接口都存在同样的问题:\ 容器无法(安全地)启动或管理其他容器。\ 这一限制破坏了MCP工作流程,并阻止了在隔离环境中使用工具。
与其授予Docker危险的特权(这违背了容器安全的整个目的),\ 我构建了一个模块化架构 MCP电桥 结合a 快速注射器 —\ 安全连接任何UI(如AnythingLLM、OpenWebUI或其他本地AI仪表板)\ Docker网络中的MCP兼容工具。
简言之:
我想保持完全的控制、稳定和安全-- 同时仍然允许AI系统调用真实的工具,如 time, weather, docs,或任何自定义MCP服务。
建筑(简)
- 桥 –一个虚拟MCP,充当任何AI WEBUI的目标,并将调用转发到真实的MCP服务。
- 快速注射器 –中央控制中心。决定是否需要工具,注入系统提示,净化输入(安全层),并在必要时调用MCP Hub。
- MCP集线器 –包含可用MCP工具的目录(例如。,
time,weather,docs),通常作为单独的Docker容器访问。
______________________________________________________________________
主要原则
- 不提升Docker权限:否
docker.sock没有DinD。 - 安全第一:输入消毒器、工具访问控制和审计记录器。
- 模块化:只需将新的MCP容器添加到
TOOLS地图。
______________________________________________________________________
示例配置(提示规则)
SYSTEM_PROMPT = """
You are a precise AI assistant with access to tools (MCP).
Behave as follows:
1️⃣ If you can answer the query directly (explanation, opinion, knowledge, small talk),
respond immediately, of course, in text form.
2️⃣ If a tool is needed (time, weather, documents, external data),
return only JSON in the format:
{"action": "mcp_call", "tool": "", "query": ""}
3️⃣ Do not answer philosophical or open-ended questions with tool calls.
4️⃣ Do not return a JSON structure if no tool is required.
"""______________________________________________________________________
快速注射器——核心功能(简短)
ask_deepseek(user_prompt: str)--将带有系统提示和温度的消息发送到模型。call_mcp_tool(tool: str, query: str)--构造JSON-RPC并调用MCP_HUB_URL/{tool},解析响应并返回内容。sanitize_input(prompt: str)--过滤危险有效载荷,如rm -rf,sudo,curl、API密钥等。ALLOWED_TOOLS--允许的工具列表(例如。,["time","docs","search"]).
______________________________________________________________________
MCP集线器——示例
TOOLS = {
"time": "http://mcp-time:4210/",
"weather": "http://mcp-weather:4220/",
"docs": "http://mcp-docs:4230/"
}time 这是一个演示;其他是占位符——只需在那里输入新的MCP容器。
______________________________________________________________________
##数据和上下文
prompt-injector/data/memory.db–简单的上下文数据库(目前:10个条目),以确保后续对MCP调用的查询保持上下文敏感。
______________________________________________________________________
TODO/路线图
- 完全执行决策规则(提前决定是否需要MCP呼叫的代理)。
- 展开审核记录器(谁提出了哪个请求)。
- 添加更多单元测试和样本MCP(天气、文档)。
- 共享操作(家族)的可选身份验证/用户管理。
______________________________________________________________________
安全说明
- 这种架构刻意避免
docker.sock安装。 - 然而:MCP服务是web端点——请注意网络访问并保护您的内部网络(例如,Docker网络ACL、内部防火墙)。
\--
参与/使用
- 克隆存储库
- 跑
docker compose up(注意:创建外部网络,如danny_ai-net如有必要,或设置external: true) - 调整
TOOLS和SYSTEM_PROMPT满足您的需求。 - 检查
prompt-injector/用于消毒剂、ALLOWED_TOOLS和内存配置。
______________________________________________________________________
康泰克
如果您发现错误或想提出改进建议,请打开问题或拉取请求。我是一名独立开发人员,非常欢迎有建设性的反馈。 🚀
*由Danny生成/修订的README(在帮助下)。*
