Skip to main content

MCP Manager

Python MCP 管理与代理网关,提供独立 Web 管理台、Token 授权、缓存工具目录及按会话复用的懒加载运行时。系统独立保存配置,不修改 Codex 的 config.toml。

安装与启动

需要 uv。从本地构建好的 wheel 安装(Windows / Linux):

uv tool install ./dist/mcp_manager_gateway-0.1.3-py3-none-any.whl
mcp-manager

安装后提供三个等价命令:mmgmcp-managermcp-manager-gateway,均支持本文的全部子命令和参数。mcp-manager 默认启动 Web 服务,也可执行 mcp-manager serve。使用 -h / --help 查看帮助,-v / --version 查看安装版本。无需进入源码目录。包发布到 PyPI 后,可使用 uv tool install mcp-manager-gateway;本仓库的构建操作不会自动发布到 PyPI。

打开 http://127.0.0.1:8765 。首次注册账户为管理员,密码至少 10 个字符。

首次启动自动建立用户目录、.env、SQLite 数据库和密钥,并执行数据库迁移:

  • Windows:C:\Users\用户名\.mcp-manager
  • Linux:~/.mcp-manager

工具目录集中保存在 cache/catalog.jsonl,后台任务状态集中保存在 jobs/jobs.jsonl。缓存文件缺失时,启动后会在后台为已启用服务重建目录,按需服务发现完成即释放实例;仍会禁用发现失败的服务。更新采用追加写入,自动合并重复快照;缓存按服务和授权用户保存最新版本,不再按版本创建文件。启动时会迁移可读取的旧 .json 快照,持久化成功后删除旧文件;无法读取的文件会保留并记录迁移错误。日志仍按日期保存为 JSONL,系统数据库、日志 SQLite 索引与 .env 保持各自格式。

环境变量优先于用户目录内的 .env;源码目录和当前工作目录的 .env 不会被自动读取。可设置 MCP_MANAGER_HOME,或执行 mcp-manager --home /自定义目录 serve 指定另一份配置与数据。

修改用户目录下的 .env 后重启服务。更换端口可修改 PORT;使用 OAuth 时还需同步 PUBLIC_URL 中的回调地址。也可执行:

mcp-manager serve --port 8766

控制台按浏览器实际访问地址识别同源请求,可使用 localhost、内网 IP 或域名登录,无需把每个地址加入白名单。PUBLIC_URL 用于 OAuth 回调,也作为反向代理场景的额外可信来源。远程访问设置 HOST=0.0.0.0,例如通过 http://192.168.2.111:8765 打开控制台。HTTPS 反向代理场景设置 PUBLIC_URL=https://你的域名、COOKIE_SECURE=true。配置示例见 .env.example

使用顺序

  1. 管理员添加 MCP。支持 stdio、Streamable HTTP、旧 SSE、REST 转 MCP;http 是 Streamable HTTP 的导入别名。
  2. 添加或修改启用中的 MCP 后自动发现工具;连接启动时再次更新缓存。lazy 的维护发现完成后释放实例。非 OAuth 服务的启动、连接或发现失败会自动将运行策略设为 disabled,移除可用工具目录并保留失败原因。OAuth 未授权、过期或发现失败只清除当前用户的目录和实例,保留服务运行策略,不影响其他用户。配置仍会保存,便于修复;修复后管理员可点击启动、刷新自动禁用的服务,或重新设置 lazy/eager,读取最新工具成功才恢复可用目录。自动禁用后的重试恢复此前策略;旧记录未保存此前策略时默认 lazy。手动禁用的服务仅在显式启动或设置启用策略后恢复,刷新不会自行启用。已禁用的 OAuth 服务仍可完成授权,但授权不会自动启用服务。REST 刷新会先探测 HTTP 连接,不能仅凭本地定义生成可用缓存。
  3. 给普通用户分配可用 MCP;用户只能在自己的授权范围创建 Token。
  4. 在访问令牌页面创建凭据并配置客户端。令牌值加密保存,可在列表复制或编辑时查看。旧版本仅保存哈希的令牌无法还原,轮换一次后即可回显和复制。普通用户只管理自己的令牌;管理员默认查看自己的令牌,可切换全部用户并按用户名筛选。
  5. 实际调用才启动按需服务。查询工具目录不会启动下游进程。

REST 默认向工具地址发送 HEAD 请求检查连接,HTTP 405 表示该路由不支持 HEAD,视为连通;连接失败、鉴权失败、404 或服务器错误会使发现失败。可在表单中填写健康检查 URL(配置字段 healthcheck_url),改用 GET 检查固定健康端点并要求 2xx;工具 URL 含参数时必须配置该地址。此检查不执行 POST、PUT、DELETE 等业务工具,也不代替具体工具的功能测试。

管理员可新建、修改、复制、搜索、筛选、分页和批量处理 MCP;支持通用 JSON、Codex TOML、Claude 和 DSH Cordis/registry 导入、诊断、去重、导入冲突策略、脱敏导出、缓存刷新和真实工具测试。批量工具测试运行保存的显式参数用例;先检查参数再执行可能产生写入的工具。

服务标识 slug 是稳定的工具路由名称,创建后不修改;需要新的标识时创建副本。原生工具名通常为 slug__tool,过长或含特殊字符时会生成稳定的短名称。输入 Schema、结构化结果、文本、图像、音频及资源/提示词都通过 MCP 协议返回。

HTTP 接入

统一端点:POST/GET/DELETE /mcp,使用 MCP Streamable HTTP 客户端。

Authorization: Bearer mcpm_你的Token

原生工具目录直接列出该 Token 有权使用的全部缓存工具。按需发现提供两个索引工具和一个执行工具:

工具 用途
gateway_search_mcps(query) 搜索服务名称、描述、标签和工具名;空或 * 列出全部授权 MCP 摘要。每项含仅由原始工具名字符串组成的 tools_list,不包含工具定义
gateway_search_tools(mcp, tool) 搜索工具并返回完整原始 inputSchema、描述、归属、精确 gateway_name、示例或参数模板
gateway_call(name, arguments) 按精确 gateway_name 调用,arguments 必须符合发现结果中的原始 Schema

mcp 推荐使用返回的服务 ID,也支持名称和 slug。指定 mcp、tool 留空会列出该服务全部工具;mcp 留空或为 * 时跨服务搜索;两个参数都留空或为 * 时列举全部授权 MCP 和工具。超过页大小时跟随 next_cursor,保持查询不变。每页条目还有 1 MiB 的累计 JSON 字节预算,完整 Schema 不拆分;单个条目超过此预算时返回 catalog_entry_too_large。错误参数会返回字段路径和修正提示,实际执行不会通过模糊匹配选择工具。

管理员可在「系统设置 → 工具检索」配置 OpenAI 兼容 embedding 接口、模型、密钥、超时与最低相似度,并测试已保存的连接。例如接口 https://api.siliconflow.cn、模型 BAAI/bge-m3;也可接本地模型。裸地址自动补全 /v1/embeddings,支持 /v1 或完整 embeddings 地址。

精确名称优先,其他查询融合字段关键词、拼写模糊匹配和真实向量相似度。向量默认关闭;启用后模型故障会明确回退关键词模式。最低相似度默认 0.5;已有管理员自定义值保持不变,并应结合所选模型和实际查询评估。单次超过 1,000 个候选时语义阶段返回 input_too_large 并回退关键词,完整目录分页仍可用。文档向量和查询向量均缓存,并按接口、模型、授权身份和内容隔离,使同一查询的分页评分保持稳定;仅向模型发送描述性元数据与检索语句,不发送连接凭据或实际调用参数。重排序模型使用独立的 rerank 协议,不能填入 embedding 模型栏。

关闭 Token 鉴权只影响 MCP 调用,Web 管理仍需登录。匿名范围由管理员单独设置,默认不公开任何服务。请求提供了无效 Token 时,不会退回匿名权限。

系统设置中的跨域来源默认 *,作用于 /mcp/gateway/v1,支持浏览器 Bearer 请求和预检;可改为指定来源列表,保存后立即生效。管理 API 的 Cookie、CSRF 与同源检查保持独立。

匿名客户端如果显式创建 /gateway/v1/leases 租约,需要保存响应中的 client_secret,并在后续调用、心跳、释放时携带 X-MCP-Manager-Client。stdio 桥接会自动处理。

本地 stdio 接入

网关服务必须已经运行。桥接进程只连接网关,全部下游 MCP 仍由同一个网关运行时管理。

以下三个命令完全等价,客户端 JSON 的 command 也可任选其中一个:

mmg stdio --url http://127.0.0.1:8765
mcp-manager stdio --url http://127.0.0.1:8765
mcp-manager-gateway stdio --url http://127.0.0.1:8765

Windows PowerShell:

$env:MCP_MANAGER_TOKEN = "mcpm_你的Token"
mcp-manager stdio --url http://127.0.0.1:8765

Linux:

MCP_MANAGER_TOKEN=mcpm_你的Token mcp-manager stdio --url http://127.0.0.1:8765

也支持 --token 参数;URL 可通过 MCP_MANAGER_URL 设置。客户端的通用 JSON 配置:

{
  "mcpServers": {
    "mcp-manager": {
      "command": "mcp-manager",
      "args": ["stdio", "--url", "http://127.0.0.1:8765"],
      "env": {"MCP_MANAGER_TOKEN": "mcpm_你的Token"}
    }
  }
}

个人中心提供可复制的 HTTP、stdio、Codex 及通用客户端配置示例。

生命周期

  • lazy:首次工具调用启动;同一共享范围的并发调用只创建一个实例。
  • eager:服务共享实例在启动时预热;已有授权的个人 OAuth 按用户预热。其他用户/会话隔离实例需要对应身份首次接入后建立。会话隔离实例在最后引用释放后关闭。
  • disabled:不进入可用工具目录,也不接受业务调用。
  • 手动停止会设置临时停止状态,直到显式启动或保存新的启用策略。
  • 公共服务共享实例;个人 OAuth 按用户隔离;其他有状态服务可选服务、用户、会话隔离。
  • stdio 桥接有独立租约,每 30 秒心跳、90 秒失联到期,正常退出主动释放。心跳异常或连接失效后,在下一次新请求前重建连接,已经派发的业务调用不会重放。
  • 支持 MCP 会话的 HTTP 客户端可用 DELETE 释放;未报告退出的通用 HTTP 客户端采用保留租约。
  • 只有所有引用释放后,按需实例才停止。默认 24 小时没有业务调用也会回收;心跳和目录刷新不算业务调用。活动调用不会被空闲回收杀死。系统设置中的空闲回收时间设为 0 时,关闭业务空闲超时回收;主动断开和桥接失联租约仍正常释放。
  • 单实例并发、排队、启动、调用与停止超时可配置;停止和配置换代会阻止继续派发排队请求。
  • 发送后失去结果标记为 outcome_unknown,不自动重放调用。

Windows 使用 MCP SDK 的 Job Object 清理子进程树;Linux 使用独立进程组。Linux 作为长期服务运行时,建议使用附带的 systemd 单元(KillMode=control-group)或 Docker init,以在网关异常终止时一起回收进程。

OAuth

在 MCP 认证配置中选择 oauth,填写 authorization_url、token_url、client_id、client_secret(可选)和 scopes。scopes 是 OAuth 权限列表(例如 mcp:read);网关的 scope 固定为 user,每位用户独立授权。支持授权码、PKCE、一次性 state、Token 刷新及 client_secret_post/client_secret_basic。

回调地址为 PUBLIC_URL/api/v1/oauth/callback。用户在个人中心或 MCP 服务授权入口完成自己的授权;访问令牌调用时使用令牌所属用户的 OAuth 凭据。凭据、能力目录和运行实例按用户隔离。旧配置中省略 scope 或设置 service 的 OAuth 也按用户隔离运行,旧共享凭据不会复用,各用户需重新授权。断开或授权失效仅影响本人。

调用日志默认对管理员展示全部用户,可按用户名或用户 ID 搜索筛选;普通用户的列表、详情和导出始终限于本人。

数据和迁移

默认配置:

DATABASE_URL=sqlite://mcp-manager.sqlite
# 或
DATABASE_URL=mysql://user:password@host:3306/dbname?charset=utf8mb4

MySQL 数据库需要提前创建;系统自动执行表结构升级。SQLite 相对路径以 DATA_DIR 为基准,DATA_DIR 默认是用户配置目录,也支持 Windows/Linux 绝对路径。URL 中密码的特殊字符需要 URL 编码。

目录(可由 MCP_MANAGER_HOME / DATA_DIR 覆盖):

路径 用途
~/.mcp-manager/.env 用户配置
~/.mcp-manager/mcp-manager.sqlite 默认系统数据库
~/.mcp-manager/secret.key JWT 与配置加密的根密钥
~/.mcp-manager/cache/ 按配置版本、身份隔离的能力缓存
~/.mcp-manager/indexes/embeddings.jsonl 模型、授权作用域与文档内容隔离的向量缓存
~/.mcp-manager/jobs/ 可恢复查看的任务状态,不自动重放中断任务
~/.mcp-manager/logs/YYYY-MM-DD.jsonl 调用日志原文
~/.mcp-manager/logs/audit/ 管理审计
~/.mcp-manager/logs/deletions/ 防止删除记录恢复的删除日志
~/.mcp-manager/indexes/logs.sqlite 可重建的日志查询与统计索引

日志保留天数默认为 0(无限保留)。设为 7 时,后台自动清理超过 7 天的调用日志原文和查询索引;保存设置后在下一轮维护中检查(通常 5 秒内),之后每小时检查。审计日志独立保留。

个人资料的登录会话显示登录 IP 和设备 UA,支持撤销或彻底删除其他登录会话;旧会话未采集的信息显示为未知。

系统设置的关于页面提供安装版本、项目主页发布地址Issue 反馈作者主页

备份时保留用户目录内的 .env、整个 DATA_DIR 及系统数据库;SECRET_KEY 或 secret.key 必须保留,否则原凭据无法解密。

旧版源码目录数据可以离线复制到一个空用户目录(原目录保留):

mcp-manager --home ~/.mcp-manager migrate-home --from-data /旧项目/data

旧版本有 .env 时同时传入 --from-env /旧项目/.env。命令保留有效密钥,检查 SQLite 完整性;源实例运行中、目标非空或配置文件不存在时拒绝迁移。也可以在完全停止网关后,将整个旧 data 目录直接剪切为新的用户目录,必须保留 secret.key 与日志等配套文件。

停止网关后迁移到一个空目标数据库:

mcp-manager migrate-db --target-database-url "mysql://user:password@host:3306/newdb?charset=utf8mb4"

也支持 MySQL → SQLite。迁移保留用户、Token、授权、系统设置、配置和 OAuth 密文;日志与能力缓存继续使用原 DATA_DIR。完成后修改 DATABASE_URL 再启动。目标有业务数据时拒绝覆盖。

仅升级表结构:mcp-manager upgrade。 停止网关后离线重建日志索引:mcp-manager rebuild-logs;运行中可在日志管理执行重建任务。

Docker / Linux 服务

docker compose up --build -d

Compose 使用单个网关进程,数据持久化到命名卷 mcp-manager-data,容器内用户目录为 /data。需要宿主机目录时,将挂载项替换为 /你的持久化目录:/data。生产镜像安装构建出的 wheel,不依赖源码 checkout。容器内配置的 stdio 命令必须安装在容器中;Node 等额外运行时需要在派生镜像中安装。访问其他容器的服务应使用其容器网络地址。

构建环境无法访问 PyPI 时,可通过 docker build --build-arg UV_DEFAULT_INDEX=https://你的镜像/simple --target production -t mcp-manager . 指定 Python 包索引;默认仍使用 PyPI。

原生 Linux 服务运行时,网关自身会管理 Windows/Linux 子进程清理(Job Object / 进程组)。每个部署只运行一个网关实例,不使用多 worker 或多副本共享进程调度。

开发

后端为 src/mcp_manager 下的独立模块;包内 static/ 为原生 JS ES 模块,通过 /api/v1 与后端通信。迁移脚本在包内 migrations/,测试在 tests/,生成的截图和验收产物在 artifacts/。前端可单独部署,由同源反向代理转发 /api、/gateway 和 /mcp。

uv sync --frozen --group dev
uv run mcp-manager serve
uv run pytest tests -q
node --test tests/frontend/core.test.mjs
uv build

浏览器测试需要本机 Chrome 或 Playwright Chromium。MySQL 专项测试通过 MCP_TEST_MYSQL_URL 指向专用的空测试数据库。API 文档在 /docs。

传输插件使用 Python entry point 组 mcp_manager.transports;实现 validate(config) 和异步上下文 connect(spec),连接对象提供 discover()、call(name, arguments),可选 read_resource/get_prompt。网关统一处理授权、租约、并发、日志和关闭。插件接口说明见 docs/plugins.md。

本版的部署边界是单节点、单运行时。自定义下游进程可以执行操作系统命令,MCP 配置权限属于管理员;为不同信任域配置不同运行账户或隔离容器。

Release files for mcp-manager-gateway 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-manager-gateway 0.1.5
File Size Uploaded
mcp_manager_gateway-0.1.5.tar.gz 290.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-manager-gateway 0.1.5
File Interpreter ABI Platform
mcp_manager_gateway-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 435.7 kB

Release files / mcp_manager_gateway-0.1.5.tar.gz

Download URL mcp_manager_gateway-0.1.5.tar.gz
Size 290.7 kB
Tags Source
SHA-256 checksum
How to use checksums
88a4317abb19d5124965670c8b4a75a81fe45e6edf4da9a2ee5a29d633743904
BLAKE2b-256 checksum
How to use checksums
58042c55aae59650164d823202f561bdef306598a6818815e685f8bf10f238a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / mcp_manager_gateway-0.1.5-py3-none-any.whl

Download URL mcp_manager_gateway-0.1.5-py3-none-any.whl
Size 145.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1b71eea0636532f31420037771f685c51cd247f1e952660864d3bc1b1c0439c
BLAKE2b-256 checksum
How to use checksums
5d5e8d488bf23d5e7b0b66f8783b352bfabfa21950c799d13c305fde4d27795d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

1.0.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

This release

0.1.5 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page