返回市场
MCP-Docker桥接任意UI服务器

MCP-Docker桥接任意UI服务器

作者:danny0942 星标更新:2025-11-14

项目介绍

【技术文档摘要】

MCP Bridge & Prompt Injector (Danny)

你好 — 我是Danny,一名独立开发者、业余开发者和安全狂热者。这个项目提供了一个安全且支持Docker的桥接器,用于AnythingLLM,使得可以在Docker网络中使用MCP(模型上下文协议)工具——而无需授予Docker启动其他容器的权限。

为什么需要这个项目?

大多数在Docker中运行的AI或LLM接口都面临同样的问题: 容器无法(安全地)启动或管理其他容器。 这种限制破坏了MCP工作流程,并阻止了在隔离环境中使用工具。

与其授予Docker危险的权限(这完全违背了容器安全的目的), 我构建了一个模块化架构——一个MCP桥接器结合一个提示注入器—— 安全地连接任何用户界面(如AnythingLLM、OpenWebUI或其他本地AI仪表板) 到Docker网络中的MCP兼容工具。

简单来说: 我希望保持对系统的全面控制、稳定性和安全性—— 同时允许AI系统调用实际工具,如timeweatherdocs或任何自定义的MCP服务。


架构(简要)

  • 桥接器 – 一个虚拟的MCP,作为任何AI WEBUI的目标,并将调用转发给真实的MCP服务。
  • 提示注入器 – 中央控制中心。决定是否需要工具,注入系统提示,净化输入(安全层),并在必要时调用MCP Hub。
  • MCP Hub – 包含可用MCP工具(例如,timeweatherdocs)的目录,通常作为单独的Docker容器访问。

主要原则

  • 不提升Docker权限:不挂载docker.sock,不使用DinD。
  • 安全第一:输入净化器、工具访问控制和审计日志记录器。
  • 模块化:只需向TOOLS映射添加新的MCP容器。

示例配置(提示规则)

SYSTEM_PROMPT = """
您是一个具有访问工具(MCP)权限的精确AI助手。行为如下:
1️⃣ 如果可以直接回答查询(解释、意见、知识、闲聊),
立即以文本形式回应。
2️⃣ 如果需要工具(时间、天气、文档、外部数据),
仅返回以下格式的JSON:
{"action": "mcp_call", "tool": "<toolname>", "query": "<user question>"}
3️⃣ 不要用工具调用来回答哲学或开放式问题。
4️⃣ 如果不需要工具,则不要返回JSON结构。
"""

提示注入器 — 核心功能(简要)

  • ask_deepseek(user_prompt: str) — 将消息连同系统提示和温度发送给模型。
  • call_mcp_tool(tool: str, query: str) — 构造JSON-RPC并调用MCP_HUB_URL/{tool},解析响应并返回内容。
  • sanitize_input(prompt: str) — 过滤危险负载,如rm -rfsudocurl、API密钥等。
  • ALLOWED_TOOLS — 允许使用的工具列表(例如,["time","docs","search"])。

MCP Hub — 示例

TOOLS = {
    "time": "http://m.mcp-time:4210/",
    "weather": "http://mcp-weather:4220/",
    "docs": "http://mcp-docs:4230/"
}

time 作为一个演示;其他的是占位符——只需在此处输入新的MCP容器。


数据与上下文

  • prompt-injector/data/memory.db – 简单的上下文数据库(目前:10条记录)以确保后续的MCP调用查询保持上下文相关性。

待办事项 / 路线图

  • 完成决策规则的实现(提前决定是否需要MCP调用的代理)。
  • 扩展审计日志记录器(谁发起了哪个请求)。
  • 增加更多单元测试和示例MCP(天气、文档)。
  • 可选的身份验证/用户管理以支持共享操作(家庭)。

安全注意事项

  • 此架构故意避免挂载docker.sock
  • 尽管如此:MCP服务是Web端点——请注意网络访问并保护内部网络(例如,Docker网络ACL、内部防火墙)。

参与 / 使用

  1. 克隆仓库
  2. 运行docker compose up(注意:如果需要,请创建外部网络如danny_ai-net,或设置external: true
  3. 根据需要调整TOOLSSYSTEM_PROMPT
  4. 检查prompt-inject_ector/中的净化器、ALLOWED_TOOLS和内存配置。

联系方式

如果您发现错误或希望提出改进建议,请打开一个问题或拉取请求。我是独立开发者——建设性的反馈非常受欢迎。🚀


README由Danny生成/修订(附带帮助)。