一种为大型语言模型和人类设计的高效Token MCP客户端。
为什么选择MCPX? 其他MCP客户端会生成巨大的JSON模式,浪费Token并使人困惑。而MCPX返回的是TypeScript签名——Claude和开发者可以立即理解工具签名。使用LLM原生语法(如server.func({ args }))调用工具,通过标准输入执行批处理操作,并获得TOON输出(比JSON少90%的Token)。
MCPX帮助您充分利用Anthropic的《使用MCP进行代码执行》指导中强调的“代码执行”工作流程:发现系统上已配置的MCP服务器,直接调用它们,并在TypeScript中组合更丰富的自动化。这一切都开箱即用——无需样板代码,无需探索模式。
# 添加Tap
brew tap AIGC-Hackers/mcpx
# 安装mcpx
brew install mcpx
# 或者一次性安装
brew install AIGC-Hackers/mcpx/mcpx
bunx mcpx list
brew tap steipete/tap
brew install steipete/tap/mcpx
steipete Tap与MCPX 0.3.2一起发布。如果您看到旧版本,请先运行
brew update再重新安装。
| 功能 | MCPX | 典型MCP客户端 |
|---|---|---|
| 模式输出 | TypeScript(可读,Token高效) | JSON模式(冗长,Token密集) |
| 调用语法 | linear.createIssue({ title: "Bug" }) | 手动构造JSON |
| 批处理调用 | ✅ 多行,标准输入,注释 | ❌ 一次一个调用 |
| 输出格式 | TOON(Token减少90%) | 原始JSON |
| OAuth流程 | ✅ 自动触发,无错误 | 手动或有错误 |
| LLM准备 | ✅ 专为Claude/GPT工作流设计 | ⚠️ 需要Token预算 |
createRuntime()合并./mcp.json和~/.mcpx/mcp.json,扩展${ENV}占位符,并汇集连接,以便在多次调用中复用传输。首次运行时自动迁移Cursor/Claude/Codex/Windsurf/VS Code配置到~/.mcpx/mcp.json。--output标志可以选择原始/JSON/文本格式。createServerProxy()以舒适的驼峰命名法暴露工具,自动应用JSON模式默认值,验证必需参数,并返回带有.text(), .json(), 和.content()辅助方法的CallResult。MCPX自动发现您已在Cursor、Claude Code/Desktop、Codex或本地覆盖中配置的MCP服务器。通过Homebrew安装或使用bunx mcpx即时运行。需要完整的命令参考(标志、模式、返回类型)?查看docs/cli-reference.md。
# 函数语法 - 对代理和交互式使用自然
mcpx call 'linear.create_comment({ issueId: "ENG-123", body: "Great!" })'
# 数据格式 - 显式且结构化(也支持JSON5/YAML/TOML)
mcpx call '{ tool: "linear.create_comment", args: { issueId: "ENG-123", body: "Great!" } }'
mcpx list
mcpx list context7
mcpx list https://mcp.linear.app/mcp --all-parameters
mcpx list shadcn.io/api/mcp.getComponents # URL + 工具后缀自动解析
mcpx list --stdio "bun run ./local-server.ts" --env TOKEN=xyz
--output json以输出机器可读的摘要,包括每个服务器的状态(认证/离线/HTTP/错误计数),以及单个服务器运行时的完整工具模式负载。现在您可以指向mcpx list的临时服务器:直接提供URL或使用新的--http-url/--stdio标志(加上--env, --cwd, --name, 或--persist)来描述任何MCP端点。直到您持久化该定义之前,您仍然需要重复相同的URL/标准I/O标志用于mcpx call——只有当您通过--persist或mcpx config add将其合并到配置中时,打印的slug才变得可重用。当服务器需要身份验证时,OAuth会自动触发。更多细节参见docs/adhoc.md。
单个服务器列表现在显示TypeScript Spec格式,因此您可以直接复制粘贴签名到mcpx call:
linear - 托管Linear MCP
23 工具 · 1654毫秒 · HTTP https://mcp.linear.app/mcp
/**
* 在特定的Linear问题上创建评论
*/
type CreateCommentSpec = {
tool: 'create_comment'
args: {
issueId: string
body: string
parentId?: string
notifySubscribers?: boolean
labelIds?: string[]
mentionIds?: string[]
}
}
/**
* 列出用户Linear工作区中的文档
*/
type ListDocumentsSpec = {
tool: 'list_documents'
args: {
query?: string
limit?: number
before?: string
after?: string
orderBy?: 'createdAt' | 'updatedAt'
projectId?: string
initiativeId?: string
creatorId?: string
includeArchived?: boolean
}
}
这是运行mcpx list vercel时Vercel的样子:
vercel - Vercel MCP(需要OAuth)
/**
* 搜索Vercel文档。
* 使用此工具回答有关Vercel平台、功能和最佳实践的问题。
*/
type SearchVercelDocumentationSpec = {
tool: 'search_vercel_documentation'
args: {
topic: string
tokens?: number
}
}
/**
* 将当前项目部署到Vercel
*/
type DeployToVercelSpec = {
tool: 'deploy_to_vercel'
args: Record<string, unknown>
}
mcpx call 'context7.resolve-library-id({ libraryName: "react" })'
mcpx call 'context7.get-library-docs({ path: "/websites/react_dev", topic: "hooks" })'
LINEAR_API_KEY)LINEAR_API_KEY=sk_linear_example mcpx call 'linear.search_documentation({ query: "automations" })'
mcpx call 'chrome-devtools.take_snapshot()'
mcpx call 'linear.create_comment({ issueId: "LNR-123", body: "Hello world" })'
调用语法: 函数语法
server.tool({ args })或数据格式{ tool: "server.tool", args: {...} }。两者都会被解析(而不是作为JS执行)。支持JSON5/YAML/TOML。
有用的标志:
--config <path> -- 自定义配置文件(覆盖默认的./mcp.json + ~/.mcpx/mcp.json合并)。--root <path> -- 标准I/O命令的工作目录。--log-level <debug|info|warn|error> -- 调整详细程度(尊重MCPX_LOG_LEVEL)。--oauth-timeout <ms> -- 缩短/延长OAuth浏览器等待时间;同MCPX_OAUTH_TIMEOUT_MS / MCPX_OAUTH_TIMEOUT。--tail-log -- 流式输出工具响应中引用的日志文件最后20行。--output <format> -- 控制输出格式:toon(默认,适合LLM),json,text,或raw。--http-url <https://…> / --stdio "command …" -- 描述一个临时MCP服务器(根据需要配对--env KEY=value,--cwd,--name,和--persist <config.json>)。提示:您可以完全跳过动词——
mcpx firecrawl会自动运行mcpx list firecrawl,带点的令牌如mcpx linear.list_issues会分派到调用命令(包括拼写纠正)。
超时默认为30秒;如果您预计启动较慢,可以通过MCPX_LIST_TIMEOUT或MCPX_CALL_TIMEOUT覆盖。OAuth浏览器握手有一个单独的60秒宽限期;如果您需要更快地退出CLI以诊断顽固的身份验证流程,可以通过--oauth-timeout <ms>(或导出MCPX_OAUTH_TIMEOUT_MS)传递。
# 直接指向HTTPS MCP服务器
mcpx list --http-url https://mcp.linear.app/mcp --name linear
# 通过Bun运行本地标准I/O MCP服务器
mcpx call --stdio "bun run ./local-server.ts" --name local-tools
--persist ~/.mcpx/mcp.json(或任何路径)以保存推断的定义供未来运行使用。--allow-http。两种格式,都会被解析(而不是作为JavaScript执行):
函数语法(对代理自然):
mcpx call 'linear.create_issue({ title: "Bug", priority: 2, labels: ["urgent"] })'
数据格式(显式,支持JSON5/YAML/TOML):
mcpx call '{ tool: "linear.create_issue", args: { title: "Bug", priority: 2 } }'
特性:
listIssue?MCPX会自动建议list_issues。mcpx list <server>打印TypeScript规格——可以直接复制粘贴到调用中。从标准输入或文件执行多个MCP工具调用。非常适合LLM驱动的工作流、自动化脚本和数据迁移。
# 从文件
cat batch-calls.txt | mcpx call
# 从heredoc(函数语法)
mcpx call << 'EOF'
linear.list_issues({ limit: 5 })
github.search_repos({ query: "mcp" })
EOF
# 数据格式也适用
mcpx call << 'EOF'
[
{ tool: "linear.list_issues", args: { limit: 5 } },
{ tool: "github.search_repos", args: { query: "mcp" } }
]
EOF
输入格式 支持函数语法和结构化数据:
// 函数语法(每行一个,对代理自然)
linear.create_issue({ title: "Fix bug", priority: 2, labels: ["bug", "urgent"] })
github.search_repos({ query: "mcp" })
// 数据格式(显式结构)
[
{ tool: "linear.create_issue", args: { title: "Fix bug", priority: 2, labels: ["bug", "urgent"] } },
{ tool: "github.search_repos", args: { query: "mcp" } }
]
输出 是TOON格式(紧凑,适合LLM):
[2]:
- tool: linear.create_issue
output:
id: ISS-123
title: Fix bug
- tool: github.search_repos
output:
items[1]{name,stars}: repo1,42
使用--output json覆盖为标准JSON:
[
{ tool: 'linear.create_issue', output: { id: 'ISS-123', title: 'Fix bug' } },
{ tool: 'github.search_repos', output: { items: [...] } },
]
错误处理:如果有任何调用失败,错误将被捕获在输出中,退出码为1:
{
tool: 'linear.bad_tool',
output: "参数验证失败:\n- 字段'id':必需(期望字符串,但得到undefined)",
}
用例:
参见examples/README.md和examples/batch-calls.txt以获取完整示例。
需要运行时或自动化样本?前往docs/tool-calling.md和docs/cli-reference.md。随时调用mcpx list <server>以获取符合CLI函数调用语法的TypeScript风格签名、可选参数提示和示例调用。
mcp.json(项目)和~/.mcpx/mcp.json(用户)共享Cursor/Claude模式:
{
mcpServers: {
context7: {
description: 'Context7文档MCP',
baseUrl: 'https://mcp.context7.com/mcp',
headers: {
Authorization: '$env:CONTEXT7_API_KEY',
},
},
'chrome-devtools': {
command: 'bunx',
args: ['chrome-devtools-mcp@latest'],
},
},
}
MCPX为您处理以下内容:
${VAR}, ${VAR:-fallback}, 和 $env:VAR 在两个文件中的头和环境条目中的插值。./mcp.json中定义的条目覆盖来自~/.mcpx/mcp.json的重复项。~/.mcpx/<server>/下自动缓存OAuth令牌,除非您覆盖tokenCacheDir。~/.mcpx/mcp.json,通过迁移Cursor/Claude/Codex/Windsurf/VS Code配置;迁移助手期间仅读取遗留的imports数组。当您同时处理多个配置文件时,向CLI/运行时调用提供configPath或rootDir。
使用tmux保持长时间运行的CLI会话可见,同时调查滞留的MCP传输:
tmux new-session -- bun run mcpx:list
让它在后台运行,然后检查面板(tmux capture-pane -pt <session>),跟踪标准I/O日志,或者在命令退出后关闭会话。当您需要详细的句柄诊断时,搭配MCPX_DEBUG_HANG=1使用。更多细节:docs/tmux.md和docs/hang-debug.md。
MCPX受到mcporter的启发,但重新构建,以Token效率和LLM工作流作为首要设计目标。
MIT —— 查看LICENSE。