Skip to main content
Glama

OpenFOAM MCP by iLab — a CFD co-pilot for any MCP client

openfoam-mcp is a Model Context Protocol server that turns an AI assistant (Claude Desktop, and any other MCP client) into an OpenFOAM setup and debugging co-pilot. It scaffolds runnable cases, edits dictionaries safely, sizes your near-wall mesh, computes inlet turbulence values, and reads solver logs to tell you whether a run converged or blew up — all without you leaving the chat.

Most of the tools are pure Python and need no OpenFOAM installation, so they work anywhere. The few that call OpenFOAM utilities (e.g. blockMesh, checkMesh) detect the environment and degrade gracefully when it is absent.

Validated end-to-end on real OpenFOAM (ESI v1912). Generated cases run through blockMesh and the solvers — simpleFoam converges, all four mesh presets produce valid meshes, and the real logs are read back correctly by the residual and mesh-quality parsers. See VALIDATION.md.

OpenFOAM version support

scaffold_case takes an openfoam_flavor:

  • classic (default) — application <solver>; with transportProperties. Validated on ESI v1912; works on ESI v2006+ and Foundation v8–v10.

  • foundation-v12application foamRun; + solver incompressibleFluid; with physicalProperties, for OpenFOAM Foundation v11/v12. Run foamRun instead of the solver name.

Why it's useful

Setting up a CFD case is fiddly bookkeeping: the right y+, matching boundary patches between the mesh and every 0/ field, consistent turbulence fields for the chosen model, a stable Courant number, and reading pages of residual output to see if it converged. This server does that bookkeeping through natural language.

Related MCP server: Mechanical MCP Server

Make the hard part simple

Two tools do the work most people find fiddly:

  • recommend_setup — tell it your goal in plain words ("flow through a pipe", "drag on a car") and it returns the solver, turbulence model, target y+, mesh preset, per-patch boundary conditions and a numbered plan — asking you for only the numbers it still needs.

  • generate_blockmesh — auto-writes a valid, boundary-layer-graded blockMeshDict from a geometry preset. Give it your target first-cell height and it computes the wall grading for you. No hand-writing vertices or blocks.

Tools (20)

Tool

What it does

recommend_setup

Start here. Goal to solver, model, mesh preset, BCs, plan (asks for missing inputs).

generate_blockmesh

Auto blockMesh with wall grading auto-sized to your y+ (presets: channel, flatplate, step, box).

list_mesh_presets

List the blockMesh geometry presets.

list_solvers

List scaffold-able solver templates (simpleFoam, pimpleFoam, icoFoam).

flow_regime

Reynolds number, laminar/turbulent verdict, turbulence-model recommendation.

first_cell_height

First-cell height for a target y+ (flat-plate correlation).

y_plus_from_height

Inverse: predicted y+ from a cell height, with regime warning.

inlet_turbulence

Inlet k, epsilon, omega, nut from intensity + length scale.

time_step_from_cfl

Transient time step from a target Courant number.

pipe_pressure_drop

Colebrook-White friction factor + Darcy-Weisbach pressure drop / head loss.

heat_transfer_pipe

Convective h for internal flow (Dittus-Boelter Nusselt).

scaffold_case

Write a runnable case tree (system/, constant/, 0/) for a solver.

read_dict

Read a dictionary file or a single entry (via foamDictionary).

set_dict_entry

Set a dictionary keyword (nested via foamDictionary; text fallback).

set_boundary_condition

Set/insert a patch's boundaryField entry in a 0/ field.

analyze_stl

STL watertight/manifold check, bbox, area, volume, snappyHexMesh prep.

mesh_quality_report

Parse a checkMesh log into a non-ortho/skewness/aspect verdict + scheme advice.

check_case

Validate a case: files present, turbulence fields consistent, patches match mesh.

analyze_residuals

Parse a solver log into per-field residual drop + convergence verdict.

run_openfoam_command

Run a whitelisted OpenFOAM utility inside a case (if installed).

Install & run

The server ships as a PyPI package with a console entry point, so the usual zero-install runner is uvx:

uvx openfoam-mcp

or install it into an environment:

pip install openfoam-mcp
openfoam-mcp

Claude Desktop configuration

Add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

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

Restart Claude Desktop; the OpenFOAM tools appear under the tools menu.

Example prompts

  • "I have air at 30 m/s over a 0.5 m chord. What Reynolds number is that, and what first-cell height do I need for y+ = 1?"

  • "Scaffold a steady simpleFoam case in ./duct at 12 m/s and check it."

  • "Set endTime to 3000 in ./duct/system/controlDict."

  • "Read ./duct/log.simpleFoam and tell me if it converged."

Solver templates

Template

Physics

Typical use

simpleFoam

Steady incompressible RANS (k-ω SST)

Ducts, external aero, general steady flow

pimpleFoam

Transient incompressible RANS (k-ω SST)

Vortex shedding, unsteady flows

icoFoam

Transient incompressible laminar

Low-Re teaching cases (cavity, low-Re pipe)

Templates follow the OpenFOAM foundation v9–v12 / ESI v2306+ tutorial style (transportProperties + momentumTransport). The generated box mesh has patches inlet, outlet, walls, frontAndBack.

Development

pip install -e ".[dev]"
pytest

License

MIT © 2026 iLab (Tanawat Manokieng)

Available Tools

20 tools
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).

ParametersJSON Schema
NameRequiredDescriptionDefault
log_pathYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses the primary behavior (parsing and reporting) and lists specific outputs, which is informative. However, it does not mention possible side effects (e.g., whether it modifies files), error handling for missing/invalid logs, or limitations such as large file sizes. It is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the main action (parse) and lists the specific reports. No filler or repetition. It efficiently communicates the tool's purpose in a compact form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one parameter, no output schema, and no annotations, the description gives the essential information an agent needs to call the tool: pass a log file and receive an analysis. It does not describe the return format (e.g., JSON structure), but that might be inferred. It lacks info on edge cases (e.g., invalid file) but is mostly complete for a straightforward read/analysis tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single parameter 'log_path'. It implies the parameter is a path to an OpenFOAM solver log file, but does not specify any format constraints (e.g., file extension, absolute vs relative path) or additional context like typical log file naming. It adds some meaning beyond the bare parameter name, but not deeply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Parse') and resource ('OpenFOAM solver log file'), and enumerates the exact outputs (residual drop, Courant number, bounded fields, convergence verdict). It clearly distinguishes from siblings like run_openfoam_command or check_case, since no other tool claims to analyze residuals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., that a solver log must exist) or when not to use it. The phrase 'parse an OpenFOAM solver log file' implies usage when a log file is available, but this is not stated as a recommendation or compared to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers: it discloses the input format (ASCII or binary), the full set of computations performed, the watertight/closed-manifold check, and the advisory output (cell size + snappyHexMesh advice). The only untold behaviors are error handling for malformed files and performance on large STLs, which are minor for a local analysis tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The output list is densely packed, and the placement is smart — the advisory output and the workflow guidance ('Use before snappyHexMesh') are deferred to the second sentence. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description gives a nearly complete picture of what the agent gets back and what it needs as input. The only gap is the return format (how results are structured), which matters slightly given the absence of an output schema, but it's a modest omission at this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the schema labels the sole parameter only as 'Path' with no description, so the description must compensate. It partially does: 'Analyze an STL surface (ASCII or binary)' implies path points to an STL file. However, it never explicitly states that the 'path' parameter is the file path to the STL that gets analyzed; the connection is inferred rather than stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Analyze') and resource ('STL surface') and enumerates concrete outputs: triangle count, bounding box, surface area, enclosed volume, watertight check, unpaired edges, and mesh advice. It clearly distinguishes itself from the sibling set, which are all OpenFOAM solver/mesh tools (analyze_residuals, generate_blockmesh, mesh_quality_report, etc.) — this is the only STL-analysis tool among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before snappyHexMesh' gives explicit placement in the workflow, and 'No OpenFOAM needed' sets an important precondition. There are no truly overlapping siblings performing STL analysis, so explicit alternative-routing isn't necessary, but the description could be stronger about when NOT to use it (e.g., for non-STL or use with mesh_quality_report vs. pre-mesh checks).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_dirYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden and largely meets it: it discloses the return shape (errors, warnings, pass flag) and explicitly notes it does not require OpenFOAM installed, signaling this is a non-mutating logical check rather than a code-executing operation. It does not explicitly state 'does not modify the case,' but 'logically validate' and the no-OpenFOAM note make the harmless read-only nature clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, and correctly front-loaded with the verb and resource. The colon-enumerated validation checks are compact and specific, and the return behavior plus the no-OpenFOAM caveat each earn their place. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description covers the essentials: what it validates, what it returns (errors/warnings/pass flag), and the no-OpenFOAM prerequisite. The only minor gap is not defining the threshold between 'error' and 'warning,' but this is unlikely to block correct invocation for an OpenFOAM-literate agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only partially does. The single parameter case_dir is self-evident from the schema, and the description confirms it operates on 'a case directory.' For a trivial single string parameter this is adequate, but the description adds no specifics about path format, absolute vs relative paths, or required structure beyond the bare directory concept.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Logically validate') and resource ('a case directory'), then enumerates exactly what is checked: required system files, solver read, turbulence field consistency, and 0/ boundary patches matching the mesh. This clearly distinguishes it from siblings like run_openfoam_command, mesh_quality_report, and scaffold_case — none of which perform whole-case logical validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose strongly implies the use case — validate a case before running a solver — and the return of a pass flag is obvious value. However, the description never explicitly states when to use it versus alternatives (e.g., mesh_quality_report for mesh concerns, read_dict for inspecting settings), nor does it state when not to use it. Guidance is only implied, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYes
y_plusYes
densityNo
velocityYes
kinematic_viscosityNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the calculation is an estimate based on a correlation and that defaults are for air at sea level, which is useful context. However, it does not mention the output format or units, nor any limitations of the correlation, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states the purpose and method, the second gives usage context and default information. No irrelevant words, and the essential facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and no annotations, so the description should be comprehensive. It lacks details on the specific formula, units, assumptions (e.g., flat plate behavior), and what the output represents. An agent might not know how to choose length or interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides only a hint about defaults (air at sea level) but does not explain the role of velocity, length, or the fluid properties. The parameter names are somewhat self-explanatory, but an agent cannot determine what length refers to (e.g., characteristic length) or how the inputs relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool estimates the first-cell height to achieve a target y+ on a turbulent boundary layer using a flat-plate correlation. It explicitly says 'Use before meshing to set the near-wall cell size,' which distinguishes it from sibling tools like y_plus_from_height.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage context: before meshing to set near-wall cell size. It does not explicitly name alternative tools or exclusions, but the purpose is specific enough that an agent can infer when to use it. Missing explicit 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flow_regimeA

Reynolds number, laminar/transitional/turbulent classification, and a turbulence-model recommendation. geometry = 'internal' (pipe/duct) or 'external' (plate/bluff body/airfoil).

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYes
geometryNoexternal
velocityYes
kinematic_viscosityNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without any annotations, the description carries the full burden of behavioral disclosure. It transparently states what the tool returns (Reynolds number, classification, and a turbulence-model recommendation) and implies it is a pure calculation with no side effects. While it does not explicitly mention read-only behavior or error handling, the output-focused description is sufficient for a straightforward computational tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the primary output front-loaded in the first sentence and the geometry clarification in the second. There is no fluff, and every word adds value. It is concise and well-structured for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is simple but has no output schema and 0% schema coverage, the description needs to explain all inputs and return values. It covers the output but leaves three of four parameters (velocity, length, kinematic_viscosity) without meaningful description. Units or typical values are absent, and the exact output format is not specified. The description is incomplete for a novice agent, though adequate for an expert.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for parameter documentation. It only explains the 'geometry' parameter (internal vs. external), leaving 'velocity', 'length', and 'kinematic_viscosity' unexplained. Although the parameter names are self-explanatory to an informed user, the description adds no detail about units, characteristic length, or typical values, which is a significant gap given the absence of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's output: Reynolds number, laminar/transitional/turbulent classification, and a turbulence-model recommendation. It also distinguishes geometry types (internal/external), which is specific and useful. None of the sibling tools appear to compute a flow-regime classification, so it is well differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no mention of when to use this tool versus alternatives, no prerequisites, and no explicit 'use when' or 'do not use' guidance. The only contextual hint is the geometry parameter, which relates to parameter semantics rather than usage guidance. The agent is left to infer when this is the appropriate tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
heightNo
lengthNo
presetNochannel
cells_xNo
cells_yNo
cells_zNo
output_pathYes
first_cell_heightNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full behavioral burden. It discloses the core behavior: generating a valid blockMeshDict, auto-computing grading based on first_cell_height, and writing to output_path. However, it does not mention side effects (e.g., overwriting existing files), error conditions (e.g., invalid preset), or prerequisites (e.g., whether the case directory must exist). These gaps would matter for an agent making a call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: the first sentence defines the primary function and output; the second explains the grading behavior with a link to another tool; the third reinforces value. No wasted words, and critical info is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters, no annotations, and no output schema, the description is incomplete. It fails to explain most parameters, does not describe the return value or any output besides the written file, and omits error handling or validation behavior. The absence of sibling differentiation and explicit usage exclusions further reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must explain the parameters. It only clarifies output_path, preset, and first_cell_height. The geometric parameters (length, height, depth, cells_x, cells_y, cells_z) are not described at all; an agent cannot infer their meaning or how they interact with the preset. This is a significant underserved area.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Auto-generate a valid, boundary-layer-graded blockMeshDict and write it to output_path'), names the resource (blockMeshDict), and clarifies the output location. It mentions the preset options and the grading feature, clearly distinguishing it from sibling tools like scaffold_case or list_mesh_presets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to generate a boundary-layer-graded mesh) and how to use it in conjunction with the first_cell_height tool to achieve a target y+. It does not explicitly name alternative tools or state when not to use this tool, but the use case is well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
densityNo
heatingNo
prandtlNo
diameterYes
velocityYes
conductivityNo
kinematic_viscosityNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the correlation and that defaults are for water, but omits important behavioral details: the heating boolean parameter's effect (n exponent changes), validity ranges (e.g., Re > 10000), assumptions like fully developed flow, and what happens for non-water fluids. It is not misleading, but leaves gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, two sentences, and front-loads the key formula and return type. It avoids fluff, though the omission of parameter explanations suggests a trade-off between brevity and completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no output schema, and no annotations, the description is under-specified. It does not explain how to set parameters correctly (e.g., units, heating flag), nor does it state the correlation's applicability (turbulent vs laminar thresholds). An agent might misapply it or set the heating boolean incorrectly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'Defaults are for water' which hints at density, Prandtl, conductivity, and kinematic viscosity defaults, but does not explain the meaning of each parameter, units, or the role of the 'heating' boolean. It does not add enough beyond the raw schema to guide correct parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it computes convective heat-transfer coefficient for internal flow, specifies the exact correlation (Dittus-Boelter) and its laminar counterpart, and lists the return values (Nusselt number and h in W/m^2K). It uses specific verbs and resource, and is clearly distinct from sibling tools like pipe_pressure_drop or flow_regime.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context (internal flow, water defaults) but does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or when not to use it. Siblings like pipe_pressure_drop are obviously different, but no routing guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
velocityYes
length_scaleYes
kinematic_viscosityNo
turbulence_intensityYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses the quantities produced (k, epsilon, omega, nut) and the purpose context. However, it leaves ambiguous whether the tool writes to the case files or merely returns values, and it doesn't disclose the return/output format or any side effects. Partial disclosure, adequate but with gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences with no filler. The primary compute function and its inputs are front-loaded, and the usage context follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, no annotations, and 0% schema coverage, the description is reasonably complete on purpose and use-case but falls short on parameter rigor: it omits units for velocity and kinematic_viscosity and does not disclose the return format or the optional nature of kinematic_viscosity (which has a default in the schema). Adequate for a niche physics tool but with clear documentation gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It adds real meaning to two of four parameters: turbulence_intensity is a fraction (e.g., 0.05) and length_scale is in meters. However, it does not specify units for velocity or kinematic_viscosity, nor explain kinematic_viscosity's role in the computation. Only partial compensation for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (compute) tied to specific resources (inlet k, epsilon, omega, nut) and states the exact derivation inputs (turbulence intensity as a fraction, turbulent length scale in meters). It clearly differentiates from all sibling tools, none of which compute turbulence inlet values, so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives concrete context for when to use the tool: 'Use to fill the 0/ directory inlet/internalField values for a RANS case.' This anchors the tool to the RANS setup workflow. It doesn't name explicit alternatives to exclude, but no sibling offers the same function, so the absence of exclusions is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mesh_presetsA

List the auto-blockMesh geometry presets (channel, flatplate, step, box).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The verb 'list' clearly implies a read-only operation with no side effects, but the description does not explicitly state that it only returns information or that it has no impact on the case. Still, for a trivial listing tool, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence that lists the presets with no filler. It is front-loaded with the purpose and provides all relevant information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and no annotations, the description fully specifies what the tool returns (the preset names). Nothing else an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty (coverage 100%). The description adds value by naming the exact preset values, which is helpful even though no parameter arguments are needed. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific action (list) and resource (auto-blockMesh geometry presets), and enumerates the actual presets (channel, flatplate, step, box). This is unambiguous and distinguishes it from sibling tools like generate_blockmesh, which actually create meshes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to discover available presets before calling generate_blockmesh, but it never explicitly states when to use it or mentions alternatives. Given that it is the only listing tool for presets, the usage context is clear but not explicitly spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_solversA

List the OpenFOAM solver templates this server can scaffold, with a one-line description of each and when to use it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden. It explicitly states the output includes 'a one-line description of each and when to use it,' which fully describes the tool's behavior. As a read-only listing operation, no side effects need disclosure. The description is transparent within the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-crafted sentence. It front-loads the core action ('List the OpenFOAM solver templates') and immediately adds the scope and output detail. No wasted words; every element serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool, the description covers all necessary aspects: what is listed, the scope, and what each entry includes. There is no output schema, but the description itself specifies the return content (name, one-line description, when to use). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is empty with 100% coverage. No parameter explanation is needed. The description correctly omits parameter details, and the baseline of 4 applies because there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'OpenFOAM solver templates', and the specific scope 'this server can scaffold'. It distinguishes itself from siblings like list_mesh_presets by focusing on solvers rather than mesh presets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when an agent needs to know available solver templates and their use cases. It doesn't explicitly mention alternatives or conditions to avoid using it, but the purpose is clear enough in a set of qualitatively different siblings. No exclusions are stated, which fits a listing tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
log_pathYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It describes the parsing action and the output (verdict with metrics and advice), but it doesn't explicitly state that the tool is read-only or how it handles malformed logs. Given it's a simple parser, this is adequate but not fully detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, information-dense sentence that front-loads the action and includes the key outputs. No wasted words, and the critical detail about working without OpenFOAM is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential aspects: input (log path), processing (parse), and output (verdict with metrics and advice). It lacks specifics on return format or error handling, but for a one-parameter tool with no annotations, this is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must clarify the parameter. It defines log_path as 'a checkMesh log file' which aligns with the parameter name, but adds no extra detail about format constraints or path handling. The meaning is self-evident from the context, so a baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it parses a checkMesh log file into a quality verdict with specific metrics (non-orthogonality, skewness, aspect ratio, pass/fail) and advice. This clearly distinguishes it from sibling tools like analyze_residuals and list_solvers, which address different concerns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you have a saved checkMesh log and want a quality report without running OpenFOAM. It doesn't explicitly list exclusions or name alternatives, but the targeted nature of the tool makes its usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYes
densityNo
diameterYes
velocityYes
roughnessNo
kinematic_viscosityNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully reveals the underlying equations (Colebrook-White for turbulent, 64/Re for laminar) and that defaults are for water. However, it does not disclose the output format, whether both friction factor and pressure drop are returned, or any limits or side effects, which are gaps for a computational tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—two sentences—with the core computation front-loaded in the first sentence. It avoids fluff and imparts essential context (equations, defaults) efficiently, though it could be more structured with explicit output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, no annotations, and no output schema, the description is incomplete. It lacks information about return values, units for all inputs, and any preprocessing or error conditions. The agent would need to infer expected behavior, making this insufficiently complete for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explicitly mentions the roughness parameter (in meters) and indicates density and kinematic viscosity default to water values, which adds meaning beyond the schema. However, it doesn't explain velocity, diameter, or length, or the optional parameters in any depth, leaving the agent partially uninformed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes Darcy friction factor and Darcy-Weisbach pressure drop/head loss for pipe flow, which specifies a precise verb and resource. It distinguishes itself from siblings like heat_transfer_pipe by explicitly naming the equations, but it doesn't explicitly contrast with other tools, so it's not a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a passing hint about setting roughness for rough pipes and defaults for water, but provides no explicit guidance on when to use this tool versus alternatives (e.g., flow_regime, heat_transfer_pipe). No exclusions or conditions are stated, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_dictA

Read an OpenFOAM dictionary file. If entry is given (foamDictionary path syntax, e.g. 'endTime' or 'solvers/p/solver') and OpenFOAM is installed, return just that entry's value; otherwise return full contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
entryNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses a key conditional behavior (if `entry` is supplied and OpenFOAM is installed, return only that value; otherwise full contents), which is valuable. However, it does not describe the output format, error handling, or what 'full contents' means in practice, leaving gaps for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the main purpose and immediately covers the conditional behavior. Every word contributes; there is no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description covers the essential behavior and the conditional logic. It could mention output format or error cases, but the core decision path is explained. It is reasonably complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It clarifies the `entry` parameter with foamDictionary syntax examples, which adds meaning. The `path` parameter is only implicitly understood from the tool's purpose, not explicitly described. The description partially compensates but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads an OpenFOAM dictionary file, specifying the verb and resource. It distinguishes its behavior based on the `entry` parameter, which makes it distinct from sibling tools like `set_dict_entry` that write. The purpose is specific and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reading dictionary files but does not explicitly contrast it with alternatives like `set_dict_entry` or `check_case`. The conditional behavior when `entry` is provided is explained, but there is no direct 'use this when' guidance. It is adequate but leaves the selection decision to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYes
fluidNoair
lengthNo
velocityNo
transientNo
heat_transferNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It clearly states the tool returns a plan and, when inputs are missing, returns questions—so it discloses its core non-mutating nature and conditional behavior. It does not, however, describe edge cases (unrecognized goals), the exact output format beyond a list, or how it handles invalid combinations of parameters, leaving moderate gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that front-loads the main purpose, lists deliverables in a natural flow, then adds the conditional behavior. Every sentence carries value—no filler, and the 'Start here' is a useful directive. It is appropriately sized for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is reasonably complete for a planning tool: it tells what it returns, how it handles missing inputs, and positions it as the entry point. However, it lacks details on how other parameters (fluid, transient, heat_transfer) influence the plan, and does not define the expected output schema (e.g., whether it returns a JSON object, text, or a numbered list format). Given no annotations or output schema, these gaps matter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description must explain all parameters. It explicitly mentions only 'goal' (plain-language input) and 'velocity/length' (the ones that trigger questions). It gives no insight into 'fluid', 'transient', or 'heat_transfer', leaving the agent to guess their roles. This is a substantial deficiency given the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear verb ('Turn a plain-language goal into a complete setup plan') and lists concrete outputs (solver, turbulence model, target y+, blockMesh preset, fields, boundary conditions, step list). This distinguishes it from numerical calculators like y_plus_from_height or execution tools like scaffold_case, so an agent can immediately tell its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Start here' signals this is the entry point for a planning workflow. It also explains that if velocity/length are missing it asks follow-up questions, guiding the agent to call it early. However, it does not explicitly name alternative tools (e.g., 'use list_solvers to see options') or state when NOT to use it, so it misses the 'when-not' clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
timeoutNo
case_dirYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses prerequisites (OpenFOAM installed, environment sourced) and the return format (return code and tail of stdout/stderr). However, it does not disclose potential side effects of utilities like renumberMesh or decomposePar (which may modify files), and it does not mention the timeout parameter's effect. This leaves some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two sentences to convey the whitelist, the prerequisite, and the output. There is no redundancy, and the key constraints are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple runner tool with no output schema, the description covers the return format and prerequisites, which is essential. However, it lacks any mention of the timeout parameter and does not specify the command parameter's allowed format beyond the whitelist, which are minor gaps for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain the parameters. It does not name them directly, only implies case_dir with 'inside a case directory' and command with 'whitelisted utility,' while omitting timeout entirely. The provided meaning is minimal and insufficient given the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action (run) and the resource (whitelisted OpenFOAM utilities) with a specific list of utilities, making it clear what the tool does and how it differs from other OpenFOAM-related tools. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by listing the exact utilities and indicating they must run inside a case directory, which helps an agent decide when to use this tool. However, it does not explicitly mention when not to use it or point to alternatives, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scaffold_caseA

Create a runnable OpenFOAM case skeleton at case_dir for the chosen solver (simpleFoam / pimpleFoam / icoFoam). Writes system/, constant/ and 0/ with a single-block box mesh (patches: inlet, outlet, walls, frontAndBack) and consistent turbulence fields.

openfoam_flavor selects the case style:

  • 'classic' (default): application ; + transportProperties. Validated on ESI v1912; works on ESI v2006+ and Foundation v8-v10.

  • 'foundation-v12': application foamRun; solver incompressibleFluid; + physicalProperties. Targets OpenFOAM Foundation v11/v12. Run blockMesh, then <solver> (classic) or foamRun (foundation-v12).

ParametersJSON Schema
NameRequiredDescriptionDefault
solverNosimpleFoam
cells_xNo
cells_yNo
cells_zNo
case_dirYes
domain_xNo
domain_yNo
domain_zNo
end_timeNo
velocityNo
openfoam_flavorNoclassic
kinematic_viscosityNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that it writes system/, constant/, and 0/ directories, creates a single-block box mesh with specified patches, and sets up consistent turbulence fields. It also explains flavor-specific file differences (transportProperties vs physicalProperties) and version compatibility. However, it does not disclose what happens if case_dir already exists (overwrite vs error), prerequisites (e.g., blockMesh availability), or the return value. These gaps are notable but the core behavior is well described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is around 150 words, structured with a leading purpose statement followed by a clear explanation of openfoam_flavor and execution steps. It is information-dense without unnecessary filler. The only minor inefficiency is the repeated mention of 'chosen solver' when the sibling list already includes solver options, but overall it's well-organized and front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters, no output schema, and no annotations, the description is incomplete. It defines the core behavior and flavor options, but leaves many parameters underspecified (e.g., cells, domain, end_time, velocity, kinematic_viscosity). It also doesn't mention what the tool returns or any post-creation checks. While the description can still be used for a basic scaffold, the lack of parameter guidance for most fields makes it insufficient for confident usage without additional lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It only details openfoam_flavor (with classic and foundation-v12 options). Other parameters like cells_x, cells_y, cells_z, domain_x, domain_y, domain_z, end_time, velocity, kinematic_viscosity are left unexplained beyond being present in the schema. The description mentions 'single-block box mesh' which hints at cells/domain, but there is no explicit mapping of these parameters to their meaning or defaults. This forces the agent to infer from names, which is insufficient for a 12-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Create a runnable OpenFOAM case skeleton at case_dir' with a specific verb, resource, and output structure (system/, constant/, 0/). It distinguishes itself from siblings like generate_blockmesh (which only creates mesh) and run_openfoam_command by positioning itself as the scaffold creator that creates files and defines the solver and flavor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use each openfoam_flavor (classic vs foundation-v12) with version-specific recommendations, and gives execution steps ('Run blockMesh, then <solver> ...'). It does not explicitly name alternative tools like generate_blockmesh for mesh-only needs, but the context of creating a complete case skeleton is evident. Lacks explicit 'use this instead of X' phrasing but provides enough context to select the tool appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYes
valueNo
bc_typeYes
field_fileYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose its write/mutation nature plus the set-or-insert semantics, which is meaningful. However, it doesn't address side effects such as whether the file is overwritten or modified in place, what happens when the patch doesn't exist, or whether a scaffolded case is required beforehand.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence that front-loads the action and embeds a full worked example. There is zero filler and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

As the sole information source (no annotations, no output schema, no parameter descriptions), it covers the core action and parameter meanings but leaves the return value unspecified and doesn't address edge cases like missing patches or null value handling. Adequate for a simple setter but with noticeable gaps given nothing else exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate—and its example does map concrete values to all four parameters, which is genuinely useful. But it leaves out semantics such as the meaning of value being nullable (many bc types like zeroGradient need no value) and any guidance on valid bc_type choices or vector-versus-scalar value formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Set (or insert)') and a precise resource ('the boundaryField entry for a patch in a 0/ field file'), and reinforces it with a concrete parameter-mapped example (field_file='0/U', patch='inlet', bc_type='fixedValue', value='(10 0 0)'). The 0/ file scoping clearly sets it apart from the generic set_dict_entry sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context (targets boundary field files for OpenFOAM patches) but offers no guidance on when to choose this tool over alternatives, notably the sibling set_dict_entry. With 19 siblings including a near-duplicate dictionary setter, the lack of any when/when-not/exclusion guidance is a genuine gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
entryYes
valueYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It discloses the key behavioral trait: it uses foamDictionary when available for nested entries, otherwise falls back to editing a top-level single-line entry. This is useful context. However, it does not state whether the operation is create-or-update, what happens if the entry doesn't exist, or the format of the value. The disclosed fallback is a partial behavioral disclosure, but not comprehensive. Score 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste. The first sentence states the core purpose; the second explains the two execution modes and gives a concrete example. It is front-loaded with the action and stays focused. This is a model of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior and the nesting/fallback distinction, which is essential for correct invocation. However, with 3 required parameters and no output schema or annotations, it lacks details on parameter semantics (except entry) and potential return/error behavior. An agent may know the action but not enough about the value format or how to handle a missing dictionary file. It is adequate but not complete; score 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides only an example for 'entry' ('solvers/p/tolerance'), clarifying nested path semantics, but gives no meaning for 'path' or 'value'. 'Path' is not described as a file path, and 'value' is not specified in terms of format (e.g., string, number, list). The description adds minimal per-parameter value beyond the entry example, leaving most semantics undocumented. Score 2.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Set a keyword in a dictionary file.' It specifies the resource (dictionary file) and the verb (set). It also adds specificity about mechanism (foamDictionary vs text fallback) and gives an example of nested entry syntax, distinguishing it from read_dict and set_boundary_condition siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool ('Set a keyword in a dictionary file') but does not explicitly state when to prefer it over siblings like set_boundary_condition or scaffold_case. It mentions the fallback behavior (single-line top-level) but doesn't guide on when to use this vs alternatives. The agent can infer usage from the verb and resource, but there's no explicit exclusionary guidance, so a 3 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_step_from_cflB

Maximum/target transient time step from a target Courant number (dt = Co * dx / U).

ParametersJSON Schema
NameRequiredDescriptionDefault
velocityYes
cell_sizeYes
target_courantNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It provides the formula, indicating a deterministic computation, but omits essential details such as units, error handling for non-positive velocities or cell sizes, and whether it returns a single scalar. The lack of caveats or assumptions leaves the agent uncertain about edge cases and output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that immediately states the purpose and the governing equation. It contains no filler or repetition, and the essential formula is front-loaded, making it efficient for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward calculation with three parameters and no output schema, the description is nearly complete: it gives the formula and implies the return value (the time step). However, it lacks explicit mention of the expected output type or units, and does not provide context on when this calculation is appropriate (e.g., for stability in transient CFD). Given the sibling tools are all CFD-related, some context is implicit, but the boundary could be clearer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description maps each schema parameter to a variable in the formula: velocity→U, cell_size→dx, target_courant→Co, thereby clarifying their roles beyond the bare schema names. This adds meaningful semantic value, though it does not specify units, value ranges, or constraints, which would be further helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes a time step from a target Courant number and provides the formula, making the purpose explicit. It is distinct from sibling tools like y_plus_from_height or first_cell_height, which compute different quantities. However, it does not explicitly name the parameters or differentiate itself with a targeted sentence, only implying them via the formula.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, nor any conditions, prerequisites, or exclusions. The user must infer the usage context from the formula and the sibling tools, which is insufficient for a tool that might be selected among similar CFD calculations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYes
densityNo
velocityYes
first_cell_height_mYes
kinematic_viscosityNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description does disclose the key behavioral output (y+ value and region classification), which is valuable. However, it doesn't disclose the underlying formula/assumptions (e.g., flat-plate boundary layer correlation, whether it uses density and kinematic viscosity as provided), the bounds of validity, or what happens with invalid inputs. For a predictive/tool with no annotations, this is a moderate gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a tight single sentence that front-loads the core operation ('predict the y+ that a given first-cell height will produce') and then appends the classification output. No wasted words. Could arguably add more detail, but the structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, 0% schema coverage, no output schema, and no annotations, making the description the sole documentation. It covers the core purpose and the classification output but fails to document 2 parameters, the formula/assumptions, and the return format. For a reasonably simple predictive tool, the description is adequate for basic use but incomplete for an agent that needs to know the physical model and parameter roles.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema provides no descriptions for any of the 5 parameters. The description mentions only two physical quantities (first-cell height, velocity), and implies length, but does not explain the roles of `density` and `kinematic_viscosity` or which are required vs. optional. With 0% schema coverage, the description must compensate, and it fails to explain 2 of the 5 parameters entirely and doesn't clarify why some have defaults. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('predict'), a clear resource (y+ from first-cell height), and the output (y+ value and region classification: viscous sublayer, buffer layer, log-law). It clearly distinguishes itself from its sibling `first_cell_height`, which is the inverse operation. The description is clear but doesn't explicitly name the sibling tool as an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (when you have a first-cell height and want to know the resulting y+), but provides no explicit guidance on when NOT to use it or which sibling to choose instead. The inverse relationship with `first_cell_height` is implied but not stated. There's no mention of prerequisites or typical CFD workflow context (e.g., 'use this after mesh generation').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 20 tool updatesv1.0.0
    • First observedanalyze_residuals
    • First observedanalyze_stl
    • First observedcheck_case
    • First observedfirst_cell_height
    • First observedflow_regime
    • First observedgenerate_blockmesh
    • First observedheat_transfer_pipe
    • First observedinlet_turbulence
    • First observedlist_mesh_presets
    • First observedlist_solvers
    • First observedmesh_quality_report
    • First observedpipe_pressure_drop
    • First observedread_dict
    • First observedrecommend_setup
    • First observedrun_openfoam_command
    • First observedscaffold_case
    • First observedset_boundary_condition
    • First observedset_dict_entry
    • First observedtime_step_from_cfl
    • First observedy_plus_from_height

TDQS

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables natural language-driven ANSYS simulations (Fluent, Mechanical, Geometry) with automatic TUI script generation for reproducibility.
    41
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural language interaction with ANSYS Mechanical simulation software via gRPC, allowing users to manage geometry, mesh, boundary conditions, solve analyses, and generate reports through MCP-compatible AI clients.
    16
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Automates OpenFOAM CFD simulations via MCP, enabling AI agents to mesh, run, and post-process cases from natural language prompts without any API keys.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that enables AI assistants to interact with Ansys CFX through PyCFX, supporting natural-language-assisted CFX-Pre, CFX Solver, and CFD-Post workflows for setup, execution, and postprocessing.
    7
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kimlnw/openfoam-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server