SysMLv2模型协议服务器

提供SysMLv2 API访问的模型上下文协议服务器,支持双向通信、授权转发和只读模式。

  • by Open-MBEE
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Open-MBEE/flexo-mms-sysmlv2-mcp

使用说明

SysMLv2 MCP服务器

一种模型上下文协议(MCP)服务器,提供对SysMLv2 API的访问。

特性

  • 流式HTTP协议:使用FastMCP的流式HTTP传输进行高效的双向通信
  • 授权转发:将承载令牌从MCP客户端转发到SysMLv2 API
  • 只读模式:仅公开GET端点的可选只读模式

安装

  1. 安装依赖项:
pip install -r requirements.txt

配置

服务器是通过环境变量配置的:

  • SYSMLV2_URL:SysMLv2 API的基本URL(默认值: http://localhost:8080)
  • READ_ONLY:启用只读模式,仅公开GET端点(默认值: true)
    • 接受值: true, 1, yes 不区分大小写
  • MCPPATH:MCP端点路径(默认值: /mcp)

用法

启动服务器

# Default configuration
python server.py

# With custom SysMLv2 API URL
SYSMLV2_URL=https://api.example.com python server.py

# In read-only mode
READ_ONLY=true python server.py

# Combined configuration
SYSMLV2_URL=https://api.example.com READ_ONLY=true python server.py

服务器将于启动 http://0.0.0.0:8000 MCP端点将在 http://0.0.0.0:8000/mcp.

连接客户

客户端可以使用流式HTTP传输连接到MCP服务器。使用FastMCP客户端的示例:

from fastmcp.client import Client

# Without authentication
client = Client("http://localhost:8000/mcp")

# With Bearer token authentication
client = Client(
    "http://localhost:8000/mcp",
    headers={"Authorization": "Bearer your-token-here"}
)

码头工人

塑造形象

docker build -t flexo-mms-sysmlv2-mcp .

运行容器

使用自定义彩信URL运行:

docker run -d \
  -p 8000:8000 \
  -e MMS_URL=https://your-flexo-mms-server \
  flexo-mms-sysmlv2-mcp

以读写模式运行(启用创建/更新/删除操作):

docker run -d \
  -p 8000:8000 \
  -e MMS_URL=https://your-mms-server \
  -e READ_ONLY=false \
  flexo-mms-sysmlv2-mcp

可用工具

服务器将OpenAPI规范中的所有操作作为MCP工具公开。每个工具对应于一个REST API端点:

项目

  • getProjects -获取项目
  • postProject -创建项目
  • getProjectById -按ID获取项目
  • putProjectById -按ID更新项目
  • deleteProjectById -按ID删除项目

分支

  • getBranchesByProject -按项目获取分支
  • postBranchByProject -按项目创建分支
  • getBranchesByProjectAndId -按项目和ID获取分支
  • deleteBranchByProjectAndId -按项目和ID删除分支
  • merge -将源提交合并到目标分支中

提交

  • getCommitsByProject -按项目获取提交
  • postCommitByProject -按项目创建提交
  • getCommitByProjectAndId -按项目和ID获取提交

元素

  • getElementsByProjectCommit -按项目获取元素并提交
  • getElementByProjectCommitId -按项目、提交和ID获取元素
  • getProjectUsageByProjectCommitElement -获取元素的ProjectUsage
  • getRelationshipsByProjectCommitRelatedElement -获取元素的关系
  • getRootsByProjectCommit -获取根元素

查询

  • getQueriesByProject -按项目获取查询
  • postQueryByProject -按项目创建查询
  • getQueryByProjectAndId -按项目和ID获取查询
  • putQueryByProjectAndId -按项目和ID更新查询
  • deleteQueryByProjectAndId -按项目和ID删除查询
  • getQueryResultsByProjectIdQueryId -获取查询结果
  • getQueryResultsByProjectIdQuery -获取查询结果

标签

  • getTagsByProject -按项目获取标签
  • postTagByProject -按项目创建标签
  • getTagByProjectAndId -按项目和ID获取标签
  • deleteTagByProjectAndId -按项目和ID删除标签

只读模式

当 READ_ONLY=true,只有GET操作作为工具公开。这有助于:

  • 提供对API的安全、只读访问
  • 防止意外修改
  • 遵守安全政策

认证

服务器将承载令牌从MCP客户端转发到SysMLv2 API。要进行身份验证,请执行以下操作:

  1. 客户端发送请求 Authorization: Bearer <token> 头球
  2. 服务器从MCP请求上下文中提取令牌
  3. 服务器将令牌转发到 Authorization 到SysMLv2 API的标头

这允许SysMLv2 API独立处理身份验证和授权。

建筑

MCP Client → [Streamable HTTP] → MCP Server → [REST API] → SysMLv2 API
              (with Bearer token)              (with Bearer token)

服务器:

  1. 定义与SysMLv2 API操作相对应的35个显式MCP工具
  2. 从MCP请求上下文中提取承载令牌
  3. 通过正确的身份验证将请求转发到SysMLv2 API
  4. 将响应返回给MCP客户端
  5. 基于READ_ONLY模式有条件地注册写操作

错误处理

服务器包括全面的错误处理:

  • 捕获HTTP错误并返回状态代码和消息
  • 捕获连接错误并返回错误详细信息
  • 无效请求得到妥善处理

发展

服务器使用:

  • FastMCP 2.x:用于支持流式HTTP的MCP服务器实现
  • httpx:用于异步HTTP客户端功能
  • Python 3.7+:需要异步/等待支持

许可证

详见项目许可证。