PrintPal
Server Details
3D printing: printable models, calculators, troubleshooting wiki, build guides, AI 3D + CAD design.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 18 tools
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.
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.
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.
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 toolscalculate_filament_usageFilament weight ⇄ length ⇄ costARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| grams | No | Filament weight. Give grams or meters, not both. | |
| meters | No | Filament length. Give grams or meters, not both. | |
| material | No | pla, petg, abs, asa, tpu, nylon, pc, pla-cf, petg-cf, pa-cf … | pla |
| diameter_mm | No | Filament diameter (1.75 or 2.85 are standard). | |
| density_g_cm3 | No | Override density if known. | |
| spool_price_usd | No | ||
| spool_weight_kg | No | ||
| empty_spool_weight_grams | No | Weight of the empty spool (typ. 130–250 g). | |
| spool_gross_weight_grams | No | Weight of spool + remaining filament, to estimate what is left. |
TDQS
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.
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.
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.
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.
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.
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 numbersARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| microstepping | No | ||
| lead_screw_starts | No | ||
| nozzle_diameter_mm | No | ||
| step_angle_degrees | No | ||
| lead_screw_pitch_mm | No | ||
| max_layer_height_mm | No |
TDQS
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.
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.
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.
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.
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.
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 costARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | No | ||
| labor_minutes | No | Hands-on time: slicing, removal, post-processing. | |
| markup_percent | No | Profit markup to compute a selling price. | |
| spool_price_usd | No | ||
| spool_weight_kg | No | ||
| print_time_hours | Yes | Print time in hours (e.g. 3.5). | |
| printer_cost_usd | No | Printer purchase price, for depreciation. 0 to skip. | |
| print_weight_grams | Yes | Filament used, from the slicer. | |
| labor_rate_per_hour | No | ||
| printer_power_watts | No | ||
| failure_rate_percent | No | Allowance for failed prints, 0–100. Use 0 for none. | |
| printer_lifespan_hours | No | ||
| electricity_cost_per_kwh | No |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hotend | No | Hotend preset, used when max_volumetric_flow_mm3_s is unknown. | |
| line_width_mm | No | ||
| layer_height_mm | No | ||
| print_speed_mm_s | Yes | ||
| max_volumetric_flow_mm3_s | No |
TDQS
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.
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.
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.
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.
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.
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 generationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_uid | Yes | generation_uid from generate_3d_model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| phase | No | |
| prompt | No | |
| status | Yes | |
| credits | No | |
| download | No | |
| replayed | No | |
| settings | No | |
| next_step | Yes | |
| created_at | No | |
| completed_at | No | |
| billing_policy | No | |
| download_error | No | |
| generation_uid | No | |
| elapsed_seconds | No | |
| poll_after_seconds | No | |
| reference_image_url | No | |
| estimated_time_seconds | No |
TDQS
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.
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.
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.
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.
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.
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 itemARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Item id from `search`, e.g. "wiki:stringing-and-oozing". |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
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.
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.
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.
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.
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.
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 calculatorARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | What the user is trying to do, e.g. "split a big model to fit my bed". | |
| limit | No |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Optional; must match the quote. | |
| prompt | No | Optional; must match the quote. | |
| quality | No | Optional; must match the quote. | |
| quote_token | Yes | quote_token from prepare_3d_generation. | |
| idempotency_key | No | Unique id for this generation request, reused on retries. Defaults to one derived from the quote. | |
| approved_credits | Yes | The credit cost the user approved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| phase | No | |
| prompt | No | |
| status | Yes | |
| credits | No | |
| download | No | |
| replayed | No | |
| settings | No | |
| next_step | Yes | |
| created_at | No | |
| completed_at | No | |
| billing_policy | No | |
| download_error | No | |
| generation_uid | No | |
| elapsed_seconds | No | |
| poll_after_seconds | No | |
| reference_image_url | No | |
| estimated_time_seconds | No |
TDQS
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.
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.
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.
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.
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.
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 detailsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Model uid from search results or a printpal.io/model/<uid> URL. |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Project slug from search results or a printpal.io/projects/<slug> URL. |
TDQS
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.
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.
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.
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.
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.
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 accountARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Opaque profile identifier, unique within this app and unchanged across token refresh, reconnection, and display-metadata changes. Never reassigned to another profile. |
| name | No | Display name for the authenticated profile. |
| nickname | No | A useful label that helps users distinguish connected profiles. |
TDQS
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.
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.
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.
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.
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.
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.
open_3d_generator_linkLink to the PrintPal AI 3D generatorARead-onlyIdempotentInspect
Build a printpal.io link that opens the AI 3D generator with a prompt prefilled, for users who want to generate on the website themselves. This tool does not generate anything, does not use credits and does not mean a model exists. When the user wants the model made here, use prepare_3d_generation instead.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | What the user wants to generate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, idempotentHint, and destructiveHint=false, but the description adds important behavioral context beyond them. It explicitly says the tool does not generate anything, does not use credits, and does not mean a model exists, which prevents costly misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences, front-loaded with the core action and followed by constraints and the alternative tool. Every sentence adds distinct value without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple link-building tool with full annotation coverage, one fully documented parameter, and no output schema, the description is complete. It covers what the tool does, what it does not do, and when to choose the sibling instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already documents the prompt argument fully. The description adds that the prompt is prefilled into the generated link, but it does not add format or validation details beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: building a printpal.io link that opens the AI 3D generator with a prefilled prompt. It also explicitly distinguishes this from actual generation and from the sibling tool prepare_3d_generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use condition: users who want to generate on the website themselves. It also names the alternative and condition: when the user wants the model made here, use prepare_3d_generation instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_cad_agent_linkLink to the PrintPal AI CAD agentARead-onlyIdempotentInspect
Build a printpal.io link that opens the PrintPal AI CAD agent with a design brief prefilled, for users who want to design a functional part with exact dimensions (a bracket, enclosure, adapter or mount) on the website. The brief combines the description, dimensions and material given here with standard printability requirements and the requested export format. This tool does not design anything, does not use credits and does not mean a part exists. Running the agent requires signing in on printpal.io and uses credits from that account. For a figurine or other organic model made here, use prepare_3d_generation instead.
| Name | Required | Description | Default |
|---|---|---|---|
| material | No | Intended filament (affects tolerances), e.g. PLA, PETG, TPU. | |
| dimensions | No | Known dimensions in mm, e.g. "60 x 40 x 20 mm, M3 holes 50 mm apart". | |
| description | Yes | What the part is and what it must fit/do. | |
| export_format | No | File format the brief asks the agent to export. | stl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces rather than contradicts them by stating the tool "does not design anything, does not use credits and does not mean a part exists" — exactly the misconception an agent might form from the name. It additionally discloses auth and credit requirements that live only in prose, plus how the brief is assembled from the inputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each load-bearing: what it builds, how the brief is composed, what it does not do plus prerequisites, and the sibling alternative. The core action is front-loaded and there is no filler or repeated schema detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, no-output-schema, low-side-effect tool this is essentially complete: it covers output shape (a URL), composition logic, prerequisites and the alternative path. Only a small gap remains — it does not explicitly instruct the agent to surface the resulting link to the user — which keeps it just below perfect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter meaning (material affecting tolerances, dimensions format, enum export formats) is already documented, and baseline is 3. The description earns a notch above baseline by explaining that description + dimensions + material are merged with standard printability requirements into one brief, which clarifies how the four fields interact rather than restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ("Build a printpal.io link that opens the PrintPal AI CAD agent with a design brief prefilled") and names the exact user intent it serves. It is clearly separable from prepare_3d_generation and open_3d_generator_link by targeting the AI CAD agent for dimensioned functional parts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit inclusion condition (functional part with exact dimensions: bracket, enclosure, adapter, mount) and an explicit exclusion routing to a sibling ("For a figurine or other organic model made here, use prepare_3d_generation instead"). It also flags the downstream prerequisite of signing in and spending credits, so the agent knows this is a hand-off rather than a completed action.
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 generationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | An image the user attached in the conversation (PNG, JPEG or WebP). | |
| format | No | glb | |
| prompt | No | What to generate, e.g. "low-poly seated fox figurine". Required without an image. | |
| quality | No | default | |
| image_url | No | For clients without file attachments: an https URL of a PNG/JPEG/WebP image. |
Output Schema
| Name | Required | Description |
|---|---|---|
| image | No | |
| prompt | No | |
| settings | Yes | |
| next_step | Yes | |
| quote_token | Yes | |
| credits_cost | Yes | |
| billing_policy | No | |
| quote_expires_at | No | |
| credits_available | Yes | |
| sufficient_credits | Yes | |
| estimated_time_seconds | No |
TDQS
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.
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.
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.
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.
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.
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.
searchSearch PrintPalARead-onlyIdempotentInspect
Search everything on PrintPal for a 3D-printing query: community 3D models, free tools and calculators, wiki troubleshooting articles, OpenSCAD/AI-CAD docs, video tutorials, build guides and Academy courses. Returns ids accepted by fetch for the full content. Suited to general 3D printing questions such as "why is my first layer not sticking", "PETG temperature" or "3D printed phone stand".
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds useful behavioral context by noting that results are ids accepted by `fetch` for full content, which helps the agent chain tools correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste: scope first, return linkage second, usage examples third. Everything is front-loaded and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained here. Combined with rich annotations, the description fully covers scope, content types, query style, and the fetch linkage an agent needs to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage, so the baseline would be 3. The description adds value by supplying example natural-language queries such as 'PETG temperature', which clarifies the expected query style beyond the schema's generic note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (search) and resource (everything on PrintPal), then enumerates the content types covered. This clearly distinguishes it from narrower sibling tools like search_3d_models and search_build_guides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by saying the tool is 'suited to general 3D printing questions' and gives three concrete examples. However, it does not explicitly state when to prefer a narrower sibling search tool or when not to use this one.
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 printARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | What the user wants to print, 1–6 words works best. | |
| category | No | Optional category filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| count | Yes | |
| query | Yes | |
| results | Yes | |
| explore_url | No |
TDQS
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.
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.
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.
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.
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.
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 & projectsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | featured | |
| limit | No | ||
| query | No | ||
| category | No | Category slug or name. | |
| difficulty | No |
TDQS
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.
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.
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.
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.
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.
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 & coursesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | all | |
| limit | No | ||
| query | Yes |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
- Removed
design_parametric_cad - Added
open_cad_agent_link
11 tool updates
- Changed
calculate_filament_usage14 fields changed- added
Input schema / properties / density_g_cm3 / maximumAdded value: +3 - added
Input schema / properties / density_g_cm3 / minimumAdded value: +0.3 - added
Input schema / properties / diameter_mm / descriptionAdded value: +"Filament diameter (1.75 or 2.85 are standard)." - added
Input schema / properties / diameter_mm / maximumAdded value: +3.5 - added
Input schema / properties / diameter_mm / minimumAdded value: +1 - added
Input schema / properties / empty_spool_weight_grams / minimumAdded value: +0 - added
Input schema / properties / grams / descriptionAdded value: +"Filament weight. Give grams or meters, not both." - added
Input schema / properties / grams / minimumAdded value: +0 - added
Input schema / properties / meters / descriptionAdded value: +"Filament length. Give grams or meters, not both." - added
Input schema / properties / meters / minimumAdded value: +0 - added
Input schema / properties / spool_gross_weight_grams / minimumAdded value: +0 - added
Input schema / properties / spool_price_usd / minimumAdded value: +0 - added
Input schema / properties / spool_weight_kg / exclusiveMinimumAdded value: +0 - added
Input schema / properties / spool_weight_kg / maximumAdded value: +50
- Changed
calculate_layer_heights12 fields changed- added
Input schema / properties / lead_screw_pitch_mm / maximumAdded value: +20 - added
Input schema / properties / lead_screw_pitch_mm / minimumAdded value: +0.1 - added
Input schema / properties / lead_screw_starts / maximumAdded value: +8 - added
Input schema / properties / lead_screw_starts / minimumAdded value: +1 - added
Input schema / properties / max_layer_height_mm / maximumAdded value: +2 - added
Input schema / properties / max_layer_height_mm / minimumAdded value: +0.01 - added
Input schema / properties / microstepping / maximumAdded value: +256 - added
Input schema / properties / microstepping / minimumAdded value: +1 - added
Input schema / properties / nozzle_diameter_mm / maximumAdded value: +2 - added
Input schema / properties / nozzle_diameter_mm / minimumAdded value: +0.1 - added
Input schema / properties / step_angle_degrees / maximumAdded value: +90 - added
Input schema / properties / step_angle_degrees / minimumAdded value: +0.1
- Changed
calculate_print_cost21 fields changed- added
Input schema / properties / electricity_cost_per_kwh / maximumAdded value: +10 - added
Input schema / properties / electricity_cost_per_kwh / minimumAdded value: +0 - added
Input schema / properties / failure_rate_percent / descriptionAdded value: +"Allowance for failed prints, 0–100. Use 0 for none." - added
Input schema / properties / failure_rate_percent / maximumAdded value: +100 - added
Input schema / properties / failure_rate_percent / minimumAdded value: +0 - added
Input schema / properties / labor_minutes / minimumAdded value: +0 - added
Input schema / properties / labor_rate_per_hour / minimumAdded value: +0 - added
Input schema / properties / markup_percent / minimumAdded value: +0 - added
Input schema / properties / print_time_hours / maximumAdded value: +10000 - added
Input schema / properties / print_time_hours / minimumAdded value: +0 - added
Input schema / properties / print_weight_grams / maximumAdded value: +1000000 - added
Input schema / properties / print_weight_grams / minimumAdded value: +0 - added
Input schema / properties / printer_cost_usd / minimumAdded value: +0 - added
Input schema / properties / printer_lifespan_hours / exclusiveMinimumAdded value: +0 - added
Input schema / properties / printer_power_watts / maximumAdded value: +10000 - added
Input schema / properties / printer_power_watts / minimumAdded value: +0 - added
Input schema / properties / quantity / maximumAdded value: +10000 - added
Input schema / properties / quantity / minimumAdded value: +1 - added
Input schema / properties / spool_price_usd / minimumAdded value: +0 - added
Input schema / properties / spool_weight_kg / exclusiveMinimumAdded value: +0 - added
Input schema / properties / spool_weight_kg / maximumAdded value: +50
- Changed
calculate_volumetric_flow10 fields changed- changed
Input schema / properties / hotend / descriptionPrevious 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." - added
Input schema / properties / hotend / enumAdded 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" +] - added
Input schema / properties / layer_height_mm / maximumAdded value: +2 - added
Input schema / properties / layer_height_mm / minimumAdded value: +0.02 - added
Input schema / properties / line_width_mm / maximumAdded value: +3 - added
Input schema / properties / line_width_mm / minimumAdded value: +0.1 - added
Input schema / properties / max_volumetric_flow_mm3_s / exclusiveMinimumAdded value: +0 - added
Input schema / properties / max_volumetric_flow_mm3_s / maximumAdded value: +200 - added
Input schema / properties / print_speed_mm_s / exclusiveMinimumAdded value: +0 - added
Input schema / properties / print_speed_mm_s / maximumAdded value: +2000
- Changed
check_3d_generation3 fields changed- added
Input schema / properties / generation_uid / descriptionAdded value: +"generation_uid from generate_3d_model." - added
Input schema / properties / generation_uid / maxLengthAdded value: +64 - changed
Output 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" +}
- Changed
generate_3d_model11 fields changed- added
Input schema / properties / approved_creditsAdded value: +{ + "description": "The credit cost the user approved.", + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / format / defaultRemoved value: -"glb" - added
Input schema / properties / format / descriptionAdded value: +"Optional; must match the quote." - added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Unique id for this generation request, reused on retries. Defaults to one derived from the quote.", + "maxLength": 160, + "minLength": 8, + "type": "string" +} - removed
Input schema / properties / image_urlRemoved value: -{ - "description": "Optional public PNG/JPEG/WebP URL for image-to-3D (API-key mode only).", - "type": "string" -} - changed
Input schema / properties / prompt / descriptionPrevious value: -"What to generate, e.g. \"low-poly fox figurine, sitting\"."New value: +"Optional; must match the quote." - removed
Input schema / properties / quality / defaultRemoved value: -"default" - changed
Input schema / properties / quality / descriptionPrevious value: -"default/high/ultra for text or image; super*/superplus* tiers are image-only high-res."New value: +"Optional; must match the quote." - added
Input schema / properties / quote_tokenAdded value: +{ + "description": "quote_token from prepare_3d_generation.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "prompt" -]New value: +[ + "quote_token", + "approved_credits" +] - changed
Output 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" +}
- Removed
get_pricing_and_plans - Added
get_printpal_profile - Added
open_3d_generator_link - Added
prepare_3d_generation - Changed
search_3d_models4 fields changed- removed
Output schema / properties / generate_urlRemoved value: -{ - "type": "string" -} - added
Output schema / properties / hintAdded value: +{ + "type": "string" +} - removed
Output schema / properties / results / items / properties / is_freeRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / results / items / properties / price_usdRemoved value: -{ - "type": "number" -}
16 tool updates
- First observed
calculate_filament_usage - First observed
calculate_layer_heights - First observed
calculate_print_cost - First observed
calculate_volumetric_flow - First observed
check_3d_generation - First observed
design_parametric_cad - First observed
fetch - First observed
find_3d_printing_tool - First observed
generate_3d_model - First observed
get_3d_model - First observed
get_build_guide - First observed
get_pricing_and_plans - First observed
search - First observed
search_3d_models - First observed
search_build_guides - First observed
search_learning_resources
Related MCP Connectors
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Design 3D-printable parts by chatting: create, edit, render and publish parametric forges.
Real 3D-print slicing, quoting, DFM, orientation & material/settings advisors. Free personal tier.
Generate 3D models from images or text with AI, then retexture or convert them to STL, 3MF or OBJ.
Related MCP Servers
- AlicenseAqualityCmaintenanceCalculates 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.3MIT
- AlicenseNot gradedqualityDmaintenanceGenerate 3D models from text or image. Browse 10K+ free 3D models. AI creative platform with API1MIT
- AlicenseAqualityBmaintenanceEnables multimodal AI to convert photos with reference objects into parametric OpenSCAD models and watertight 3D-printable STL files, including calibration, part generation, and printability inspection.47MIT
- AlicenseNot gradedqualityBmaintenanceLets 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 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.