用途
MCP Plexus 是一个面向现代 AI 应用的安全、多租户 MCP 服务器框架。它基于 Python 构建,底层采用 jlowin/fastmcp(FastMCP 2.7)库,用于帮助开发者部署多租户 MCP 服务器,使其能够通过 OAuth 2.1 与外部服务集成,并管理工具的 API 密钥访问。
MCP Plexus 扩展了 FastMCP 2.7 的能力,提供结构化环境来创建复杂、多租户的 AI 后端系统。它允许定义相互隔离的环境(租户),每个租户可向大语言模型(LLM)和 AI 智能体暴露定制化的工具、资源和提示词集合。
主要能力
- 健壮的多租户支持:在单次部署中托管多个客户或组织,每个租户拥有独立的数据和工具访问权限。租户通过 URL 路径识别(如
/{entity_id}/mcp/),并支持租户级 MCP 会话管理(当前默认使用 Redis)。租户级工具可见性和提供方配置为规划中功能。 - 简化的外部服务集成:通过内置流程管理,安全地将 MCP 工具连接到受 OAuth 2.1 保护的外部服务(如 GitHub、Google API 等)。
- 用户级持久访问:宿主应用可通过安全端点(
/{entity_id}/plexus-auth/register-user)向 Plexus 注册其用户,获取plexus_user_auth_token,将宿主应用用户与 Plexus 内的持久身份关联,从而持久存储外部 OAuth 令牌和 API 密钥,减少重复认证。 - 工具 API 密钥管理:通过
@requires_api_key(provider_name, key_name_display, instructions)装饰器,在密钥未存储时通过结构化 MCP 错误提示用户提交 API 密钥;密钥使用PLEXUS_ENCRYPTION_KEY加密存储,并在运行时解密注入工具函数。用户可通过端点/{entity_id}/plexus-services/api-keys提交密钥。 - 标准 MCP 服务器能力:完整支持使用 FastMCP 的 Pythonic 装饰器和类定义 MCP 工具、资源和提示词(如
PLEXUS_SERVER_INSTANCE.tool());原生 Streamable HTTP 传输;在工具/资源/提示词中可访问PlexusContext(扩展自fastmcp.Context),用于日志、会话数据以及访问已认证客户端或 API 密钥。 - 可配置存储:默认使用 SQLite 持久存储 Plexus 用户认证令牌、用户级外部 OAuth 令牌、API 密钥、外部 OAuth 提供方配置、租户配置和用户提交的 API 密钥。MCP 会话管理当前需要 Redis(计划增强 SQLite 会话存储)。
- (进行中)内部 OAuth 2.1 提供方:包含使 MCP Plexus 自身作为 OAuth 2.1 授权服务器的基础元素和桩端点;完整实现(动态客户端注册、内部客户端用户同意、完整令牌管理)为未来目标。
使用方式
环境要求
- Redis(当前 MCP 会话管理必需)
- 命令行/终端访问权限
安装与设置
- 克隆仓库:
git clone https://github.com/Super-I-Tech/mcp_plexus mcp-plexus cd mcp-plexus - 创建并激活虚拟环境:
Windows:python -m venv venv.\venv\Scripts\activatemacOS/Linux:source venv/bin/activate - 安装依赖:
pip install -r requirements.txt - 配置环境变量(
.env文件):在项目根目录创建mcp-plexus/.env,可参考.env.example。关键变量包括:HOST_APP_REGISTRATION_SECRET:关键项。宿主应用注册用户时必须提供的强唯一密钥(通过X-Host-App-Secret头)。生产或共享部署中务必更改默认值。PLEXUS_ENCRYPTION_KEY:关键项。用于加密 API 密钥和外部 OAuth 令牌等敏感数据的 Fernet 密钥。生成方式:
将输出放入python -c "from mcp_plexus.utils import generate_fernet_key; print(generate_fernet_key())".env,妥善保管并备份;丢失将无法访问加密数据。STORAGE_BACKEND:设为"sqlite"(默认)或"redis",用于大多数持久存储。注意:MCP 会话管理当前必须使用 Redis,无论此设置如何。SQLITE_DB_PATH:SQLite 数据库文件路径(如./mcp_plexus_data.sqlite3)。REDIS_HOST、REDIS_PORT、REDIS_DB、REDIS_PASSWORD(可选)、REDIS_SSL(可选):Redis 连接信息(MCP 会话必需)。DEBUG_MODE:开发时设为True(更详细日志、Uvicorn 重载)。PLEXUS_FASTMCP_LOG_LEVEL:FastMCP 组件日志级别(如DEBUG、INFO)。ADMIN_API_KEY:访问管理端点(如管理租户、外部 OAuth 提供方)的密钥,需设置强值。
架构概览
MCP Plexus 作为 ASGI 应用(通常用 Uvicorn 运行),充当 MCP 客户端与底层 FastMCP 服务器实例之间的中间层。
- FastAPI:用于主 Web 应用路由、处理 HTTP 请求和提供管理 API 端点。
- FastMCP(jlowin/fastmcp):共享的 FastMCP 实例作为核心引擎,通过 Streamable HTTP 处理 MCP 协议消息(工具、资源、提示词)。
- Plexus 核心:
- 租户管理:从 URL 路径识别租户,确保租户配置被遵守(完整配置进行中,当前为数据库支持的验证)。
- 会话管理(
PlexusSessionManager):管理 MCP 会话数据(如Mcp-Session-Id),当前使用 Redis 存储会话状态,将会话与entity_id及可用的persistent_user_id关联。 - Plexus 用户认证:处理宿主应用用户注册,管理
plexus_user_auth_token以关联持久用户 ID。 - OAuth 流程编排:管理需要访问外部服务的工具的 OAuth 2.1 授权码流程,包括安全令牌存储和刷新(刷新进行中)。
- API 密钥服务:管理用户提供的工具 API 密钥的安全存储与检索。
PlexusContext:注入 MCP 工具的增强上下文对象,提供entity_id、persistent_user_id、会话数据以及获取已认证 HTTP 客户端或 API 密钥的辅助方法。
- 存储:
- Redis(会话必需):当前用于临时 MCP 会话数据。
- SQLite(持久数据默认):用于存储 Plexus 用户认证令牌、用户级外部 OAuth 令牌、API 密钥、外部 OAuth 提供方配置和租户元数据。
适用场景
- 需要为多个客户或组织提供隔离 AI 工具环境的 SaaS 平台。
- 需要将 LLM 或 AI 智能体安全连接到 GitHub、Google API 等 OAuth 保护服务的应用。
- 需要持久存储用户外部服务令牌、减少重复登录的宿主应用。
- 需要为工具安全管理和注入 API 密钥的 MCP 服务器部署。
限制
- MCP 会话管理当前必须使用 Redis,SQLite 会话存储为计划增强。
- 租户级工具可见性和提供方配置为规划中功能。
- 内部 OAuth 2.1 提供方为进行中状态,完整实现(动态客户端注册、用户同意、完整令牌管理)为未来目标。
- OAuth 令牌刷新为进行中状态。
- 其他未在资料中明确说明的功能、收费、价格、平台或效果暂未提供。