返回市场
麦克佩克容器服务器任意大模型

麦克佩克容器服务器任意大模型

作者: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://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、内部防火墙)。

--

参与/使用

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

联系方式

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


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