mcpField
F

FEA (finite element analysis)

リモート
github.com/TheRoboMaster123科学・教育113 週間前に更新
リポジトリ

FEA (finite element analysis) について

単一ソリッドのSTEP部品を対象に、CalculiXで静解析とモード解析を行うMCPサーバーです。検証済みの設定、数値結果、可視化レポートを必要とするエンジニアリングワークフロー向けです。

主な機能

  1. 01STEP形状の検査
  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 秒 · カンチレバー解析の送信から完了まで、ウォーム時 9.3 秒/ソルバーコンテナがコールド時 12.9 秒 · Modal の公開料金で 1 解析あたり約 $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(ステートレスコア)。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_INVALIDSTEP が存在しない/読み取れない/25 MB 超、単位フィールドが不正parse
GEOMETRY_KERNEL_CRASH / GEOMETRY_TIMEOUTCAD カーネルがファイルの処理中にクラッシュ/停止しました(分離されたサブプロセスで実行。エンドポイントには影響しません)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。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。