MCP代码执行服务器:100多种MCP工具的零上下文发现
](https://mseep.ai/app/elusznik-mcp-server-code-execution-mode)
停止为每次查询支付30000个令牌。 此桥实现了Anthropic的无根安全发现模式,将MCP上下文从30K减少到200个令牌,同时代理任何stdio服务器。
  ](https://www.docker.com/blog/dynamic-mcps-stop-hardcoding-your-agents-world/)   
概述
这座桥实现了 “使用MCP执行代码” 模式,来自行业领导者的想法的融合:
- 苹果的 代码行为:“您的LLM代理在生成代码时表现更好。”
- 人类学 使用MCP执行代码:“建立更高效的代理人。”
- Cloudflare的 代码模式:“LLM更擅长编写代码来调用MCP,而不是直接调用MCP。”
- Docker的 动态MCP:“停止硬编码你的特工世界。”
- 终端工作台s 终点:“评估法学硕士代理人的现实终端环境。”
这个桥没有向LLM暴露数百个单独的工具(这会消耗大量的上下文并混淆模型),而是暴露了 一 工具: run_pythonLLM编写Python代码来发现、调用和组合其他工具。
为什么是This vs.JS“代码模式”?
虽然有基于JavaScript的替代方案(如 universal-tool-calling-protocol/code-mode),这个项目是为 数据科学 和 安全:
| 特性 | 本项目(Python) | JS代码模式(Node.JS) |
|---|---|---|
| 母语 | python (AI/ML的语言) | Types/JavaScript |
| 数据科学 | 原生 (pandas, numpy, scikit-learn) | 不可能/黑客 |
| 隔离 | 困难 (Podman/Docker容器) | 软件(Node.js虚拟机) |
| 安全 | 企业 (无根、无网、只读) | 进程级 |
| 哲学 | 基础设施 (独立桥) | 库(可嵌入) |
在以下情况下选择此选项: 您希望您的代理分析数据、生成图表、使用科学库,或者如果您需要严格的基于容器的隔离来运行不受信任的代码。
这解决了什么(其他人没有)
痛苦:MCP代币破产
使用约100个工具将Claude连接到11个MCP服务器= 30000个代币 每个提示符中加载的工具模式。那是 每次查询0.09美元 在你问一个问题之前。扩展到50台服务器和您的上下文窗口 *休息*.
为什么现有的“解决方案”会失败
- Docker MCP网关:很好地管理容器,但仍然可以流式传输 所有工具模式 克劳德的背景。没有令牌优化。
- Cloudflare代码模式:V8隔离速度很快,但你 无法代理现有的MCP服务器 (Serena、Wolfram、定制工具)。平台锁定。
- 学术论文:描述Anthropic的发现模式,但提供 没有强化实施.
- 概念证明:跳过安全性(没有无根),跳过持久性(冷启动),跳过代理边缘情况。
解决方案:发现优先架构
- 固定200代币开销 无论服务器数量多少
- 代理任何stdio MCP服务器 放入无根容器
- 跨服务器的模糊搜索 无需预加载模式
- 生产硬化 具有能力下降和安全隔离功能
建筑:它有什么不同
Traditional MCP (Context-Bound)
┌─────────────────────────────┐
│ LLM Context (30K tokens) │
│ - serverA.tool1: {...} │
│ - serverA.tool2: {...} │
│ - serverB.tool1: {...} │
│ - … (dozens more) │
└─────────────────────────────┘
↓
LLM picks tool
↓
Tool executes
This Bridge (Discovery-First)
┌─────────────────────────────┐
│ LLM Context (≈200 tokens) │
│ “Use discovered_servers(), │
│ query_tool_docs(), │
│ search_tool_docs()” │
└─────────────────────────────┘
↓
LLM discovers servers
↓
LLM hydrates schemas
↓
LLM writes Python
↓
Bridge proxies execution结果:开销恒定。无论您管理10个还是1000个工具,系统提示的大小都保持正确,模式仅在请求时才流动。
比较一览
| 能力 | Docker MCP网关 | Cloudflare代码模式 | 研究模式 | 这座桥 |
|---|---|---|---|---|
| 解决令牌膨胀问题 | ❌ 手动预加载 | ❌ 固定目录 | ❌ 仅理论 | ✅ 发现运行时 |
| 通用MCP代理 | ✅ 集装箱 | ⚠️ 平台特定 | ❌ 未提供 | ✅ 任何stdio服务器 |
| 无根安全 | ⚠️ 可选 | ✅ V8隔离 | ❌ 未解决 | ✅ 盖子掉在沙箱上 |
| 自动发现 | ⚠️ 目录已绑定 | ❌ 不适用 | ❌ 未执行 | ✅ 12+配置路径 |
| 工具文档搜索 | ❌ | ❌ | ⚠️ 概念 | ✅ search_tool_docs() |
| 生产硬化 | ⚠️ 取决于你✅ 托管服务 | ❌ 原型 | ✅ 测试桥梁 |
与动态工具集(Speakeasy)相比
Speakeasy 动态工具集 使用3步流程: search_tools → describe_tools → execute_tool。虽然这节省了令牌,但它迫使代理进入“聊天”循环:
- 搜索:“查找GitHub问题的工具”
- 描述:“获取的架构
create_issue" - 执行:“呼叫
create_issue"
此桥(代码优先)折叠了该循环:
- 代码:“进口
mcp_github,搜索“问题”,如果缺少,则创建一个。"
代理人写了一封 单个Python脚本 它在一次往返中执行发现、逻辑和执行。它更快、更便宜(中间LLM调用更少),并处理简单“执行”工具无法处理的复杂逻辑(循环、重试)。
与OneMCP(根特罗)相比
OneMCP 提供了一个“手册”聊天界面,您可以在其中提问并计划执行。这对于简单的查询很好,但会将执行变成 黑匣子.
这座桥 给代理人 原始沙盒控制。代理人并没有要求黑匣子“做这件事”;代理人 *是* 程序员,编写与API交互的精确代码。这允许进行精确的边缘案例处理和复杂的数据处理,而自然语言规划者可能会错过这些处理。
独特功能
- 两阶段发现 –
discovered_servers()揭示存在的东西;query_tool_docs(name)只加载您需要的模式。
- 跨服务器的模糊搜索 –让模型在不记忆目录名称的情况下查找工具:
from mcp import runtime
matches = await runtime.search_tool_docs("calendar events", limit=5)
for hit in matches:
print(hit["server"], hit["tool"], hit.get("description", ""))- 零拷贝代理 –每个工具调用都留在沙箱中,在stdio上镜像,并严格超时。
- 默认情况下无根 –Podman/Docker容器使用
--cap-drop=ALL,只读根目录,无新权限,显式内存/PID上限。
- 紧凑型+TOON输出 –大多数运行的纯文本响应最少,可通过以下方式获得确定性TOON块
MCP_BRIDGE_OUTPUT_MODE=toon.
这对谁有帮助
- 团队需要处理两位数的MCP服务器,这些服务器负担不起上下文膨胀。
- 协调循环、重试和条件语句而不是单个工具调用的代理。
- 具有安全意识的操作员需要对LLM生成的代码进行无根隔离。
- 希望重复使用现有MCP目录而无需手动整理清单的从业者。
哲学:“无MCP”方法
此服务器符合以下理念 您可能根本不需要MCP 对于每一个小工具。您可以使用此服务器为您的代理提供服务,而不是为简单的任务构建僵化的MCP服务器 对Bash和Python的原始沙盒访问.
- 特殊工具:需要一个脚本来抓取网站或解析文件吗?只需编写并运行它。无需部署新的MCP服务器。
- 可组合性:在命令之间进行管道输出,将中间结果保存到文件中,并使用标准的Unix工具。
- 安全:与让代理对您的计算机进行原始shell访问不同,此服务器在安全、无根的容器中运行所有内容。您可以毫无风险地获得“Bash/Code”的强大功能。
主要特点
🛡️ 稳健性和可靠性
- 延迟运行时检测:即使Podman/Docker尚未就绪,也会立即启动。仅在请求执行代码时检查运行时。
- 自我参照预防:自动检测并跳过将递归启动网桥的配置。
- 噪声滤波:忽略来自健谈的MCP客户端的良性JSON解析错误(如空行)。
- 智能卷共享:探测Podman VM以确保卷共享工作,即使在旧版本上也是如此。
🔒 安全第一
- 无根容器 -不需要特权助手
- 网络隔离 -无网络访问
- 只读文件系统 -不可变根
- 能力下降 -无系统访问权限
- 非特权用户 -以UID 65534运行
- 资源限制 -内存、PID、CPU、时间
- 自动清理 -临时IPC目录
⚡ 演出
- 持续会话 -跨调用保留的变量和状态
- 持久客户端 -MCP服务器保持温暖
- 上下文效率 -与传统MCP相比减少95%以上
- 异步执行 -适当的资源管理
- 单一工具 -只有
run_python在克劳德的语境中
🔧 开发者体验
- 多种访问模式:
mcp_servers["server"] # Dynamic lookup
mcp_server_name # Attribute access
from mcp.servers.server import * # Module import- 顶层等待 -现代Python模式
- 类型安全 -适当的签名和文件
- 紧凑的响应 -默认情况下为纯文本输出,请求时可选择TOON块
响应格式
- 默认值(紧凑型) –响应呈现为纯文本加最小值
structuredContent仅包含非空字段的有效载荷。stdout/stderr行保持不变,因此提示在不牺牲内容的情况下保持简洁。 - 可选TOON –设置
MCP_BRIDGE_OUTPUT_MODE=toon发出 面向令牌的对象表示法 阻碍。我们仍然会丢弃空白字段,并在中镜像相同的结构structuredContent;当您希望对下游提示进行确定性标记时,TOON非常方便。 - 回退JSON –如果TOON编码器不可用,我们会自动回退到漂亮的JSON块,同时保留修剪后的有效载荷。
🧠 持久存储系统
- 跨会话持久性 -内存数据在容器重启和会话中幸存下来
- 基于JSON的存储 -灵活的值类型(字符串、字典、列表等)
- 元数据支持 -向内存条目添加标签和自定义元数据
- 原子更新 -使用自定义函数更新内存值
- 发现友好 -列出所有记忆并检查是否存在
# Save context for future sessions
save_memory("project_context", {
"goal": "Build REST API",
"current_task": "Implement auth",
"decisions": ["Use JWT tokens", "PostgreSQL backend"]
})
# Retrieve in a later session
context = load_memory("project_context")
print(f"Working on: {context['current_task']}")
# Update incrementally
update_memory("project_context", lambda ctx: {
**ctx,
"decisions": ctx["decisions"] + ["Add rate limiting"]
})
# List all saved memories
for mem in list_memories():
print(f"{mem['key']}: created {mem['created_at']}")
# Check existence before loading
if memory_exists("user_preferences"):
prefs = load_memory("user_preferences")内存文件存储在 /projects/memory/ 容器内部,映射到 ~/MCPs/user_tools/memory/ 在主机上。这在会话和容器重新启动时持续存在。
发现工作流程
SANDBOX_HELPERS_SUMMARY在工具模式中,仅通告发现助手(discovered_servers(),list_servers(),query_tool_docs(),search_tool_docs()等等)。它从不包括单个服务器或工具文档。- 首次使用时,LLM通常会调用
discovered_servers()(或list_servers_sync()对于缓存列表)枚举MCP服务器,然后query_tool_docs(server)/query_tool_docs_sync(server)或search_tool_docs("keyword")/search_tool_docs_sync("keyword")获取相关文档子集。 - 工具元数据按需流式传输,无论安装了多少服务器或工具,系统提示都保持在大约200个令牌。
- 一旦LLM有了它需要的文档,它就会编写Python,使用生成的
mcp_代理或mcp.runtime调用工具的助手。
需要一个简短的描述而不询问助手吗? 呼叫 runtime.capability_summary() 打印一段概述,适合回答“代码执行MCP能做什么?”等问题
快速开始
1.先决条件(macOS或Linux)
- 检查版本:
python3 --version(需要Python 3.11+) - 如果需要,通过包管理器安装Python或 python.org
- macOS:
brew install podman或brew install --cask docker - Ubuntu/Debian:
sudo apt-get install -y podman或curl -fsSL https://get.docker.com | sh
curl -LsSf https://astral.sh/uv/install.sh | shpodman pull python:3.13-slim
# or
docker pull python:3.13-slim关于Pydantic兼容性的说明:
- 如果你使用Python 3.14+,请确保你安装了现代Pydantic版本(例如,
pydantic >= 2.12.0).一些较旧的Pydantic版本或环境安装了单独的typingPyPI中的包可能会引发以下错误:
TypeError: _eval_type() got an unexpected keyword argument 'prefer_fwd_module'如果您看到此错误,请运行:
pip install -U pydantic
pip uninstall typing # if present; the stdlib's typing should be used并重新运行项目设置(例如删除 .venv/ 和 uv sync).
2.安装依赖项
使用uv同步项目环境:
uv sync3.发射桥
uvx --from git+https://github.com/elusznik/mcp-server-code-execution-mode mcp-server-code-execution-mode run如果您更喜欢从本地签出运行,则等效命令为:
uv run python mcp_server_code_execution_mode.py4.向您的代理人注册
将以下服务器配置添加到代理的MCP设置文件中(例如。, mcp_config.json, claude_desktop_config.json等等):
{
"mcpServers": {
"mcp-server-code-execution-mode": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/elusznik/mcp-server-code-execution-mode",
"mcp-server-code-execution-mode",
"run"
],
"env": {
"MCP_BRIDGE_RUNTIME": "podman"
}
}
}
}5.执行代码
# Use MCP tools in sandboxed code
result = await mcp_filesystem.read_file(path='/tmp/test.txt')
# Complex workflows
data = await mcp_search.search(query="TODO")
await mcp_github.create_issue(repo='owner/repo', title=data.title)显式加载服务器
run_python 仅加载您请求的MCP服务器。通过 servers 当您调用该工具时,使用数组进行代理,例如 mcp_serena 或 mcp_filesystem 在沙盒中可用:
{
"code": "print(await mcp_serena.search(query='latest AI papers'))",
"servers": ["serena", "filesystem"]
}如果省略该列表,发现帮助程序仍将枚举所有内容,但任何针对卸载服务器的RPC调用都会返回 Server '' is not available.
注: servers 数组只控制为沙箱调用生成哪些代理。它不设置服务器配置字段,例如 cwdThe cwd 属性是主机/服务器配置的一部分,LLM应调用 runtime.describe_server(name) 或检查 runtime.list_loaded_server_metadata() 发现已配置的 cwd 在假定服务器的工作目录之前。
注意:服务器配置可以包括可选 cwd 财产。如果存在,网桥将启动该工作目录中的主机MCP服务器进程;代理商应检查 runtime.describe_server(name) 发现服务器的配置 cwd 在做出假设之前。
测试
项目环境支持CPython 3.11+。确保您的本地环境使用兼容的Python版本:
uv python pin 3.13
uv sync运行时依赖关系保持精简;开发依赖项(pytest等)可通过 dev 额外:
# Install with dev dependencies
uv sync --group dev
# Run tests
uv run pytest
# Or run without installing dev dependencies permanently
uv run --with pytest pytest建筑
┌─────────────┐
│ MCP Client │ (Your Agent)
└──────┬──────┘
│ stdio
▼
┌──────────────┐
│ MCP Code Exec │ ← Discovers, proxies, manages
│ Bridge │
└──────┬──────┘
│ container
▼
┌─────────────┐
│ Container │ ← Executes with strict isolation
│ Sandbox │
└─────────────┘零上下文发现
与预加载每个工具定义(有时超过30000个令牌)的传统MCP服务器不同,此网桥将其系统提示固定到大约200个令牌,并训练LLM按需发现所需内容:
- LLM电话
discovered_servers()→ 学习哪些桥在不加载模式的情况下可用。 - LLM电话
query_tool_docs("serena")→ 仅对该服务器的工具文档进行水合处理,并可选择按工具进行筛选。 - LLM编写编排代码→ 调用助手,如
mcp_serena.search()或mcp.runtime.call_tool().
结果: 无论您配置了多少MCP服务器,上下文使用率都保持不变。
流程:
- 客户电话
run_python(code, servers, timeout) - 桥接加载请求的MCP服务器
- 准备沙箱调用:收集MCP工具元数据,将入口点写入共享
/ipc数量和出口MCP_AVAILABLE_SERVERS - 生成的入口点将stdio重新连接到JSON框架的消息中,并通过容器的stdin/stdout管道代理MCP调用
- 持续执行:容器启动一次(如果未运行)并保持活动状态。
- 状态保留:在一个调用中定义的变量、导入和函数在后续调用中可用。
- 主机流处理程序处理JSON帧,转发MCP流量,强制超时,并为下一个请求保持容器活动。
配置
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_BRIDGE_RUNTIME | auto | 容器运行时(podman/docker) |
MCP_BRIDGE_IMAGE | python:3.14-lim | 容器映像 |
MCP_BRIDGE_TIMEOUT | 30s | 默认超时 |
MCP_BRIDGE_MAX_TIMEOUT | 120秒 | 最大超时 |
MCP_BRIDGE_MEMORY | 512m | 内存限制 |
MCP_BRIDGE_PIDS | 128 | 过程限制 |
MCP_BRIDGE_CPUS | - | CPU限制 |
MCP_BRIDGE_CONTAINER_USER | 65534:65534 | 以UID:GID运行 |
MCP_BRIDGE_RUNTIME_IDLE_TIMEOUT | 300秒 | 关机延迟 |
MCP_BRIDGE_STATE_DIR | ~/MCPs | IPC套接字和临时状态的主机目录 |
MCP_BRIDGE_OUTPUT_MODE | compact | 响应文本格式(compact 或 toon) |
MCP_BRIDGE_LOG_LEVEL | INFO | 桥梁测井冗长 |
服务器发现
网桥会自动从多个配置源发现MCP服务器:
支持的地点:
| 位置 | 名称 | 优先级 |
|---|---|---|
~/MCPs/ | 用户MCP | 最高 |
~/.config/mcp/servers/ | 标准MCP | |
./mcp-servers/ | 本地项目 | |
./.vscode/mcp.json | VS代码工作区 | |
~/.claude.json | 克劳德CLI | |
~/.cursor/mcp.json | 光标 | |
~/.opencode.json | OpenCode命令行界面 | |
~/.codeium/windsurf/mcp_config.json | 风浪 | |
~/Library/Application Support/Claude Code/claude_code_config.json | 克劳德代码(macOS) | |
~/Library/Application Support/Claude/claude_desktop_config.json | 克劳德桌面(macOS) | |
~/Library/Application Support/Code/User/settings.json | VS代码全局(macOS) | |
~/.config/Code/User/settings.json | VS代码全局(Linux) | 最低 |
注: 较早的来源优先。如果在多个位置定义了同一台服务器,则第一台获胜。
示例服务器 (~/MCPs/filesystem.json):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
}
}
}注: 为了防止递归启动,网桥会自动跳过任何出现的配置条目mcp-server-code-execution-mode再次(包括uvx … mcp-server-code-execution-mode run).集MCP_BRIDGE_ALLOW_SELF_SERVER=1如果您有意将网桥作为嵌套的MCP服务器公开。
Docker MCP网关集成
当你依赖 docker mcp gateway run 为了公开第三方MCP服务器,网桥只需执行网关二进制文件。网关负责拉取工具映像和连接stdio传输,因此请确保主机环境已准备就绪:
- 跑
docker login对于网关目录中引用的每个注册表(例如Docker Hubmcp/*图像,ghcr.io/github/github-mcp-server).如果没有缓存的凭据,在任何工具上线之前,拉取步骤都会失败。 - 为这些服务器提供所需的机密--
github-official需求github.personal_access_token,其他人可能期望API密钥或身份验证令牌。使用docker mcp secret set(或网关配置的任何机制),以便容器在启动时看到这些值。 - 镜像目录所需的任何卷装载或环境变量(文件系统路径、存储卷等)。缺少挂载或凭据通常表现为
failed to connect: calling "initialize": EOF在stdio握手期间。 - 如果
list_tools仅返回内部管理助手(mcp-add,code-mode,…),网关从未完成初始化外部服务器——请检查网关日志中是否存在丢失的机密或注册表访问错误。
状态目录和卷共享
- 运行时工件(包括生成的
/ipc/entrypoint.py以及相关的握手元数据)~/MCPs/默认情况下。集MCP_BRIDGE_STATE_DIR重新安置他们。 - 当所选运行时为Podman时,网桥会自动发出
podman machine set --rootful --now --volume :因此VM可以挂载该目录。关于老年人podman machine不支持的构建--volume,网桥现在使用以下命令探测VMpodman machine ssh test -d如果该份额已经可用,则继续进行。 - Docker Desktop不公开用于文件共享的CLI;确保所选状态目录在Docker Desktop中标记为共享→ 设置→ 资源→ 运行网桥之前共享文件。
- 要手动验证共享,请运行
docker run --rm -v ~/MCPs:/ipc alpine ls /ipc(或Podman等效工具)并确认文件可见。
使用示例
文件处理
# List and filter files
files = await mcp_filesystem.list_directory(path='/tmp')
for file in files:
content = await mcp_filesystem.read_file(path=file)
if 'TODO' in content:
print(f"TODO in {file}")数据管道
# Extract data
transcript = await mcp_google_drive.get_document(documentId='abc123')
# Process
summary = transcript[:500] + "..."
# Store
await mcp_salesforce.update_record(
objectType='SalesMeeting',
recordId='00Q5f000001abcXYZ',
data={'Notes': summary}
)多系统工作流
# Jira → GitHub migration
issues = await mcp_jira.search_issues(project='API', status='Open')
for issue in issues:
details = await mcp_jira.get_issue(id=issue.id)
if 'bug' in details.description.lower():
await mcp_github.create_issue(
repo='owner/repo',
title=f"Bug: {issue.title}",
body=details.description
)检查可用服务器
from mcp import runtime
print("Discovered:", runtime.discovered_servers())
print("Cached servers:", runtime.list_servers_sync())
print("Loaded metadata:", runtime.list_loaded_server_metadata())
print("Selectable via RPC:", await runtime.list_servers())
# Peek at tool docs for a server that's already loaded in this run
loaded = runtime.list_loaded_server_metadata()
if loaded:
first = runtime.describe_server(loaded[0]["name"])
for tool in first["tools"]:
print(tool["alias"], "→", tool.get("description", ""))
# Ask for summaries or full schemas only when needed
if loaded:
summaries = await runtime.query_tool_docs(loaded[0]["name"])
detailed = await runtime.query_tool_docs(
loaded[0]["name"],
tool=summaries[0]["toolAlias"],
detail="full",
)
print("Summaries:", summaries)
print("Cached tools:", runtime.list_tools_sync(loaded[0]["name"]))
print("Detailed doc:", detailed)
# Fuzzy search across loaded servers without rehydrating every schema
results = await runtime.search_tool_docs("calendar events", limit=3)
for result in results:
print(result["server"], result["tool"], result.get("description", ""))
# Synchronous helpers for quick answers without extra awaits
print("Capability summary:", runtime.capability_summary())
print("Docs from cache:", runtime.query_tool_docs_sync(loaded[0]["name"]) if loaded else [])
print("Search from cache:", runtime.search_tool_docs_sync("calendar"))LLM在使用存根服务器运行上述代码段时看到的示例输出:
Discovered: ('stub',)
Loaded metadata: ({'name': 'stub', 'alias': 'stub', 'tools': [{'name': 'echo', 'alias': 'echo', 'description': 'Echo the provided message', 'input_schema': {...}}]},)
Selectable via RPC: ('stub',)喜欢的客户 listMcpResources 可以跳过执行助手代码段,而是请求 resource://mcp-server-code-execution-mode/capabilities 资源。服务器通过以下方式进行公告 resources/list,阅读它会返回相同的助手摘要和一个简短的加载清单 服务器明确。
安全
容器约束
| 约束 | 设置 | 目的 |
|---|---|---|
| 网络 | --network none | 无外部访问 |
| 文件系统 | --read-only | 免疫基础 |
| 能力 | --cap-drop ALL | 无系统访问权限 |
| 特权 | no-new-privileges | 无升级 |
| 用户 | 65534:65534 | 无特权 |
| 记忆 | --memory 512m | 资源上限 |
| PID | --pids-limit 128 | 工艺上限 |
| 工作区 | tmpfs,noexec | 安全临时存储 |
能力矩阵
| 操作 | 允许 | 详细信息 |
|---|---|---|
| 导入stdlib | ✅ | Python标准库 |
| 访问MCP工具 | ✅ | 通过代理 |
| 内存操作 | ✅ | 工艺数据 |
| 写入磁盘 | ✅ | 仅限/tmp、/workspace |
| 网络 | ❌ | 完全封锁 |
| 主机访问 | ❌ | 无系统调用 |
| 特权升级 | ❌ | 沙盒阻止 |
| 集装箱逃生 | ❌ | 无根+隔离 |
文档
资源
外部
状态
✅ 实现
- 无根容器沙箱
- 单
run_python工具 - MCP服务器代理
- 持久会话(状态保留)
- 持久客户端(热MCP服务器)
- 综合文档
🔄 进行中
- 自动化测试
- 可观察性(日志记录、指标)
- 策略控制
- 运行时诊断
📋 路线图
- 连接池
- Web用户界面
- 多语言支持
- 工作流编排
- 代理可见发现通道(已代理主机
mcp-find/mcp-add) - 执行遥测(结构化日志、指标、跟踪)
- 持久和可共享的代码模式工件
许可证
GPLv3许可证
支持
有关问题或疑问,请参阅文档或提交问题。
