Skip to main content
Glama

FabTally 3D-Print Slicer, Quote & DFM

Get a 3D printing price quote

get_print_quote

FREE. Slicer-accurate FDM price quote from a real slice (not an estimate): print time, filament grams, and a priced quote (material + machine time + setup, with automatic volume discounts). Paste a link: a GitHub blob, Google Drive or Dropbox share link, a direct .stl/.3mf/.obj/.ply/.step URL, or a .zip (first printable model inside is used). Thingiverse/Printables/MakerWorld pages usually block server downloads: download the file yourself and upload it. Local file? Upload once at https://fabtally.com/upload and paste that URL. Optionally bring your own pricing (all optional): currency, machine_rate_per_hour, margin, setup_fee, minimum_price, material_cost_per_kg, markup_percent — the response echoes a pricing_basis (default vs custom). Free for personal/interactive use (fair-use limits); high volume / agents use credits or x402.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
marginNoBYO pricing: fractional margin, 0.3 = 30%.
printerNoPrinter id from list_printers (elegoo-centauri-carbon, elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-centauri-carbon.
qualityNoQuality preset: draft 0.28mm | standard 0.20mm | fine 0.12mm layer height.
currencyNoBYO pricing: currency code (USD, EUR, ...). Default USD. Only a label: amounts are NOT converted, so pass your own rates in that currency too.
filenameNoFile name incl. extension, e.g. 'bracket.stl'. Required with model_base64.
materialNoFilament/material id (pla, pla-cf, petg, petg-cf, abs, abs-cf, asa, asa-cf, nylon, pc, pet, tpu). Default pla.
quantityNoNumber of parts (1-10000). Volume discounts apply. Default 1.
supportsNoSupport generation style.
model_urlNoPREFERRED. Public URL to the 3D model. Paste a link: a GitHub blob, Google Drive or Dropbox share link, a direct .stl/.3mf/.obj/.ply/.step URL, or a .zip (first printable model inside is used). Thingiverse/Printables/MakerWorld pages usually block server downloads: download the file yourself and upload it. Local file? Upload once at https://fabtally.com/upload and paste that URL. The server fetches and (if a zip) unpacks it.
setup_feeNoBYO pricing: flat setup fee, charged once per job (not per part).
layer_heightNoExplicit layer height mm; overrides `quality`. 0.04 up to the printer's max (0.3-0.4 mm on a 0.4 mm nozzle).
model_base64NoBase64 model bytes — small-file fallback only (roughly <50KB). MCP clients (Claude/ChatGPT Desktop) truncate large inline tool arguments, so a real STL can silently arrive corrupted. For anything bigger use model_url (upload at https://fabtally.com/upload first). Provide `filename` too.
minimum_priceNoBYO pricing: per-unit price floor, applied after volume discounts.
infill_percentNoSparse infill density percent (0-100).
markup_percentNoBYO pricing: extra % markup on top of margin.
material_cost_per_kgNoBYO pricing: override material $/kg.
machine_rate_per_hourNoBYO pricing: machine time cost/hour.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / currency / description
      Previous value: -"BYO pricing: currency code (USD, EUR, ...). Default USD."New value: +"BYO pricing: currency code (USD, EUR, ...). Default USD. Only a label: amounts are NOT converted, so pass your own rates in that currency too."
    • changedInput schema / properties / layer_height / description
      Previous value: -"Explicit layer height mm (0.04-0.6); overrides `quality`."New value: +"Explicit layer height mm; overrides `quality`. 0.04 up to the printer's max (0.3-0.4 mm on a 0.4 mm nozzle)."
    • addedInput schema / properties / layer_height / maximum
      Added value: +0.6
    • addedInput schema / properties / layer_height / minimum
      Added value: +0.04
    • changedInput schema / properties / minimum_price / description
      Previous value: -"BYO pricing: per-unit price floor."New value: +"BYO pricing: per-unit price floor, applied after volume discounts."
    • changedInput schema / properties / model_url / description
      Previous value: -"PREFERRED. Public URL to the 3D model. Paste a link: Thingiverse/Printables/MakerWorld model pages, a GitHub blob, Google Drive or Dropbox share link, a direct .stl/.3mf/.obj/.ply/.step URL, or a .zip (first printable model inside is used). Local file? Upload once at https://fabtally.com/upload and paste that URL. The server fetches and (if a zip) unpacks it."New value: +"PREFERRED. Public URL to the 3D model. Paste a link: a GitHub blob, Google Drive or Dropbox share link, a direct .stl/.3mf/.obj/.ply/.step URL, or a .zip (first printable model inside is used). Thingiverse/Printables/MakerWorld pages usually block server downloads: download the file yourself and upload it. Local file? Upload once at https://fabtally.com/upload and paste that URL. The server fetches and (if a zip) unpacks it."
    • changedInput schema / properties / printer / description
      Previous value: -"Printer id from list_printers (elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-neptune4-max."New value: +"Printer id from list_printers (elegoo-centauri-carbon, elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-centauri-carbon."
    • changedInput schema / properties / setup_fee / description
      Previous value: -"BYO pricing: flat per-job setup fee."New value: +"BYO pricing: flat setup fee, charged once per job (not per part)."
  2. Changed15 schema fields changed
    • changedInput schema / properties / currency / description
      Previous value: -"Bring-your-own pricing: 2-8 letter currency code (e.g. USD, EUR). Default USD."New value: +"BYO pricing: currency code (USD, EUR, ...). Default USD."
    • changedInput schema / properties / filename / description
      Previous value: -"File name incl. extension, e.g. 'bracket.stl'. Sets the file type; required with model_base64."New value: +"File name incl. extension, e.g. 'bracket.stl'. Required with model_base64."
    • changedInput schema / properties / infill_percent / description
      Previous value: -"Sparse infill density percent (0-100). Used for the material-saving delta in a full DFM report."New value: +"Sparse infill density percent (0-100)."
    • changedInput schema / properties / layer_height / description
      Previous value: -"Explicit layer height in mm (0.04-0.6); overrides `quality` if both are given."New value: +"Explicit layer height mm (0.04-0.6); overrides `quality`."
    • changedInput schema / properties / machine_rate_per_hour / description
      Previous value: -"Bring-your-own pricing: machine time cost per hour, in `currency`. Default FabTally's rate."New value: +"BYO pricing: machine time cost/hour."
    • changedInput schema / properties / margin / description
      Previous value: -"Bring-your-own pricing: fractional margin on top of cost, e.g. 0.3 = 30%. Default FabTally's margin."New value: +"BYO pricing: fractional margin, 0.3 = 30%."
    • changedInput schema / properties / markup_percent / description
      Previous value: -"Bring-your-own pricing: extra percent markup applied on top of margin. Default 0."New value: +"BYO pricing: extra % markup on top of margin."
    • changedInput schema / properties / material_cost_per_kg / description
      Previous value: -"Bring-your-own pricing: override the material's $/kg cost. Default FabTally's material pricing."New value: +"BYO pricing: override material $/kg."
    • changedInput schema / properties / minimum_price / description
      Previous value: -"Bring-your-own pricing: price floor per unit, in `currency`. Default FabTally's minimum."New value: +"BYO pricing: per-unit price floor."
    • changedInput schema / properties / model_base64 / description
      Previous value: -"Base64-encoded model file bytes (STL/3MF/OBJ/PLY/STEP), an alternative to model_url for inline data. Provide `filename` too."New value: +"Base64 model bytes — small-file fallback only (roughly <50KB). MCP clients (Claude/ChatGPT Desktop) truncate large inline tool arguments, so a real STL can silently arrive corrupted. For anything bigger use model_url (upload at https://fabtally.com/upload first). Provide `filename` too."
    • changedInput schema / properties / model_url / description
      Previous value: -"Public https URL to the 3D model file (STL, 3MF, OBJ, PLY, or STEP). The server fetches it. Use this OR model_base64."New value: +"PREFERRED. Public URL to the 3D model. Paste a link: Thingiverse/Printables/MakerWorld model pages, a GitHub blob, Google Drive or Dropbox share link, a direct .stl/.3mf/.obj/.ply/.step URL, or a .zip (first printable model inside is used). Local file? Upload once at https://fabtally.com/upload and paste that URL. The server fetches and (if a zip) unpacks it."
    • changedInput schema / properties / printer / description
      Previous value: -"3D printer id from list_printers (elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-neptune4-max."New value: +"Printer id from list_printers (elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-neptune4-max."
    • changedInput schema / properties / quality / description
      Previous value: -"Print quality preset: draft 0.28mm | standard 0.20mm | fine 0.12mm layer height."New value: +"Quality preset: draft 0.28mm | standard 0.20mm | fine 0.12mm layer height."
    • changedInput schema / properties / quantity / description
      Previous value: -"Number of parts (1-10000). Volume discounts apply automatically. Default 1."New value: +"Number of parts (1-10000). Volume discounts apply. Default 1."
    • changedInput schema / properties / setup_fee / description
      Previous value: -"Bring-your-own pricing: flat per-quote setup fee, in `currency`. Default FabTally's fee."New value: +"BYO pricing: flat per-job setup fee."
  3. Changed13 schema fields changed
    • addedInput schema / properties / currency
      Added value: +{
      +  "description": "Bring-your-own pricing: 2-8 letter currency code (e.g. USD, EUR). Default USD.",
      +  "type": "string"
      +}
    • addedInput schema / properties / infill_percent
      Added value: +{
      +  "description": "Sparse infill density percent (0-100). Used for the material-saving delta in a full DFM report.",
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / layer_height
      Added value: +{
      +  "description": "Explicit layer height in mm (0.04-0.6); overrides `quality` if both are given.",
      +  "type": "number"
      +}
    • addedInput schema / properties / machine_rate_per_hour
      Added value: +{
      +  "description": "Bring-your-own pricing: machine time cost per hour, in `currency`. Default FabTally's rate.",
      +  "type": "number"
      +}
    • addedInput schema / properties / margin
      Added value: +{
      +  "description": "Bring-your-own pricing: fractional margin on top of cost, e.g. 0.3 = 30%. Default FabTally's margin.",
      +  "type": "number"
      +}
    • addedInput schema / properties / markup_percent
      Added value: +{
      +  "description": "Bring-your-own pricing: extra percent markup applied on top of margin. Default 0.",
      +  "type": "number"
      +}
    • addedInput schema / properties / material_cost_per_kg
      Added value: +{
      +  "description": "Bring-your-own pricing: override the material's $/kg cost. Default FabTally's material pricing.",
      +  "type": "number"
      +}
    • addedInput schema / properties / minimum_price
      Added value: +{
      +  "description": "Bring-your-own pricing: price floor per unit, in `currency`. Default FabTally's minimum.",
      +  "type": "number"
      +}
    • addedInput schema / properties / printer
      Added value: +{
      +  "description": "3D printer id from list_printers (elegoo-neptune4-max, bambu-a1, bambu-a1-mini, bambu-p1s, bambu-x1c, prusa-mk4, prusa-mini, ender3-v3, creality-k1, creality-k1-max, voron-24-350, anycubic-kobra2). Default elegoo-neptune4-max.",
      +  "type": "string"
      +}
    • addedInput schema / properties / quality
      Added value: +{
      +  "description": "Print quality preset: draft 0.28mm | standard 0.20mm | fine 0.12mm layer height.",
      +  "enum": [
      +    "draft",
      +    "standard",
      +    "fine"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / setup_fee
      Added value: +{
      +  "description": "Bring-your-own pricing: flat per-quote setup fee, in `currency`. Default FabTally's fee.",
      +  "type": "number"
      +}
    • addedInput schema / properties / supports
      Added value: +{
      +  "description": "Support generation style.",
      +  "enum": [
      +    "auto",
      +    "none",
      +    "tree"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / x_payment
      Removed value: -{
      -  "description": "x402 payment payload (base64) for a PAID tool. If supplied it is forwarded as the X-PAYMENT header to settle the call and return the real result instead of a 402 challenge. Omit to get the price challenge first.",
      -  "type": "string"
      -}
  4. First observed

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and discloses a lot: it is free, has fair-use limits, what the response contains (print time, filament grams, priced quote with material + machine time + setup and automatic volume discounts), that a pricing_basis is echoed, and that currency is a label only with no conversion. It also warns about a real failure mode (large inline base64 args getting truncated by MCP clients).

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

Conciseness3/5

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

Front-loaded with 'FREE. Slicer-accurate...' which is good, but the input-handling guidance (link types, blocked sites, upload fallback) is duplicated almost verbatim in the model_url schema description, and the 17-parameter tool's description runs dense with little whitespace or grouping. Some of the length is earned by the input complexity, but the redundancy costs it.

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 17-parameter, zero-required, no-output-schema tool, the description covers the essentials: how to supply the model, the free/paid boundary, and what the response contains. The only real gap is that the interplay between layer_height and quality, and the interaction of quantity with minimum_price/volume discounts, is left to the schema.

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 100%, so the baseline is 3, but the description adds value by grouping the BYO pricing parameters coherently and noting they are all optional and that the response echoes a default-vs-custom pricing_basis. That interplay between the custom-pricing inputs and the returned basis is not stated anywhere in 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?

States a specific verb+resource ('Get a 3D printing price quote') and immediately sharpens the scope with 'Slicer-accurate FDM price quote from a real slice (not an estimate)'. That qualifier cleanly separates it from estimate-style siblings like cost_breakdown and from model-processing siblings like slice_model or analyze_3d_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?

Gives concrete when-to-use guidance for input paths: paste a link (with the specific accepted link/file types), and the explicit exclusion that Thingiverse/Printables/MakerWorld pages usually block server downloads so the user must download and upload instead. It also flags the free-tier boundary (personal/interactive vs high-volume/agent use via credits or x402). It does not name sibling tools as alternatives, so it falls 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.