mcpField
F

FEA (finite element analysis)

远程服务
github.com/TheRoboMaster123科研与教育113 周前更新
代码仓库

关于 FEA (finite element analysis)

这是一个针对单实体 STEP 零件运行有限元分析的 MCP 服务,使用 CalculiX 进行静力应力和模态分析,面向需要经过验证的设置、数值结果与可视化报告的工程工作流。

主要功能

  1. 01检查 STEP 几何
  2. 02内置材料库
  3. 03静态应力与安全分析
  4. 04固有频率和振型分析
  5. 05求解前验证设置
  6. 06应力图与 3D 查看器

适用场景

  1. 01评估零件在指定载荷下的表现
  2. 02检查受约束零件的固有频率
  3. 03以可视化方式查看应力和安全结果

MCP 相关

向 MCP 客户端提供同步几何、材料和报告工具,以及异步有限元分析任务。它还实现 MCP tasks 扩展和 MCP Apps 3D 查看器。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp需要授权

工具

详细介绍

mcp-fea

ci validation license MCP

在对话中进行真实的有限元分析。 AI 助手发送 STEP 文件和一个通俗易懂的问题(“这根臂能承受装有 400 g 电机时的 6 g 机动吗?”);这个 MCP 服务将文字映射到几何体,在消耗任何计算资源之前,确定性地拒绝不合格的设置,然后使用 Modal 上的 CalculiX 进行网格划分和求解,将其作为异步 MCP 任务,并返回有数据支撑的判断结果——von Mises 峰值应力、安全系数、挠度、固有频率——以及渲染后的应力图和交互式 3D 查看器。每项研究结束时都必须进行反力平衡检查,不可跳过;验证页面上的每项基准测试都会在每次提交时由 CI 重新生成。

模态 1 动画

在实际运行的部署中测得(2026-07-31):冷启动 3.8 s · 悬臂研究从提交到完成:预热 9.3 s / 求解器容器冷启动时 12.9 s · 按 Modal 公布的费率计算,每项研究约 $0.002。

基准测试参考值计算值误差
悬臂端部挠度(PL³/3EI)0.58055 mm0.58046 mm0.02%
NAFEMS LE10 σ_yy @ D−5.38 MPa−5.456 MPa1.41%
带孔板峰值(Heywood Kt)62.8 MPa61.92 MPa1.40%
悬臂 f₁(Euler–Bernoulli)816.0 Hz815.4 Hz0.08%

完整表格、网格统计数据和明确的局限性说明: docs/validation.md — 由 CI 重新生成,从不手动编辑。

协议:MCP 2026-07-28(无状态核心),并实现了 io.modelcontextprotocol/tasks 扩展,遵循 SEP-2663(官方 Python SDK v2 发布时尚未包含该扩展——本仓库还包含客户端扩展,可让官方 SDK 使用支持任务的服务),以及 MCP Apps(SEP-1865)3D 查看器。所有工程决策及其原因请参见 docs/decisions.md。

部署(3 条命令)

uv sync
uv run modal secret create mcp-fea-token MCP_FEA_TOKEN=$(openssl rand -hex 24)
uv run modal deploy -m src.server.modal_app

Modal 会打印端点 URL(https://<workspace>--mcp-fea-mcp-endpoint.modal.run)。 使用 Authorization: Bearer <your token> 连接任意 2026-07-28 MCP 客户端。 首次使用 Modal 的用户:运行一次 uv run modal token new。然后端到端验证正在运行的部署:

MCP_FEA_LIVE_URL=https://... MCP_FEA_TOKEN=... make verify-live

工具

工具同步/异步功能
inspect_geometry同步STEP → 面表(face_id、类型、质心、法线/轴、面积、bbox)+ 零件 bbox/体积。请先调用:它用于将英文描述映射到面 ID。
list_materials同步内置材料库:Al 6061-T6、Al 7075-T6、Steel 4140、Stainless 304、Ti-6Al-4V、ABS、PLA、Nylon 12、PC(E、ν、屈服强度、密度)。
submit_fea_study任务线性静力分析:验证 → 网格划分(C3D10、自适应曲率、局部薄壁细化)→ CalculiX → 判断结果/应力/安全系数 + 3 张应力 PNG。
submit_modal_study任务固有频率 + 振型(*FREQUENCY),前 N 阶模态(默认 6 阶),每种模态生成一张放大变形 PNG。需要约束和密度。
get_report同步已完成任务的完整数据;include_mesh_data: true 会添加 3D 查看器应用获取的表面网格数据。

任务生命周期:working(statusMessage 依次显示 validating → meshing → solving → postprocessing)→ completed | failed | cancelled; tasks/cancel 会终止正在运行的容器。任务保留 24 h。

单位策略

在导入时进行一次单位转换。 内部统一使用 mm–N–MPa(–吨):长度为 mm,力为 N,应力/模量为 MPa,密度为吨/mm³(kg/m³ × 1e-12 — 仅在 Material.density_tonne_mm3 中转换一次),因此模态频率可直接以 Hz 得出。STEP 坐标按声明的单位(mm|m|in)解释;禁用 gmsh 自身的单位转换,以声明单位为准,并进行合理性检查(一个声明为 "m" 的 100 mm 零件会被标记)。

验证代码

每次拒绝都会返回 {code, message, suggested_fix}。

Code含义阶段
GEOMETRY_REF_INVALIDSTEP 文件缺失/无法读取/超过 25 MB,单位字段无效解析
GEOMETRY_KERNEL_CRASH / GEOMETRY_TIMEOUTCAD 内核在处理文件时崩溃/挂起(使用隔离的子进程;不影响端点)检查
MATERIAL_UNKNOWN / MATERIAL_UNPHYSICAL不在材料库中 / E ∉ [0.01, 1500] GPa、ν ∉ (0, 0.5)、屈服强度 ≤ 0、密度 ∉ [10, 25000] kg/m³,模态分析缺少密度解析
CONSTRAINT_INVALID / CONSTRAINT_CONFLICT类型无效;节点在两个局部坐标系中均被固定解析/模型输入文件
LOAD_INVALID / LOAD_MISSING / MODAL_INVALID类型/单位/方向无效;载荷为零;n_modes 无效解析
GEOM_NO_SOLID / GEOM_MULTIPLE_SOLIDS不是单个实体(装配体 = v2)网格划分前
FACE_ID_INVALID面 ID 不属于该零件网格划分前
RIGID_BODY_MOTION约束仍留有自由运动(会命名说明,例如“绕孔轴旋转”)— SVD 秩检查网格划分前
LOAD_ON_FIXED_FACE载荷施加在完全固定的面上网格划分前
UNITS_SUSPECT (警告)零件 > 5 m 或 < 0.5 mm — 声明的单位可能有误网格划分前
LOAD_MAGNITUDE_EXTREME / _NEGLIGIBLE (警告)σ ≈ F/A > 10× 屈服强度或 < 1e-6× 屈服强度网格划分前
MESH_ELEMENT_CAP即使经过粗化/局部细化,单元数仍 > 400k网格划分
MESH_QUALITY_JACOBIAN / MESH_QUALITY_ASPECT / MESH_THIN_WALLS质量检查未通过;薄壁会先进行一次局部自动细化网格划分
MESH_TIMEOUT网格划分超过时间预算(近切线狭长面、螺旋螺纹)— 从外部终止工作进程网格划分
SOLVER_SINGULAR / SOLVER_MESH_DEGENERATE / SOLVER_TIMEOUT / SOLVER_FAILED映射后的 ccx 失败(超过 150k 个单元时自动切换到迭代求解器)求解
EQUILIBRIUM_FAIL (警告,结果不可信)ΣRF 与自由节点所受载荷相差 > 0.5%后处理
LOAD_INTO_SUPPORT (警告)> 5% 的载荷施加到受约束节点上(受载面与固定面相接),由支撑直接承受后处理
BEYOND_YIELD / LARGE_DEFLECTION (警告)FoS < 1(屈服后的数值会标记为不符合物理意义)/ u > 最小尺寸的 5%后处理

滥用限制(均可通过环境变量调整)

STEP 上限为 25 MB · 请求上限为 40 MB(413)· 每个令牌的速率限制 (MCP_FEA_RATE_LIMIT/_WINDOW_S,429)· 并发求解上限 (MCP_FEA_MAX_CONCURRENT)· 每日预算(MCP_FEA_MAX_SPAWNS_PER_DAY)· 终止开关(MCP_FEA_DISABLE_SPAWN=1)。CAD 解析绝不会在端点进程中运行 (参见 SECURITY.md)。

本地开发

uv sync
curl -Ls https://micro.mamba.pm/api/micromamba/osx-arm64/latest | tar -xj bin/micromamba
./bin/micromamba create -y -p .tools/ccx-env -c conda-forge calculix=2.23
make test        # fast suite (protocol, benchmarks, validation, hardening)
make torture     # 21 real-world STEP files through the endpoint
make validation-page
uv run uvicorn --factory src.server.app:create_local_app --port 8000  # local server

仓库结构

src/pipeline/ 几何、网格划分、模型输入文件、求解器、验证、后处理、渲染 · src/materials/ 材料库 · src/server/ 协议、工具、任务、限制、 工作进程宿主、Modal 应用、Apps UI · src/client/ SDK 任务扩展 · tests/(含 torture/)· demo/ · docs/ 决策、验证、上游说明。许可证:Apache-2.0。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。