Kabuto Meshing as an MCP server

kabuto-mesh mcp lets an AI assistant (Claude Desktop, Claude Code, Cursor, or any other MCP client) inspect a surface, choose and check settings, run the mesher and read the quality report. It talks over stdin / stdout and makes no network connection.

kabuto-mesh mcp [--workspace DIR]

Workspace. Every file the tools read or write lies inside one folder: DIR, or the folder the server was started in. A path outside it (also through .. or a symbolic link) is refused. Put the STL files there; the meshes are written there too.

Setting it up

Use the full path of kabuto-mesh if it is not on the PATH of the client (which kabuto-mesh, or where kabuto-mesh on Windows), and the full path of your workspace folder.

Claude Code

claude mcp add --transport stdio kabuto-meshing -- kabuto-mesh mcp --workspace /home/me/cfd

or, shared with a project, in .mcp.json at the project root:

{
  "mcpServers": {
    "kabuto-meshing": {
      "command": "kabuto-mesh",
      "args": ["mcp", "--workspace", "/home/me/cfd"]
    }
  }
}

Claude Desktop and Cursor take the same mcpServers entry in their MCP configuration file (Claude Desktop: Settings → Developer → Edit Config; Cursor: .cursor/mcp.json in the project, or the MCP page of its settings). On Windows write the paths with forward slashes or doubled backslashes: "C:/Users/me/cfd".

Tools

tool does changes files
list_workspace(folder=".") surface files, settings files and case folders in the workspace no
list_options() every meshing option with its meaning and default no
inspect_geometry(surface, scale=1.0) patches, size, edge lengths, whether the surface is closed no
validate_config(surface, case_dir, options) checks the options against the surface no
run_mesh(surface, case_dir, options) validates, then starts a run in the background; returns a job_id at once writes the case folder
job_status(job_id, log_lines=15) running (with the step), succeeded, invalid_mesh, failed, cancelled; the last log lines no
cancel_job(job_id) stops a run and the tools it started stops writing
quality_report(job_id_or_case_dir) the numbers of a finished mesh (mesh_report.json) no
license_status() the edition and the largest mesh it writes (the license's id and file are not shown) no

options are the meshing options without their dashes: {"layers": 5, "first": 0.0002, "ratio": 1.2, "remesh": 0.004, "zone": ["rotor"], "no_imprint": true}.

A run takes from seconds to many minutes, so run_mesh does not wait: the assistant polls job_status. When the server stops (the client is closed), runs still going are stopped with it.

What the server will not do

  • Read or write outside the workspace.
  • Start another program: the option tetfill (your own tet filler) is refused here; use it on the command line.
  • Send anything anywhere: there is no network access and no telemetry. Your geometry stays on your machine.

An example request

Mesh parts/tee.stl for a pipe flow: it is drawn in millimetres. Five layers, first layer 0.2 mm.

The assistant will typically call inspect_geometry (with scale 0.001), validate_config, run_mesh, then job_status until the run ends, and report the cell count and the quality numbers from quality_report.