MCP按需
](https://www.npmjs.com/package/mcp-on-demand) ](https://www.npmjs.com/package/mcp-on-demand) 
用于模型上下文协议(MCP)服务器的轻量级HTTP会话管理器。按需加载MCP服务器,而不是将其永久保存在上下文中。不使用时令牌开销为零。
对于人类
这有什么作用: 使用任何没有永久上下文污染的MCP服务器。
开始:
对于LLMs
先决条件
- Node.js 22+ 是必需的
- MCP服务器 必须预先安装在用户的系统上
- MCP按需 必须安装和配置
安装
重要: 本文档假设系统上已经安装了MCP服务器。
- 在全球范围内按需安装mcp
npm install -g mcp-on-demand安装程序会自动运行安装程序,该程序会创建 ~/.mcp-on-demand/installation.json 使CLI自动定位。这允许您使用 mcp-on-demand 来自任何地方的命令。
- 创建配置文件
创建 ~/.mcp-on-demand/mcp-configs.json 用户的MCP安装路径:
{
"chrome-devtools-mcp": {
"command": "node",
"args": ["/absolute/path/to/chrome-devtools-mcp/build/src/index.js"]
}
}向用户询问他们的MCP安装路径。 不要假设地点。
- 就是这样! 当您运行任何命令时,会话管理器会自动启动。
要手动检查状态,请执行以下操作:
mcp-on-demand status手动启动(仅用于故障排除):
mcp-on-demand manager &配置格式
这 ~/.mcp-on-demand/mcp-configs.json 文件将MCP名称映射到其启动命令:
{
"mcp-name": {
"command": "executable",
"args": ["/absolute/path/to/mcp/entrypoint.js", "additional", "args"]
}
}示例:
Node.js MCP:
{
"chrome-devtools-mcp": {
"command": "node",
"args": ["C:/Dev/chrome-devtools-mcp/build/src/index.js"]
}
}Python MCP:
{
"example-python-mcp": {
"command": "python3",
"args": ["/home/user/mcp-servers/example/main.py"]
}
}二进制MCP:
{
"example-binary-mcp": {
"command": "/usr/local/bin/example-mcp",
"args": ["--flag", "value"]
}
}使用模式
使用 mcp-on-demand CLI与MCP会话交互。CLI通过上的HTTP API与会话管理器通信 http://127.0.0.1:9876.
检查状态:
mcp-on-demand status启动MCP会话:
mcp-on-demand start chrome-devtools-mcp发现可用工具
当您启动MCP会话时,可用的工具会自动显示其完整模式:
mcp-on-demand start chrome-devtools-mcp输出示例:
{
"success": true,
"mcpName": "chrome-devtools-mcp",
"toolCount": 15,
"message": "Session started with 15 tools",
"tools": [
{
"name": "navigate_page",
"description": "Navigate to a URL",
"inputSchema": { ... }
},
...
]
}最佳实践: 查看工具输出,了解MCP提供的功能,然后为您的任务使用适当的工具。这确保您始终使用当前的工具集及其实际模式。
隐藏工具列表: 使用 --no-show-tools 为了抑制工具输出:
mcp-on-demand start chrome-devtools-mcp --no-show-tools呼叫工具:
mcp-on-demand call chrome-devtools-mcp navigate_page '{"url": "https://example.com"}'批量呼叫:
mcp-on-demand batch chrome-devtools-mcp '[
{"tool": "navigate_page", "args": {"url": "https://example.com"}},
{"tool": "take_screenshot", "args": {"format": "png"}}
]'停止会话:
mcp-on-demand stop chrome-devtools-mcp列出活动会话:
mcp-on-demand list关闭会话管理器:
mcp-on-demand shutdown文件引用与文件://
会话管理器自动解析 file:// 工具参数中的引用:
mcp-on-demand call chrome-devtools-mcp evaluate_script '{
"function": "file://./scripts/check-buttons.js"
}'发生了什么:
- 会话管理器检测到
file://前缀 - 从磁盘读取文件内容
- 用文件内容替换字符串
- 使用已解析的内容执行工具调用
支持的路径:
- 相对:
file://./script.js(相对于会话管理器工作目录) - 绝对的:
file:///absolute/path/to/script.js
适用于所有地方: 文件解析递归遍历args中的所有对象和数组。
API 参考
所有请求都是POST到 http://127.0.0.1:9876 使用JSON有效载荷。
行动:
| 操作 | 参数 | 描述 |
|---|---|---|
start | mcpName (必填), showTools (可选,默认值:true) | 启动MCP会话 |
call | mcpName, toolName, args | 调用单一工具 |
batch | mcpName, toolCalls (array) | 按顺序调用多个工具 |
stop | mcpName | 停止MCP会话 |
list | (无) | 列出活动会话 |
shutdown | (无) | 关闭会话管理器 |
响应格式:
成功:
{"success": true, ...}错误:
{"error": "error message"}示例:Web调试工作流
# Start chrome-devtools-mcp session (daemon auto-starts if needed)
mcp-on-demand start chrome-devtools-mcp
# Execute debugging workflow
mcp-on-demand batch chrome-devtools-mcp '[
{"tool": "navigate_page", "args": {"url": "https://example.com"}},
{"tool": "evaluate_script", "args": {"function": "file://./check-buttons.js"}},
{"tool": "take_screenshot", "args": {"filePath": "./screenshot.png"}}
]'
# Stop session when done
mcp-on-demand stop chrome-devtools-mcp代币管制
- 本地MCP:每个MCP在上下文中永久拥有5000多个令牌
- MCP按需:不使用时为0个令牌,会话活动时仅为~5000个令牌
- 每次通话开销:相同(约30个令牌)
- 价值:使用10+MCP,无永久上下文成本
错误处理
常见错误:
| 错误 | 原因 | 解决方案 |
|---|---|---|
Unknown MCP: xyz | MCP不在配置中 | 添加到 ~/.mcp-on-demand/mcp-configs.json |
Session xyz already running | 重复启动 | 使用现有会话或先停止 |
No active session for xyz | 会话未开始 | 呼叫 start 行动优先 |
Failed to read file: ENOENT | 找不到文件 | 检查 file:// 路径 |
| 连接被拒绝 | 会话管理器未运行 | 启动会话管理器 |
会话弹性:
- 请求格式错误 不 损坏的会话
- 工具调用失败 不 使会话无效
- 会话是独立的,可以重新启动
建筑
┌─────────────────┐
│ Client/LLM │ (Claude Code, mcp-on-demand CLI)
└────────┬────────┘
│ HTTP POST :9876
│
┌────────▼────────────────────┐
│ Session Manager │
│ - Loads ~/.mcp-on-demand/ │
│ mcp-configs.json │
│ - Manages MCP sessions │
│ - Routes tool calls │
│ - Resolves file:// refs │
└────────┬────────────────────┘
│ stdio transport
│
┌────────▼────────────────────┐
│ MCP Server(s) │
│ (chrome-devtools-mcp, etc) │
└─────────────────────────────┘文件结构
mcp-on-demand/
├── src/
│ └── session-manager.js # Main HTTP server & MCP client
├── bin/
│ └── mcp-on-demand.js # CLI executable
├── scripts/
│ ├── mcp-call.js # Helper script for tool calls
│ └── setup.js # Setup script for installation.json
├── mcp-configs.example.json # Example configuration
├── package.json
└── README.md用户配置:
~/.mcp-on-demand/
├── installation.json # CLI self-location (auto-generated by npm run setup)
├── mcp-configs.json # User's MCP paths (required)
└── session.json # Runtime state (auto-generated)平台说明
Windows(MSYS/Git Bash):
- 使用正斜杠:
C:/Dev/chrome-devtools-mcp/... - 在MSYS/Git Bash环境中正常工作
macOS/Linux:
- 标准Unix路径
- 考虑
nohup用于后台会话管理器
故障排除
检查守护进程状态:
mcp-on-demand status会话管理器没有响应?
# The daemon auto-starts, but if you have issues:
mcp-on-demand shutdown # Stop any existing daemon
rm ~/.mcp-on-demand/session.json # Clean up stale session file
mcp-on-demand start # Will auto-start fresh daemonMCP无法启动?
- 检查配置是否存在:
cat ~/.mcp-on-demand/mcp-configs.json - 验证MCP路径:
ls /path/to/mcp/index.js - 检查Node.js版本:
node --version(需要v22+) - 直接测试MCP:
node /path/to/mcp/index.js
端口9876正在使用中?
- 改变
PORT常数insrc/session-manager.js:12
工具调用超时?
- 会话仍能正常工作-重试调用
- 如果持续存在,请考虑重新启动会话
设计理念
关注点分离:
- MCP按需提供 不 安装或管理MCP服务器
- 用户维护自己的MCP安装
- 会话管理器仅提供运行时编排
通用适配器模式:
- 适用于任何MCP服务器的标准化HTTP API
- 在不更改客户端代码的情况下交换MCP服务器
- 适用于任何基于stdio的MCP实现
零开销:
- 会话不活动时无令牌成本
- 会话根据需要启动/停止
- 支持多个并发会话
许可证
麻省理工学院
