Skip to main content
Glama
derekriemer

tactile-terrain

by derekriemer

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_model and update_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_model and check_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.

  • doctor and list_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 sync
uv run pytest -q

Models 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_explore

Or install it from this folder as a local marketplace:

claude plugin marketplace add C:/path/to/bold_tactile_explore
claude plugin install tactile-terrain@tactile-terrain-local

Any other MCP client can run the server directly:

claude mcp add tactile-terrain -- uv run --directory C:/path/to/bold_tactile_explore tactile-terrain mcp

Command line

uv run tactile-terrain build examples/winter-park-library.json
uv run tactile-terrain doctor

Available Tools

11 tools
analyze_modelB

Metrics and suggestions for a built model: warnings first, each with its fix.

NameRequiredDescriptionDefault
nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bboxYes
modeNoterrain
nameYes
base_mmNo
printerNo
featuresYes
overwriteNo
long_side_mmNo
scale_m_per_mmNo
z_exaggerationNo
tactile_profileNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/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 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nameNo
seedNo
focusNo
printerNo
profileNo
overwriteNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

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

Purpose4/5

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.

Usage Guidelines3/5

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"}.

NameRequiredDescriptionDefault
nameYes
sectionsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/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. 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

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

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bboxNo
placeNo
width_kmNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/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, 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
nameYes
changesYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 11 tool updatesv0.1.0
    • First observedanalyze_model
    • First observedcheck_print
    • First observedcreate_model
    • First observedcreate_sampler
    • First observeddescribe_model
    • First observeddoctor
    • First observedget_spec
    • First observedlist_capabilities
    • First observedlist_models
    • First observedresolve_area
    • First observedupdate_model

TDQS

B3.3/5.0

Scored across 11 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    4
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    10
    MIT