FEA (finite element analysis) について
単一ソリッドのSTEP部品を対象に、CalculiXで静解析とモード解析を行うMCPサーバーです。検証済みの設定、数値結果、可視化レポートを必要とするエンジニアリングワークフロー向けです。
主な機能
- 01STEP形状の検査
- 02組み込み材料ライブラリ
- 03静応力と安全率の解析
- 04固有振動数とモード形状
- 05解析前の設定検証
- 06応力図と3Dビューアー
活用シーン
- 01指定荷重下での部品の評価
- 02拘束した部品の固有振動数の確認
- 03応力と安全率の結果を視覚的に確認
MCP 対応
同期の形状・材料・レポートツールと、非同期の有限要素解析タスクをMCPクライアントに公開します。MCP tasks拡張とMCP Appsの3Dビューアーも実装しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcpclaude mcp add --transport http therobomaster123-mcp-fea https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp{"mcpServers":{"therobomaster123-mcp-fea":{"type":"http","url":"https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp"}}}Cursor で開く{"servers":{"therobomaster123-mcp-fea":{"type":"http","url":"https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp"}}}VS Code で開く{"mcpServers":{"therobomaster123-mcp-fea":{"type":"http","url":"https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp"}}}{"mcpServers":{"therobomaster123-mcp-fea":{"serverUrl":"https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://therobomaster123--mcp-fea-mcp-endpoint.modal.run/mcp認証が必要ツール
詳細
mcp-fea
会話から実際の有限要素解析を実行できます。 AI アシスタントが STEP ファイルと平易な英語の質問(「400 g のモーターを搭載した状態で、このアームは 6 g の機動に耐えられますか?」など)を送ると、この MCP サーバーは言葉を形状に対応付け、計算を始める前に不適切な設定を確実に拒否し、Modal 上で CalculiX を使ってメッシュ生成と解析を非同期 MCP タスクとして実行します。そして、最大 von Mises 応力、安全率、たわみ、固有振動数などの数値に基づく判定に加え、応力プロットとインタラクティブな 3D ビューアーを返します。すべての解析で、必ず反力の釣り合いを検査します。検証ページに掲載されているすべてのベンチマークは、コミットのたびに CI で再生成されます。

ライブ環境での測定値(2026-07-31):コールドスタート 3.8 秒 · カンチレバー解析の送信から完了まで、ウォーム時 9.3 秒/ソルバーコンテナがコールド時 12.9 秒 · Modal の公開料金で 1 解析あたり約 $0.002。
| ベンチマーク | 参照値 | 計算値 | 誤差 |
|---|---|---|---|
| カンチレバー先端のたわみ(PL³/3EI) | 0.58055 mm | 0.58046 mm | 0.02% |
| NAFEMS LE10 σ_yy @ D | −5.38 MPa | −5.456 MPa | 1.41% |
| 円孔付き平板の最大値(Heywood Kt) | 62.8 MPa | 61.92 MPa | 1.40% |
| カンチレバー f₁(Euler–Bernoulli) | 816.0 Hz | 815.4 Hz | 0.08% |
表の全容、メッシュ統計、および明示的な制限事項については、docs/validation.md をご覧ください。CI で再生成され、手動では編集されません。
プロトコル:MCP 2026-07-28(ステートレスコア)。SEP-2663 に準拠して io.modelcontextprotocol/tasks 拡張を実装しています(公式 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)が表示されます。2026-07-28 対応の MCP クライアントなら、Authorization: Bearer <your token> を使って接続できます。Modal を初めて利用する場合は、最初に一度だけ uv run modal token new を実行してください。その後、デプロイが実際に動作することを最初から最後まで確認します。
MCP_FEA_LIVE_URL=https://... MCP_FEA_TOKEN=... make verify-live
ツール
| ツール | 同期/非同期 | 説明 |
|---|---|---|
inspect_geometry | 同期 | STEP → 面テーブル(face_id、タイプ、重心、法線/軸、面積、境界ボックス)とパーツの境界ボックス/体積。最初に呼び出してください。英語の指示を面 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 → 判定/応力/安全率(FoS)と応力 PNG 3 枚。 |
submit_modal_study | タスク | 固有振動数とモード形状(*FREQUENCY)、先頭から N 個のモード(デフォルトは 6)、各モードにつき変形を誇張した PNG を 1 枚。拘束条件と密度が必要です。 |
get_report | 同期 | 完了したタスクの全ペイロード。include_mesh_data: true を指定すると、3D ビューアーアプリが取得する表面メッシュのペイロードが追加されます。 |
タスクのライフサイクル:working(statusMessage が validating → meshing → solving → postprocessing と進行)→ completed | failed | cancelled。tasks/cancel は実行中のコンテナを停止します。タスクは 24 時間保持されます。
単位ポリシー
変換境界は取り込み時の1か所のみです。 内部ではすべて mm–N–MPa(–tonne)で統一します。長さは mm、力は N、応力・弾性係数は MPa、密度は tonne/mm³(kg/m³ × 1e-12。Material.density_tonne_mm3 で一度だけ変換)とすることで、モード周波数は Hz で直接得られます。STEP 座標は宣言された単位(mm|m|in)で解釈します。gmsh 独自の単位変換は無効にしているため、宣言された単位が基準となり、妥当性もチェックされます(「m」と宣言された 100 mm の部品にはフラグが立ちます)。
検証コード
拒否する場合はすべて {code, message, suggested_fix} を返します。
| コード | 意味 | 段階 |
|---|---|---|
GEOMETRY_REF_INVALID | STEP が存在しない/読み取れない/25 MB 超、単位フィールドが不正 | parse |
GEOMETRY_KERNEL_CRASH / GEOMETRY_TIMEOUT | CAD カーネルがファイルの処理中にクラッシュ/停止しました(分離されたサブプロセスで実行。エンドポイントには影響しません) | inspect |
MATERIAL_UNKNOWN / MATERIAL_UNPHYSICAL | ライブラリにない/E ∉ [0.01, 1500] GPa、ν ∉ (0, 0.5)、降伏値 ≤ 0、密度 ∉ [10, 25000] kg/m³、モード解析で密度が未指定 | parse |
CONSTRAINT_INVALID / CONSTRAINT_CONFLICT | タイプが不正。同じノードが2つのローカル座標系で拘束されています | parse/deck |
LOAD_INVALID / LOAD_MISSING / MODAL_INVALID | タイプ/単位/方向が不正、荷重がゼロ、n_modes が不正 | parse |
GEOM_NO_SOLID / GEOM_MULTIPLE_SOLIDS | 単一のソリッドボディではありません(アセンブリは v2) | pre-mesh |
FACE_ID_INVALID | この部品に存在しない Face id です | pre-mesh |
RIGID_BODY_MOTION | 拘束により自由運動が残っています(例:「穴軸まわりの回転」として明示)— SVD ランクチェック | pre-mesh |
LOAD_ON_FIXED_FACE | 完全に固定された面に荷重が適用されています | pre-mesh |
UNITS_SUSPECT (警告) | 部品が 5 m 超または 0.5 mm 未満です — 宣言された単位が誤っている可能性があります | pre-mesh |
LOAD_MAGNITUDE_EXTREME / _NEGLIGIBLE (警告) | σ ≈ F/A が降伏値の 10 倍超、または 1e-6 倍未満です | pre-mesh |
MESH_ELEMENT_CAP | 粗分割/局所細分化後も要素数が 400k を超えています | mesh |
MESH_QUALITY_JACOBIAN / MESH_QUALITY_ASPECT / MESH_THIN_WALLS | 品質ゲートに抵触しています。薄肉部は最初に局所自動細分化を1回行います | mesh |
MESH_TIMEOUT | メッシュ生成が実行時間上限を超えました(接線に近い細長い領域、らせんねじ山など)— ワーカーは外部から強制終了されます | mesh |
SOLVER_SINGULAR / SOLVER_MESH_DEGENERATE / SOLVER_TIMEOUT / SOLVER_FAILED | 対応する ccx の失敗(要素数が 150k を超えると反復ソルバーに自動切り替え) | solve |
EQUILIBRIUM_FAIL (警告、信頼できない結果) | ΣRF と自由ノードに適用された荷重の差が 0.5% を超えています | post |
LOAD_INTO_SUPPORT (警告) | 荷重の 5% 超が拘束ノードにかかり(荷重面が固定面に接触)、支持部で直接支えられています | post |
BEYOND_YIELD / LARGE_DEFLECTION (警告) | FoS < 1(降伏後の数値には非物理的なフラグが立ちます)/u > 最小寸法の 5% | post |
不正利用の制限(すべて環境変数で調整可能)
STEP の上限 25 MB · リクエストの上限 40 MB(413)· トークンごとのレート制限
(MCP_FEA_RATE_LIMIT/_WINDOW_S、429)· 同時解析数の上限
(MCP_FEA_MAX_CONCURRENT)· 1日の予算(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。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。