多客户MCP服务器框架

一个基于模板方法和工具组合的多客户MCP服务器框架,支持通过环境变量选择客户特定的服务器实例,适用于需要为不同客户提供定制化服务的场景。

  • by etlers
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 etlers/mcp_class

使用说明

mcp类

按客户继承并使用默认MCP服务器

控制器/ └&app.py#Metamost服务器。收到斜杠命令并确认频道ID

mcp服务器/ ├─ core/ │├&base.py#BaseMCPServer(模板方法) │├&toolkit.py#工具协议/混入/注册器 │└&settings.py#公共设置(Pydantic) ├–tools/#设置每个MCP服务器所需的工具 │├&k8s.py#k8s相关工具 │├——wiz.py#wiz相关工具 │├&azure.py#azure相关工具 │├&aws.py#aws相关工具 │└——prefect_flows.py#Prefect触发器工具 ├─ 客户/ │├&mcp_cust_01.py#客户01扩展 │ ├─ ... │└&mcp_cust_nn.py#客户nn扩展 └—main.py#执行入口点:选择客户服务器作为CUSTOMER_ID环境变量

【用户】(Metamost Slash Command) │ ▼ [Mattermost服务器] │ (HTTP帖子) ▼ [mattermost_proxy/app.py] 确认频道ID(channel_id) ├─ channel_id→ customer_id매핑 ├-customer_id→MCP服务器URL映射 在标题中插入x-customer-id/x-channel-id └─ httpx.使用AsyncClient向MCP服务器转发请求 ▼ [特定于客户的MCP服务器(例如MCP_01、MCP_02)] ├-通过请求标头验证客户信息 ├–运行所需工具(k8s、KIS、Prefect等) 返回结果JSON ▼ [mattermost_proxy] └-用JSON或webhook回复Mattermost的结果 ▼ [结果输出到您的频道]

为什么这个结构好

通过继承固定通用流(Template Method):BaseMCPServer将应用程序创建、中间件和工具安装标准化。 灵活的组合扩展(工具工厂/混合集成):仅reg.add(…)按客户需要的工具,功能差别很大。 安全隔离:明确分离不同客户的不同设置/权限/功能集(防止误用/权限范围混淆)。 最大限度地提高功能重用:在多个客户中更改相同工具类(k8s、Prefect、azure、aws)的设置以重新使用。 便于测试:每个工具路由器独立,易于进行单元测试/合同测试。

扩展提示

插件自动导航:使用importlib.metadata.entry_points()注册tool入口点→即使客户模块将工具作为外部包提供,也会自动加载。 功能标志/Capability Matrix:强制客户将允许的端点列为白名单。 请求上下文注入:在before_request()中自动注入x-channel-id→内部API头/日志。 固定版本:使用/health、/info、/capabilities显示特定于客户的功能/版本。 安全性:特定于客户的API Key/BasicAuth中间件、速度限制、审核日志。

+-------------------+ | Mattermost(mock)|←→请求curl模拟 +-------------------+ │ ▼ +---------------------------+ |mattermost_proxy(应用程序py)| |端口:3000| |-/mattermost/cmd| |-/mm/llm,/mm/快速/。.. | +---------------------------+ │ │ ▼ ▼ +-----------+ +-----------+ |MCP客户01||MCP客户02| |端口:9001端口:9002 +-----------+ +-----------+