Skip to main content
Glama
NovaSolver Studio MCP Server

NovaSolver Studio MCP Server

Official
by novasolver

NovaSolver Studio

Free, local engineering simulation that your AI assistant can drive — and every answer is checked. Structural FEM, heat and CFD (CalculiX, OpenFOAM® and a built-in quadratic-tet solver) on your own PC, with an MCP server so Claude or any MCP client can import your STEP/STL, set the loads, run, refine the mesh and verify the result.

日本語 · 中文 · Try it in your browser (no install) · Download for Windows · novasolver.jp/studio

An AI assistant sets up a gear tooth in Studio, solves it, refines the mesh three times and compares with a hand calculation

One sentence to the AI → Studio sets up and solves the case → mesh refined three times (GCI 1.5 %) → compared with a hand calculation. Real app, real numbers.

An AI designs a bracket in SolidCraft and analyses it in Studio, then refuses to call it a pass because the mesh check failed

From one prompt, an AI modelled a bracket in SolidCraft and analysed three versions in Studio. It stopped without calling any of them a pass, because the mesh check had failed. 40 s video.

Why Studio

  • Ran ≠ right. Every result carries three separate checks: ran → converged → mesh convergence. The third refines the mesh in three steps and reports the GCI (Roache), so you know the answer does not depend on the mesh; the built-in examples are also compared with closed-form or literature answers. None of this checks the boundary conditions or the design, and the AI is told to say exactly what was checked. Warnings that matter (stress above yield, a stress singularity at a sharp corner) are passed on, not hidden.

  • Your models stay on your computer. No account, no upload, no telemetry. The only network use is the optional update check and example download (offline mode turns those off), and a public test fails if any other code starts using the network. For confidential work with a cloud AI, numbers-only mode keeps even pictures of the part away from the AI. See docs/PRIVACY.md.

  • Real solvers, no licence fee. CalculiX for structural/thermal, OpenFOAM® for flow and water cooling, a built-in tet10 FEM for answers in seconds. Japanese, English and Chinese UI.

  • Typed MCP tools, no shell. 37 tools (create/import, set conditions, mesh, run, convergence, verify, probe, sweep, render). The AI fills a case schema; Studio writes the solver input. Your AI's edits appear live in the window, and you can undo them.

  • NovaSolver Flash: build an instant model of your own case. build_surrogate solves about 60 variants of a case in the background (loads, materials, template dimensions; a Gaussian process, checked on points held out of the fit). surrogate_predict then answers in milliseconds with an error bar for the interpolation, and refuses outside the ranges. An imported CAD shape has no dimensions to vary yet.

  • Examples made with Flash: seven standard shapes. The instant_estimate tool computes the peak stress or deflection, including for dimensions never solved, from a Gaussian process fitted to 1,396 solved points. No mesh, no solve. It gives the error bar and refuses outside the solved ranges. On 224 new solves it had never seen, 287 of 288 answers landed inside the bar. See the data.

  • NovaSolver Genesis: keep only the shape you need (0.8). Topology optimisation on the part itself: with its supports and loads, it seeks a higher-stiffness shape for the volume you choose (for heat, a lower-temperature layout for its sources and sinks). 3D-print overhang, extrusion and symmetry constraints; the result is a closed STL, and an extruded part is also written as a flat-faced STEP. Example: a cantilever on 40,000 cells at 30 % volume keeps 62 % of the full part's stiffness. MCP: run_genesis, genesis_result. Exported and smoothed shapes need their own analysis; see the 0.8.0 reanalysis results and limits.

Flow through a pipe elbow, solved with OpenFOAM

Cantilever stress and deflection compared with beam theory

Pipe elbow, OpenFOAM® (pressure drop)

Cantilever vs beam theory

Related MCP server: COMSOL MCP Verifier

Checked against known answers

A sample of the references Studio compares itself with (the full validation suite with every case, tolerance and mesh-convergence column is published with each release as docs/VALIDATION.md):

Case

Reference

Studio

Cantilever tip deflection

Euler–Bernoulli + shear

−0.9 % (built-in tet10, also in the browser demo)

Cylinder on a flat block, contact pressure

Hertz line contact

−0.04 % (mortar contact, 0.7)

Sphere drag, external flow

Schiller–Naumann

+0.3 % (OpenFOAM®, snappyHexMesh + wall layers)

Water-cooled plate

heat balance

0.03 %

Lid-driven cavity

Ghia et al.

profile match (built-in and OpenFOAM®)

How often does it get through a part it has never seen? docs/PART_TEST.md counts 246 STEP files, including every one that failed and why. Does it tell you when your setup is wrong? docs/SETUP_MISTAKES.md breaks correct setups in 34 ways, with the list fixed before the run, and shows what it said, misses included.

What it does / できること

Analysis

Geometry

Quick preview (built-in, seconds)

Final solve

Verification

Structural: linear static, modal, nonlinear (plasticity, large deformation)

templates · import STEP / IGES / BREP / STL

quadratic tetrahedral FEM

CalculiX

beam theory, Heywood Kt, mesh convergence (GCI)

Buckling, contact (mortar, tied), fatigue (Goodman, S-N) — 0.7

templates · import

quadratic tetrahedral FEM

—

Euler columns, Hertz, Goodman

Thermal (steady conduction), thermal stress

templates · import

quadratic tetrahedral FEM

CalculiX

Fourier's law, fin theory, GCI

Electrostatics, DC current and Joule heating

templates · import

quadratic tetrahedral FEM

—

εA/d, 2πεL/ln(b/a), L/(σA)

Internal flow

templates · import

2D cavity (built-in)

OpenFOAM®

Ghia (cavity), Poiseuille, mass balance

Flow around a body

import

—

OpenFOAM® (snappyHexMesh + wall layers)

sphere drag vs Schiller–Naumann (+0.3%)

Water cooling (conjugate heat transfer)

import (2+ bodies)

—

OpenFOAM® (chtMultiRegionSimpleFoam)

heat balance (0.03%)

Also: a Blender add-on (send the active object to Studio, PLA/PETG/ABS or metals), a FreeCAD workbench (send the part as STEP, bring the Genesis result back into the document), a 3D-print strength check (safety factor for each print direction in PLA/PETG/ABS, layer lines included), ParaView VTU / CSV / printable HTML report export, and a Windows installer with .nscase file association.

Linux program (no Python needed)

Download NovaSolverStudio-<version>-linux-x86_64.tar.gz from Releases, unpack it and run ./NovaSolverStudio. Each build is started and test-solved on Ubuntu 22.04 (x86-64) before release. AI assistants connect with ./NovaSolverStudio mcp.

Install with Python (macOS / Linux / Windows)

Available on PyPI. Launch the GUI with uvx novasolver-studio, or install once with pipx install novasolver-studio and run novasolver-studio. Python 3.10+ is required; Python 3.12 is tested in CI. Older Python versions use compatible NumPy/SciPy/Matplotlib/WebSocket releases. The built-in FEM needs no external solver. For an MCP client:

{
  "mcpServers": {
    "novasolver-studio": {
      "command": "uvx",
      "args": ["novasolver-studio", "mcp"]
    }
  }
}

With pipx, use "command": "novasolver-studio", "args": ["mcp"] instead. Cases go to ~/NovaSolverStudio/workspace on macOS/Linux and ~/Documents/NovaSolverStudio/workspace on Windows; NOVASTUDIO_WORKSPACE overrides this. Source checkouts keep their workspace/ folder.

OS

CalculiX (optional structural/thermal solver)

OpenFOAM (optional CFD solver)

macOS

brew install costerwi/calculix/calculix-ccx

brew install gerlero/openfoam/openfoam (Apple Silicon, macOS 14+)

Linux

sudo apt install calculix-ccx or the distro package

Install ESI packages from openfoam.com; detected under /usr/lib/openfoam or via WM_PROJECT_DIR.

Windows

Put ccx_static.exe in solvers/calculix/ or set NOVASTUDIO_CCX.

ESI Windows MinGW build plus Microsoft MPI, as described below.

On headless Linux, Gmsh needs libglu1-mesa libgl1 libxrender1 libxcursor1 libxft2 libxinerama1. NOVASTUDIO_CCX and NOVASTUDIO_OPENFOAM can select an installation on every OS. macOS OpenFOAM tools run through the app environment launcher; Linux tools source the installation's etc/bashrc.

Quick start (developers) / 開発者向けの起動手順

python -m venv .venv
.venv\Scripts\python -m pip install "mcp>=2.3,<3" fastapi "uvicorn[standard]" numpy scipy matplotlib gmsh meshio psutil pyamg pymeshlab zstandard pytest
cd frontend && npm install && npm run build && cd ..
cd backend
set PYTHONPATH=%CD%
..\.venv\Scripts\python -m novastudio serve        # open http://127.0.0.1:8765

Solvers are found automatically when installed (without them, the built-in preview solvers still work):

  • CalculiX: put ccx_static.exe under solvers/calculix/ or set NOVASTUDIO_CCX.

  • OpenFOAM (ESI Windows MinGW build): install to %LOCALAPPDATA%\NovaSolverStudio\solvers\openfoam (an ASCII-only path) or set NOVASTUDIO_OPENFOAM. Put Microsoft MPI's msmpi.dll in %LOCALAPPDATA%\NovaSolverStudio\solvers\msmpi.

Use it from an AI assistant (MCP) / AI アシスタントから使う

Easiest (Claude Desktop and other MCPB-aware apps): download novasolver-studio-<version>-win64.mcpb from Releases and open it — the app installs it as an extension. Also listed in the MCP Registry as io.github.novasolver/novasolver-studio.

Client-specific setup guides / アプリ別の導入手順 / 客户端安装指南:

Client

Guide

Verification scope

Claude Code

Plugin installation

Windows: plugin installation and a model-driven cantilever solve checked

Gemini CLI

Extension setup

Windows: isolated extension installation and MCP connection checked; no model-driven solve

Codex

Configuration and optional helper

Windows: configuration handling and a model-driven cantilever solve checked

Qwen Code

中文・日本語・English guide

Windows with DeepSeek Flash: a model-driven cantilever solve checked; Alibaba Qwen model not tested

These are NovaSolver's setup guides, not claims of approval or listing in each provider's official directory.

With the downloaded zip: point any MCP client at the exe.

{
  "mcpServers": {
    "novasolver-studio": {
      "command": "C:\\path\\to\\NovaSolverStudio\\NovaSolverStudio.exe",
      "args": ["mcp"]
    }
  }
}

From source:

{
  "mcpServers": {
    "novasolver-studio": {
      "command": "<studio>\\.venv\\Scripts\\python.exe",
      "args": ["-m", "novastudio", "mcp"],
      "env": { "PYTHONPATH": "<studio>\\backend" }
    }
  }
}

Then ask, for example: "Import bracket.step, fix the bottom face, push 500 N on the top face, run it, check mesh convergence and tell me the safety factor."

Electromagnetics (0.3) / 電磁気

The built-in tet10 solver now computes electrostatic potential, electric field and electrode charge, or DC current with optional steady Joule heating. STEP assemblies can assign a dielectric or conductor to each body. Three editable templates include analytic checks: capacitor against εA/d, coax against 2πεL/ln(b/a), and busbar against L/(σA) and the temperature rise σΔV²/(8k) with both ends cooled.

内蔵 FEM で静電場・電流・ジュール発熱による温度を計算できます。平行平板コンデンサ・同軸ケーブル・銅母線の 3 テンプレートには解析解との比較があり、任意形状ではメッシュ収束を確認できます。

Share face selection with an AI (0.4) / 選んだ面をAIと共有する

Select faces in the boundaries viewport, then ask “fix the faces I selected” or “put 500 N here”. The assistant reads get_gui_selection, shows a numbered render_view(quantity="faces", highlight=[...]) to confirm the setup, and applies conditions through update_case. GUI and AI changes share one Undo/Redo history. Ctrl+Z undoes the latest change by either of you; Ctrl+Shift+Z or Ctrl+Y redoes it. Named face groups can be reused with boundaries.@<group>.role and other boundary fields.

画面で面を選んでから「選んだ面を固定して」のように頼めます。AIが選択内容を読み取り、面番号付きの画像で 確認してから条件を設定します。画面とAIの変更は共通の履歴に残り、どちらの変更も元に戻せます。 Hで選択した面を隠し、Alt+Hですべて表示。Ctrl+ドラッグで矩形選択、Xで透過表示を切り替えます。

在视图中选择面后,可以说“固定我选中的面”。AI会读取选择内容,用带面编号的图片确认设置,再应用边界条件。 界面与AI共用撤销和重做历史,双方的更改都可以撤销。面组可以保存并重复使用。

Documentation

License

GPL-3.0 — see LICENSE. Programs called by Studio keep their own licenses — see THIRD_PARTY_NOTICES.md.

The license covers the code, not the name. If you distribute a modified version, please give it a different name and do not present it as NovaSolver Studio or NovaSolver Flash.

This offering is not approved or endorsed by OpenCFD Limited, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM® and OpenCFD® trade marks.

Made by NovaSolver — interactive engineering simulators.

Available Tools

37 tools
build_surrogateA

Build an instant-answer model of this case: Studio solves n variants (default 60, one at a time, in the background, surviving this client closing), holds some out to check the fit, then surrogate_predict answers in milliseconds with an error bar. parameters: 1 to 5 of {"path": "boundaries.x1.force", "min": 100, "max": 1000, "unit": "N"}; any number update_case can change (omit unit for a plain number such as materials.solid.nu). An imported CAD shape has no dimensions to vary: template dimensions (geometry.params.*) can vary, an imported STEP cannot. outputs: names in the results' metrics, e.g. max_vm_pa, max_disp_m, t_max_k, dp_pa; left out = the main ones for this physics. Below 60 solves the error bar is less reliable. mesh_checks: mesh convergence studies at that many design points (each takes about three solves). Poll surrogate_status.

Inputs: case_id (required), parameters (required), n, mode, +3 more.

check_convergenceA

Mesh convergence study: solve on coarse, normal and fine meshes, estimate the discretisation error with Roache's GCI and the Richardson-extrapolated value. For shapes without an analytic reference this is the third gate, mesh convergence (passes when GCI <= 5%). Takes about 3x a single run; returns a job_id when it does not finish in ~20 s.

Inputs: case_id (required), language.

clone_caseA

Copy a case (geometry, face roles, materials, settings - not its runs) under a new case_id and apply optional changes ({dotted.path: value}, as in update_case). Use it to try a design variant without losing the original.

Inputs: case_id (required), title, changes, language.

compare_runsC
Read-onlyIdempotent

Side-by-side parameters, gates and key numbers of several cases (e.g. a parameter study).

Inputs: case_ids (required), language.

control_surrogateA
Destructive

Stop a build (finished points are kept), resume a stopped or interrupted one, or delete it (confirm = study_id).

Inputs: action (required), study_id (required), confirm, language.

create_caseA

Create a case from a template id (see list_templates). Optional changes = {dotted.path: value} applied at once, e.g. {"geometry.params.length": "300 mm", "boundaries.x1.force": "2 kN"}.

Inputs: template (required), changes, language.

delete_caseA
Destructive

Delete a case and all its runs. Ask the user first. confirm must equal the case_id.

Inputs: case_id (required), confirm (required), language.

describe_caseA
Read-onlyIdempotent

Summarize a case: revision, parameters, boundary roles per face, readiness, latest run. detail="full" adds the whole schema, the list of editable paths and allowed roles.

Inputs: case_id (required), detail, language.

detect_contactsA

Find faces of different parts that face each other within search_mm (separately modelled parts of an assembly, a gap that may close). apply=true adds them as contact_pairs of type bonded; change a pair with update_case(changes={"contact_pairs..type": "frictionless" | "frictional" | "no-separation", "...mu": 0.2}). Static analysis only (small sliding).

Inputs: case_id (required), apply, language, search_mm.

environment_checkB
Read-onlyIdempotent

List the solver engines available on this computer and how to install missing ones.

Inputs: language.

export_caseA

Write the case, its mesh and (by default) its latest finished result to a .nscase file that another Studio opens with import_case. Paths of this computer are removed from the file.

Inputs: case_id (required), language, include_results.

export_resultsA

Export the latest results to the case's exports folder: VTU for ParaView (tet10 and all nodal fields), CSV (nodal fields or modal frequencies), or a self-contained printable HTML report with images and verification gates. Returns the file path.

Inputs: format (required), case_id (required), language.

generate_meshA

Generate the mesh now (run_simulation also meshes automatically when needed). Returns node/element counts and quality.

Inputs: case_id (required), size, language.

genesis_resultB
Read-onlyIdempotent

Result of the latest (or given) Genesis run: kept volume, measured thinnest member, compliance or temperature rise, convergence, warnings, the convergence history and the STL download path.

Inputs: case_id (required), run_id, language.

get_gui_selectionA
Read-onlyIdempotent

Call first when the person says 'these faces', 'the faces I selected' or 選んだ面. Read the GUI selection, labels, descriptors in mm, roles and age; an empty or expired selection is a normal answer.

Inputs: language.

get_resultsC
Read-onlyIdempotent

Key numbers of the latest (or given) run, the ran/converged gates, the third gate (gates.verified_by: mesh convergence or reference match) and the verification line. stale=true means the case changed after this run.

Inputs: case_id (required), run_id, language.

import_caseC

Open a .nscase file on this computer as a new case; a result inside it opens as the current result.

Inputs: path (required), language.

import_geometryA

Create a case from a CAD file on this computer (STEP .step/.stp, IGES .iges/.igs, BREP .brep, or a mesh STL .stl such as a Blender export). STEP/IGES/BREP carry their own units; for STL say the units the file was written in (Blender exports metres unless the scene unit scale was changed; most CAD STL exports are mm). Returns the faces with number, surface type, area and centroid so you can pick which faces to fix, load, heat or cool (by position: e.g. the face with the lowest centroid z is the bottom). Then set roles with update_case using paths like boundaries.f12.role. physics: structural (free, fixed, symmetry = flat cut face normal to x/y/z: only the normal displacement is held, so a half/quarter/eighth model of a symmetric part needs far fewer elements; constraint = components "x"/"xy"/... held at zero on any face, e.g. a guide or slider; load = force + direction, pressure) | thermal (insulated, temperature, heat-flux, convection = h + tinf) | flow = internal flow, the solid is the fluid volume (wall, inlet = speed, outlet; one inlet and one outlet at least) | external = flow around the part (faces are wall; set flow.speed and flow.direction) | electrostatic = open, voltage, surface-charge (charge in C/m2); current = insulated, voltage, current (total A). At least one voltage face is required. Current optionally couples to Joule heating (physics.joule_heating, default true); set boundaries..thermal.role and its temperature/flux/h/tinf as in thermal. Set eps_r or sigma per material/body. conjugate = water through solids, two or more bodies (bodies..role fluid|solid, bodies..material; fluid faces water-wall, water-inlet = speed + temperature, water-outlet; solid faces as thermal).

Inputs: path (required), physics (required), units, language.

instant_estimateA
Read-onlyIdempotent

NovaSolver Flash: peak stress or deflection, heat flow or busbar resistance of a standard shape in milliseconds, from a Gaussian process fitted to points Studio solved and checked, so dimensions never solved get an answer too, with an error bar (mesh + interpolation). No case, mesh or solve. Refuses outside the solved ranges. ratios by shape (nu may be left out: 0.3): l_bracket: h_over_L, t_over_L, w_over_L, r_over_t, nu; plate_hole: d_over_W, t_over_W, nu; stepped_shaft: D_over_d, r_over_h, nu; grooved_shaft: D_over_d, r_over_h, nu; flat_shoulder: D_over_d, r_over_h, t_over_d, nu; thick_cylinder: b_over_a, nu; sphere_cavity: a_over_R, nu; square_hole_thermal: d_over_W, H_over_W; strip_hole_current: d_over_W, e_over_W. size (optional; without it only the dimensionless answers come back): l_bracket: L_mm, F_N, E_GPa; plate_hole: W_mm, F_N; stepped_shaft, grooved_shaft, flat_shoulder: d_mm, F_N; thick_cylinder: p_MPa, a_mm, E_GPa; sphere_cavity: D_mm, F_N; square_hole_thermal: length_m, k_W_mK, dT_K; strip_hole_current: W_mm, t_mm, sigma_MS_m, I_A. Linear elastic, these supports and loads only: l_bracket has the back of the upright fixed and F as the total force spread evenly over the top of the flange beyond the fillet (not a force at the tip); thick_cylinder is plane strain (ends held axially; for open or capped ends run a simulation); the shafts and bars are in plain tension. square_hole_thermal: steady conduction, the hole wall and the whole outside each at one temperature (dT apart), ends insulated, H the taller side. strip_hole_current: steady DC, the current uniform again far from the hole, e the hole's offset from the centre line; extra_resistance is what the hole adds to the plain bar. The error bar covers the numerics, not the real part.

Inputs: shape (required), ratios (required), size, language.

job_statusA
Read-onlyIdempotent

Progress of a job: state, progress 0..1, ETA, message, and gates when done (first_error when failed). Waits up to wait_s seconds (default 20, max 60) for the job to end before answering, so call it again right away while it is still running; no need to sleep between calls.

Inputs: job_id (required), wait_s, language.

list_casesA
Read-onlyIdempotent

List existing cases (newest first).

Inputs: no named parameters.

list_examplesB
Read-onlyIdempotent

List solved examples: verification cases already computed and checked against their closed-form reference, published with this Studio version on GitHub. open_example gives the case with its result in seconds, so you can show or inspect a result (get_results, verify_case, render_view, probe_results) before running anything.

Inputs: language.

list_templatesB
Read-onlyIdempotent

List case templates (each has a reference solution for verification).

Inputs: language.

open_exampleA

Open a solved example (name from list_examples) as a new case with its result (checked against the reference) already loaded. The download is checked against the published SHA-256. Editing the case marks the result stale; run it again.

Inputs: name (required), language.

probe_resultsA
Read-onlyIdempotent

Read result values where you ask, in mm: points = [[x, y, z], ...]; line = {"from": [x,y,z], "to": [x,y,z], "n": 50} (values along it, with min/max); faces = face keys (e.g. ["f3", "f7"]): area-weighted mean, min, max per quantity and, for flow, the volume flow out through the face (negative = into the fluid; exact solver fluxes on inlets and outlets, nodal estimate elsewhere). Quantities: structural disp ux uy uz (mm), vm, sxx syy szz sxy syz szx, s1 s3 (max/min principal) (MPa); thermal temp (°C); flow speed ux uy uz (m/s), p (Pa); conjugate temp, speed. Electric: v (V), ex/ey/ez/emag (V/m), jmag (A/m2), q (W/m3), temp (°C, when present). Electrode face statistics include charge_c or current_a from the solver (positive into the body). step selects a converged nonlinear frame (one-based, omitted = last); mode selects a modal shape. Values inside elements are interpolated (quadratic on tet10). A point outside the part gets inside=false and the nearest node's value. Up to 500 points in one call. Not available for 2D template grids or snappyHexMesh runs.

Inputs: case_id (required), line, mode, step, +4 more.

render_viewA
Read-onlyIdempotent

PNG with colour bar. quantity: disp|vm|uz|disp_x|disp_y|s1|s3|tresca|sxx|syy|szz|sxy|syz|szx (structural), speed|ux|psi (CFD), v|emag (electrostatic), temp|v|jmag|q (current/Joule heating). Empty = default. Numbers: get_results. quantity="faces" confirms setup with the person: numbered faces by role; highlight=face keys in accent. quantity="mode", mode=n: modal shape (one-based, max displacement 1). Nonlinear step=n: converged step (one-based, omitted=last). Contact: p_contact, contact_status, contact_gap, contact_slip; plasticity: peeq. Large deformation uses true scale.

Inputs: case_id (required), mode, step, view, +3 more.

run_genesisA

Genesis topology optimisation of the case's part: the meshed part is the design space, its face conditions (fixed / symmetry / constraint / load / pressure / moment / bearing / remote-force, or temperature / heat-flux for heat cases) are the supports and loads. Minimises compliance (stiffest part, or lowest heat-weighted temperature) for the volume_fraction of material kept. Manufacturing options: symmetry planes (through the part's centre), extrusion direction (milling/casting: the shape is constant along that axis), overhang = build direction for 3D printing (no overhang beyond 45 degrees). min_member_mm sets the filter and the thinnest member aimed for; the result reports the measured one. Faces with conditions stay solid (keep_bc_faces) and keep_faces adds more. Symmetry planes that the supports and loads share are solved on the half model (same design, about half the time). refine=True adds a finishing pass: the part is re-optimised near its surface on a grid about twice as fine (same minimum member in mm), kept only when it is stiffer; about 2-3x the time, not with cells above ~400k. Returns a job_id when it does not finish in ~20 s: call job_status. The result is a closed STL (with extrusion also a flat-faced STEP); analyse it again (stress, CalculiX) before use.

Inputs: case_id (required), cells, refine, language, +10 more.

run_simulationA

Start the solver as a background job. Waits up to ~20 s: if finished, returns results and gates; otherwise returns job_id - then call job_status, which waits for the job. preview = built-in solver, final = CalculiX/OpenFOAM when offered by the template. Electrostatics and DC/Joule always use the built-in FEM.

Inputs: case_id (required), mode, language.

run_sweepA

Parameter study: one clone of the case per value of path (e.g. path="boundaries.f5.force", values=["100 N", "200 N", "400 N"]; or materials.solid.preset, mesh.size, boundaries.f2.speed), each started as a background job (they run one after another). study="convergence" runs a mesh study for each, so every variant gets a mesh convergence check. Up to 8 values. Poll each job_id with job_status, then compare_runs on the case_ids.

Inputs: path (required), values (required), case_id (required), mode, +2 more.

stop_jobC
Destructive

Stop a running job.

Inputs: job_id (required), language.

surrogate_predictA
Read-onlyIdempotent

Answer from a finished surrogate in milliseconds, no solve: values = {parameter path: number} in the units given at build time. Refuses outside the built ranges. The error bar covers interpolation only; the answer also carries the mesh error of the solves (see mesh in the result), and nothing here checks the material, the supports or the real part.

Inputs: values (required), study_id (required), outputs, language.

surrogate_statusB
Read-onlyIdempotent

Progress of a surrogate build, and once done the check on held-out points and any warnings. Without study_id: all of them.

Inputs: language, study_id.

undo_changeB

Undo the latest change by anyone (person or AI), and tell what was undone. redo=True reapplies it.

Inputs: case_id (required), redo, language.

update_caseA

Change case fields. changes = {dotted.path: value}. Paths: geometry.params. (templates), boundaries..role (faces x0..z1 for templates, f for imported shapes), boundaries..force + .direction (-z,+z,-y,+y,-x,+x,normal) | .pressure | .speed | .temperature | .flux | .h + .tinf, materials.solid.preset|E|nu|sy|k|eps_r|sigma, materials.fluid.preset|nu, mesh.size (coarse|normal|fine), run.mode (preview|final), boundaries..voltage|charge|current; physics.joule_heating (boolean); boundaries..thermal.role and thermal fields. face_groups. = [face keys] (null deletes); boundaries.@. applies to the whole named group. mesh.refine. = element size on that face of an imported part, e.g. "0.3 mm" for a small fillet or notch where the peak stress sits (scaled x1.6 / x1 / x0.625 for coarse / normal / fine; "none" removes it). Assemblies (STEP with several bodies, structural/thermal/electric): body_materials. = a preset (steel, aluminium, concrete, insulation, glass, wood, fr4, silicon, ptfe, alumina, ...), body_props..k|E|nu|eps_r|sigma overrides one value. Set the role first (same call is fine); value fields must match the role. Structural: physics.analysis=modal|static|nonlinear|buckling, physics.modes=1..30 (buckling: load factors and critical loads of the applied loads); materials.solid.alpha (1/K), rho; physics.nonlinear={large_deformation:true,steps:"auto" or n,max_iterations:25,path:[load fractions],face:key}. materials.solid.model and body_props..model=linear|elastoplastic|neo-hookean; sy and H (post-yield tangent, Pa). Elastoplastic supports small strain only; neo-hookean requires large deformation. Pressure follows deformation. contacts..type=bonded|frictionless|frictional|no-separation, .mu, .offset (positive interference, negative gap). Touching shared faces only. Missing contacts are bonded. displacement role: ux/uy/uz with length units, null = free. physics.T_ref (degC), physics.thermal_load.mode=none|uniform|solve and .temperature; solve uses thermal face fields. physics.gravity.enabled, .g (m/s2), .direction; physics.rotation.enabled, .rpm, .axis=x|y|z, .axis_point=[mm]. Roles moment (torque in N-m + direction), bearing (force + direction perpendicular to cylinder axis), beam-clamp (axis-aligned planar beam section: rigid motion held, lateral contraction free), remote-force (force + direction + point={value:[x,y,z],unit:mm}); body_props..alpha|rho. Values with units: "5 mm", "2 kN", "70 GPa" or {"value": 5, "unit": "mm"}. Returns the diff and new readiness.

Inputs: case_id (required), changes (required), expected_revision (required), language.

validate_caseA
Read-onlyIdempotent

Readiness check. red = cannot solve (fix first), orange = solvable with caveats, green = ready. Each item says which step to fix and suggests the update_case call. It also states the setup in words (which face carries what load and which way, what holds the part, the material): no check can tell a load pointing the wrong way or on the wrong face, so compare it with what the person asked for before solving.

Inputs: case_id (required), language.

verify_caseB
Read-onlyIdempotent

Compare the latest result with the case's reference (analytic or literature), or report the mesh convergence study. Without either, the third gate is unchecked: offer check_convergence.

Inputs: case_id (required), language.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 37 tools

    Disambiguation4/5

    Most tools occupy a clearly distinct slot in a real simulation workflow (case lifecycle, meshing, solving, results, sweeps, surrogates, topology optimisation, print screening). A few boundaries are fuzzy: instant_estimate vs surrogate_predict (both 'instant answer with error bar'), check_convergence vs run_sweep with study="convergence", and describe_case vs validate_case all require reading the descriptions closely. The thorough descriptions largely resolve these, but misselection is still plausible.

    Naming Consistency4/5

    The dominant pattern is verb_noun snake_case (create_case, import_geometry, run_simulation, probe_results, build_surrogate), applied consistently across action tools. A handful of resource-first names (job_status, surrogate_status, genesis_result, environment_check) and one verbless name (instant_estimate) break the pattern, though they form a readable sub-convention for status/artifact tools.

    Tool Count3/5

    37 tools is well past the comfortable range, but the surface genuinely spans many sub-domains: case CRUD, CAD import, meshing, solving, jobs, results inspection, verification, exports, parameter sweeps, surrogates, topology optimisation, and a standards-based estimator. Nothing is obviously trivial, yet several clusters (four surrogate tools, four result-inspection tools, two convergence paths) make the set heavier than it needs to be.

    Completeness4/5

    Case lifecycle is essentially complete (create/import/open/clone/update/undo/delete/export/list/describe/validate), and the solve-inspect-verify-export loop is fully covered, including background jobs and stopping them. The main gap is run management: get_results accepts 'the given run' but no tool lists a case's runs or deletes a single run, so agents working with multiple runs per case hit a dead end. There is also no standalone way to discover valid material presets or parameter paths other than describe_case(detail="full").

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables language models to perform hardware engineering tasks including CAD part design and heat transfer simulations. Provides tool calls for building mechanical components and running thermal analysis through natural language interactions.
      -
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI agents to drive OpenFOAM end to end: cloning tutorials or custom cases, editing dictionaries, meshing and running solvers in the background, tracking convergence and job status, and analyzing results. It also renders flow images — slices, patches, streamlines, iso-surfaces and residual or force plots — back to the agent.
      25
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to drive desktop CAD software through natural language with verified execution, failure recovery, and traceable results across modeling, assemblies, drawings, exports, motion, FEA, and related engineering workflows.
      MIT