MCP服务器管理工具

MCP Manager是一个动态MCP服务器路由器,通过单一代理连接管理多个MCP服务器,支持按需启动/停止服务器而无需重启Claude。

  • by grobomo
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 grobomo/mcp-manager

使用说明


职务:mcp经理 页码:1994276157 空格键:~622a1696db58c100687da202 家长编号:1995637406

MCP经理

动态MCP服务器路由器-通过单个代理连接管理多个MCP服务器。按需启动/停止服务器,而无需重新启动Claude。

github: https://github.com/grobomo/mcp-manager


快速开始

git clone https://github.com/grobomo/mcp-manager.git
cd mcp-manager
python setup.py

就是这样。安装程序构建项目,创建 servers.yaml,配置 .mcp.json,并验证服务器是否启动。打开一个新的Claude Code会话以开始。


特性

  • 单工具界面 -一个 mcpm 带有操作的工具(代币效率:约300个代币对约3000个代币)
  • 动态加载 -按需启动/停止MCP服务器,无需重新启动Claude
  • 按需启动 -调用工具时,服务器会自动启动
  • 崩溃恢复 -自动重启崩溃的服务器,并重试一次失败的呼叫
  • 自动停止 -空闲服务器在1小时后停止以节省内存(可配置)
  • 健康检查 -检测崩溃的stdio进程和无法访问的HTTP服务器,自动重启
  • 通话指标 -每台服务器的呼叫计数、错误和延迟跟踪(在重启过程中持续)
  • 二进制过滤 -拦截base64图像/资源,保存到临时文件,返回路径
  • 蓝图中间件 -Auto通过client_id注入实现浏览器自动化
  • 功能缓存 -即使服务器停止,也能查看可用工具
  • 挂钩系统 -通过hooks.yaml配置调用工具后触发操作
  • 按项目筛选 -通过以下方式限制每个项目的服务器访问 .mcp.json 允许的服务器
  • 交叉平台的 -适用于Windows、macOS和Linux

运作原理

Claude Code
    |
    v
mcp-manager (single proxy)
    |
    +-- mcpm(operation, server, tool, arguments)
    |
    v
Backend MCP Servers (started on demand)
  - browser automation
  - API wrappers
  - custom tools
  1. Claude只与mcp经理联系
  2. 当您调用工具时,mcp管理器会路由到正确的后端服务器
  3. 服务器停止时自动启动,空闲时自动停止

mcpm工具

所有操作都通过一个 mcpm 工具:

mcpm(operation="<op>", server="<name>", ...)

运营

操作 说明 参数
list_servers 列出所有状态为 -的服务器
search 按关键字搜索服务器/工具 query
details 一台服务器上的完整信息 server
tools 列出服务器上的工具 server (可选)
status 系统运行状况、内存、PID -
logs 跟踪最近的日志条目 server (可选)
help 显示可用操作 -
call 在后端服务器上执行工具 server, tool, arguments
start 启动服务器 server
stop 停止服务器 server
restart 重新启动服务器 server
enable 启用/禁用服务器 server, enabled
add 注册新服务器 server, command, args, description
remove 注销服务器 server
reload 重新加载服务器.yaml -
discover 扫描未注册的服务器 -
usage 项目使用指标 -
ram 内存仪表板 -

例子

# List servers
mcpm(operation="list_servers")

# Start a server
mcpm(operation="start", server="browser")

# Call a tool (auto-starts server if needed)
mcpm(operation="call", server="wiki-lite", tool="wiki_search", arguments={"query": "API docs"})

# Add a new server
mcpm(operation="add", server="my-server", command="node", args=["./server.js"], description="My custom server")

# Check memory usage
mcpm(operation="ram")

安装

先决条件

  • Node.js 18+(适用于mcp经理本人)
  • npm 9+
  • python 3.10+(用于设置脚本和基于Python的服务器)

步骤

# 1. Clone and run setup (handles everything)
git clone https://github.com/grobomo/mcp-manager.git
cd mcp-manager
python setup.py

# 2. Open a new Claude Code session

自动设置:

  • 安装npm依赖项并构建TypeScript
  • 创建 servers.yaml 从示例模板
  • 将mcp管理器添加到 ~/.mcp.json (全球性,适用于所有项目)
  • 添加使用说明 ~/.claude/CLAUDE.md
  • 验证服务器是否正确启动

设置选项

python setup.py              # Full setup (build + configure + verify)
python setup.py --check      # Check prerequisites only
python setup.py --migrate    # Migrate servers from .mcp.json to servers.yaml

配置

服务器.yaml

在中注册您的MCP服务器 servers.yaml:

servers:
  # Local stdio server (Node.js)
  my-node-server:
    description: My custom Node.js server
    command: node
    args:
      - ./servers/my-server/dist/index.js
    enabled: true
    auto_start: false
    idle_timeout: 300000  # 5 minutes

  # Local stdio server (Python)
  my-python-server:
    description: My Python server
    command: python
    args:
      - ./servers/my-server/server.py
    enabled: true
    auto_start: false

  # NPX server (always latest)
  some-mcp:
    description: Some MCP from npm
    command: npx
    args:
      - some-mcp@latest
    enabled: true
    auto_start: false

  # Remote HTTP server
  remote-api:
    description: Remote API server
    url: https://api.example.com/mcp
    enabled: true
    auto_start: false

服务器选项

选项 类型 默认值 描述
description string - 人类可读的描述
command string - 要运行的命令(node、python、npx等)
args list [] 命令参数
url string - HTTP/WebSocket URL(命令的替代)
enabled bool true 服务器是否可用
auto_start bool false 以Claude自动开始
idle_timeout int 3600000 空闲后自动停止(毫秒,默认1小时)
startup_delay int 2000 初始化前等待(毫秒)
env dict {} 环境变量
timeout int 60000 请求超时(毫秒)
tags list [] 分类标签(使用 no_auto_stop 免除空闲超时)

路径约定

使用mcp管理器目录中的相对路径进行可移植性:

# Good - relative path
args:
  - ./managed-servers/my-server/server.py

# Avoid - absolute path (not portable)
args:
  - /home/user/mcp-manager/managed-servers/my-server/server.py

可靠性

自动停止空闲服务器

服务器在1小时不活动后自动停止以节省内存。健康检查每60秒运行一次,以检测崩溃的进程和无法访问的HTTP服务器。

servers:
  wiki-lite:
    idle_timeout: 600000   # 10 minutes (default: 3600000 = 1 hour)
    tags:
      - no_auto_stop       # Never auto-stop this server

崩溃恢复

如果工具调用因服务器崩溃(stdin写入失败、EPIPE、流错误)而失败,mcp管理器会自动:

  1. 停止死机服务器
  2. 重新启动它
  3. 重试通话一次

无需配置-对于已启用的服务器,此选项始终处于活动状态。

健康检查

每60秒,mcp管理器检查所有正在运行的服务器:

  • Stdio服务器 -检测退出的进程,清理资源,在以下情况下自动重启 auto_start: true
  • HTTP服务器 -发送ping请求,删除无法访问的服务器,如果配置了自动重启

通过以下方式检查服务器运行状况:

mcpm(operation="status")

钩子

钩子在工具调用后触发操作。在中配置 hooks.yaml:

defaults:
  enabled: true
  async: true
  timeout: 5000

hooks:
  # Pattern matches tool names (* = wildcard, prefix* = prefix match)
  browser_navigate:
    target_server: metrics-server
    target_tool: log_event
    result_contains: "success"      # Only trigger if result contains this
    extract:
      url: args.url                 # Extract from call arguments
      status: "regex:HTTP (\\d+)"   # Extract from result via regex
      source: "literal:${server}"   # Variable substitution
      summary: "result_summary:100" # First 100 chars of result

提取规格

规格 说明 示例
args.<field> 调用参数的值 args.query
regex:<pattern> 从结果中捕获组1 regex:id=(\\d+)
literal:<value> 文字与 ${server}, ${tool} 替代品 literal:${server}
result_summary:<n> 结果的前N个字符 result_summary:200
result 完整结果文本 result

蓝图中间件

通过以下方式实现浏览器自动化 blueprint-extra 内置中间件:

  • 自动注射 client_id 上 enable 调用(使用项目名称或 claude-code)
  • 自动启用 通话时 browser_* 如果蓝图尚未启用,则使用工具
  • 状态跟踪 跨启用/禁用呼叫

无需配置-随时激活 blueprint-extra 注册于 servers.yaml.


按项目筛选

限制项目可以通过哪些服务器访问 .mcp.json:

{
  "mcpServers": {
    "mcp-manager": {
      "command": "node",
      "args": ["path/to/mcp-manager/build/index.js"],
      "allowedServers": ["wiki-lite", "v1-lite"]
    }
  }
}

当 allowedServers 设置后,只有这些服务器才会出现在 list_servers 并且可以被调用。其他服务器被阻止,并显示明确的错误消息。


项目结构

mcp-manager/
|-- src/
|   |-- index.ts            # Main server, transport, idle checker, config
|   |-- utils.ts            # Shared utilities (sanitizeLog, paths, memory)
|   |-- hooks.ts            # Post-call hook system
|   |-- metrics.ts          # Per-server call metrics
|   |-- binary-filter.ts    # Base64 image/resource interception
|   |-- operations/
|       |-- types.ts        # Shared types (ServerConfig, RunningServer, etc.)
|       |-- index.ts        # Operation barrel exports
|       |-- query/          # list_servers, search, details, tools, status, help
|       |-- call/           # call + middleware (blueprint auto-enable)
|       |-- admin/          # lifecycle, registry (add/remove/discover), usage/ram
|-- tests/                  # 93 tests (node:test + tsx)
|-- build/                  # Compiled JavaScript (tsup ESM)
|-- servers.yaml            # Server registry (gitignored)
|-- hooks.yaml              # Hook config (gitignored)
|-- setup.py                # Installation script

故障排除

服务器无法启动

  1. 检查先决条件: python setup.py --check
  2. 验证服务器路径是否存在且正确
  3. 检查 mcpm(operation="details", server="server-name") 对于配置错误
  4. 查看登录记录 .local/mcp-manager.log

未找到工具

  1. 启动服务器: mcpm(operation="start", server="server-name")
  2. 列出工具: mcpm(operation="tools", server="server-name")
  3. 工具已缓存-使用 mcpm(operation="reload") 刷新

内存占用高

  1. 检查RAM: mcpm(operation="ram")
  2. 停止未使用的服务器: mcpm(operation="stop", server="server-name")
  3. 减少 idle_timeout 在servers.yaml中

许可证

麻省理工学院

组织

看 组织.md 用于:

  • 中央存储库结构
  • 从不删除策略(始终存档)
  • 使用.mcp.json进行项目设置
  • 日志轮换(500MB,保留5个)
  • 克劳德整合组织