使用说明
cmcp——代码模式MCP
停止注册数十台MCP服务器。注册 一个代理 这将它们全部聚集在一起 2工具.
你的AI代理编写TypeScript来发现和调用每个连接服务器上的工具——具有完全类型安全、沙盒执行和自动响应截断功能。
受...启发 Cloudflare的代码模式MCP方法.
为什么
MCP工具爆炸是真实的。每台新服务器都会在代理的上下文中添加5-30个工具。有6台服务器,可能有180个工具定义,模型必须在每一轮都进行解析。
cmcp翻转模型:你得到的不是N个工具,而是 2:
| 工具 | 目的 |
|---|---|
search() |
通过编写TypeScript过滤代码发现工具 |
execute() |
使用键入的异步代码在任何服务器上调用工具 |
代理编写代码以与工具交互,而不是JSON blob。这意味着:
- 工具定义减少99% 在上下文中(2 vs数百)
- 热重载 --在不重新启动Claude或Codex的情况下添加服务器
- 可组合 --在一次执行中链接多个工具调用
- 类型安全 --从JSON模式自动生成TypeScript声明
- 沙盒化的 --代码在内存限制为64MB的QuickJS引擎中运行
快速启动
# Install
cargo install --path .
# Add servers (same syntax you already know)
cmcp add canva https://mcp.canva.com/mcp
cmcp add --transport stdio github -- npx -y @modelcontextprotocol/server-github
# Register the proxy with Claude
cmcp install
就是这样。重启克劳德,你会看到 code-mode-mcp 随着 search 和 execute 工具。
从任何MCP README复制粘贴
大多数MCP服务器文档都会给你一个 claude mcp add 或 codex mcp add 命令。只需预置 cmcp:
# Claude syntax — just prepend cmcp
cmcp claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest
cmcp claude mcp add --transport http canva https://mcp.canva.com/mcp
# Codex syntax — same idea
cmcp codex mcp add my-server -- npx docs-server@latest
cmcp codex mcp add api-server --url https://api.example.com --bearer-token-env-var API_TOKEN
运作原理
搜索--发现工具
代理编写TypeScript来过滤工具目录:
// Find screenshot-related tools
return tools.filter(t => t.name.includes("screenshot"));
// Find all tools from a specific server
return tools.filter(t => t.server === "chrome-devtools");
// Get a summary of available servers
const servers = [...new Set(tools.map(t => t.server))];
return servers.map(s => ({
server: s,
tools: tools.filter(t => t.server === s).map(t => t.name)
}));
执行--调用工具
每个服务器都是一个类型化的全局对象。代理调用工具 await:
// Navigate and take a screenshot
await chrome_devtools.navigate_page({ url: "https://example.com" });
const screenshot = await chrome_devtools.take_screenshot({ format: "png" });
return screenshot;
// Chain multiple servers in one call
const design = await canva.create_design({ title: "Q4 Report" });
const issue = await github.create_issue({
owner: "myorg",
repo: "designs",
title: `New design: ${design.id}`
});
return { design: design.id, issue: issue.number };
自动生成的类型
cmcp从每个工具的JSON模式生成TypeScript声明,因此代理确切地知道每个工具接受哪些参数:
declare const chrome_devtools: {
/** Navigate to a URL */
navigate_page(params: { url: string }): Promise<any>;
/** Take a screenshot */
take_screenshot(params: { format?: "png" | "jpeg"; quality?: number }): Promise<any>;
};
declare const canva: {
/** Create a new design */
create_design(params: { title: string; width?: number; height?: number }): Promise<any>;
};
类型通过以下方式剥离 oxc 在QuickJS沙盒中执行之前。
添加服务器
# HTTP (default when a URL is given)
cmcp add canva https://mcp.canva.com/mcp
# With auth (use env: prefix to read from environment at runtime)
cmcp add --auth "env:CANVA_TOKEN" canva https://mcp.canva.com/mcp
# With custom headers
cmcp add --auth "env:TOKEN" -H "X-Api-Key: abc123" myserver https://api.example.com/mcp
# SSE transport
cmcp add --transport sse events https://events.example.com/mcp
# Stdio transport
cmcp add --transport stdio github -- npx -y @modelcontextprotocol/server-github
# Stdio with environment variables
cmcp add -e GITHUB_TOKEN=env:GITHUB_TOKEN --transport stdio github -- npx -y @modelcontextprotocol/server-github
旗帜(--auth, -H, -e, --transport)一定要来 之前 服务器名称。
从现有配置导入
已经在Claude或Codex中配置了MCP服务器?导入它们:
cmcp import --dry-run # Preview what would be imported
cmcp import # Import from all sources
cmcp import --from claude # Only from Claude
cmcp import --from codex # Only from Codex
cmcp import --force # Overwrite existing servers
| 来源 | 扫描文件 |
|---|---|
| 克劳德 | ~/.claude.json, .mcp.json |
| 食品法典委员会 | ~/.codex/config.toml, .codex/config.toml |
管理服务器
cmcp list --short # Names and transports
cmcp list # Full listing with tools (connects to each server)
cmcp remove canva # Remove a server
安装到Claude/Codex中
cmcp install # Both Claude and Codex
cmcp install --target claude # Only Claude
cmcp install --target codex # Only Codex
cmcp install --target claude --scope user # Claude user scope (global)
cmcp uninstall # Remove from both
cmcp uninstall --target codex # Remove from one
范围
cmcp支持与Claude相同的作用域:
| 作用域 | 配置文件 | 用例 |
|---|---|---|
local (默认) |
~/.config/code-mode-mcp/config.toml |
您的个人服务器 |
user |
与本地相同 | 与本地相同 |
project |
.cmcp.toml 在项目根目录下 |
特定于项目的服务器 |
服务时,两个配置都会合并(项目覆盖用户)。使用 --scope 随着 add, remove,或 install:
cmcp add --scope project local-server http://localhost:3000/mcp
运输
| 运输 | 标志 | 何时使用 |
|---|---|---|
http |
URL的默认值 | 可流式HTTP MCP服务器 |
sse |
--transport sse |
服务器发送事件服务器 |
stdio |
--transport stdio (或自动检测) |
本地进程服务器 |
认证
每台服务器的承载令牌 --auth.使用 env: 要在运行时从环境中解析:
cmcp add --auth "env:MY_TOKEN" myserver https://example.com/mcp
自定义标题 -H:
cmcp add -H "X-Api-Key: secret" -H "X-Org-Id: 123" myserver https://example.com/mcp
配置格式
储存于 ~/.config/code-mode-mcp/config.toml (或 .cmcp.toml 项目范围):
[servers.canva]
transport = "http"
url = "https://mcp.canva.com/mcp"
auth = "env:CANVA_TOKEN"
[servers.canva.headers]
X-Custom = "value"
[servers.github]
transport = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
[servers.github.env]
GITHUB_TOKEN = "env:GITHUB_TOKEN"
响应截断
大型工具结果(DOM快照、API响应)会自动截断为约40k个字符(约10k个令牌),以防止上下文淹没。这两个工具都接受可选 max_length 参数:
// The agent can control truncation per call
// Or better: extract what you need in code
const snapshot = await chrome_devtools.take_snapshot({});
return snapshot.content[0].text.slice(0, 2000);
局限性
cmcp最适合 无状态工具服务器 --您在其中发现和调用工具的服务器(Canva、GitHub、文件系统、Stripe、浏览器自动化等)。
不适合:
- 依赖钩子的服务器 --依赖于Claude钩子(SessionStart、PostToolUse、Stop)进行生命周期管理的MCP服务器。Hooks是由Claude事件触发的shell命令,不经过MCP,因此在代理时不会触发。
- 需要交互式身份验证流的服务器 --需要直接集成Claude的OAuth回调或基于浏览器的登录。
如有疑问,请检查服务器的README是否提到钩子或生命周期事件。如果是这样,请直接向Claude注册。
需求
- 锈蚀1.91+(氧化)
- 已安装Claude和/或Codex CLI
建造于
卡斯·德夫 --编码代理系统。
许可证
麻省理工学院