【技术文档摘要】
你好 — 我是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://m.mcp-time:4210/",
"weather": "http://m.mcp-weather:4220/",
"docs": "http://m.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和内存配置。README由Danny生成/修订(附带帮助)。