|
| 1 | + |
| 2 | + |
| 3 | + |
| 4 | +[English](README.md) | 简体中文 |
| 5 | + |
| 6 | +``` |
| 7 | + ███╗ ███╗ ██████╗██████╗ ███╗ ███╗ |
| 8 | + ████╗ ████║██╔════╝██╔══██╗████╗ ████║ |
| 9 | + ██╔████╔██║██║ ██████╔╝██╔████╔██║ |
| 10 | + ██║╚██╔╝██║██║ ██╔═══╝ ██║╚██╔╝██║ |
| 11 | + ██║ ╚═╝ ██║╚██████╗██║ ██║ ╚═╝ ██║ |
| 12 | + ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ |
| 13 | +
|
| 14 | +MCP Manager |
| 15 | +Open Source. Forever Free. |
| 16 | +Built with ❤️ by Path Integral Institute |
| 17 | +``` |
| 18 | + |
| 19 | +# 🌟 MCPM - Model Context Protocol Manager |
| 20 | + |
| 21 | +MCPM 是一个开源的服务和命令行界面(CLI),用于管理模型上下文协议(MCP)服务器。它简化了跨各种支持的客户端管理服务器配置、允许将服务器分组到配置文件中、通过注册表帮助发现新服务器,并包含一个强大的路由器,该路由器在单个端点后聚合多个 MCP 服务器并共享会话。 |
| 22 | + |
| 23 | +## 🤝 社区贡献 |
| 24 | + |
| 25 | +> 💡 **壮大 MCP 生态系统!** 我们欢迎对我们的 [MCP 注册表](mcp-registry/README.md) 进行贡献。添加你自己的服务器,改进文档,或建议功能。开源在社区参与下蓬勃发展! |
| 26 | +
|
| 27 | +## 🚀 快速安装 |
| 28 | + |
| 29 | +选择您喜欢的安装方式: |
| 30 | + |
| 31 | +### 🍺 Homebrew |
| 32 | + |
| 33 | +```bash |
| 34 | +brew install mcpm |
| 35 | +``` |
| 36 | + |
| 37 | +### 📦 pipx(推荐用于 Python 工具) |
| 38 | + |
| 39 | +```bash |
| 40 | +pipx install mcpm |
| 41 | +``` |
| 42 | + |
| 43 | +### 🐍 pip |
| 44 | + |
| 45 | +```bash |
| 46 | +pip install mcpm |
| 47 | +``` |
| 48 | + |
| 49 | +### 🔄 Shell 脚本(一行命令) |
| 50 | + |
| 51 | +```bash |
| 52 | +curl -sSL https://mcpm.sh/install | bash |
| 53 | +``` |
| 54 | + |
| 55 | +## 🔎 概述 |
| 56 | + |
| 57 | +MCPM 简化了 MCP 服务器的安装、配置和管理,以及它们在不同应用程序(客户端)中的配置。主要功能包括: |
| 58 | + |
| 59 | +- ✨ 轻松添加和删除支持的客户端的 MCP 服务器配置。 |
| 60 | +- 📋 使用配置文件进行集中管理:将服务器配置分组并轻松激活/停用它们。 |
| 61 | +- 🔍 通过中央注册表发现可用的 MCP 服务器。 |
| 62 | +- 🔌 MCPM 路由器,用于在单个端点后聚合多个 MCP 服务器并共享会话。 |
| 63 | +- 💻 用于所有管理任务的命令行界面 (CLI)。 |
| 64 | + |
| 65 | +有关共享服务器会话和 MCPM 路由器等更多功能,请参阅 [高级功能](docs/advanced_features.md)。 |
| 66 | + |
| 67 | +## 🖥️ 支持的 MCP 客户端 |
| 68 | + |
| 69 | +MCPM 将支持为以下客户端管理 MCP 服务器: |
| 70 | + |
| 71 | +- 🤖 Claude Desktop (Anthropic) |
| 72 | +- ⌨️ Cursor |
| 73 | +- 🏄 Windsurf |
| 74 | +- 📝 Cline |
| 75 | +- ➡️ Continue |
| 76 | +- 🦢 Goose |
| 77 | +- 🔥 5ire |
| 78 | +- 🦘 Roo Code |
| 79 | +- ✨ 更多客户端即将推出... |
| 80 | + |
| 81 | +## 🔥 命令行界面 (CLI) |
| 82 | + |
| 83 | +MCPM 提供了一个使用 Python 的 Click 框架构建的全面 CLI。命令通常在当前**活动客户端**上操作。您可以使用 `mcpm client` 查看/设置活动客户端。许多命令还支持作用域修饰符,如 `@CLIENT_NAME/SERVER_NAME` 或 `#PROFILE_NAME/SERVER_NAME`,以直接针对特定客户端或配置文件。 |
| 84 | + |
| 85 | +以下是按功能分组的可用命令: |
| 86 | + |
| 87 | +### ℹ️ 一般 |
| 88 | + |
| 89 | +```bash |
| 90 | +mcpm --help # 显示帮助信息和可用命令 |
| 91 | +mcpm --version # 显示 MCPM 的当前版本 |
| 92 | +``` |
| 93 | + |
| 94 | +### 🖥️ 客户端管理 (`client`) |
| 95 | + |
| 96 | +```bash |
| 97 | +mcpm client ls # 列出所有支持的 MCP 客户端,检测已安装的客户端,并显示活动客户端 |
| 98 | +mcpm client set CLIENT # 为后续命令设置活动客户端 |
| 99 | +mcpm client edit # 在外部编辑器中打开活动客户端的 MCP 配置文件 |
| 100 | +``` |
| 101 | + |
| 102 | +### 🌐 服务器管理 (`server`) |
| 103 | + |
| 104 | +这些命令在活动客户端上操作,除非提供了特定作用域(`@CLIENT` 或 `#PROFILE`)。 |
| 105 | + |
| 106 | +```bash |
| 107 | +# 🔍 搜索和添加 |
| 108 | +mcpm search [QUERY] # 在 MCP 注册表中搜索可用服务器 |
| 109 | +mcpm add SERVER_URL # 添加 MCP 服务器配置(从 URL 或注册表名称) |
| 110 | +mcpm add SERVER_URL --alias ALIAS # 添加并使用自定义别名 |
| 111 | + |
| 112 | +# 📋 列出和删除 |
| 113 | +mcpm ls # 列出活动客户端/配置文件的服务器配置 |
| 114 | +mcpm rm SERVER_NAME # 删除服务器配置 |
| 115 | + |
| 116 | +# 🔄 修改和组织 |
| 117 | +mcpm cp SOURCE TARGET # 复制服务器配置(例如,@client1/serverA #profileB) |
| 118 | +mcpm mv SOURCE TARGET # 移动服务器配置(例如,#profileA/serverX @client2) |
| 119 | + |
| 120 | +# 📦 暂存(临时禁用/启用) |
| 121 | +mcpm stash SERVER_NAME # 临时禁用/存储服务器配置 |
| 122 | +mcpm pop [SERVER_NAME] # 恢复最后暂存的服务器,或按名称恢复特定服务器 |
| 123 | +``` |
| 124 | + |
| 125 | +### 📂 配置文件管理 (`profile`) |
| 126 | + |
| 127 | +配置文件是服务器配置的命名集合。它们允许您轻松切换不同的 MCP 服务器集。例如,您可能有一个 `work` 配置文件和一个 `personal` 配置文件,每个都包含不同的服务器。或者,您可能有一个 `production` 配置文件和一个 `development` 配置文件,每个都包含同一服务器的不同配置。 |
| 128 | + |
| 129 | +当前*活动*配置文件的服务器通常由 MCPM 路由器等功能使用。使用 `mcpm activate` 设置活动配置文件。 |
| 130 | + |
| 131 | +```bash |
| 132 | +# 🔄 配置文件生命周期 |
| 133 | +mcpm profile ls # 列出所有可用的 MCPM 配置文件 |
| 134 | +mcpm profile add PROFILE_NAME # 添加新的空配置文件 |
| 135 | +mcpm profile rm PROFILE_NAME # 删除配置文件(不删除其中的服务器) |
| 136 | +mcpm profile rename OLD_NAME NEW_NAME # 重命名配置文件 |
| 137 | + |
| 138 | +# ✅ 激活配置文件 |
| 139 | +mcpm activate PROFILE_NAME # 激活配置文件,将其服务器应用于活动客户端 |
| 140 | +mcpm deactivate # 为活动客户端停用当前配置文件 |
| 141 | +``` |
| 142 | + |
| 143 | +### 🔌 路由器管理 (`router`) |
| 144 | + |
| 145 | +MCPM 路由器作为后台守护进程运行,充当稳定端点(例如 `http://localhost:6276`),根据当前**活动配置文件**智能地将传入的 MCP 请求路由到适当的服务器。 |
| 146 | + |
| 147 | +这允许您通过切换配置文件(使用 `mcpm activate`)来更改底层服务器,而无需重新配置客户端应用程序。它们可以始终指向 MCPM 路由器的地址。 |
| 148 | + |
| 149 | +路由器还维护与 MCP 服务器的持久连接,使多个客户端能够共享这些服务器会话。这消除了为每个客户端启动单独服务器实例的需要,显著减少资源使用和启动时间。在 [高级功能](docs/advanced_features.md) 中了解有关这些高级功能的更多信息。 |
| 150 | + |
| 151 | +有关路由器实现和命名空间的更多技术细节,请参阅 [`docs/router_tech_design.md`](docs/router_tech_design.md)。 |
| 152 | + |
| 153 | +```bash |
| 154 | +mcpm router status # 检查路由器守护进程是否正在运行 |
| 155 | +mcpm router on # 启动 MCP 路由器守护进程 |
| 156 | +mcpm router off # 停止 MCP 路由器守护进程 |
| 157 | +mcpm set --host HOST --port PORT # 设置 MCP 路由器守护进程的主机和端口 |
| 158 | +``` |
| 159 | + |
| 160 | +### 🛠️ 实用工具 (`util`) |
| 161 | + |
| 162 | +```bash |
| 163 | +mcpm config clear-cache # 清除 MCPM 的注册表缓存。缓存默认每 1 小时刷新一次。 |
| 164 | +mcpm inspector # 启动 MCPM 检查器 UI 以检查服务器配置 |
| 165 | +``` |
| 166 | + |
| 167 | +### 📚 注册表 |
| 168 | + |
| 169 | +MCP 注册表是可使用 MCPM 安装的可用 MCP 服务器的中央存储库。注册表位于 [mcpm.sh/registry](https://mcpm.sh/registry)。 |
| 170 | + |
| 171 | +## 🗺️ 路线图 |
| 172 | + |
| 173 | +- [x] 登陆页面设置 (`mcpm.sh`) |
| 174 | +- [x] 核心 CLI 基础 (Click) |
| 175 | +- [x] 客户端检测和管理 (`mcpm client`) |
| 176 | +- [x] 基本服务器管理 (`mcpm add`, `mcpm ls`, `mcpm rm`) |
| 177 | +- [x] 注册表集成 (`mcpm search`, 按名称添加) |
| 178 | +- [x] 路由器功能 (`mcpm router`) |
| 179 | +- [x] MCP 配置文件 (`mcpm profile`, `mcpm activate/deactivate`) |
| 180 | +- [x] 服务器复制/移动 (`mcpm cp`, `mcpm mv`) |
| 181 | +- [x] 服务器暂存 (`mcpm stash`, `mcpm pop`) |
| 182 | +- [ ] MCPM 路由器的 MCP 服务器访问监控(仅限本地,绝对不会有数据离开本地机器) |
| 183 | +- [ ] 通过 STDIO 的 MCPM 路由器(相同的强大功能集,具有配置文件和监控,但单客户端/租户) |
| 184 | +- [ ] MCPM 路由器的 MCP 服务器(实验性,允许 MCP 客户端动态切换配置文件,从注册表建议新的 MCP 服务器等) |
| 185 | +- [ ] 服务器端管理功能(超出配置管理) |
| 186 | +- [ ] 附加客户端支持(扩展注册表) |
| 187 | + |
| 188 | +## 👨💻 开发 |
| 189 | + |
| 190 | +此存储库包含 MCP Manager 的 CLI 和服务组件,使用 Python 和 Click 按照现代包开发实践构建。 |
| 191 | + |
| 192 | +### 📋 开发要求 |
| 193 | + |
| 194 | +- 🐍 Python 3.10+ |
| 195 | +- 🚀 uv(用于虚拟环境和依赖管理) |
| 196 | +- 🖱️ Click 框架用于 CLI |
| 197 | +- ✨ Rich 用于增强控制台输出 |
| 198 | +- 🌐 Requests 用于 API 交互 |
| 199 | + |
| 200 | +### 📁 项目结构 |
| 201 | + |
| 202 | +该项目遵循现代基于 src 的布局: |
| 203 | + |
| 204 | +``` |
| 205 | +mcpm.sh/ |
| 206 | +├── src/ # 源包目录 |
| 207 | +│ └── mcpm/ # 主包代码 |
| 208 | +├── tests/ # 测试目录 |
| 209 | +├── test_cli.py # 开发 CLI 运行器 |
| 210 | +├── pyproject.toml # 项目配置 |
| 211 | +├── pages/ # 网站内容 |
| 212 | +│ └── registry/ # 注册表网站 |
| 213 | +├── mcp-registry/ # MCP 注册表数据 |
| 214 | +└── README.md # 文档 |
| 215 | +``` |
| 216 | + |
| 217 | +### 🚀 开发设置 |
| 218 | + |
| 219 | +1. 克隆存储库 |
| 220 | + ``` |
| 221 | + git clone https://github.com/pathintegral-institute/mcpm.sh.git |
| 222 | + cd mcpm.sh |
| 223 | + ``` |
| 224 | + |
| 225 | +2. 使用 uv 设置虚拟环境 |
| 226 | + ``` |
| 227 | + uv venv --seed |
| 228 | + source .venv/bin/activate # 在 Unix/Mac 上 |
| 229 | + ``` |
| 230 | + |
| 231 | +3. 以开发模式安装依赖项 |
| 232 | + ``` |
| 233 | + uv pip install -e . |
| 234 | + ``` |
| 235 | + |
| 236 | +4. 在开发期间直接运行 CLI |
| 237 | + ``` |
| 238 | + # 使用已安装的包 |
| 239 | + mcpm --help |
| 240 | +
|
| 241 | + # 或使用开发脚本 |
| 242 | + ./test_cli.py --help |
| 243 | + ``` |
| 244 | + |
| 245 | +5. 运行测试 |
| 246 | + ``` |
| 247 | + pytest tests/ |
| 248 | + ``` |
| 249 | + |
| 250 | +### ✅ 最佳实践 |
| 251 | + |
| 252 | +- 📁 使用基于 src 的目录结构以防止导入混淆 |
| 253 | +- 🔧 使用 `uv pip install -e .` 进行可编辑安装开发 |
| 254 | +- 🧩 在 `src/mcpm/commands/` 目录中保持命令模块化 |
| 255 | +- 🧪 在 `tests/` 目录中为新功能添加测试 |
| 256 | +- 💻 使用 `test_cli.py` 脚本进行快速开发测试 |
| 257 | + |
| 258 | + |
| 259 | +### 🔢 版本管理 |
| 260 | + |
| 261 | +MCP 使用单一事实来源模式进行版本管理,以确保所有组件之间的一致性。 |
| 262 | + |
| 263 | +#### 🏷️ 版本结构 |
| 264 | + |
| 265 | +- 📍 规范版本在项目根目录的 `version.py` 中定义 |
| 266 | +- 📥 `src/mcpm/__init__.py` 导入此版本 |
| 267 | +- 📄 `pyproject.toml` 使用动态版本控制从 `version.py` 读取 |
| 268 | +- 🏷️ Git 标签使用相同的版本号,前缀为 'v'(例如,v1.0.0) |
| 269 | + |
| 270 | +#### 🔄 更新版本 |
| 271 | + |
| 272 | +发布新版本时: |
| 273 | + |
| 274 | +1. 使用提供的版本升级脚本 |
| 275 | + ``` |
| 276 | + ./bump_version.sh NEW_VERSION |
| 277 | + # 示例:./bump_version.sh 1.1.0 |
| 278 | + ``` |
| 279 | + |
| 280 | +2. 推送更改和标签 |
| 281 | + ``` |
| 282 | + git push && git push --tags |
| 283 | + ``` |
| 284 | + |
| 285 | +3. 创建与新版本匹配的 GitHub 发布 |
| 286 | + |
| 287 | +此过程确保版本在所有地方保持一致:代码、包元数据和 git 标签。 |
| 288 | +PyPI 发布由 CI/CD 管道处理,将自动触发。 |
| 289 | + |
| 290 | +## 📜 许可证 |
| 291 | + |
| 292 | +MIT |
0 commit comments