Skip to main content
Glama

Server Details

3D printing: printable models, calculators, troubleshooting wiki, build guides, AI 3D + CAD design.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 18 tools

Disambiguation3/5

The AI generation flow (prepare/generate/check/open links) and the calculators are clearly distinguishable. However, the umbrella `search` tool claims to cover models, tools, wiki, docs, videos, build guides and courses — fully overlapping with `search_3d_models`, `search_build_guides`, `search_learning_resources` and `find_3d_printing_tool`, leaving agents unsure which to pick. Descriptions help, but the boundary between the general and specialized search tools is genuinely blurred.

Naming Consistency4/5

Most tools follow a predictable snake_case verb_noun pattern: calculate_*, search_*, get_*, prepare_/generate_/check_3d_*. Minor deviations exist (bare `fetch` and `search`, plus the compound `get_printpal_profile`), but the overall convention is readable and consistent.

Tool Count4/5

18 tools is on the heavier side (16-25 range) but justified by the platform's broad scope spanning calculators, search, AI generation, guides and profile. Each tool addresses a distinct capability area rather than being redundant padding, though the four specialized search tools push toward the upper bound.

Completeness4/5

The surface covers a wide lifecycle: cost/flow/layer calculators, discovery (search + fetch), AI generation (prepare→generate→check→links), guides, models and profile. Minor gaps include no direct model-file download (only page URLs) and read-only coverage of most resources, but core workflows are well covered.

Available Tools

18 tools
calculate_filament_usageFilament weight ⇄ length ⇄ costA
Read-onlyIdempotent
Inspect

Convert filament grams to metres (and back), compute volume and cost, and estimate how much is left on a spool from its gross weight. Knows densities for PLA, PETG, ABS, ASA, TPU, Nylon, PC, CF blends. Give either grams or meters.

NameRequiredDescriptionDefault
gramsNoFilament weight. Give grams or meters, not both.
metersNoFilament length. Give grams or meters, not both.
materialNopla, petg, abs, asa, tpu, nylon, pc, pla-cf, petg-cf, pa-cf …pla
diameter_mmNoFilament diameter (1.75 or 2.85 are standard).
density_g_cm3NoOverride density if known.
spool_price_usdNo
spool_weight_kgNo
empty_spool_weight_gramsNoWeight of the empty spool (typ. 130–250 g).
spool_gross_weight_gramsNoWeight of spool + remaining filament, to estimate what is left.

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is already clear. The description still adds value by naming the built-in material-density table and explaining the spool logic (gross weight minus empty spool). It does not say what purely computational output looks like (e.g., whether cost is returned only when spool_price_usd is supplied), which matters for a tool with no output schema.

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 tight sentences on a single line: capabilities first, then the density table, then the calling constraint. No sentence is filler, and the most important operational rule is placed last for emphasis.

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

Completeness4/5

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

With 9 parameters, several modes and no output schema, the description covers all three modes and the key input rule for each. The only real gap is the return shape for cost and spool-remaining results, which the agent must infer. That is a minor omission rather than a blocking one.

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 78%, so the baseline is 3. The description goes beyond that baseline by naming the built-in density set, which means the agent may omit density_g_cm3, and by repeating the mutually exclusive grams/meters rule. This adds decision-relevant meaning about which parameters are optional in practice.

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 names specific verbs and resources: grams-to-metres conversion, volume and cost computation, and spool-remaining estimation, plus supported materials. It is far more than a restatement of the title. It stops short of 5 because the cost-computation facet overlaps with the sibling calculate_print_cost, and the boundary is never drawn.

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

Usage Guidelines3/5

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

The final sentence, "Give either `grams` or `meters`," tells the agent how to call it, which is useful. However, there is no guidance on when to pick this tool over the nearby calculate_print_cost, and there are no stated prerequisites for the spool-estimation mode. Usage is implied by the listed capabilities rather than explicitly routed.

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

calculate_layer_heightsLayer height magic numbersA
Read-onlyIdempotent
Inspect

Compute the Z-axis "magic number" layer heights for a printer from its stepper step angle, microstepping and lead-screw pitch/starts, filtered to what suits the nozzle. Defaults match most Ender/Prusa-style printers (1.8°, 1/16, T8 2 mm × 4 starts → 0.04 mm steps).

NameRequiredDescriptionDefault
microsteppingNo
lead_screw_startsNo
nozzle_diameter_mmNo
step_angle_degreesNo
lead_screw_pitch_mmNo
max_layer_height_mmNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world, so safety is settled. The description adds real behavioral context beyond that: the result is a deterministic stepper-math derivation, it is filtered to what suits the nozzle, and it discloses the default configuration and resulting step size (0.04 mm). It stops short of saying what the returned value looks like.

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 dense sentences, front-loaded with the action and the physical model, followed by the concrete default configuration. Nothing is repeated from the schema or annotations and there is no filler.

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

Completeness3/5

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

For a six-parameter, zero-coverage, no-output-schema tool, the description is adequate but incomplete: it omits max_layer_height_mm entirely and never indicates the shape of the result (a set/list of candidate layer heights?), which matters for a computation tool whose output the agent must interpret.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the burden, and it partially does: it explains the roles of step angle, microstepping, lead-screw pitch and starts, and pins their defaults (1.8°, 1/16, T8 2 mm × 4 starts). However, max_layer_height_mm is never mentioned, and units/relationships for the remaining parameters are left to the parameter names.

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 ('Compute') and a specific resource ('Z-axis magic number layer heights for a printer'), and names the exact inputs the result derives from (step angle, microstepping, lead-screw pitch/starts). This is clearly distinguishable from the sibling calculators (filament usage, print cost, volumetric flow) without opening any schema.

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: the description tells the agent the defaults match 'most Ender/Prusa-style printers', which is a usable hint, but there is no explicit when-to-use, when-not-to-use, or comparison against the sibling calculate_* tools. An agent must infer the call context.

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

calculate_print_costCalculate 3D print costA
Read-onlyIdempotent
Inspect

Estimate what an FDM print costs (material, electricity, machine wear, labor, failure allowance) and a suggested selling price. Needs the print weight in grams and time in hours from the slicer; all other inputs have sensible defaults (1 kg spool at $20, 120 W printer, $0.12/kWh, 5% failures).

NameRequiredDescriptionDefault
quantityNo
labor_minutesNoHands-on time: slicing, removal, post-processing.
markup_percentNoProfit markup to compute a selling price.
spool_price_usdNo
spool_weight_kgNo
print_time_hoursYesPrint time in hours (e.g. 3.5).
printer_cost_usdNoPrinter purchase price, for depreciation. 0 to skip.
print_weight_gramsYesFilament used, from the slicer.
labor_rate_per_hourNo
printer_power_wattsNo
failure_rate_percentNoAllowance for failed prints, 0–100. Use 0 for none.
printer_lifespan_hoursNo
electricity_cost_per_kwhNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, so the burden is light. The description adds real context beyond that: the cost breakdown it computes, the suggested selling price, and the default assumption values an agent should know before overriding them.

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 tight sentences: the first names what is computed, the second the inputs and defaults. No wasted words and the key requirement (weight and time) is front-loaded.

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

Completeness5/5

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

With 13 parameters but only 2 required and a light annotation profile, the description gives the agent enough to call it correctly: required inputs, default assumptions, and the output concept. No output schema exists, but the description names the returned cost and selling price, which is sufficient for a calculator.

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 only 46% across 13 parameters, so the description must compensate, and it does for the most important ones by spelling out defaults (1 kg spool at $20, 120 W, $0.12/kWh, 5% failures) and framing the two required inputs as slicer outputs. It leaves a few params (quantity, markup, printer lifespan) implicit, keeping it from a 5.

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 ("Estimate") and resource ("what an FDM print costs") plus the exact cost components and the derived selling price. Clearly distinct from siblings like calculate_filament_usage or calculate_volumetric_flow, which compute a single quantity rather than a full cost model.

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?

Explains prerequisites clearly: the two required inputs come from the slicer and everything else is optional with defaults, which tells the agent how to call it minimally. It does not name alternatives or when-not-to-use cases, so it stops short of a 5.

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

calculate_volumetric_flowVolumetric flow / max speed checkA
Read-onlyIdempotent
Inspect

Check whether a hotend can keep up: volumetric flow (mm³/s) = layer height × line width × speed, compared against the hotend limit, plus the maximum safe speed. Accepts a hotend preset name (stock, v6, bambu, volcano, rapido, high-flow, goliath…) or an explicit max flow.

NameRequiredDescriptionDefault
hotendNoHotend preset, used when max_volumetric_flow_mm3_s is unknown.
line_width_mmNo
layer_height_mmNo
print_speed_mm_sYes
max_volumetric_flow_mm3_sNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, so the safety profile is covered. The description goes beyond that by disclosing the actual computation and the shape of the answer ('compared against the hotend limit, plus the maximum safe speed'), which is the key behavioral detail for interpreting results. It stops short of stating precision, units for the speed limit, or what happens on invalid combinations.

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 tight sentences, front-loaded with the purpose and formula before the input options. The parenthetical list of preset names partially duplicates the enum, and the trailing ellipsis adds little, but overall there is no 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?

For a read-only calculator with no output schema, the description does the necessary work: it explains the computation and names the returned quantities. Missing only minor details such as how conflicting hotend/max-flow inputs resolve and how the speed limit is expressed.

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 only 20% (just the hotend enum), so the description carries real weight — and it does, by spelling out the formula that maps print_speed_mm_s, line_width_mm, and layer_height_mm to the result. It also resolves the precedence question by presenting 'hotend preset … or an explicit max flow' as alternatives. It does not clarify defaults/ranges for line width and layer height, leaving some ambiguity.

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 ('check whether a hotend can keep up'), gives the exact formula used, and names the two outputs (flow vs. limit, plus max safe speed). It is unambiguously distinct from the sibling calculators like calculate_filament_usage or calculate_layer_heights.

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

Usage Guidelines3/5

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

The framing ('check whether a hotend can keep up') implies the use case — validating speed against a hotend's limit — but there is no explicit when-to-use, no exclusions, and no pointer to sibling calculators. An agent must infer that this is the right tool for flow/speed validation rather than being told.

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

check_3d_generationCheck an AI 3D generationA
Read-onlyIdempotent
Inspect

Check a generation started with generate_3d_model on the connected PrintPal account: status (processing, completed, failed or stalled), credit accounting, and when completed a fresh download link (valid 1 hour) for the actual delivered file. Never starts or charges a generation. Poll at the returned poll_after_seconds while status is processing; call again later for a fresh link.

NameRequiredDescriptionDefault
generation_uidYesgeneration_uid from generate_3d_model.

Output Schema

NameRequiredDescription
phaseNo
promptNo
statusYes
creditsNo
downloadNo
replayedNo
settingsNo
next_stepYes
created_atNo
completed_atNo
billing_policyNo
download_errorNo
generation_uidNo
elapsed_secondsNo
poll_after_secondsNo
reference_image_urlNo
estimated_time_secondsNo

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the status vocabulary (processing, completed, failed, stalled), credit accounting, link expiry of one hour, and that each call produces a fresh link. The polling contract via poll_after_seconds is behavior an agent could not infer from the schema or annotations.

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?

Front-loaded with the core purpose, then the return contents, then the non-charging guarantee and polling rule. Every sentence carries operational information with no filler.

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

Completeness5/5

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

Despite an output schema existing, the description still supplies the statuses, link lifetime, and polling cadence an agent needs to drive the poll loop correctly. Nothing needed to call or re-call this tool is missing.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter's schema description already says 'generation_uid from generate_3d_model'. The description reinforces the provenance but adds no format, length, or constraint detail beyond the schema, so baseline 3 applies.

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 ('Check a generation started with generate_3d_model') and enumerates exactly what is returned: status values, credit accounting, and a fresh download link. This clearly distinguishes it from generate_3d_model, prepare_3d_generation, and open_3d_generator_link.

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?

Gives explicit operating guidance: 'Never starts or charges a generation', poll at the returned poll_after_seconds while processing, and call again later for a fresh link. The when-not condition and polling behavior are clear, though it stops short of explicitly naming generate_3d_model as the alternative for starting work.

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

fetchFetch a PrintPal itemA
Read-onlyIdempotent
Inspect

Fetch the full content of a PrintPal item returned by search (or any id of the form model:<uid>, tool:<slug>, wiki:<slug>, doc:<slug>, resource:<slug>, project:<slug>, course:<slug>). Returns the complete text (article body, transcript, build steps, BOM, model description and files) plus the canonical URL for citation.

NameRequiredDescriptionDefault
idYesItem id from `search`, e.g. "wiki:stringing-and-oozing".

Output Schema

NameRequiredDescription
idYes
urlYes
textYes
titleYes
metadataNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is fully covered. The description adds a characterization of the payload (full article body, transcript, build steps, BOM, model files, canonical URL), but since an output schema exists this is largely duplicative rather than new behavioral context.

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 action and then the id forms; nothing is padding. The long parenthetical prefix list is dense but each entry is functional.

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

Completeness4/5

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

For a single-parameter read tool with an output schema and full annotation coverage, the description supplies everything needed to invoke it correctly. The only gap is the unaddressed boundary against overlapping siblings such as `get_3d_model` and `get_build_guide`.

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 100% and the single `id` parameter is documented, so baseline is 3. The description goes beyond the schema's single `wiki:` example by enumerating all valid id prefixes, giving the agent concrete input format knowledge the schema does not spell out.

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 (fetch) and resource (the full content of a PrintPal item), and ties itself to the `search` sibling that produces the id. The enumerated id prefixes (`model:`, `tool:`, `wiki:`, etc.) make the scope of items unambiguous.

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

Usage Guidelines4/5

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

Clearly frames the workflow: call this after `search` to get an item's full content, and lists accepted id forms. It does not, however, say when to prefer this over the more specific siblings like `get_3d_model` or `get_build_guide`, whose scope appears to overlap for model/build content.

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

find_3d_printing_toolFind a PrintPal tool or calculatorA
Read-onlyIdempotent
Inspect

Recommend the right free PrintPal browser tool for a task: print cost / resin cost / layer height (magic numbers) / E-steps / flow rate / volumetric flow / filament spool / drying / shrinkage / Vref / Etsy profit calculators; generators for lithophanes, vases, name plates, 3D text, QR codes, bins, puzzles, mold boxes, flexi models, fidget clickers, Desk Pal, terrain maps, Minecraft maps; mesh repair, model splitter, converter, viewer, G-code viewer, AMS/multicolor painters; AI generators. Returns matching tools with links. Pass an empty task to list every tool.

NameRequiredDescriptionDefault
taskNoWhat the user is trying to do, e.g. "split a big model to fit my bed".
limitNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds only 'Returns matching tools with links' plus the empty-task listing behavior; it says nothing about match quality, ranking, or what happens when nothing matches. Modest added value against an already-complete annotation set.

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

Conciseness4/5

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

The purpose is front-loaded in the first clause, followed by a dense semicolon-delimited catalog and two short operational sentences. The enumeration is long but each item is plausibly load-bearing for semantic matching in a finder tool. Slightly wall-of-text, but no sentence is pure 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?

With no output schema, the description correctly states the return shape ('matching tools with links') and covers the empty-input edge case. The only gap is the undocumented 'limit' parameter, which the schema bounds but does not explain. Otherwise complete for a zero-required-parameter discovery tool.

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

Parameters3/5

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

Schema coverage is 50%: 'task' is documented in the schema, 'limit' is not documented anywhere. The description compensates partially by defining the empty-task semantics of 'task', which the schema does not state, but it never mentions 'limit', its default of 6, or its 1-50 range. Baseline 3 is appropriate.

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+resource: 'Recommend the right free PrintPal browser tool for a task', then enumerates the covered categories (calculators, generators, mesh utilities, AI generators). An agent can tell it is a catalog/finder rather than a computation. It never names the sibling calculators it overlaps with (calculate_print_cost, calculate_layer_heights, calculate_volumetric_flow), so routing between this and those is left to inference.

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?

One concrete usage rule is given: 'Pass an empty task to list every tool.' Beyond that there is no when-to-use versus the sibling calculator tools, and no guidance on when a specific calculator is preferable to this finder. Usage is implied rather than stated.

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

generate_3d_modelStart an AI 3D generation (uses credits)A
DestructiveIdempotent
Inspect

Step 2 of AI 3D generation. Starts the job priced by prepare_3d_generation on the user's connected PrintPal account and spends the quoted credits. Call only after the user has agreed to the cost shown by prepare_3d_generation, passing its quote_token and the approved credit amount. Pass a stable idempotency_key and reuse it when retrying after a timeout: a retry returns the original job and is never charged twice. A new generation needs a new quote. Returns a generation_uid; the model is not finished yet, so poll check_3d_generation.

NameRequiredDescriptionDefault
formatNoOptional; must match the quote.
promptNoOptional; must match the quote.
qualityNoOptional; must match the quote.
quote_tokenYesquote_token from prepare_3d_generation.
idempotency_keyNoUnique id for this generation request, reused on retries. Defaults to one derived from the quote.
approved_creditsYesThe credit cost the user approved.

Output Schema

NameRequiredDescription
phaseNo
promptNo
statusYes
creditsNo
downloadNo
replayedNo
settingsNo
next_stepYes
created_atNo
completed_atNo
billing_policyNo
download_errorNo
generation_uidNo
elapsed_secondsNo
poll_after_secondsNo
reference_image_urlNo
estimated_time_secondsNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as destructive, idempotent, and not read-only, but the description adds critical behavior: it spends quoted credits, retrying with the same idempotency_key returns the original job and never charges twice, and the job is asynchronous. These are meaningful disclosures beyond the annotations.

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 front-loaded with the step and action, then covers prerequisites, idempotent retry behavior, and the next polling step. Every sentence carries operational value with no wasted text.

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

Completeness5/5

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

For a credit-spending asynchronous mutation, the description covers the required quote/approval flow, safe retry behavior, and the follow-up polling tool. Since an output schema exists, return-value details need not be expanded further, and the critical call-preconditions are complete.

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 100%, so the baseline is 3. The description still adds useful semantics by tying quote_token and approved_credits to the prepare/approval flow and by explaining the retry meaning of idempotency_key; however, the format/prompt/quality quote-matching details are already present in the schema, so it does not fully exceed the schema.

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

Purpose5/5

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

The description names a specific action and resource: it starts an AI 3D generation job as step 2 and spends quoted credits. It clearly distinguishes prepare_3d_generation, check_3d_generation, and this tool, so an agent can identify the action without opening the schema.

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

Usage Guidelines5/5

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

It gives explicit prerequisites: call only after the user agrees to the cost from prepare_3d_generation, pass that quote_token and approved_credits, use a new quote for a new generation, and poll check_3d_generation afterward. Alternatives and conditions are named directly.

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

get_3d_modelGet 3D model detailsA
Read-onlyIdempotent
Inspect

Get full details for one PrintPal model by uid: description, license, file formats, author, stats, and the page URL to download it. Accepts a uid from search_3d_models results or a printpal.io/model/ URL.

NameRequiredDescriptionDefault
uidYesModel uid from search results or a printpal.io/model/<uid> URL.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds value beyond that by disclosing the return payload (stats, license, formats, download URL), which matters because no output schema exists.

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

Conciseness5/5

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

Two sentences, zero filler: the resource and scope lead, the returned fields follow, and the accepted input forms close. 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 one-parameter read tool with rich annotations, the description covers identity, input source, and return contents adequately even without an output schema. It does not say what happens on an unknown uid, which is the only meaningful remaining gap.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter's schema description already states both accepted forms (search-result uid or printpal.io/model/<uid> URL). The description restates the same accepted input without adding format, validation, or error semantics, so the baseline 3 applies.

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 ('Get full details for one PrintPal model by uid') and enumerates exactly what comes back: description, license, file formats, author, stats, download URL. It also distinguishes itself from the sibling search_3d_models by naming it as the source of the uid, so an agent can route between search and fetch 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?

The description clearly establishes the usage context — the uid comes from `search_3d_models` results or a printpal.io/model/<uid> URL — which tells the agent this is the detail-fetch step following a search. It stops short of an explicit 'do not use this for searching' exclusion, but the workflow position is unambiguous.

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

get_build_guideGet a build guide (steps, BOM, files)A
Read-onlyIdempotent
Inspect

Read a full PrintPal build guide by slug: summary, bill of materials with quantities and links, downloadable files (STL/3MF/code), every build step, callouts and code blocks. Use when the user wants to actually follow or adapt a project.

NameRequiredDescriptionDefault
slugYesProject slug from search results or a printpal.io/projects/<slug> URL.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context by itemizing what the guide contains (BOM quantities, downloadable STL/3MF/code, step-by-step content), which helps an agent know the return payload.

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

Conciseness5/5

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

Two sentences, zero filler, with the resource and its contents front-loaded before the usage trigger. Every clause earns its place.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the returned sections, and the single required parameter is fully documented in the schema. An agent has everything needed to select and invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the slug parameter already documents its source (search results or printpal.io/projects/<slug> URL). The description adds only 'by slug', so the schema does the heavy lifting and baseline 3 applies.

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 ('Read a full PrintPal build guide by slug') and enumerates the payload: summary, BOM with quantities/links, downloadable files, steps, callouts, code blocks. It clearly reads one full guide rather than searching, but it never names search_build_guides as the sibling it differs from.

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

Usage Guidelines4/5

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

'Use when the user wants to actually follow or adapt a project' gives a clear usage condition that separates it from the search/list tools. No explicit when-not or named alternative, but the intent trigger is unambiguous.

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

get_printpal_profileConnected PrintPal accountA
Read-onlyIdempotent
Inspect

Return the PrintPal profile represented by this request's authenticated credentials. The opaque id is unique within this app and remains unchanged across token refresh, reconnection, and display-name changes.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
idYesOpaque profile identifier, unique within this app and unchanged across token refresh, reconnection, and display-metadata changes. Never reassigned to another profile.
nameNoDisplay name for the authenticated profile.
nicknameNoA useful label that helps users distinguish connected profiles.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the returned id is opaque, app-scoped, and stable across token refresh, reconnection, and display-name changes — useful for an agent deciding whether to cache it. It omits what happens when credentials are absent/invalid.

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

Conciseness5/5

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

Two sentences, zero waste, with the core action and its credential scoping front-loaded before the id-stability detail. Nothing is repeated from the title or annotations.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and annotations cover the safety profile; the description fills the remaining gap by defining identity scope and id stability. The only shortfall is unstated behavior for missing or expired credentials.

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 the schema carries no semantic burden and the baseline is 4. The description does not need to explain inputs and correctly focuses on scope and the identity of the returned object instead.

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 ('Return the PrintPal profile') and pins the scope to 'this request's authenticated credentials', which immediately separates it from the calculation, search, and 3D-generation siblings. An agent knows this is the identity/whoami call without opening the schema.

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

Usage Guidelines3/5

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

The phrase 'represented by this request's authenticated credentials' implies it is called with no arguments to learn who is connected, but there is no explicit when-to-use or when-not-to-use guidance and no named alternative. Usage is inferable rather than stated.

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

prepare_3d_generationPrice an AI 3D generationA
Read-onlyIdempotent
Inspect

Step 1 of AI 3D generation on the user's connected PrintPal account. Validates the prompt or attached image, quality and format, and returns the exact credit cost, the account's available credits, normalised settings and a short-lived quote_token. Nothing is generated or charged. Show the user the cost and settings, then call generate_3d_model only if they agree. Text: pass prompt. Image-to-3D: pass the attached image as image (prompt is then an optional label). default (the standard setting, 256³), high (384³) and ultra (512³) accept text or an image and export stl/glb/obj/ply. super / superplus / superplus_1280 / superplus_1536 are high-resolution tiers (stl/glb/obj/fbx); their *_texture variants add colour textures and export glb or obj (obj arrives as a zip). High-resolution tiers work best from an image. prepare_3d_generation returns the exact credit cost.

NameRequiredDescriptionDefault
imageNoAn image the user attached in the conversation (PNG, JPEG or WebP).
formatNoglb
promptNoWhat to generate, e.g. "low-poly seated fox figurine". Required without an image.
qualityNodefault
image_urlNoFor clients without file attachments: an https URL of a PNG/JPEG/WebP image.

Output Schema

NameRequiredDescription
imageNo
promptNo
settingsYes
next_stepYes
quote_tokenYes
credits_costYes
billing_policyNo
quote_expires_atNo
credits_availableYes
sufficient_creditsYes
estimated_time_secondsNo

TDQS

A4.5/5.0
Behavior4/5

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

Adds real value beyond the annotations by ruling out side effects ('Nothing is generated or charged') and disclosing the quote_token artifact that the next step depends on. 'Short-lived' is left vague (no TTL), and it doesn't say what happens if the quote expires, so it stops short of full disclosure.

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 purpose and the no-charge guarantee, then dense tier/format guidance with little filler. The closing sentence 'prepare_3d_generation returns the exact credit cost' merely repeats the opening and is wasted space.

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?

Given an output schema exists and annotations cover safety, the description supplies the workflow ordering, cost-preview semantics and tier/format rules an agent needs. The omission of the `image_url` input path is the one real gap for a 5-parameter, branching tool.

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 only 60%, and the description compensates by explaining quality tiers with their resolutions (256³/384³/512³) and the per-tier export format constraints (stl/glb/obj/ply vs stl/glb/obj/fbx, texture variants glb/obj with obj as a zip) — constraints absent from the schema. It never mentions `image_url` (the fourth input path) or the format default, so it isn't complete.

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 ('Step 1 of AI 3D generation... validates the prompt... returns the exact credit cost') and positions itself in a sequence, making it clearly distinct from generate_3d_model (which actually generates) and check_3d_generation. An agent can pick the right one without opening the schema.

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

Usage Guidelines5/5

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

Explicit routing: 'Show the user the cost and settings, then call generate_3d_model only if they agree', plus explicit branch conditions ('Text: pass `prompt`. Image-to-3D: pass the attached image as `image`'). It even gives guidance on which input suits high-resolution tiers.

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

search_3d_modelsSearch 3D models to printA
Read-onlyIdempotent
Inspect

Find free printable 3D models (STL/3MF/OBJ) in the PrintPal community library by keyword — e.g. "articulated dragon", "headphone stand", "Raspberry Pi 5 case". Returns cards with thumbnail, author, tags, likes and a link to the model page where the files can be downloaded. Searches existing uploads only; new models can be made with AI generation (prepare_3d_generation), and open_cad_agent_link links to PrintPal's AI CAD agent for exact-dimension parts.

NameRequiredDescriptionDefault
limitNo
queryYesWhat the user wants to print, 1–6 words works best.
categoryNoOptional category filter.

Output Schema

NameRequiredDescription
hintNo
countYes
queryYes
resultsYes
explore_urlNo

TDQS

A4.7/5.0
Behavior4/5

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

While the annotations cover safety (readOnlyHint: true), the description adds critical behavioral context: the output format includes specific fields like 'thumbnail, author, tags, likes', which informs the agent about the complexity of the expected return data. It also specifies the search scope (community library).

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 highly efficient, front-loading the core function and then adding crucial scope and alternative usage context in a logical flow without unnecessary filler.

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

Completeness5/5

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

Given the list of many related sibling tools, this definition provides sufficient distinction regarding its scope (existing uploads only) and output detail to ensure an AI agent selects it correctly without needing to consult multiple documentation pages.

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?

Although schema coverage is 67%, the description provides excellent semantic guidance via concrete examples ('articulated dragon', 'Raspberry Pi 5 case'). These examples significantly help the agent understand the expected format and scope of the 'query' parameter.

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

Purpose5/5

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

The description clearly defines the action (Find/Search), the resource (3D models), and the content (printable STL/3MF/OBJ files). It is immediately clear what the tool achieves.

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

Usage Guidelines5/5

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

It provides explicit usage constraints by stating it searches 'existing uploads only' and directs the user to alternative tools like `prepare_3d_generation` and `open_cad_agent_link` for generative or CAD tasks.

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

search_build_guidesSearch build guides & projectsA
Read-onlyIdempotent
Inspect

Find step-by-step PrintPal build guides: Arduino/ESP32 electronics + 3D-printed enclosures, robots, functional prints, printer mods, STEM classroom projects, props and toys. Each result lists difficulty, time, cost, part/file/step counts. Filter by category (electronics-robotics, functional-prints, home-workshop, stem-education, printer-mods, art-props, toys-games) or difficulty (beginner, intermediate, advanced). Leave query empty to browse featured guides.

NameRequiredDescriptionDefault
sortNofeatured
limitNo
queryNo
categoryNoCategory slug or name.
difficultyNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds useful non-annotated context: each result carries difficulty, time, cost, and part/file/step counts, which tells the agent what the payload looks like. No pagination or result-count behavior beyond the default limit, though.

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 dense sentences: the first front-loads what the tool returns and over what domain, the second covers filtering and the empty-query case. No filler, no repetition of the title.

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

Completeness4/5

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

With no output schema, the description correctly takes on describing the result shape (difficulty, time, cost, counts) and enumerates the filter vocabularies. It is nearly complete except for sort/limit behavior on a five-parameter tool.

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 description coverage is only 20% (just 'category'), so the description compensates by enumerating all seven category slugs and the three difficulty values, plus the empty-query browse behavior. It leaves sort and limit semantics unexplained, which remains a gap.

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?

Specific verb (Find) plus the exact resource (PrintPal step-by-step build guides) and its scope (Arduino/ESP32 electronics, 3D-printed enclosures, robots, props, etc.). This clearly separates it from siblings like search_3d_models, search_learning_resources, and get_build_guide.

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?

Gives concrete selection conditions: filter by category or difficulty, and 'leave query empty to browse featured guides.' However, it never names the alternatives (search_learning_resources, search_3d_models, get_build_guide) or states when to prefer this tool over them.

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

search_learning_resourcesSearch guides, videos & coursesA
Read-onlyIdempotent
Inspect

Search PrintPal's how-to content: the vendor-neutral 3D printing wiki (print quality, filaments, slicer settings, maintenance, error codes, safety), OpenSCAD + AI-CAD docs, short video tutorials with transcripts, and free Academy courses with certificates. Use type to narrow. Results include ids accepted by fetch for the full article text.

NameRequiredDescriptionDefault
typeNoall
limitNo
queryYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real behavioral value by disclosing the content corpus scope and, with no output schema present, that results carry ids consumable by `fetch`; it omits pagination/ranking behavior and the 25-item cap.

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 tight sentences, front-loaded with the content scope before the `type` and `fetch` guidance. The parenthetical list is dense but every item earns its place by defining the corpus; no filler or restatement of the title.

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 search tool with no output schema, the description covers what is searched, how to narrow it, and that ids feed `fetch`. It leaves result-shape detail (fields besides ids) and limit/pagination behavior unstated, which is a modest but real gap.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. Its content inventory implicitly maps onto the `type` enum values (wiki/docs/videos/courses) and it calls out `type` explicitly, but `limit` (1-25, default 8) and result-count behavior are unexplained beyond the raw schema constraints.

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 (Search) and a precisely scoped resource (PrintPal's how-to content), then enumerates the four corpora (wiki, docs, videos, courses). This clearly separates it from siblings like search_3d_models, search_build_guides, and the generic search without opening any schema.

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?

Gives implied usage ('Use `type` to narrow') and a downstream routing hint ('ids accepted by `fetch`'), which tells the agent what to do next. However it never states when to prefer this tool over the generic `search` or the other specialized search siblings, so selection guidance is left to inference.

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. 2 tool updates
    • Removeddesign_parametric_cad
    • Addedopen_cad_agent_link
  2. 11 tool updates
    • Changedcalculate_filament_usage14 fields changed
      • addedInput schema / properties / density_g_cm3 / maximum
        Added value: +3
      • addedInput schema / properties / density_g_cm3 / minimum
        Added value: +0.3
      • addedInput schema / properties / diameter_mm / description
        Added value: +"Filament diameter (1.75 or 2.85 are standard)."
      • addedInput schema / properties / diameter_mm / maximum
        Added value: +3.5
      • addedInput schema / properties / diameter_mm / minimum
        Added value: +1
      • addedInput schema / properties / empty_spool_weight_grams / minimum
        Added value: +0
      • addedInput schema / properties / grams / description
        Added value: +"Filament weight. Give grams or meters, not both."
      • addedInput schema / properties / grams / minimum
        Added value: +0
      • addedInput schema / properties / meters / description
        Added value: +"Filament length. Give grams or meters, not both."
      • addedInput schema / properties / meters / minimum
        Added value: +0
      • addedInput schema / properties / spool_gross_weight_grams / minimum
        Added value: +0
      • addedInput schema / properties / spool_price_usd / minimum
        Added value: +0
      • addedInput schema / properties / spool_weight_kg / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / spool_weight_kg / maximum
        Added value: +50
    • Changedcalculate_layer_heights12 fields changed
      • addedInput schema / properties / lead_screw_pitch_mm / maximum
        Added value: +20
      • addedInput schema / properties / lead_screw_pitch_mm / minimum
        Added value: +0.1
      • addedInput schema / properties / lead_screw_starts / maximum
        Added value: +8
      • addedInput schema / properties / lead_screw_starts / minimum
        Added value: +1
      • addedInput schema / properties / max_layer_height_mm / maximum
        Added value: +2
      • addedInput schema / properties / max_layer_height_mm / minimum
        Added value: +0.01
      • addedInput schema / properties / microstepping / maximum
        Added value: +256
      • addedInput schema / properties / microstepping / minimum
        Added value: +1
      • addedInput schema / properties / nozzle_diameter_mm / maximum
        Added value: +2
      • addedInput schema / properties / nozzle_diameter_mm / minimum
        Added value: +0.1
      • addedInput schema / properties / step_angle_degrees / maximum
        Added value: +90
      • addedInput schema / properties / step_angle_degrees / minimum
        Added value: +0.1
    • Changedcalculate_print_cost21 fields changed
      • addedInput schema / properties / electricity_cost_per_kwh / maximum
        Added value: +10
      • addedInput schema / properties / electricity_cost_per_kwh / minimum
        Added value: +0
      • addedInput schema / properties / failure_rate_percent / description
        Added value: +"Allowance for failed prints, 0–100. Use 0 for none."
      • addedInput schema / properties / failure_rate_percent / maximum
        Added value: +100
      • addedInput schema / properties / failure_rate_percent / minimum
        Added value: +0
      • addedInput schema / properties / labor_minutes / minimum
        Added value: +0
      • addedInput schema / properties / labor_rate_per_hour / minimum
        Added value: +0
      • addedInput schema / properties / markup_percent / minimum
        Added value: +0
      • addedInput schema / properties / print_time_hours / maximum
        Added value: +10000
      • addedInput schema / properties / print_time_hours / minimum
        Added value: +0
      • addedInput schema / properties / print_weight_grams / maximum
        Added value: +1000000
      • addedInput schema / properties / print_weight_grams / minimum
        Added value: +0
      • addedInput schema / properties / printer_cost_usd / minimum
        Added value: +0
      • addedInput schema / properties / printer_lifespan_hours / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / printer_power_watts / maximum
        Added value: +10000
      • addedInput schema / properties / printer_power_watts / minimum
        Added value: +0
      • addedInput schema / properties / quantity / maximum
        Added value: +10000
      • addedInput schema / properties / quantity / minimum
        Added value: +1
      • addedInput schema / properties / spool_price_usd / minimum
        Added value: +0
      • addedInput schema / properties / spool_weight_kg / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / spool_weight_kg / maximum
        Added value: +50
    • Changedcalculate_volumetric_flow10 fields changed
      • changedInput schema / properties / hotend / description
        Previous value: -"Preset: stock, v6, ender3, prusa-mk3, prusa-mk4, bambu, volcano, rapido, dragon-hf, high-flow, chc-pro, goliath, voron"New value: +"Hotend preset, used when max_volumetric_flow_mm3_s is unknown."
      • addedInput schema / properties / hotend / enum
        Added value: +[
        +  "bambu",
        +  "bambu-a1",
        +  "bambu-p1",
        +  "bambu-x1",
        +  "chc-pro",
        +  "dragon-hf",
        +  "ender3",
        +  "goliath",
        +  "high-flow",
        +  "prusa-mk3",
        +  "prusa-mk4",
        +  "rapido",
        +  "standard",
        +  "stock",
        +  "v6",
        +  "volcano",
        +  "voron"
        +]
      • addedInput schema / properties / layer_height_mm / maximum
        Added value: +2
      • addedInput schema / properties / layer_height_mm / minimum
        Added value: +0.02
      • addedInput schema / properties / line_width_mm / maximum
        Added value: +3
      • addedInput schema / properties / line_width_mm / minimum
        Added value: +0.1
      • addedInput schema / properties / max_volumetric_flow_mm3_s / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / max_volumetric_flow_mm3_s / maximum
        Added value: +200
      • addedInput schema / properties / print_speed_mm_s / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / print_speed_mm_s / maximum
        Added value: +2000
    • Changedcheck_3d_generation3 fields changed
      • addedInput schema / properties / generation_uid / description
        Added value: +"generation_uid from generate_3d_model."
      • addedInput schema / properties / generation_uid / maxLength
        Added value: +64
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "billing_policy": {
        +      "type": "string"
        +    },
        +    "completed_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "created_at": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "properties": {
        +        "amount": {
        +          "type": "integer"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": "integer"
        +        },
        +        "state": {
        +          "enum": [
        +            "reserved",
        +            "charged",
        +            "restored",
        +            "refunded",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "download": {
        +      "properties": {
        +        "expires_in_seconds": {
        +          "type": "integer"
        +        },
        +        "file_name": {
        +          "type": "string"
        +        },
        +        "format": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "download_error": {
        +      "type": "string"
        +    },
        +    "elapsed_seconds": {
        +      "type": "integer"
        +    },
        +    "estimated_time_seconds": {
        +      "type": "integer"
        +    },
        +    "generation_uid": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "phase": {
        +      "type": "string"
        +    },
        +    "poll_after_seconds": {
        +      "type": "integer"
        +    },
        +    "prompt": {
        +      "type": "string"
        +    },
        +    "reference_image_url": {
        +      "type": "string"
        +    },
        +    "replayed": {
        +      "type": "boolean"
        +    },
        +    "settings": {
        +      "properties": {
        +        "delivered_contents": {
        +          "type": "string"
        +        },
        +        "delivered_format": {
        +          "type": "string"
        +        },
        +        "format": {
        +          "type": "string"
        +        },
        +        "input": {
        +          "enum": [
        +            "text",
        +            "image"
        +          ],
        +          "type": "string"
        +        },
        +        "quality": {
        +          "type": "string"
        +        },
        +        "resolution": {
        +          "type": "string"
        +        },
        +        "texture": {
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "starting",
        +        "processing",
        +        "completed",
        +        "failed",
        +        "stalled"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "next_step"
        +  ],
        +  "type": "object"
        +}
    • Changedgenerate_3d_model11 fields changed
      • addedInput schema / properties / approved_credits
        Added value: +{
        +  "description": "The credit cost the user approved.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / format / default
        Removed value: -"glb"
      • addedInput schema / properties / format / description
        Added value: +"Optional; must match the quote."
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Unique id for this generation request, reused on retries. Defaults to one derived from the quote.",
        +  "maxLength": 160,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • removedInput schema / properties / image_url
        Removed value: -{
        -  "description": "Optional public PNG/JPEG/WebP URL for image-to-3D (API-key mode only).",
        -  "type": "string"
        -}
      • changedInput schema / properties / prompt / description
        Previous value: -"What to generate, e.g. \"low-poly fox figurine, sitting\"."New value: +"Optional; must match the quote."
      • removedInput schema / properties / quality / default
        Removed value: -"default"
      • changedInput schema / properties / quality / description
        Previous value: -"default/high/ultra for text or image; super*/superplus* tiers are image-only high-res."New value: +"Optional; must match the quote."
      • addedInput schema / properties / quote_token
        Added value: +{
        +  "description": "quote_token from prepare_3d_generation.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "prompt"
        -]New value: +[
        +  "quote_token",
        +  "approved_credits"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "billing_policy": {
        +      "type": "string"
        +    },
        +    "completed_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "created_at": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "properties": {
        +        "amount": {
        +          "type": "integer"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": "integer"
        +        },
        +        "state": {
        +          "enum": [
        +            "reserved",
        +            "charged",
        +            "restored",
        +            "refunded",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "download": {
        +      "properties": {
        +        "expires_in_seconds": {
        +          "type": "integer"
        +        },
        +        "file_name": {
        +          "type": "string"
        +        },
        +        "format": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "download_error": {
        +      "type": "string"
        +    },
        +    "elapsed_seconds": {
        +      "type": "integer"
        +    },
        +    "estimated_time_seconds": {
        +      "type": "integer"
        +    },
        +    "generation_uid": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "phase": {
        +      "type": "string"
        +    },
        +    "poll_after_seconds": {
        +      "type": "integer"
        +    },
        +    "prompt": {
        +      "type": "string"
        +    },
        +    "reference_image_url": {
        +      "type": "string"
        +    },
        +    "replayed": {
        +      "type": "boolean"
        +    },
        +    "settings": {
        +      "properties": {
        +        "delivered_contents": {
        +          "type": "string"
        +        },
        +        "delivered_format": {
        +          "type": "string"
        +        },
        +        "format": {
        +          "type": "string"
        +        },
        +        "input": {
        +          "enum": [
        +            "text",
        +            "image"
        +          ],
        +          "type": "string"
        +        },
        +        "quality": {
        +          "type": "string"
        +        },
        +        "resolution": {
        +          "type": "string"
        +        },
        +        "texture": {
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "starting",
        +        "processing",
        +        "completed",
        +        "failed",
        +        "stalled"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "next_step"
        +  ],
        +  "type": "object"
        +}
    • Removedget_pricing_and_plans
    • Addedget_printpal_profile
    • Addedopen_3d_generator_link
    • Addedprepare_3d_generation
    • Changedsearch_3d_models4 fields changed
      • removedOutput schema / properties / generate_url
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / results / items / properties / is_free
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / results / items / properties / price_usd
        Removed value: -{
        -  "type": "number"
        -}
  3. 16 tool updates
    • First observedcalculate_filament_usage
    • First observedcalculate_layer_heights
    • First observedcalculate_print_cost
    • First observedcalculate_volumetric_flow
    • First observedcheck_3d_generation
    • First observeddesign_parametric_cad
    • First observedfetch
    • First observedfind_3d_printing_tool
    • First observedgenerate_3d_model
    • First observedget_3d_model
    • First observedget_build_guide
    • First observedget_pricing_and_plans
    • First observedsearch
    • First observedsearch_3d_models
    • First observedsearch_build_guides
    • First observedsearch_learning_resources

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Calculates 3D printing cost, time, material weight and build-plate fit from plain dimensions given in the conversation, with no STL upload and no API key. Covers PLA, PETG, ABS, ASA, TPU, Nylon, PC and PLA-CF, plus build volumes for Bambu Lab, Prusa, Creality, Voron and Elegoo printers.
    3
    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
    Lets an AI assistant check and repair STL/3MF meshes stored on your own computer, reporting holes, flipped faces, inside-out shells, non-manifold edges and duplicate triangles and writing a fixed copy beside the original. Everything runs locally, so the files are never uploaded and the original is never overwritten.
    10 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources