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