【技术文档摘要】
你好——我是Danny,一名独立开发者、业余开发者和安全狂热者。这个项目提供了一个安全且支持Docker的桥接器,用于AnythingLLM,使得可以在Docker网络中使用MCP(模型上下文协议)工具——而无需授予Docker启动其他容器的权限。
大多数在Docker中运行的AI或LLM接口都面临同一个问题: 容器无法(安全地)启动或管理其他容器。 这种限制破坏了MCP工作流程,并阻止了在隔离环境中使用工具。
与其授予Docker危险的权限(这完全违背了容器安全性的初衷), 我构建了一个模块化架构——一个MCP桥接器结合一个提示注入器—— 该架构能够安全地连接任何用户界面(如AnythingLLM、OpenWebUI或其他本地AI仪表板) 到Docker网络中的MCP兼容工具。
简而言之:
我希望保持对系统的完全控制、稳定性和安全性——
同时允许AI系统调用实际工具,如time、weather、docs或任何自定义的MCP服务。
time、weather、docs)的目录,通常作为单独的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 -rf、sudo、curl、API密钥等。ALLOWED_TOOLS — 允许的工具列表(例如,["time","docs","search"])。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调用查询保持上下文敏感性。docker.sock。--
docker compose up(注意:如果需要,请创建外部网络如danny_ai-net,或设置external: true)TOOLS和SYSTEM_PROMPT。prompt-injector/中的净化器、ALLOWED_TOOLS和内存配置。如果您发现错误或希望提出改进建议,请打开一个issue或pull request。我是独立开发者——建设性的反馈非常受欢迎。🚀
README由Danny生成/修订(有帮助)。