使用说明
MCP经理(mcpi)
一种命令行工具,用于跨不同的MCP兼容客户端管理模型上下文协议(MCP)服务器。轻松发现、安装和配置用于Claude Code和其他兼容工具的MCP服务器。
特性
- 综合注册表:包含元数据的已知MCP服务器目录
- 配置模板:交互式设置,带有常见服务器的引导提示
- 多目录支持:官方目录+您当地的定制目录
- 基于范围的配置:跨多个配置范围(项目级、用户级)管理服务器
- 多客户端支持:适用于Claude Code、Cursor、VS Code和其他MCP客户端
- CLI接口:直观的命令行界面,带有shell选项卡完成功能
- 插件架构:支持新MCP客户端的可扩展客户端插件系统
安装
使用uvx(推荐)
uvx mcpi
使用紫外线
uv tool install mcpi
开发安装
git clone https://github.com/user/mcpi
cd mcpi
uv sync
source .venv/bin/activate
macOS iCloud Drive用户注意事项:如果您的项目在iCloud Drive中,请使用 .venv.nosync 以避免间歇性的导入问题。看 故障排除 了解详情。
快速开始
发现MCP服务器
# Search for specific functionality
mcpi search --query filesystem
# Get detailed information about a server (shows registry + install status)
mcpi info filesystem
配置模板
MCPI v0.5.0+包含配置模板,通过交互式提示指导您完成服务器设置,将配置时间从15-30分钟缩短到2-3分钟。
模板快速入门
# List available templates for a server
mcpi add postgres --list-templates
# Use a template interactively
mcpi add postgres --template local-development
Database name to connect to [postgres]: myapp_dev
Database username (leave empty for peer authentication) []:
✓ Server 'postgres' added successfully
可用模板
PostgreSQL (3个模板):
local-development:用于开发的本地PostgreSQL数据库docker:PostgreSQL在Docker容器中运行production:具有完整连接详细信息的生产数据库
GitHub (3个模板):
personal-full-access:完全访问私有和公共存储库read-only:对存储库的只读访问public-repos:仅限公共存储库(不需要令牌)
文件系统 (3个模板):
project-files:访问当前项目目录user-documents:访问~/Documents目录custom-directories:具有多个路径的自定义目录访问
Slack (2个模板):
bot-token:用于自动操作的Slack机器人limited-channels:Bot仅限于特定频道
勇敢的搜索 (1个模板):
api-key:勇敢地用你的API密钥搜索API
模板功能
- 互动提示:逐步指导设置和验证
- 秘密面具:输入过程中隐藏的密码和API密钥(例如********)
- 智能默认值:预填充通用值,以加快设置速度
- 实时验证:输入验证,并显示有用的错误消息
- 安装说明:每个模板都包括详细的说明和示例
- 内置安全功能:令牌、密钥和URL的格式检查
模板示例
示例1:PostgreSQL本地开发
$ mcpi add postgres --template local-development
Using template 'local-development' for server 'postgres'
Scope: user-global
Template Notes:
This template creates a PostgreSQL connection URL for local development.
Connection URL format: postgresql://[user@]localhost/database
If you leave the username empty, PostgreSQL will use peer authentication
(your OS username). This is common for local development on macOS/Linux.
Database name to connect to (e.g., 'myapp_dev') [postgres]: myapp_dev
Database username (leave empty for peer authentication) []:
✓ Server 'postgres' added to user-global scope
示例2:带有个人访问令牌的GitHub
$ mcpi add github --template personal-full-access
Using template 'personal-full-access' for server 'github'
Scope: user-global
GitHub Personal Access Token: ****************************************
✓ Server 'github' added to user-global scope
示例3:文件系统访问
$ mcpi add filesystem --template project-files
Using template 'project-files' for server 'filesystem'
Scope: project-mcp
Project root directory [/Users/alice/projects/myapp]:
✓ Server 'filesystem' added to project-mcp scope
多个目录
MCPI v0.4.0+支持多个目录来组织MCP服务器:
查看可用目录
# List all catalogs
mcpi catalog list
# View catalog details
mcpi catalog info official
mcpi catalog info local
跨目录搜索
# Search official catalog (default)
mcpi search --query filesystem
# Search local catalog
mcpi search --query myserver --catalog local
# Search specific catalog explicitly
mcpi search --query database --catalog official
使用本地目录
将自定义服务器添加到您的本地目录 ~/.mcpi/catalogs/local/catalog.json:
# Add a server definition to local catalog
# Then use it with --catalog local flag
mcpi add myserver --catalog local --scope user-global
您的本地目录与官方目录是分开的,因此您的自定义设置不会受到更新的影响。
常见问题解答
Q: 我的本地目录存储在哪里?
A. ~/.mcpi/catalogs/local/catalog.json (首次使用时自动创建)
Q: 我可以有两个以上的目录吗? A: 不在v0.4.0(第1阶段)中。第二阶段将添加基于git的远程目录。
Q: 我现有的命令仍然有效吗? A: 是的!100%向后兼容。--catalog标志是可选的。
管理已安装的服务器
# List currently installed servers
mcpi list
# List servers in a specific scope
mcpi list --scope user-global
# List servers for a specific client
mcpi list --client claude-code
# Add a server (interactive scope selection)
mcpi add filesystem
# Add a server to a specific scope
mcpi add filesystem --scope project-mcp
# Remove a server
mcpi remove filesystem
# Check system status
mcpi status
范围管理
# List available scopes for the default client
mcpi scope list
# List scopes for a specific client
mcpi scope list --client claude-code
# Consolidate a server to a specific scope (removes from all other scopes)
mcpi rescope filesystem --to user-global
客户管理
# List detected MCP clients
mcpi client list
# Get information about a specific client
mcpi client info claude-code
# Set the default client
mcpi client set-default claude-code
Shell选项卡完成
# Enable tab completion for bash
mcpi completion --shell bash
# Enable tab completion for zsh
mcpi completion --shell zsh
# Enable tab completion for fish
mcpi completion --shell fish
建筑
MCPI使用 基于范围的配置系统 带着一个 插件架构 用于支持多个MCP客户端。
基于范围的配置
代替传统的基于配置文件的配置,mcpi使用 范围 它们是具有不同优先级的分层配置级别。每个MCP客户端都定义了自己的作用域。
示例范围(克劳德代码)
| 作用域名称 | 类型 | 优先级 | 描述 |
|---|---|---|---|
project-mcp |
项目 | 10 | 项目级 .mcp.json (最高优先级) |
project-local |
项目 | 20 | 本地项目 .claude/settings.local.json |
project-internal |
项目 | 30 | 项目内部 .claude/settings.json |
user-internal |
用户 | 40 | 用户内部 ~/.claude/settings.json |
user-global |
用户 | 50 | 用户全局 ~/.config/claude/settings.json |
user-local |
用户 | 60 | 本地用户 ~/.claude/settings.local.json (最低优先级) |
优先权制度:较低优先级的数字会覆盖较高优先级的数字。项目级范围覆盖用户级范围。
插件架构
每个MCP客户端(Claude Code、Cursor、VS Code)都实现为 插件 这符合 MCPClientPlugin 协议:
- 客户端检测:自动检测已安装的客户端
- 作用域处理程序:每个作用域都由一个处理程序管理,该处理程序知道如何读取/写入特定的配置文件
- 架构验证:根据客户端特定的架构验证配置更改
- 可扩展:易于添加对新MCP客户端的支持
CLI命令
目录管理命令
mcpi catalog list
列出所有可用的目录。
mcpi catalog list
mcpi catalog info <name>
显示有关目录的详细信息。
mcpi catalog info official
mcpi catalog info local
发现命令
mcpi search --query <query>
在注册表中按名称或描述搜索服务器。
选项:
--query, -q TEXT:搜索查询(必填)--catalog TEXT:搜索特定目录(官方或本地,默认:官方)
mcpi search --query filesystem
mcpi search -q database --catalog local
mcpi search --query git --catalog official
备注:v0.4.0将搜索语法从position更改为--query标志,以与多目录功能兼容。
mcpi info <server-id>
显示有关服务器的详细信息,包括注册表信息和本地安装状态。
选项:
--catalog TEXT:在特定目录中查找服务器
mcpi info filesystem
mcpi info brave-search
mcpi info my-server --catalog local
交互界面
mcpi fzf
启动用于管理MCP服务器的交互式模糊查找器界面。
特征:
- 使用模糊搜索浏览注册表中的所有服务器
- 顶部显示已安装的服务器(绿色=已启用,黄色=已禁用)
- 不退出的交互式操作(添加、删除、启用、禁用)
- 预览窗格显示服务器详细信息
- 操作后刷新列表以显示更新的状态
键盘快捷键:
ctrl-a:将服务器添加到配置中ctrl-r:从配置中删除服务器ctrl-e:启用服务器ctrl-d:禁用服务器ctrl-i/enter:显示详细信息esc/ctrl-c:退出
要求:
- 需要
fzf待安装(brew install fzf在macOS上,apt install fzf在Ubuntu上)
例子:
# Launch interactive interface
mcpi fzf
服务器管理命令
mcpi list [OPTIONS]
列出已安装的MCP服务器。
选项:
--client TEXT:按客户端筛选(如果未指定,则使用默认值)--scope TEXT:按作用域筛选(可用作用域取决于客户端)--state TEXT:按状态筛选(启用、禁用、未安装)--verbose, -v:显示详细信息
示例:
# List all installed servers
mcpi list
# List servers in a specific scope
mcpi list --scope user-global
# List servers for a specific client
mcpi list --client claude-code
# List only enabled servers
mcpi list --state enabled
# Show detailed information
mcpi list --verbose
mcpi add <server-id> [OPTIONS]
从注册表中添加MCP服务器。
选项:
--client TEXT:目标客户端(如果未指定,则使用默认值)--scope TEXT:目标范围(如果未指定,则进行交互式选择)--catalog TEXT:源目录(官方或地方)--template TEXT:使用配置模板进行引导设置--list-templates:显示此服务器的可用模板--dry-run:显示在不进行更改的情况下会做什么
示例:
# Add a server (interactive scope selection)
mcpi add filesystem
# List available templates for a server
mcpi add postgres --list-templates
# Add server using a template (interactive prompts)
mcpi add postgres --template local-development
# Add to a specific scope
mcpi add filesystem --scope project-mcp
# Add from local catalog
mcpi add myserver --catalog local --scope user-global
# Preview without making changes
mcpi add filesystem --dry-run
mcpi remove <server-id> [OPTIONS]
卸下MCP服务器。
选项:
--client TEXT:目标客户端(如果未指定,则使用默认值)--scope TEXT:源范围(如果未指定,则自动检测)--dry-run:显示在不进行更改的情况下会做什么
示例:
# Remove a server (prompts for confirmation)
mcpi remove filesystem
# Remove from a specific scope
mcpi remove filesystem --scope project-mcp
mcpi enable <server-id> [OPTIONS]
启用已禁用的MCP服务器。
选项:
--client TEXT:目标客户端(如果未指定,则使用默认值)--dry-run:显示在不进行更改的情况下会做什么
示例:
mcpi enable filesystem
mcpi disable <server-id> [OPTIONS]
禁用已启用的MCP服务器。
选项:
--client TEXT:目标客户端(如果未指定,则使用默认值)--dry-run:显示在不进行更改的情况下会做什么
示例:
mcpi disable filesystem
mcpi rescope <server-name> --to <scope> [OPTIONS]
将MCP服务器配置整合到特定范围,自动将其从所有其他范围中删除。
选项:
--to TEXT:目标范围(必填)--client TEXT:要使用的MCP客户端(如果未指定,则自动检测)--dry-run:显示不进行更改会发生什么
示例:
# Consolidate server to user-global scope (removes from all other scopes)
mcpi rescope filesystem --to user-global
# Preview the operation
mcpi rescope filesystem --to user-global --dry-run
# Specify a client explicitly
mcpi rescope filesystem --to user-global --client claude-code
它是如何工作的:
- 自动检测服务器当前配置的所有作用域
- 将服务器添加到目标作用域(如果已有配置,则保留现有配置)
- 从所有其他作用域中删除服务器
- 操作是原子性的:首先添加到目标,然后从源中删除(防止数据丢失)
笔记:
- 幂等:可以安全地多次运行-无论当前状态如何,都可以整合到目标范围
- 自动检测:无需指定源范围-自动查找所有范围
- 安全:如果服务器已经在目标作用域中,则保留目标配置并清理其他作用域
- 多范围清理:如果服务器分散在多个作用域中,则合并到单个目标作用域
mcpi info [server-id] [OPTIONS]
显示有关服务器或系统状态的详细信息。
选项:
--client TEXT:目标客户端(如果未指定,则使用默认值)--catalog TEXT:在特定目录中查找服务器
示例:
# Show system status
mcpi info
# Show server information
mcpi info filesystem
# Show server from local catalog
mcpi info myserver --catalog local
范围管理命令
mcpi scope list [OPTIONS]
列出可用的配置范围。
选项:
--client TEXT:按客户端筛选(如果未指定,则使用默认值)
示例:
# List scopes for default client
mcpi scope list
# List scopes for a specific client
mcpi scope list --client claude-code
客户端管理命令
mcpi client list
列出可用的MCP客户端。
mcpi client list
mcpi client info [client-name]
显示有关客户的详细信息。
# Show default client info
mcpi client info
# Show specific client info
mcpi client info claude-code
mcpi client set-default <client-name>
设置MCPI操作的默认客户端。
mcpi client set-default claude-code
系统命令
mcpi status
显示系统状态和摘要信息。
mcpi status
mcpi completion --shell <shell>
为mcpi生成shell完成脚本。
选项卡完成为以下内容提供了智能建议:
- 命令名称(列表、添加、删除等)
- 选项标志(--client、--scope、--help)
- 客户端名称(基于检测到的MCP客户端)
- 作用域名称(按所选客户端筛选)
- 服务器ID(来自注册表)
选项:
--shell TEXT:外壳类型(bash、zsh、fish)-如果未指定,则自动检测
示例:
# Auto-detect shell and show instructions
mcpi completion
# Generate bash completion
mcpi completion --shell bash
# Generate zsh completion
mcpi completion --shell zsh
# Generate fish completion
mcpi completion --shell fish
安装:
对于 bash,添加到 ~/.bashrc:
eval "$(_MCPI_COMPLETE=bash_source mcpi)"
对于 Z shell,添加到 ~/.zshrc:
eval "$(_MCPI_COMPLETE=zsh_source mcpi)"
对于 鱼,添加到 ~/.config/fish/config.fish:
eval (env _MCPI_COMPLETE=fish_source mcpi)
MCP服务器注册表
注册表包含有关可用MCP服务器的信息,包括:
- 基本信息:名称、描述、存储库
- 安装细节:运行服务器所需的命令和参数
- 分类:易于发现的分类(填充时)
注册表格式
注册表存储在 data/registry.json 具有以下结构:
{
"server-id": {
"description": "Brief description of server functionality",
"command": "npx",
"args": ["-y", "@package/mcp-server"],
"repository": "https://github.com/org/repo",
"categories": ["category1", "category2"]
}
}
将服务器添加到注册表
要将新的MCP服务器添加到注册表中,请执行以下操作:
- 编辑
data/registry.json - 添加包含服务器详细信息的新条目
- 确保命令和参数正确
- 可选择添加分类类别
- 提交拉取请求
支持的MCP服务器
核心服务器(Anthropic)
- 文件系统:本地文件系统操作
- SQLite:SQLite数据库操作
- 勇敢的搜寻:通过Brave search API进行网络搜索
- 获取:发出HTTP请求并获取web内容
- GitHub:与GitHub存储库、问题和拉取请求交互
社区服务器
注册表包含其他社区贡献的服务器。使用 mcpi search 查找可用服务器。
与Claude Code的集成
mcpi提供了与Claude Code的无缝集成:
自动检测:mcpi会自动检测Claude Code安装并适当配置MCP服务器。
多个配置范围:Claude Code支持6种不同的配置范围,从项目级到用户级。
配置管理:通过适当的验证直接更新Claude Code的配置文件。
Claude代码集成示例:
# Add filesystem server to project scope
mcpi add filesystem --scope project-mcp
# This updates .mcp.json in your project:
# {
# "mcpServers": {
# "filesystem": {
# "command": "npx",
# "args": ["-y", "@anthropic/mcp-server-filesystem"]
# }
# }
# }
发展
项目结构
mcpi/
├── src/mcpi/ # Source code
│ ├── cli.py # CLI interface
│ ├── clients/ # Client plugins
│ │ ├── base.py # Base protocols and types
│ │ ├── manager.py # MCPManager orchestration
│ │ ├── claude_code.py # Claude Code plugin
│ │ └── file_based.py # File-based scope implementations
│ ├── registry/ # Server registry
│ │ ├── catalog.py # Server catalog and models
│ │ └── catalog_manager.py # Multi-catalog management
│ └── templates/ # Configuration templates
│ ├── models.py # Template data models
│ ├── template_manager.py # Template loading
│ └── prompt_handler.py # Interactive prompts
├── data/ # Registry data
│ ├── catalog.json # Server definitions
│ └── templates/ # Template YAML files
│ ├── postgres/
│ ├── github/
│ ├── filesystem/
│ ├── slack/
│ └── brave-search/
└── tests/ # Test suite
开发设置
git clone https://github.com/user/mcpi
cd mcpi
uv sync --dev
source .venv/bin/activate
运行测试
# Run all tests
pytest
# Run with coverage
pytest --cov=src/mcpi
# Run specific test file
pytest tests/test_registry_categories.py
# Validate registry data
pytest tests/test_registry_integration.py -v
代码质量
# Format code
black src/ tests/
# Lint code
ruff check src/ tests/ --fix
# Type checking
mypy src/
贡献
为注册表做出贡献
要将新的MCP服务器添加到注册表中,请执行以下操作:
- 复刻仓库
- 将服务器详细信息添加到
data/registry.json - 测试服务器条目:
mcpi info <your-server-id> - 提交拉取请求
服务器条目格式
{
"your-server-id": {
"description": "Brief description of functionality",
"command": "npx",
"args": ["-y", "@package/your-mcp-server"],
"repository": "https://github.com/user/repo",
"categories": ["category1", "category2"]
}
}
贡献模板
要添加配置模板,请执行以下操作:
- 在中创建一个YAML文件
data/templates/<server-id>/<template-name>.yaml - 遵循模板结构(参见
docs/TEMPLATE_AUTHORING_GUIDE.md) - 测试模板:
mcpi add <server-id> --template <template-name> - 提交拉取请求
看 docs/TEMPLATE_AUTHORING_GUIDE.md 了解详细的模板编写指南。
开发指南
- 遵循PEP 8风格指南
- 为所有函数添加类型提示
- 为新功能编写测试
- 更新新功能的文档
- 使用语义版本控制
Python API
MCPI可以用作编程MCP服务器管理的Python库。
基本用法
from mcpi.registry.catalog_manager import create_default_catalog_manager
from mcpi.clients.manager import create_default_manager
# Create catalog manager to browse available servers
catalog_manager = create_default_catalog_manager()
official_catalog = catalog_manager.get_catalog("official")
official_catalog.load_registry()
# Search for servers
results = official_catalog.search_servers("filesystem")
for server_id, server in results:
print(f"{server_id}: {server.description}")
# Create manager for server operations
manager = create_default_manager()
# List installed servers
servers = manager.list_servers()
for server_id, info in servers.items():
print(f"{server_id}: {info.state}")
# Add a server
result = manager.add_server(
"filesystem",
config={"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem"]},
scope="user-global"
)
print(result.message)
工厂功能(推荐)
对于生产使用,使用处理默认初始化的工厂函数:
from mcpi.registry.catalog_manager import (
create_default_catalog_manager,
create_test_catalog_manager
)
from mcpi.clients.manager import create_default_manager, create_test_manager
# Production: Use defaults
catalog_manager = create_default_catalog_manager() # Uses data/catalog.json
manager = create_default_manager() # Auto-detects clients
# Testing: Inject dependencies
from pathlib import Path
test_catalog_manager = create_test_catalog_manager(
official_path=Path("/tmp/official.json"),
local_path=Path("/tmp/local.json")
)
test_manager = create_test_manager(mock_registry)
重大更改(v2.0)
重要:MCPI v2.0引入了依赖注入,以提高可测试性:
# OLD API (no longer works):
from mcpi.registry.catalog import ServerCatalog
from mcpi.clients.manager import MCPManager
catalog = ServerCatalog() # TypeError: missing required argument 'registry_path'
manager = MCPManager() # TypeError: missing required argument 'registry'
# NEW API (use factory functions):
from mcpi.registry.catalog import create_default_catalog
from mcpi.clients.manager import create_default_manager
catalog = create_default_catalog() # Provides default path
manager = create_default_manager() # Creates default registry
# NEW API (explicit injection for advanced use):
from mcpi.registry.catalog import ServerCatalog
from mcpi.clients.manager import MCPManager
from mcpi.clients.registry import ClientRegistry
from pathlib import Path
catalog = ServerCatalog(registry_path=Path("custom/registry.json"))
manager = MCPManager(registry=ClientRegistry())
迁移指南:
- 替换
ServerCatalog()随着create_default_catalog() - 替换
MCPManager()随着create_default_manager() - 为了进行测试,请使用
create_test_catalog(path)和create_test_manager(registry) - 对于高级使用,显式传递必需的参数
为什么会有这种变化? 依赖反转原理(DIP)实现了:
- 真正的单元测试,无需文件系统访问
- 组件隔离和模块化
- 在测试中更容易模仿
- 更好地遵守SOLID原则
重大变化(v0.4.0)
搜索命令语法:从位置更改为--查询标志:
# OLD (v0.3.0)
mcpi search filesystem
# NEW (v0.4.0)
mcpi search --query filesystem
# or
mcpi search -q filesystem
所有其他命令保持不变。
故障排除
常见问题
添加后服务器未显示:
# Check if server was added successfully
mcpi list --verbose
# Check specific scope
mcpi list --scope project-mcp
找不到默认客户端:
# List available clients
mcpi client list
# Set default client manually
mcpi client set-default claude-code
未找到作用域:
# List available scopes
mcpi scope list
# Check scope existence in current directory
mcpi scope list --client claude-code
选项卡完成不起作用:
# Re-run the completion setup
mcpi completion --shell bash
# Make sure to source your shell config
source ~/.bashrc # or ~/.zshrc for zsh
导入开发中的错误(macOS iCloud Drive):
如果在iCloud Drive中开发,您可能会遇到间歇性 ModuleNotFoundError: No module named 'mcpi' 由于iCloud设置了隐藏标志 .pth 文件夹。
解决方案1:使用.venv.nosync(建议用于开发)
cd ~/path/to/mcpi
# Remove existing venv
rm -rf .venv
# Create .venv.nosync (excluded from iCloud sync)
python -m venv .venv.nosync
ln -s .venv.nosync .venv
# Install in editable mode
source .venv/bin/activate
pip install -e .
这 .nosync 后缀告诉iCloud将目录从同步中排除,防止隐藏的标志问题。
解决方案2:使用UV工具安装(建议用于CLI)
# Install as UV tool (stored in ~/.local/, not in iCloud)
uv tool install --editable ~/path/to/mcpi
# Use from anywhere without venv activation
mcpi --help
# For testing
cd ~/path/to/mcpi
pytest # Uses pythonpath from pyproject.toml
紧急修复(临时):
# Remove hidden flags manually
./scripts/fix-pth-flags.sh
# Or manually:
cd ~/path/to/mcpi
chflags nohidden .venv/lib/python3.*/site-packages/*.pth
看 .agent_planning/ICLOUD-COMPATIBLE-FIX-2025-10-30.md 了解技术细节。
获取帮助
- GitHub问题: 报告错误和请求功能
- 文档:有关开发文档,请参阅存储库中的CLAUDE.md
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
致谢
备注:此工具管理MCP服务器配置。它不安装底层的npm/pip包——当MCP客户端(如Claude Code)首次使用服务器时,这些包会自动安装。