NovaSolver Studio MCP Server
OfficialDrive NovaSolver Studio locally from an MCP client to set up, run, verify, visualize, and export engineering simulations.
Check available solvers and install guidance; list templates, cases, and verified solved examples.
Create cases from templates, import CAD/mesh (STEP/IGES/BREP/STL) or .nscase files, and export portable cases.
Configure structural, thermal, internal/external flow, conjugate heat transfer, electrostatic, and DC/Joule-heating cases, including materials, boundaries, assemblies, contacts, modal/buckling/nonlinear settings, and mesh refinement.
Validate readiness, read GUI face selections, undo/redo changes, generate meshes, and detect contact pairs.
Run preview or final solver jobs in the background, monitor/stop jobs, and run mesh-convergence/GCI studies.
Retrieve and verify results against analytic/literature references; compare runs and probe results at points, lines, or faces.
Render result images or numbered face views; export VTU/CSV/HTML reports; run 3D-print strength checks.
Use NovaSolver Flash instant estimates for standard shapes, build/predict/manage surrogate models, and run parameter sweeps on cloned cases.
Delete cases only with explicit confirmation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NovaSolver Studio MCP Server Import bracket.step, fix the bottom face, apply 500 N on top, run and verify it."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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

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.

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_surrogatesolves 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_predictthen 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_estimatetool 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.
|
|
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 |
|
|
Linux |
| Install ESI packages from openfoam.com; detected under |
Windows | Put | 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:8765Solvers are found automatically when installed (without them, the built-in preview solvers still work):
CalculiX: put
ccx_static.exeundersolvers/calculix/or setNOVASTUDIO_CCX.OpenFOAM (ESI Windows MinGW build): install to
%LOCALAPPDATA%\NovaSolverStudio\solvers\openfoam(an ASCII-only path) or setNOVASTUDIO_OPENFOAM. Put Microsoft MPI'smsmpi.dllin%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 | Windows: plugin installation and a model-driven cantilever solve checked | |
Gemini CLI | Windows: isolated extension installation and MCP connection checked; no model-driven solve | |
Codex | Windows: configuration handling and a model-driven cantilever solve checked | |
Qwen Code | 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
Tried Studio? Share a short experience or report a problem. English, 日本語 and 中文 welcome. Posts and GitHub profiles are public; omit personal details and confidential models/results.
Design:
docs/DESIGN.md· Roadmap:docs/ROADMAP.md· Development notes:docs/DEVELOPMENT.mdTests:
python -m pytest backend/tests -q
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 toolsbuild_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_runsCRead-onlyIdempotent
Side-by-side parameters, gates and key numbers of several cases (e.g. a parameter study).
Inputs: case_ids (required), language.
control_surrogateADestructive
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_caseADestructive
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_caseARead-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_checkBRead-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_resultBRead-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_selectionARead-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_resultsCRead-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_estimateARead-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_statusARead-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_casesARead-onlyIdempotent
List existing cases (newest first).
Inputs: no named parameters.
list_examplesBRead-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_templatesBRead-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.
print_checkARead-onlyIdempotent
3D-print strength check of a solved linear static case in PLA, PETG or ABS. FDM parts are weakest between layers, so for each print direction (layers normal to x, y or z) it compares the tension and shear on the layer plane with the layer-bond strength and the von Mises stress with the filament strength, and names the best orientation. Strengths default to conservative typical values (100 % infill); pass the filament datasheet values if known. Stresses within about two elements of fully fixed faces are left out and their peak is reported separately (support artefacts). Screening only: say so to the person.
Inputs: case_id (required), run_id, language, strength_z_mpa, +1 more.
probe_resultsARead-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_viewARead-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_jobCDestructive
Stop a running job.
Inputs: job_id (required), language.
surrogate_predictARead-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_statusBRead-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_caseARead-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_caseBRead-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
Scored across 37 tools
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.
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.
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.
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
Related MCP Connectors
AI-callable calculators and engineering models with real formulas. No hallucinated math.
Run FDS, OpenFOAM, CalculiX and other engineering simulations on cloudHPC from your AI assistant.
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Work on physical engineering projects, inspect CAD/BIM, run simulations, and manage project context
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
- AlicenseNot gradedqualityCmaintenanceEnables coding agents to run bounded COMSOL simulations with contract validation, model inspection, provenance tracking, and deterministic verifier feedback.2MIT
- AlicenseBqualityBmaintenanceEnables 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.251MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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

