关于 mcp-dynamic-orchestrator
用于发现已配置的 MCP 服务、检查其能力并通过生成的客户端代码调用工具的技能。它以注册表驱动流程;代码执行能力有限,基于 vm 的沙箱不适用于不可信代码。
主要功能
- 01按查询或筛选查找 MCP
- 02按需检查工具能力
- 03通过代码执行 MCP 工具调用
- 04通过注册表配置服务
- 05限制可调用的 MCP ID
适用场景
- 01查找适合任务的 MCP 服务
- 02调用工具前查看可用操作
- 03在 Agent 代码中调用已配置的 MCP 工具
MCP 相关
帮助 Agent 发现和检查 MCP 服务,再通过代码执行调用其工具。支持 stdio 和 HTTP 传输;README 指出代码执行和沙箱安全方面存在限制。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill mcp-dynamic-orchestrator安装后在 Claude Code 中输入/mcp-dynamic-orchestrator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/mcp-protocol.mdregistry-schema.mdsecurity-model.mdtroubleshooting.mdscripts/describe_mcp.tsexecute_mcp_code.tslist_mcp_capabilities.ts详细介绍
概述
使用此技能可以:
- 发现有哪些 MCP 服务可用,以及它们的用途。
- 检查特定 MCP 的功能,而无需加载所有工具架构。
- 执行通过生成的
mcp-clients/*模块调用 MCP 工具的 TypeScript/JavaScript 代码。
如果未配置 MCP 服务,list_mcp_capabilities 将返回空列表,并提示用户前往
skills/mcp-dynamic-orchestrator/mcp.registry.json 添加 MCP 条目。
此技能会读取 mcp.registry.json,因此在其中添加 MCP 条目(例如 Cloudflare MCP)后,
无需更改工具接线即可自动发现该 MCP。
Cloudflare MCP 示例
可以像这样在 mcp.registry.json 中配置 Cloudflare MCP 服务:
{
"id": "cloudflare",
"title": "Cloudflare platform MCP",
"summary": "Interact with Cloudflare's MCP endpoint for documentation, examples, and platform operations exposed via the official Cloudflare MCP server.",
"mcp": {
"transport": "stdio",
"command": "npx",
"args": [
"mcp-remote",
"https://docs.mcp.cloudflare.com/sse"
]
},
"domains": ["cloudflare", "workers", "kv", "r2", "queues", "zero_trust", "networking", "security", "observability"],
"tags": ["cloudflare", "platform", "infra", "docs", "workers", "mcp"],
"examples": [
"Fetch Cloudflare Workers documentation for a specific API.",
"Search Cloudflare platform docs for queues or KV usage patterns.",
"Look up configuration guidance for Zero Trust or networking features."
],
"sensitivity": "low",
"visibility": "default",
"priority": 10,
"autoDiscoverTools": true
}
添加此条目后:
- 查询中提及 Cloudflare、Workers、KV、R2、Queues 等内容时,
list_mcp_capabilities会返回cloudflare。 - 使用
id: "cloudflare"调用describe_mcp时,会显示 Cloudflare MCP 服务的简明工具摘要。 execute_mcp_code支持 Agent 编写如下 TypeScript:
import * as cloudflare from "mcp-clients/cloudflare";
async function main() {
const docs = await cloudflare.search_docs({ query: "Workers KV" });
console.log(docs.summary);
}
mcp-clients/cloudflare 中实际可用的函数会根据 MCP 工具定义动态生成;Agent 应始终:
- 通过
list_mcp_capabilities进行发现。 - 通过
describe_mcp检查可用操作。 - 通过
execute_mcp_code使用这些操作。
使用方法
- 使用自然语言查询或筛选条件调用
list_mcp_capabilities,查看有哪些 MCP。 - 对选定的 MCP(例如
cloudflare),调用describe_mcp以了解其操作。 - 编写从
mcp-clients/<id>导入内容并调用导出函数的 TypeScript/JavaScript 代码。 - 使用
execute_mcp_code运行代码;出于安全考虑,也可以限制allowedMcpIds。
规则
- 不要假设各个 MCP 工具是顶层工具。
- 始终按以下顺序操作:发现 → 描述 → 生成代码 →
execute_mcp_code。 - 只有在需要确切的参数结构时,才在
describe_mcp中请求detail: "schema"。
已知限制
沙盒安全(严重)
⚠️ 当前沙盒实现对不可信代码并不安全。
⚠️ 基于
vm的沙盒并非安全边界。 Node 的vm模块可以被逃逸(请参阅 Node 文档)。此设置只能减少意外损害。对于不可信的 MCP 条目,请在具备适当操作系统级隔离的独立进程/容器中运行。
- 使用
vm.createContext(),但它并非安全边界 - 可通过原型污染、篡改 require() 等方式逃逸
- 仅对 Claude 生成的代码启用(可信来源)
- 需要设置
MCP_ORCH_ENABLE_SANDBOX=1环境变量 - 完整的安全详情请参阅
references/security-model.md
进程启动加固(命令和环境变量允许列表)
向 mcp.registry.json 添加条目时,编排器会强制执行以下规则:
- 命令允许列表 — 仅允许
npx, npm, pnpm, yarn, bunx, bun, node, deno, uvx, uv, python, python3, cargo, go(不带路径的名称通过 PATH 解析)。绝对/相对路径和 Shell 命令均会被拒绝。设置MCP_ORCH_ALLOW_RAW_COMMANDS=1可选择退出此限制(会在 stderr 输出醒目警告;仅适用于完全可信的注册表)。 - 环境变量拒绝列表 — 启动进程前,会从
mcp.env中移除PATH、NODE_OPTIONS、LD_PRELOAD、DYLD_INSERT_LIBRARIES、PYTHONPATH等变量(每移除一个键都会在 stderr 输出警告)。
其他限制
- 不支持 TypeScript 编译:
.ts格式的用户代码将无法运行 - 不支持模块解析:无法解析从
mcp-clients/*导入的模块;请使用$call()API - 静态注册表:添加/移除 MCP 需要重启
- 错误处理能力有限:MCP 连接失败时只会返回通用错误
详细的故障排除说明请参阅 references/troubleshooting.md。
生产状态
已正常运行 ✅:
- 通过
list_mcp_capabilities发现(功能完整) - 通过
describe_mcp检查(功能完整) - 注册表管理(已配置 16 个 MCP)
- MCP 客户端(stdio + HTTP 传输)
- 安全控制(可见性、敏感度、策略)
存在限制 🟡:
- 代码执行(需要环境标志,沙箱不安全)
- 测试(仅基本冒烟测试)
计划中 🔮:
- 使用 Worker 线程的安全沙箱(v1.1)
- 支持 TypeScript 编译(v1.1)
- 模块解析(v1.1)
- 动态更新注册表(v1.2)
完整路线图请参阅仓库根目录中的 plan.md。