概述
工具列表
內容詳情
替代品
什麼是MCP Plexus?
MCP Plexus是一個基於FastMCP 2.7的Python框架,用於構建安全、可擴展的Model Context Protocol (MCP)應用。它允許開發者部署多租戶MCP服務器,將AI模型與外部服務無縫集成。如何使用MCP Plexus?
通過定義租戶、註冊用戶、創建工具和資源,MCP Plexus可以為不同的客戶或組織提供隔離的AI後端系統。用戶可以通過OAuth 2.1或API密鑰訪問外部服務。適用場景
適用於需要為不同客戶提供定製化AI後端的場景,例如企業級AI助手、多租戶SaaS平臺等。主要功能
如何使用
使用案例
常見問題
相關資源
安裝
🚀 MCP Plexus:面向現代人工智能的安全、多租戶MCP服務器框架
輕鬆構建強大、可擴展且安全的模型上下文協議(MCP)應用程序。MCP Plexus是一個基於強大的 jlowin/fastmcp(FastMCP 2.7)庫構建的Python框架,旨在賦能開發者部署多租戶MCP服務器,這些服務器可通過OAuth 2.1與外部服務無縫集成,並管理工具的API密鑰訪問。
🚀 快速開始
前提條件
- Python 3.10及以上版本
- Redis(目前MCP會話管理必需)
- 能夠訪問命令行或終端
安裝與設置
- 克隆倉庫:
git clone https://github.com/Super-I-Tech/mcp_plexus mcp-plexus
cd mcp-plexus
- 創建並激活虛擬環境:
python -m venv venv
在Windows系統上:
.\venv\Scripts\activate
在macOS/Linux系統上:
source venv/bin/activate
- 安裝依賴項:
pip install -r requirements.txt
- 配置環境變量(
.env文件): 在項目根目錄(mcp-plexus/.env)創建一個.env文件。如果提供了.env.example文件,可直接複製;也可以手動創建。
關鍵變量:
HOST_APP_REGISTRATION_SECRET:至關重要。這是一個強大且唯一的密鑰,主應用程序必須提供該密鑰才能將其用戶註冊到Plexus(通過X-Host-App-Secret請求頭)。在任何生產或共享部署中,請更改默認生成的值。PLEXUS_ENCRYPTION_KEY:至關重要。這是一個Fernet加密密鑰,用於加密存儲在數據庫中的敏感數據,如API密鑰和外部OAuth令牌。使用以下命令生成:
python -c "from mcp_plexus.utils import generate_fernet_key; print(generate_fernet_key())"
將輸出結果放入.env文件中。請妥善保管此密鑰並進行備份。丟失該密鑰意味著無法訪問加密數據。
STORAGE_BACKEND:設置為"sqlite"(默認)或"redis",用於大多數持久存儲(如Plexus用戶認證令牌、外部OAuth提供者配置等)。- 重要提示:目前MCP會話管理必須使用Redis,並且無論此設置如何,都使用
RedisPlexusSessionStore。未來更新可能支持使用SQLite進行會話存儲。
- 重要提示:目前MCP會話管理必須使用Redis,並且無論此設置如何,都使用
SQLITE_DB_PATH:SQLite數據庫文件的路徑(例如./mcp_plexus_data.sqlite3)。REDIS_HOST、REDIS_PORT、REDIS_DB、REDIS_PASSWORD(可選)、REDIS_SSL(可選):Redis實例的連接詳細信息(MCP會話必需;如果STORAGE_BACKEND=redis,其他數據也會使用)。DEBUG_MODE:設置為True以開啟開發模式(更詳細的日誌記錄,Uvicorn自動重載)。PLEXUS_FASTMCP_LOG_LEVEL:FastMCP組件的日誌記錄級別(例如DEBUG、INFO)。ADMIN_API_KEY:用於訪問管理端點的密鑰(例如管理租戶、外部OAuth提供者)。請設置一個強密鑰。
.env文件示例:
# Uvicorn開發服務器
DEV_SERVER_HOST=127.0.0.1
DEV_SERVER_PORT=8000
DEV_SERVER_LOG_LEVEL=info
DEV_SERVER_RELOAD=True
# 應用程序設置
APP_NAME=MCP Plexus Server
DEBUG_MODE=True
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0
# REDIS_PASSWORD=
# REDIS_SSL=False
PLEXUS_FASTMCP_LOG_LEVEL="DEBUG"
STORAGE_BACKEND=sqlite
SQLITE_DB_PATH=./mcp_plexus_data.sqlite3
HOST_APP_REGISTRATION_SECRET=host_app_secre
ADMIN_API_KEY=your_super_secret_admin_api_key_here_12345
PLEXUS_CLI_API_BASE_URL=http://127.0.0.1:8080
PLEXUS_ENCRYPTION_KEY=your_generated_fernet_key_here # 請參考mcp_plexus/utils/generate_key.py
- 初始化數據庫(如果使用SQLite): 如果SQLite數據庫和表不存在,通常在首次運行時會自動創建。
運行服務器(開發環境)
使用run_dev.py腳本:
python run_dev.py
這將啟動Uvicorn服務器,通常監聽在http://127.0.0.1:8000(主機和端口可以通過.env文件中的DEV_SERVER_HOST和DEV_SERVER_PORT進行配置)。
✨ 主要特性
-
多租戶支持:
- 通過URL路徑(例如
/{entity_id}/mcp/)識別多個隔離的租戶。 - 支持租戶特定的MCP會話管理(目前默認使用Redis)。
- (計劃)支持租戶特定的工具可見性和提供者設置配置。
- 通過URL路徑(例如
-
Plexus用戶認證:
- 主應用程序可以通過安全端點(
/{entity_id}/plexus-auth/register-user)將其用戶註冊到MCP Plexus。 - 獲取
plexus_user_auth_token,該令牌將主應用程序的用戶與Plexus中的持久身份關聯起來。 - 支持持久存儲用戶特定的外部OAuth令牌和API密鑰。
- 主應用程序可以通過安全端點(
-
工具的外部OAuth 2.1流程支持:
- MCP工具使用
@requires_auth(provider_name, scopes)裝飾器觸發外部提供者(如GitHub)的OAuth 2.1授權碼授權流程(帶有PKCE)。 - 管理OAuth回調、令牌交換和安全的令牌存儲(訪客用戶的會話綁定存儲,認證Plexus用戶的持久存儲)。
- 工具通過
PlexusContext獲得經過認證的httpx.AsyncClient,用於與外部提供者進行交互。 - 提供管理租戶特定外部OAuth提供者配置的管理CLI/API(例如GitHub的客戶端ID/密鑰)。
- MCP工具使用
-
工具的API密鑰管理:
- MCP工具使用
@requires_api_key(provider_name, key_name_display, instructions)裝飾器。 - 如果用戶尚未存儲API密鑰,會通過結構化的MCP錯誤提示用戶提交。
- 安全地將API密鑰(使用
PLEXUS_ENCRYPTION_KEY進行靜態加密)持久存儲在persistent_user_id下。 - 在運行時將解密後的API密鑰注入工具函數。
- 提供端點(
/{entity_id}/plexus-services/api-keys)供用戶提交API密鑰。
- MCP工具使用
-
標準MCP服務器功能(通過FastMCP 2.7):
- 完全支持使用FastMCP的Python裝飾器和類來定義MCP工具、資源和提示(例如
PLEXUS_SERVER_INSTANCE.tool())。 - 支持本地可流式HTTP傳輸進行MCP通信。
- 在工具/資源/提示中可以訪問
PlexusContext(擴展自fastmcp.Context),用於日誌記錄、會話數據以及訪問經過認證的客戶端或API密鑰。
- 完全支持使用FastMCP的Python裝飾器和類來定義MCP工具、資源和提示(例如
-
可配置存儲:
- 默認使用SQLite持久存儲Plexus用戶認證令牌、用戶特定的外部OAuth令牌、API密鑰、外部OAuth提供者配置、租戶配置和用戶提交的API密鑰。
- 目前MCP會話管理需要Redis(計劃增強以支持SQLite會話存儲)。
-
(開發中)內部OAuth 2.1提供者:
- 具備使MCP Plexus作為自己的OAuth 2.1授權服務器的基礎元素。
- 包括基本模型和存根端點。完整實現(動態客戶端註冊、內部客戶端的用戶同意、完整的令牌管理)是未來的目標。
📦 安裝指南
請參考上述“快速開始”部分的“安裝與設置”步驟,進行項目的安裝和配置。
💻 使用示例
基礎用法
以下是一個簡單的示例,展示如何定義一個MCP工具:
import logging
from typing import Dict, Any, Optional, List
import httpx # 用於@requires_auth示例
from fastmcp import Context as FastMCPBaseContext # 用於類型提示標準上下文
from mcp_plexus.core.global_registry import PLEXUS_SERVER_INSTANCE
from mcp_plexus.plexus_context import PlexusContext # 用於特定的Plexus上下文功能
from mcp_plexus.oauth.decorators import requires_auth
from mcp_plexus.services.decorators import requires_api_key
logger = logging.getLogger(__name__)
if PLEXUS_SERVER_INSTANCE is None:
# 此檢查有助於在PLEXUS_SERVER_INSTANCE未設置時捕獲問題
raise RuntimeError("PLEXUS_SERVER_INSTANCE在導入my_custom_tools.py時未初始化。")
@PLEXUS_SERVER_INSTANCE.tool(
name="get_tenant_specific_greeting",
description="返回特定於當前租戶的問候語。",
allowed_tenant_ids=["mycompany", "another_tenant"] # 該工具僅對這些租戶可見
)
async def get_greeting(ctx: FastMCPBaseContext) -> Dict[str, str]:
plexus_ctx: PlexusContext = PlexusContext(ctx.fastmcp) # 從基礎上下文創建PlexusContext
entity_id = plexus_ctx.entity_id
user_id = plexus_ctx.persistent_user_id # 訪客用戶的該值為None
session_val = await plexus_ctx.get_session_value("my_key")
greeting = f"來自實體 '{entity_id}' 的問候!"
if user_id:
greeting += f" 已認證用戶: {user_id}。"
if session_val:
greeting += f" 會話鍵 'my_key' 的值: {session_val}。"
return {"greeting": greeting}
高級用法
以下示例展示瞭如何創建需要外部OAuth認證和API密鑰的工具:
# 示例:需要外部GitHub OAuth的工具
@PLEXUS_SERVER_INSTANCE.tool(
name="get_my_github_repos",
description="獲取用戶的GitHub倉庫。",
tool_sets=["developer_tools"], # 對工具進行分類
allowed_tenant_ids=["mycompany"]
)
@requires_auth(provider_name="github", scopes=["repo", "read:user"])
async def get_my_github_repos(
ctx: FastMCPBaseContext,
*, # 強制後續參數為關鍵字參數
_authenticated_client: httpx.AsyncClient
) -> List[Dict[str, Any]]:
plexus_ctx = PlexusContext(ctx.fastmcp)
logger.info(f"為實體 '{plexus_ctx.entity_id}' 中的用戶 '{plexus_ctx.persistent_user_id}' 獲取GitHub倉庫")
response = await _authenticated_client.get("https://api.github.com/user/repos")
response.raise_for_status()
return response.json()
# 示例:需要API密鑰的工具
WEATHER_API_PROVIDER_NAME = "openweathermap"
@PLEXUS_SERVER_INSTANCE.tool(
name="get_weather_forecast",
description=f"使用 {WEATHER_API_PROVIDER_NAME} 獲取天氣預報。",
allowed_tenant_ids=["mycompany", "another_tenant"]
)
@requires_api_key(
provider_name=WEATHER_API_PROVIDER_NAME,
key_name_display="OpenWeatherMap API Key",
instructions="請提供OpenWeatherMap的API密鑰。"
)
async def get_weather(
ctx: FastMCPBaseContext,
city: str,
*,
openweathermap_api_key: str # 由@requires_api_key注入
) -> Dict[str, Any]:
plexus_ctx = PlexusContext(ctx.fastmcp)
logger.info(f"使用提供的API密鑰為實體 '{plexus_ctx.entity_id}' 中的用戶 '{plexus_ctx.persistent_user_id}' 獲取 {city} 的天氣。")
# 使用openweathermap_api_key調用外部天氣API
# 示例: weather_data = await httpx.get(f"api.openweathermap.org/data/2.5/weather?q={city}&appid={openweathermap_api_key}")
return {"city": city, "temperature": "20C", "condition": "Sunny (模擬數據)"}
📚 詳細文檔
使用MCP Plexus(開發者指南)
MCP Plexus可作為構建自定義多租戶MCP服務器的框架或SDK。以下是典型的使用步驟:
1. 定義租戶
租戶(實體)是頂級組織單元。
- 管理:目前通過管理CLI命令(或如果構建了管理界面,也可以通過直接的API調用)來管理租戶。
- CLI示例:
plexus admin tenant create --entity-id "mycompany" --name "My Company Inc."
- 訪問:每個租戶都有自己的MCP端點:
http://<server>/{entity_id}/mcp/
2. 註冊主應用程序用戶
為了實現特定主應用程序用戶跨會話的外部OAuth令牌的持久存儲,首先需要將該用戶身份註冊到MCP Plexus的特定租戶中。
- 端點:
POST /{entity_id}/plexus-auth/register-user - 請求頭:
X-Host-App-Secret: <your_HOST_APP_REGISTRATION_SECRET_value> - 請求體(JSON):
{
"user_id_from_host_app": "unique_stable_user_id_from_your_main_app"
}
- 響應體(JSON):
{
"plexus_user_auth_token": "a_long_secure_token_string_for_this_user",
"persistent_user_id": "unique_stable_user_id_from_your_main_app",
"message": "User token processed successfully."
}
主應用程序應安全地存儲返回的plexus_user_auth_token,並使用它來對該用戶的後續MCP請求進行身份驗證。
3. 初始化MCP會話
MCP客戶端與特定租戶的MCP端點進行交互。
- 端點:
/{entity_id}/mcp/ - 身份驗證:
- 對於已認證的Plexus用戶:在所有MCP請求(包括初始的
initialize調用)中,通過Authorization: Bearer <token>HTTP頭包含步驟2中獲取的plexus_user_auth_token。
- 對於已認證的Plexus用戶:在所有MCP請求(包括初始的
- 標準MCP初始化請求:
{
"jsonrpc": "2.0",
"method": "initialize",
"id": "client-init-123",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": {
"name": "MyHostApplicationClientName",
"version": "1.0.0"
}
}
}
服務器將響應一個Mcp-Session-Id頭,客戶端必須在該會話的後續請求中包含該頭。
4. 創建MCP工具、資源和提示
在mcp_plexus/tool_modules/目錄下的Python模塊中定義工具、資源和提示。這些模塊使用全局可用的PLEXUS_SERVER_INSTANCE(MCPPlexusServer的實例)來註冊它們的組件。
mcp_plexus/core/global_registry.py:
# 該實例在服務器啟動時填充
PLEXUS_SERVER_INSTANCE: Optional[MCPPlexusServer] = None
示例工具模塊(mcp_plexus/tool_modules/my_custom_tools.py):
請參考上述“使用示例”部分的代碼。
- 工具作用域:
allowed_tenant_ids:一個entity_id字符串列表。如果提供了該列表,工具僅對這些租戶可見和可調用。如果為None或空列表,工具為全局工具(對所有租戶可見,但可能受tool_set過濾)。tool_sets:一個字符串列表。客戶端可以通過在tools/listMCP調用中傳遞tool_set_filter參數來請求屬於特定集合的工具。
PlexusContext:- 工具通常會收到一個
fastmcp.Context(在示例中別名為FastMCPBaseContext)。 - 創建
mcp_plexus.plexus_context.PlexusContext(base_ctx.fastmcp)實例以訪問Plexus特定的功能:plexus_ctx.entity_id:當前租戶的ID。plexus_ctx.persistent_user_id:已認證Plexus用戶的穩定ID(如果有)。plexus_ctx.mcp_session_id:當前MCP會話的ID。await plexus_ctx.get_session_value(key)/await plexus_ctx.set_session_value(key, value):租戶和會話作用域的鍵值存儲(使用Redis)。await plexus_ctx.get_authenticated_external_client(provider_name, required_scopes):由@requires_auth使用,也可以直接調用。await plexus_ctx.get_api_key(provider_name):由@requires_api_key使用,也可以直接調用。
- 工具通常會收到一個
5. 保護工具
a. 外部OAuth(@requires_auth)
當工具需要代表用戶訪問第三方服務(如GitHub、Google)時使用。
流程:
- 管理員配置提供者:管理員使用CLI(或管理API)為特定租戶註冊外部OAuth提供者的詳細信息(客戶端ID、密鑰、URL、默認作用域)。
- CLI示例:
plexus admin ext-oauth create --entity-id "mycompany" --provider-name "github" --client-id "YOUR_GITHUB_CLIENT_ID" --client-secret "YOUR_GITHUB_CLIENT_SECRET" --authorization-url "https://github.com/login/oauth/authorize" --token-url "https://github.com/login/oauth/access_token" --scopes "repo,user:email" --userinfo-url "https://api.github.com/user"
- 工具裝飾:使用
@requires_auth(provider_name="github", scopes=["repo", "read:user"])裝飾工具函數。 - 工具調用:
- 當MCP客戶端調用工具時,裝飾器(通過
PlexusContext)檢查當前用戶(如果是Plexus用戶則為持久存儲,如果是訪客用戶則為會話存儲)是否有針對請求的提供者和作用域的有效存儲OAuth令牌。 - 令牌有效:裝飾器將經過認證的
httpx.AsyncClient(命名為authenticated_client)注入工具的關鍵字參數中。 - 令牌無效/缺失:裝飾器拋出
PlexusExternalAuthRequiredError。該錯誤由FastMCP捕獲並轉換為結構化的MCPToolError,錯誤負載中包含authorization_url。
- 客戶端處理重定向:MCP客戶端應用程序負責將用戶重定向到該
authorization_url。 - 用戶認證和授權:用戶在外部提供者處進行認證並授予授權。
- 回調到Plexus:外部提供者將用戶重定向回
/{entity_id}/oauth/external_callback/{provider_name}。 - 令牌交換和存儲:MCP Plexus將授權碼交換為令牌,安全地存儲它們(會話存儲和/或持久用戶存儲),並顯示成功頁面。
- 客戶端重試工具調用:用戶返回MCP客戶端,客戶端應重試原始工具調用。此時,
PlexusContext將找到有效的令牌。
graph TD
subgraph Tool Developer
A[Define Tool with @requires_auth] --> B{Tool Called by LLM/Client}
end
subgraph MCP Plexus
B --> C{PlexusContext: Token Check};
C -- Valid Token --> D[Inject Auth_Client];
D --> E[Execute Tool Logic];
C -- Invalid/No Token --> F[Raise PlexusExternalAuthRequiredError];
F --> G[Return MCP ToolError with auth_url];
end
subgraph MCP Client App
G --> H[Redirect User to auth_url];
end
subgraph User & External Provider
H --> I[User Authenticates & Consents at Ext. Provider];
I --> J[Ext. Provider Redirects to Plexus /callback];
end
subgraph MCP Plexus
J --> K{Plexus /callback Endpoint};
K --> L[Exchange Auth Code for Tokens];
L --> M[Store Tokens Session/Persistent];
M --> N[Show Success Page to User];
end
subgraph MCP Client App
N --> O[User Returns to Client App];
O --> P[Client Retries Tool Call];
end
P --> C;
E --> Q[Return Tool Result to Client];
b. API密鑰訪問(@requires_api_key)
當工具需要用戶直接提供API密鑰以與外部服務進行交互時使用。
流程:
- 工具裝飾:使用
@requires_api_key(provider_name="my_service", key_name_display="My Service API Key", instructions="Get your key from ...")裝飾工具。 - 工具調用:
- 裝飾器(通過
PlexusContext)檢查當前用戶(如果是Plexus用戶則為持久存儲)是否有針對該提供者的API密鑰。 - 密鑰找到:將解密後的API密鑰作為
{provider_name}_api_key(例如my_service_api_key)注入工具的關鍵字參數中。 - 密鑰未找到:拋出
PlexusApiKeyRequiredError。FastMCP將其轉換為結構化的MCPToolError,指示客戶端/用戶如何提交密鑰。
- 用戶提交API密鑰:用戶(通過MCP客戶端或其他界面)調用
POST /{entity_id}/plexus-services/api-keys端點。
- 請求頭:
Authorization: Bearer <plexus_user_auth_token>(持久存儲必需)。 - 請求體(JSON):
{
"provider_name": "my_service",
"api_key_value": "users_actual_api_key_value"
}
- 密鑰存儲:MCP Plexus對API密鑰進行加密,並將其存儲在與用戶的
persistent_user_id關聯的位置。 - 客戶端重試工具調用:客戶端重試工具調用,此時將找到並注入密鑰。
graph TD
subgraph Tool Developer
A[Define Tool with @requires_api_key] --> B{Tool Called by LLM/Client}
end
subgraph MCP Plexus
B --> C{PlexusContext: API Key Check};
C -- Key Found & Decrypted --> D[Inject API Key into Tool];
D --> E[Execute Tool Logic];
C -- Key Not Found --> F[Raise PlexusApiKeyRequiredError];
F --> G[Return MCP ToolError with submission instructions];
end
subgraph User/MCP Client App
G --> H[User/Client Submits API Key via /api-keys endpoint];
end
subgraph MCP Plexus
H --> I{Plexus /api-keys Endpoint};
I --> J[Encrypt & Store API Key];
end
subgraph User/MCP Client App
J --> K[Client Retries Tool Call];
end
K --> C;
E --> L[Return Tool Result to Client];
🔧 技術細節
架構概述
MCP Plexus作為一個ASGI應用程序(通常使用Uvicorn運行),充當MCP客戶端和底層FastMCP服務器實例之間的複雜中介。
- FastAPI:用於主Web應用程序路由、處理HTTP請求和提供管理API端點。
- FastMCP (
jlowin/fastmcp):共享的FastMCP實例作為核心引擎,通過可流式HTTP處理MCP協議消息(工具、資源、提示)。 - Plexus核心:
- 租戶管理:從URL路徑(
/{entity_id}/...)識別租戶,並確保遵守租戶配置(完整配置仍在開發中,目前基於數據庫驗證)。 - 會話管理(
PlexusSessionManager):管理MCP會話數據(例如Mcp-Session-Id),目前使用Redis存儲會話狀態。將會話與entity_id和(如果可用)persistent_user_id關聯。 - Plexus用戶認證:處理主應用程序用戶的註冊,並管理
plexus_user_auth_token值,以將其與persistent_user_id關聯。 - OAuth流程編排:管理工具訪問外部服務所需的OAuth 2.1授權碼授權流程,包括安全的令牌存儲和刷新(刷新功能仍在開發中)。
- API密鑰服務:管理用戶提供的工具API密鑰的安全存儲和檢索。
PlexusContext:注入到MCP工具中的增強上下文對象,提供對entity_id、persistent_user_id、會話數據的訪問,以及獲取經過認證的HTTP客戶端或API密鑰的輔助方法。
- 租戶管理:從URL路徑(
- 存儲:
- Redis(會話必需):目前用於臨時的MCP會話數據。
- SQLite(持久數據默認):用於存儲Plexus用戶認證令牌、用戶特定的外部OAuth令牌、API密鑰、外部OAuth提供者配置和租戶元數據。
📄 許可證
本項目遵循與FastMCP相同的許可證。
📈 項目狀態與路線圖
已實現功能
- [x] 核心多租戶支持:通過URL (
/{entity_id}/mcp/) 進行基本的租戶識別,並基於數據庫進行驗證。 - [x] FastMCP 2.7集成:使用
jlowin/fastmcp處理核心MCP協議(可流式HTTP)、工具/資源/提示定義。 - [x] 會話管理:基於Redis的MCP會話存儲(
PlexusSessionManager,SessionData)。 - [x] Plexus用戶認證:主應用程序用戶註冊(
/{entity_id}/plexus-auth/register-user)以獲取plexus_user_auth_token,用於關聯persistent_user_id。MCP請求通過Bearer令牌或URL令牌路徑進行認證。 - [x] 外部OAuth 2.1流程支持:
- 工具使用
@requires_auth裝飾器。 - 處理OAuth回調(
/{entity_id}/oauth/external_callback/{provider_name})。 - 為認證的Plexus用戶持久存儲外部OAuth令牌(默認使用SQLite)。
- 為訪客用戶提供會話作用域的外部OAuth令牌存儲。
- 提供管理每個租戶外部OAuth提供者配置的管理API/CLI。
- 工具使用
- [x] 工具的API密鑰管理:
@requires_api_key裝飾器。- 安全(加密)持久存儲用戶提交的API密鑰(默認使用SQLite),關聯到
persistent_user_id。 - 提供API密鑰提交端點(
/{entity_id}/plexus-services/api-keys)。
- [x]
PlexusContext:提供entity_id、persistent_user_id、mcp_session_id以及用於OAuth/API密鑰訪問的方法。 - [x] 管理端點和基本CLI:用於管理租戶和外部OAuth提供者配置。
- [x] SQLite持久存儲:作為用戶認證令牌、外部令牌/API密鑰、提供者配置、租戶數據的默認後端。
- [x] 工具作用域和集合:基於
allowed_tenant_ids實現基本的工具可見性,並通過tools/list參數按tool_sets進行過濾。
計劃/開發中功能
- [ ] 完整的內部OAuth 2.1提供者:
- [ ] 為內部OAuth客戶端實現動態客戶端註冊。
- [ ] 為內部OAuth客戶端提供面向用戶的同意屏幕。
- [ ] 實現完整的令牌撤銷和自省端點。
- [ ] 提供更強大的安全和授權類型支持。
- [ ] SQLite會話存儲:實現
SQLitePlexusSessionStore,使Redis完全可選。 - [ ] 細粒度的存儲後端配置:允許為不同的數據類型(會話、持久令牌等)選擇不同的後端(Redis/SQLite)。
- [ ] Plexus用戶認證令牌生命週期管理:為
plexus_user_auth_token實現強大的過期和撤銷機制。 - [ ] 全面的租戶配置:允許租戶自定義其環境的更多方面(例如默認工具集、適用的UI主題)。
- [ ] 高級工具作用域:實現更復雜的工具可見性和訪問控制規則。
- [ ] 增強的CLI:提供更多命令,改進管理和用戶任務的可用性。
- [ ] 所有存儲後端的完全異步支持:確保所有數據庫操作(如果尚未實現)完全異步。
- [ ] 更強大的錯誤處理和可觀測性:在所有API中實現標準化的錯誤響應,改進結構化日誌記錄,並可能添加指標。
- [ ] 生產部署指南:提供關於Docker、反向代理和擴展的文檔。
- [ ] 全面的測試套件:擴展所有功能的單元、集成和端到端測試。
- [ ] 詳細的用戶和開發者文檔:將文檔擴展到結構化的文檔網站,而不僅僅是本README。
替代品








