模拟控制服务

FlexSim MCP Server 是一个通过模型上下文协议(MCP)控制和自动化FlexSim模拟的服务,适用于制造和仓库分析的“假设”研究。

  • by SethGame
  • Python
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 SethGame/mcp_flexsim

使用说明


标题:FlexSim MCP服务器 表情符号⚙️ 颜色来源:蓝色 颜色To:绿色 sdk:毕业 sdk版本:“5.0.0” app_file:app.py 固定:false

FlexSim MCP服务器(包括FlexSimPy)

通过模型上下文协议(MCP)控制和自动化FlexSim模拟。此存储库公开了一个FastMCP服务器,该服务器启动FlexSim(通过FlexSimPy),并提供打开模型、运行/停止、单步执行、查询/设置节点值、评估FlexScript、导出结果等工具。

为什么这很重要

  • 桥接数字双胞胎和人工智能助手(Claude/Cursor),用于制造/仓库分析和“假设”研究。
  • 演示强大的系统工程:GUI流程编排、异步I/O、协议处理、Windows怪癖和可复制的自动化。

设计

┌─────────────────────┐       JSON-RPC        ┌─────────────────────┐
│    MCP Client       │◄────────────────────► │    MCP Server       │
│  (Claude/Cursor)    │     stdin/stdout      │  (flexsim_mcp.py)   │
└─────────────────────┘                       └──────────┬──────────┘
                                                         │
                                                         │ Python API
                                                         ▼
                                              ┌─────────────────────┐
                                              │     FlexSimPy       │
                                              │   (Python SDK)      │
                                              └──────────┬──────────┘
                                                         │
                                                         │ COM/IPC
                                                         ▼
                                              ┌─────────────────────┐
                                              │      FlexSim        │
                                              │  (Simulation Engine)│
                                              └─────────────────────┘

特性

  • MCP服务器入口点: mcp_server/flexsim_mcp.py
  • 暴露的工具:
    • 模拟控制: flexsim_open_model, flexsim_reset, flexsim_run, flexsim_run_to_time, flexsim_stop, flexsim_step, flexsim_get_time
    • 模型/脚本: flexsim_evaluate, flexsim_compile, flexsim_save_model, flexsim_new_model
    • 节点访问: flexsim_get_node_value, flexsim_set_node_value
    • 结果/统计数据: flexsim_get_statistics, flexsim_export_results
  • 登录中: mcp_server/flexsim_mcp.log
  • 可复制环境: uv sync
  • FlexSimPy构建自动化: utility/build_automation.py
  • 集成测试: tests/integration/test_mcp_client.py (基于stdio的MCP客户端)
  • GUI健全性测试: utility/integration_test.py
  • 通过以下方式配置行为 config.toml 以及环境覆盖

需求

  • 操作系统:Windows
  • Python:3.12(默认值;可通过配置 config.toml 或 FLEXSIM_PYTHON_VERSION)
  • 包管理器: uv (https://astral.sh)
  • FlexSim:
    • 实际运行需要本地FlexSim安装(或中的repo本地镜像 FlexSimDev/program)
    • FlexSimPy SDK子模块提供于 depends/FlexSimPy (参见 .gitmodules)

快速入门

引导式设置(推荐)

# From the repo root
python setup_mcp_server.py

# The setup helper will:
# - Summarize your configuration (install locations, Python version, submodule presence)
# - Ensure `uv` is installed and run `uv sync`
# - Build/install FlexSimPy via `utility/build_automation.py`
# - Optionally run a GUI integration sanity test
# - Print next steps to run the MCP server and tests

手动设置

# 1) Install dependencies
uv sync

# 2) Check (and optionally build) FlexSimPy
uv run python utility/build_automation.py --status
# To force a build with a specific Python version:
# uv run python utility/build_automation.py --python-version 3.12

# 3) Launch MCP server in test mode (keeps the process alive; launches FlexSim on first tool call)
uv run mcp_server/flexsim_mcp.py --test-mode

# 4) Run integration tests (spawns the server as a subprocess; stdio MCP client)
uv run python tests/integration/test_mcp_client.py

配置

主要配置位于 config.toml (回购根)。您还可以在运行时使用环境变量进行覆盖。

示例(摘录自 config.toml):

[flexsim]
install_path = "FlexSimDev/program"
src_path = "C:\\Program Files\\FlexSim 2025 Update 2"

[python]
version = "3.12"

[server]
name = "FlexSimPy MCP Server"
version = "0.1.0"
http_endpoint = "http://127.0.0.1:8088/mcp"

[session]
reuse_policy = "singleton"

[logging]
level = "INFO"
log_file = "flexsim_mcp.log"

[build]
flexsimpy_dir = "depends/FlexSimPy"
auto_build = true
auto_install = true

环境覆盖(请参见 utility/config.py):

  • FLEXSIM_CONFIG_PATH –通往替代品的道路 config.toml
  • FLEXSIM_INSTALL_PATH –覆盖FlexSim程序路径
  • FLEXSIM_PYTHON_VERSION –覆盖FlexSimPy的Python版本
  • FLEXSIM_LOG_LEVEL –覆盖日志记录级别

运行MCP服务器

两种模式:

  • 测试模式(交互式;无stdio协议)
uv run mcp_server/flexsim_mcp.py --test-mode
# Keeps running; FlexSim launches on first tool call; intended for manual testing
  • MCP stdio模式(未传递标志时的默认模式)
uv run mcp_server/flexsim_mcp.py
# Expects MCP JSON-RPC messages via stdin/stdout; used by clients/tests

客户端配置(用于Claude/Cursor/等):

{
  "mcpServers": {
    "flexsim": {
      "command": "uv",
      "args": [
        "--directory",
        "<repo-flexsim_mcp>/",
        "run",
        "mcp_server/flexsim_mcp.py"
      ]
    }
  }
}

示例工具调用(通过MCP的JSON-RPC)

打开模型

{"jsonrpc":"2.0","id":1,"method":"tools/call",
 "params":{
   "name":"flexsim_open_model",
   "arguments":{"params":{
     "model_path":"C:/path/to/Model.fsm"
   }}
 }}

跑步和阅读时间

{"jsonrpc":"2.0","id":2,"method":"tools/call",
 "params":{"name":"flexsim_run_to_time","arguments":{"params":{"target_time":300}}}}

{"jsonrpc":"2.0","id":3,"method":"tools/call",
 "params":{"name":"flexsim_get_time"}}

评估FlexScript

{"jsonrpc":"2.0","id":4,"method":"tools/call",
 "params":{"name":"flexsim_evaluate","arguments":{"params":{
   "script":"getmodeltime()"
 }}}}

获取/设置节点值

{"jsonrpc":"2.0","id":5,"method":"tools/call",
 "params":{"name":"flexsim_get_node_value","arguments":{"params":{
   "node_path":"Model/Queue1/stats/input"
 }}}}

{"jsonrpc":"2.0","id":6,"method":"tools/call",
 "params":{"name":"flexsim_set_node_value","arguments":{"params":{
   "node_path":"Model/Processor1/variables/processtime",
   "value":5.0
 }}}}

更多FlexScript示例和行为:请参阅 eval-flexscript.md.


测试

集成测试(stdio客户端;验证工具和基本运行顺序):

uv run python tests/integration/test_mcp_client.py
# Test 1: open model; Test 2: run for 20s, stop, verify time > 0

GUI健全性测试(手动、交互式菜单):

uv run python utility/integration_test.py
# Launches FlexSim GUI and provides simple interactive actions

存储库结构

  • mcp_server/flexsim_mcp.py --FastMCP服务器和FlexSimPy控制器逻辑(入口点)
  • utility/
    • config.py --带有env覆盖的配置加载器
    • build_automation.py --FlexSimPy构建/安装编排(MSBuild解析,.pyd安装)
    • copy_flexsim.py --将FlexSim安装复制到 FlexSimDev/ (使用 flexsim.src_path)
    • integration_test.py --GUI支持的健全性测试(抑制CEF stderr,安全清理)
    • utility.py --助手:抑制stderr、杀死FlexSim进程、强制退出
  • tests/integration/
    • test_mcp_client.py --启动服务器并调用工具的异步stdio客户端
    • README.md --测试说明和样本输出
  • depends/FlexSimPy --FlexSimPy SDK子模块
  • FlexSimDev/program --FlexSim安装的可选回购本地镜像
  • config.toml, mcp_server_config.json, AGENTS.md, eval-flexscript.md

批量实验编排器(设计)

一种高影响力的增强功能,可以使用复制运行参数扫描、收集指标并导出统一的 summary.csv (以及 manifest.json),实现大规模的“假设”研究。

  • 设计文件: Batch_Experiment_Orchestrator.md
  • 状态:设计在仓库中;计划实施(尚未 flexsim_mcp.py)
  • MVP工具(计划中): flexsim_run_experiments 具有参数列表、种子/复制、运行时间、统计数据、artifact_dir

故障排除

  • 未找到FlexSim:
    • 更新 flexsim.install_path 在 config.toml 或设置 FLEXSIM_INSTALL_PATH
    • 可选使用 utility/copy_flexsim.py 将现有安装镜像到 FlexSimDev/
  • FlexSimPy不可用:
    • 检查状态: uv run python utility/build_automation.py --status
    • 为活动Python版本进行重建,并确保 .pyd 已安装
  • Stdio客户端问题:
    • 确保运行服务器时没有 --test-mode 使用stdio客户端时
    • 检查 mcp_server/flexsim_mcp.log 详情
  • GUI噪音(CEF)或关机问题:
    • 这些实用程序抑制CEF stderr,并在需要时强制安全解释器退出