tactile-terrain
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tactile-terrainmake a 3D-printable tactile model of Central Park and check printability"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tactile-terrain
Tactile terrain printing: an MCP server and Claude plugin that turn map areas into 3D-printable models for touch.
Status: Phase 1 under construction. Licensed AGPL-3.0-or-later.
Everything the tool reports is plain text, so it works with a screen reader.
Design documents:
Design spec: what the tool does and why; the source of truth when the code and a plan disagree.
Design invariants: the rules the tool must keep.
Plans: the build plans and milestones.
What it does
resolve_area: describe an area before building (size, elevation range, named streams, roads, lifts and peaks).create_modelandupdate_model: build a model from US elevation and map data, then change it. Every edit keeps the previous version, so it can be undone.describe_model: read the whole model out as text: high points, the course of every line, crossings, cross-sections and the tactile legend.analyze_modelandcheck_print: warnings with exact fixes, volume and filament, and a print pack (STL, attribution, print notes, submission notes).create_sampler: a calibration plate for finding which line shapes, sizes and spacings you can tell apart. Tactile sizes come from your own tactile profile, never from fixed defaults.doctorandlist_capabilities: check the installation and see what is available.
Related MCP server: BumpMesh MCP
Install for development
Python runs only through uv. From this folder:
uv syncuv run pytest -qModels are written to ~/TactileModels. The config file is created on first use; uv run tactile-terrain doctor prints its path.
Use with Claude
Run uv sync once first, so Claude does not have to build the environment while it starts the server.
Load the plugin straight from this folder for a session:
claude --plugin-dir C:/path/to/bold_tactile_exploreOr install it from this folder as a local marketplace:
claude plugin marketplace add C:/path/to/bold_tactile_exploreclaude plugin install tactile-terrain@tactile-terrain-localAny other MCP client can run the server directly:
claude mcp add tactile-terrain -- uv run --directory C:/path/to/bold_tactile_explore tactile-terrain mcpCommand line
uv run tactile-terrain build examples/winter-park-library.jsonuv run tactile-terrain doctorAvailable Tools
11 toolsanalyze_modelB
Metrics and suggestions for a built model: warnings first, each with its fix.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose output ordering: warnings first, each with its fix. However, it does not state whether the tool is read-only, what permissions are needed, or other operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with the core output ('metrics and suggestions') front-loaded and the warning-first ordering clearly stated. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return values need not be fully described. Still, the description omits usage routing against siblings and does not clarify the required model-name parameter, leaving meaningful gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the description never explains the single required 'name' parameter. While 'built model' weakly implies the name identifies the model, the description does not add meaningful semantics beyond the bare schema property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns metrics and suggestions for a built model, with warnings first and fixes included. It is more specific than a tautology, but it does not explicitly differentiate this diagnostic tool from siblings like describe_model or doctor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a built model' implies the model must already exist, but there is no explicit guidance on when to use this tool versus describe_model, doctor, or check_print. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_printA
Check a model is printable: watertight, volume and filament (an upper bound), print time when a slicer is installed, and minimum feature and bed-fit problems. Also writes the print pack (STL, attribution, print notes, submission notes) next to the model.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely does: it discloses a write side effect (emitting STL, attribution, print notes and submission notes next to the model) and conditional behavior for print time. It does not say whether existing files are overwritten, where 'next to the model' resolves to, or whether the check is non-destructive to the model itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both dense and front-loaded: the checks come first, the side effect second. Nothing is repeated from the schema or annotations and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers what is checked, the slicer conditional, and the file side effects. The remaining gap is the meaning/format of the 'name' argument and the destination of written files.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter has no schema description (0% coverage), and the description only says 'a model' without clarifying whether 'name' is a model name, slug, or path. That is a real ambiguity for the only argument, though the surface area of the gap is small.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (printability) and enumerates exactly what is validated: watertightness, volume, filament upper bound, print time, minimum feature and bed fit. It does not distinguish itself from the plausibly overlapping sibling analyze_model, so an agent must infer which to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the enumerated checks, and one real conditional is spelled out (print time only appears when a slicer is installed). There is no explicit when-not guidance and no mention of analyze_model or describe_model as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_modelB
Create and build a model. bbox is [west, south, east, north] in degrees. Give exactly one of scale_m_per_mm or long_side_mm. mode is terrain or flat. Each feature is {type, provider, style, filter}; style names come from the tactile profile (see list_capabilities). Returns a build summary plus analysis with fixes.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| mode | No | terrain | |
| name | Yes | ||
| base_mm | No | ||
| printer | No | ||
| features | Yes | ||
| overwrite | No | ||
| long_side_mm | No | ||
| scale_m_per_mm | No | ||
| z_exaggeration | No | ||
| tactile_profile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses creation/build intent, the scale mutual-exclusivity rule, feature structure, style lookup via list_capabilities, and that it returns a build summary plus analysis with fixes, but it does not explain overwrite behavior, permissions, or side effects of creating/building.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: creation intent, bbox format, scale constraint, mode options, feature shape, and return value all appear without filler. Every sentence adds usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so the description need not detail return values, and it does mention the build summary and analysis. But for an 11-parameter creation tool with no annotations and 0% schema descriptions, missing semantics for roughly half the parameters make it incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 11 parameters, so the description must compensate. It explains bbox format, the scale_m_per_mm/long_side_mm exclusivity, mode values, and feature shape, but leaves name, base_mm, printer, overwrite, z_exaggeration, and tactile_profile largely or entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Create and build a model.' It clearly distinguishes creation from later updates, though it does not explicitly name sibling tools such as update_model or analyze_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage constraints are stated: give exactly one of scale_m_per_mm or long_side_mm, and mode is terrain or flat. However, there is no explicit guidance on when to use this tool versus update_model, create_sampler, or check_print.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_samplerB
Build a calibration plate to find which differences the user can feel: profile pairs with identical controls, widths, heights, and closely spaced lines. profile names the tactile profile to test (default: the active one). focus limits the plate to one row type (profiles, widths, heights or spacing). Every sample has a raised numeral and rows are marked by notches on the left edge, so no Braille is needed. Use describe_model on the result for a row-by-row readout.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| seed | No | ||
| focus | No | ||
| printer | No | ||
| profile | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full behavioral burden. It adds useful artifact detail (identical controls/widths/heights, raised numerals, left-edge notches, no Braille needed), but discloses nothing about side effects, whether files are written, or overwrite semantics—significant gaps for a creation tool with six parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the goal in the first clause, then parameter hints, then the follow-up pointer. Densish but each clause contributes; little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description wisely redirects return-value questions to describe_model, so that burden is met. However, with no annotations, 0% param coverage, and four undocumented parameters, the definition is only partially complete for a six-parameter creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains profile (default active) and focus (row type: profiles/widths/heights/spacing), but leaves name, seed, printer, and overwrite entirely undocumented—only two of six parameters get semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: 'Build a calibration plate to find which differences the user can feel', which clearly distinguishes it from create_model (which presumably builds a normal model). The purpose is concrete, though it stops short of explicitly contrasting the sibling create_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes the scenario (feeling out perceptible differences) and routes the follow-up step to describe_model for a readout, but gives no when-not guidance or explicit alternative to create_model. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_modelA
Read a model out as text: footprint, scale, high and low points, the course of every line, crossings, cross-sections, the tactile legend and distortion. sections adds extra cross-sections: {"y_mm": 40}, {"x_mm": 60} or {"through": "Second Creek", "direction": "EW"}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| sections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. 'Read ... out as text' does effectively signal a non-mutating read, and the enumeration hints the output can be large ('the course of every line'), but nothing is said about failure modes (unknown/ambiguous model name) or cost of a full dump.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and its scope, with the `sections` example payloads placed where they are needed. The inline JSON examples add length but each one disambiguates a distinct accepted form, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-explained, and the description still gives a helpful summary of the content. For a two-parameter read tool this is close to complete; only the meaning/format of `name` and error behavior are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so well for the non-obvious parameter, giving three concrete shapes for `sections` ({"y_mm": 40}, {"x_mm": 60}, {"through": "Second Creek", "direction": "EW"}) that the schema's anonymous object array conveys nothing about. The required `name` parameter is only inferable from 'Read a model', not explicitly described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Read a model out as text', then enumerates exactly what the text covers (footprint, scale, high/low points, line courses, crossings, cross-sections, tactile legend, distortion). An agent can tell this is a read/inspection tool rather than a mutation, though it never explicitly contrasts itself with the sibling analyze_model or get_spec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the enumerated output contents suggest when an agent would want this (when it needs a full textual dump of a model). There is no explicit when-to-use, when-not-to-use, or 'prefer analyze_model for X' routing against the sibling tools, which is a notable gap given eight adjacent tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Report the installation: versions, config path, models folder, which data services are reachable, and whether a slicer is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the specific installation aspects being inspected (versions, config path, models folder, service reachability, slicer availability), which implies a read-only diagnostic. However, it does not explicitly state that the tool makes no changes, requires no auth, or has any other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the action ('Report the installation') and then lists the relevant details. Every phrase contributes to the diagnostic scope with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description does not need to explain return values. For a zero-parameter diagnostic tool, the description sufficiently identifies the categories of information reported. The only gap is the lack of explicit when-to-use guidance against sibling diagnostic tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter-level semantics to explain. Baseline 4 is appropriate because the schema is empty and the description does not need to compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Report') and enumerates the installation details it covers, so the agent knows this is a diagnostic status tool rather than a model or print operation. It does not explicitly contrast itself with siblings like check_print or list_capabilities, preventing a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool reports but gives no explicit guidance on when to use it versus alternatives such as check_print or list_capabilities. The diagnostic purpose is implied by the content, but the agent must infer the invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_specC
The current spec of a model, as JSON text.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and falls short: it doesn't confirm this is a read-only lookup, doesn't state behavior when the model name doesn't exist, and doesn't note whether the spec is versioned or reflects unpublished changes. It does disclose the return serialization, which is the only behavioral signal present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, so nothing is wasted. However, the brevity reflects under-specification rather than disciplined editing; the sentence is too small to earn more than a minimal score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema excuses not explaining return values, but the description still leaves the core questions unanswered: what a 'spec' contains, how it differs from describe_model, and what 'name' means. For a tool an agent must disambiguate among ten siblings, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'name' parameter is undocumented in both schema and description. The phrase 'of a model' weakly implies name identifies a model, but it doesn't specify whether it's a model ID, display name, or path, nor whether it must exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description essentially restates the name: get_spec returns 'the current spec of a model.' The term 'spec' is never defined, and siblings include describe_model and analyze_model, so an agent cannot tell which of these to reach for. The only added information is the serialization format ('as JSON text').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the obvious alternative (describe_model) despite it being a sibling. The agent is left to infer the distinction between fetching a spec and describing a model.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesC
Every provider, filter, style, analyzer and printer this installation supports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read of installation-supported capabilities, but does not state that it is read-only, whether results are environment-specific or static, whether any auth or configuration is required, or how complete the list is. Only the phrase 'this installation supports' adds minor context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short fragment with no wasted words, but it is under-specified rather than properly structured. It lacks a clear verb or lead statement that would make the purpose immediately parseable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and the tool takes no parameters, so the description only needs to explain what the list contains and when to use it. It identifies the categories but omits the action verb, usage context, and any behavioral notes, leaving gaps for an agent deciding among sibling list/describe/get tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing parameter-related for the description to clarify. The baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource categories returned (providers, filters, styles, analyzers, printers), which gives a vague sense of the tool's content. But it is a noun phrase with no verb and no explicit statement that this lists capabilities, leaving the agent to infer purpose from the tool name. It does partially distinguish from list_models by naming non-model capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool, when not to, or how it relates to siblings like list_models, describe_model, get_spec, or doctor. The agent must infer usage entirely from the name and content categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsC
The models that already exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about read-only safety, ordering, pagination, or completeness of results. The presence of an output schema covers return values, but nothing about how the call behaves is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no padding, so it is concise and front-loaded. However, the brevity comes at the cost of substance, so the sentence does not fully earn its place as a usable definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero params, output schema present), which lowers the bar, and the description plus schema is arguably enough to call it. Still, an agent gets no statement of scope (all models vs. filtered) or relationship to describe_model, leaving a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics for the description to explain. Baseline 4 applies; no compensating detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'The models that already exist' restates the tool name rather than stating a verb and resource. It is interpretable as a listing operation, but it never says 'list' or clarifies the scope of what 'exist' means, leaving an agent to infer the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is offered, despite siblings like describe_model and create_model that an agent must choose between. The only implied signal is that this returns existing models, which an agent could already infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_areaA
Describe an area before building: size, elevation range, available data, and the named streams, roads, lifts and peaks inside it. Give a place name (with width_km for a square around it) or a bbox [west, south, east, north] in degrees. Builds nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| place | No | ||
| width_km | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: 'Builds nothing' declares the operation is non-mutating, and it previews the shape of the returned information. It doesn't address failure modes (unknown place name, malformed bbox) or any lookup limitations, which a zero-annotation tool ideally would.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: capability and return contents first, then input forms, then the non-building caveat. Nothing redundant and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description still usefully summarizes them. The remaining hole is input precedence/defaults across three all-optional parameters, which neither schema nor description resolves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: bbox is given as [west, south, east, north] in degrees and width_km is explained as a square around a place name. It leaves the interaction between the three optional parameters ambiguous — what happens if both place and bbox are supplied, or neither.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Describe an area') and enumerates exactly what comes back: size, elevation range, available data, and named streams, roads, lifts and peaks. The closing 'Builds nothing' cleanly separates it from the create_model/update_model siblings, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Describe an area before building' gives a clear situational trigger, and 'Builds nothing' implies the build step belongs to a sibling tool. It stops short of naming create_model explicitly or stating when-not to call it, so it is clear context rather than a full decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_modelA
Change a model and rebuild it. changes is a JSON merge-patch of the spec, plus the shortcuts z_multiply (factor), crop_percent ({north|south|east|west: percent}), drop_feature (type) and revert_to (earlier version number). Reports each change as before to after. An invalid change leaves the model untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| changes | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it discloses that the model is rebuilt as a side effect, that each change is reported as before to after, and that an invalid change leaves the model untouched (atomicity). It omits permissions/ownership requirements and what happens when a rebuild fails after a valid patch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with zero filler, front-loaded with the verb and side effect, then the parameter semantics, then the outcome guarantee. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and an output schema (so return values need no explanation), the description covers side effects, patch syntax, and failure behavior. The main remaining gap is the absence of any mention of preconditions, such as permissions or whether concurrent rebuilds are safe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and `changes` is an untyped free-form object, so the description must compensate – and it does, enumerating the merge-patch semantics plus the z_multiply, crop_percent, drop_feature, and revert_to shortcuts. The `name` parameter is left entirely unexplained, though its meaning is fairly evident from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus an important side effect: 'Change a model and rebuild it.' This clearly separates it from create_model, describe_model, and get_spec. It never explicitly names a sibling, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you use this to modify an existing model, contrasted implicitly with create_model. The description does route the agent toward `revert_to` for reversing to an earlier version, but it gives no explicit when-not conditions or named alternatives.
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.
11 tool updates
v0.1.0- First observed
analyze_model - First observed
check_print - First observed
create_model - First observed
create_sampler - First observed
describe_model - First observed
doctor - First observed
get_spec - First observed
list_capabilities - First observed
list_models - First observed
resolve_area - First observed
update_model
TDQS
Scored across 11 tools
Each tool has a clearly distinct role: model creation, mutation, textual description, analysis, calibration sampler creation, print checking, installation diagnostics, capability listing, model listing, spec retrieval, and area resolution. The closest pairs (describe_model vs. analyze_model, get_spec vs. describe_model) are separated by output type and purpose.
Most tools follow a consistent snake_case verb_noun pattern such as create_model, update_model, describe_model, and list_models. The only notable deviation is doctor, which is a conventional noun-style diagnostic command rather than a verb_noun name.
Eleven tools is well-scoped for a terrain-modeling server, covering creation, editing, inspection, calibration, validation, and installation discovery. Each tool appears to earn its place without excessive surface area.
The surface covers the core model lifecycle: resolve an area, create, update, inspect, analyze, list, retrieve specs, and check printability. A delete or duplicate operation is missing, but most workflows can be completed without it.
Maintenance
Related MCP Connectors
- NameSTLOAuthcom.namestl
Design 3D-printable names, keychains and cake toppers; save designs and export STL or 3MF.
Create, edit, render, save, and export voxel models with interactive 3D previews.
3D printing: printable models, calculators, troubleshooting wiki, build guides, AI 3D + CAD design.
- OwlCADOAuthcom.owlcad
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to generate 3D models through natural language, including text-to-3D and image-to-3D, with tools for checking balance, refining models, converting formats, and a local 3D viewer that works without external network access.2MIT
- AlicenseAqualityCmaintenanceEnables local image-driven displacement of STL/OBJ meshes, STL/3MF export, and agent-driven texturing workflows without remote services.3AGPL 3.0
- AlicenseAqualityBmaintenanceEnables multimodal AI to convert photos with reference objects into parametric OpenSCAD models and watertight 3D-printable STL files, including calibration, part generation, and printability inspection.47MIT
- AlicenseNot gradedqualityBmaintenanceEnables people and general-purpose AI agents to inspect, model, edit, verify, and export local 3D projects through MCP tools, including print preparation, without requiring a hosted 3D service key.10MIT