openfoam-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_solversA | List the OpenFOAM solver templates this server can scaffold, with a one-line description of each and when to use it. |
| first_cell_heightA | Estimate the wall-normal first-cell height needed to hit a target y+ on a turbulent boundary layer (flat-plate correlation). Use before meshing to set the near-wall cell size. Defaults are for air at sea level. |
| y_plus_from_heightB | Predict the y+ that a given first-cell height will produce, and whether it lands in the viscous sublayer, buffer layer (avoid), or log-law region. |
| flow_regimeA | Reynolds number, laminar/transitional/turbulent classification, and a
turbulence-model recommendation. |
| inlet_turbulenceA | Compute inlet k, epsilon, omega and nut from turbulence intensity (fraction, e.g. 0.05) and turbulent length scale (m). Use to fill the 0/ directory inlet/internalField values for a RANS case. |
| time_step_from_cflB | Maximum/target transient time step from a target Courant number (dt = Co * dx / U). |
| scaffold_caseA | Create a runnable OpenFOAM case skeleton at openfoam_flavor selects the case style:
|
| read_dictA | Read an OpenFOAM dictionary file. If |
| set_dict_entryA | Set a keyword in a dictionary file. Uses foamDictionary when available (supports nested entries like 'solvers/p/tolerance'); otherwise falls back to editing a top-level single-line entry as text. |
| set_boundary_conditionA | Set (or insert) the boundaryField entry for a patch in a 0/ field file, e.g. field_file='0/U', patch='inlet', bc_type='fixedValue', value='(10 0 0)'. |
| check_caseA | Logically validate a case directory: required system files present, solver read, turbulence fields consistent with the model, and 0/ boundary patches matching the mesh. Returns errors, warnings and a pass flag. Does not require OpenFOAM to be installed. |
| analyze_residualsA | Parse an OpenFOAM solver log file and report per-field residual drop, Courant number, bounded fields, and a convergence verdict (converged / diverging / NaN / still running). |
| run_openfoam_commandA | Run a whitelisted OpenFOAM utility (blockMesh, checkMesh, foamDictionary, renumberMesh, decomposePar, foamListTimes, surfaceCheck, transformPoints) inside a case directory. Requires OpenFOAM installed and its environment sourced. Returns return code and the tail of stdout/stderr. |
| recommend_setupA | Turn a plain-language goal (e.g. 'flow through a pipe', 'drag on a car') into a complete setup plan: recommended solver, turbulence model, target y+, which blockMesh preset to auto-generate, the 0/ fields needed, per-patch boundary conditions, and a numbered step list. If velocity/length are missing it returns targeted questions to ask the user first. Start here. |
| list_mesh_presetsA | List the auto-blockMesh geometry presets (channel, flatplate, step, box). |
| generate_blockmeshA | Auto-generate a valid, boundary-layer-graded blockMeshDict and write it to output_path (typically '/system/blockMeshDict'). Pick a preset (channel, flatplate, step, box). If first_cell_height > 0, wall-normal grading is computed automatically so the near-wall cell matches that height (feed it the value from the first_cell_height tool to hit a target y+). This removes the hardest, most error-prone part of setting up a case. |
| analyze_stlA | Analyze an STL surface (ASCII or binary): triangle count, bounding box, surface area, enclosed volume, and a watertight/closed-manifold check with the count of unpaired edges — plus a suggested background cell size and snappyHexMesh advice. No OpenFOAM needed. Use before snappyHexMesh. |
| mesh_quality_reportA | Parse a checkMesh log file into a quality verdict: max/avg non-orthogonality, skewness, aspect ratio, pass/fail, and concrete fvSchemes/fvSolution advice (e.g. nNonOrthogonalCorrectors). Works from a saved log without OpenFOAM installed. |
| pipe_pressure_dropB | Darcy friction factor (Colebrook-White for turbulent, 64/Re laminar) and Darcy-Weisbach pressure drop / head loss for pipe flow. Defaults are for water; set roughness (m) for rough pipes. Handy sanity check against CFD. |
| heat_transfer_pipeB | Convective heat-transfer coefficient for internal flow (Dittus-Boelter Nu = 0.023 Re^0.8 Pr^n; laminar Nu = 3.66). Defaults are for water. Returns Nusselt number and h (W/m^2K). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 20 tools
Each tool serves a distinct purpose: analysis (residuals, mesh quality), setup (scaffolding, blockMesh), physical calculations (y+, pressure drop), config editing (dict, boundary conditions), and execution. The inverse pair first_cell_height/y_plus_from_height are clearly complementary, not overlapping. No two tools could be easily confused.
All tool names follow a consistent snake_case convention with a verb_noun pattern (analyze_residuals, scaffold_case, run_openfoam_command) or descriptive noun phrases (pipe_pressure_drop, heat_transfer_pipe). No mixing of camelCase or inconsistent verb styles, making the set predictable.
20 tools is on the higher end but well-scoped for a CFD setup and analysis server. The count is justified by covering the full workflow: planning, mesh generation, case configuration, execution utilities, and diagnostics. Slightly above the 15-tool sweet spot but not excessive.
The tools cover the complete lifecycle from recommended setup through mesh generation, case validation, boundary condition editing, running whitelisted utilities, and analyzing both residuals and mesh quality. Minor gaps: no direct solver execution (by design) and no post-processing tools, but core workflows are fully supported.