Skip to main content
Glama

Make Parts Now: 3D Printing & CNC Machining Quotes

create_quote

Create a quote. items: [{part_id, quantity, config: {units, process, material, color, finishes, finish_color, services, infill, layer_height}}]. See get_capabilities for valid ids. Returns prices, speed options with ship/arrival dates, and next_steps.

Input Schema

NameRequiredDescriptionDefault
itemsYesParts to quote, each {part_id, quantity (1-100000), notes?, config: {units, process, material, color?, finishes?, finish_color?, services?, infill?, layer_height?}}
speedNoProduction speed: economy, standard, fast, faster, or fastest (FDM only). Faster speeds add a rush fee; get_capabilities lists each process's speeds.
ship_toNoUS shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?}
po_numberNoYour purchase order number, printed on the quote and order
contact_emailNoEmail for receipts and order updates; defaults to the account email
idempotency_keyNoSame key on a retry returns the first result instead of creating another

Output Schema

NameRequiredDescriptionDefault
idYesQuote id (qt_...)
itemsYesLines: {id, position, part, config, quantity, notes, review_status, review_note, pricing, snapshot_url, action_needed?}
readyYesTrue when the quote can be paid
speedNoChosen production speed: economy, standard, fast, faster or fastest
tiersNoOne entry per speed: price, ship-by and arrive-by dates, eligibility
numberNoQuote number shown on the PDF and the website
statusNoopen, ordered or expired (discarded or past its date)
totalsNoTotals for the chosen speed, including total_before_tax
ship_toNoShipping address {name, company?, line1, line2?, city, state, postal_code, country, phone?}
blockingNoWhat stops the quote from being ready: {item_id, state, detail}
tax_noteNoSales tax is added at checkout
min_orderNoOrder minimum in dollars
po_numberNoYour purchase order number
share_urlNoThe quote's page on makepartsnow.com, to show a person the parts and prices
created_atNoISO 8601
expires_atNoISO 8601. Prices hold until then; a later read re-prices at live rates
next_stepsYesPlain-English instructions for what to do next
share_tokenNoToken of the quote's share link, {base}/quotes/share/{share_token}
needs_reviewNoTrue while a part waits for manual review; payment is blocked until then
contact_emailNoEmail for receipts and order updates
shipping_choiceNoId of the chosen shipping option
rate_set_versionNoVersion of the price list the quote was priced with
shipping_optionsNoCarrier options for ship_to; choose one with shipping_option
free_shipping_remainingNoDollars more to reach free shipping (0 when reached)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / share_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The quote's page on makepartsnow.com, to show a person the parts and prices",
      +  "title": "Share Url"
      +}
  2. Changed4 schema fields changed
    • addedOutput schema / description
      Added value: +"A priced quote. Fields can be added; none is removed or renamed within v1."
    • addedOutput schema / properties
      Added value: +{
      +  "blocking": {
      +    "anyOf": [
      +      {
      +        "items": {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "What stops the quote from being ready: {item_id, state, detail}",
      +    "title": "Blocking"
      +  },
      +  "contact_email": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Email for receipts and order updates",
      +    "title": "Contact Email"
      +  },
      +  "created_at": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "ISO 8601",
      +    "title": "Created At"
      +  },
      +  "expires_at": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "ISO 8601. Prices hold until then; a later read re-prices at live rates",
      +    "title": "Expires At"
      +  },
      +  "free_shipping_remaining": {
      +    "anyOf": [
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Dollars more to reach free shipping (0 when reached)",
      +    "title": "Free Shipping Remaining"
      +  },
      +  "id": {
      +    "description": "Quote id (qt_...)",
      +    "title": "Id",
      +    "type": "string"
      +  },
      +  "items": {
      +    "description": "Lines: {id, position, part, config, quantity, notes, review_status, review_note, pricing, snapshot_url, action_needed?}",
      +    "items": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "title": "Items",
      +    "type": "array"
      +  },
      +  "min_order": {
      +    "anyOf": [
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Order minimum in dollars",
      +    "title": "Min Order"
      +  },
      +  "needs_review": {
      +    "anyOf": [
      +      {
      +        "type": "boolean"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "True while a part waits for manual review; payment is blocked until then",
      +    "title": "Needs Review"
      +  },
      +  "next_steps": {
      +    "description": "Plain-English instructions for what to do next",
      +    "items": {
      +      "type": "string"
      +    },
      +    "title": "Next Steps",
      +    "type": "array"
      +  },
      +  "number": {
      +    "anyOf": [
      +      {
      +        "type": "integer"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Quote number shown on the PDF and the website",
      +    "title": "Number"
      +  },
      +  "po_number": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Your purchase order number",
      +    "title": "Po Number"
      +  },
      +  "rate_set_version": {
      +    "anyOf": [
      +      {
      +        "type": "integer"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Version of the price list the quote was priced with",
      +    "title": "Rate Set Version"
      +  },
      +  "ready": {
      +    "description": "True when the quote can be paid",
      +    "title": "Ready",
      +    "type": "boolean"
      +  },
      +  "share_token": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Token of the quote's share link, {base}/quotes/share/{share_token}",
      +    "title": "Share Token"
      +  },
      +  "ship_to": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Shipping address {name, company?, line1, line2?, city, state, postal_code, country, phone?}",
      +    "title": "Ship To"
      +  },
      +  "shipping_choice": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Id of the chosen shipping option",
      +    "title": "Shipping Choice"
      +  },
      +  "shipping_options": {
      +    "anyOf": [
      +      {
      +        "items": {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Carrier options for ship_to; choose one with shipping_option",
      +    "title": "Shipping Options"
      +  },
      +  "speed": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Chosen production speed: economy, standard, fast, faster or fastest",
      +    "title": "Speed"
      +  },
      +  "status": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "open, ordered or expired (discarded or past its date)",
      +    "title": "Status"
      +  },
      +  "tax_note": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Sales tax is added at checkout",
      +    "title": "Tax Note"
      +  },
      +  "tiers": {
      +    "anyOf": [
      +      {
      +        "items": {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "One entry per speed: price, ship-by and arrive-by dates, eligibility",
      +    "title": "Tiers"
      +  },
      +  "totals": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "default": null,
      +    "description": "Totals for the chosen speed, including total_before_tax",
      +    "title": "Totals"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "id",
      +  "items",
      +  "ready",
      +  "next_steps"
      +]
    • changedOutput schema / title
      Previous value: -"create_quoteDictOutput"New value: +"QuoteView"
  3. Changed1 schema field changed
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Same key on a retry returns the first result instead of creating another",
      +  "title": "Idempotency Key"
      +}
  4. First observed

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is covered structurally. The description adds what the call yields (prices, speed options with ship/arrival dates, next_steps), which is useful, but says nothing about auth requirements, whether the quote is persisted for later checkout, or costs (rush fees are only noted in the schema). There is a mild tension between idempotentHint=false and the presence of an idempotency_key retry mechanism, though the description itself does not contradict the annotation.

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

Conciseness4/5

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

Front-loaded with the verb+resource in three words, followed by a compact item/config sketch and a short return summary. Dense but every clause carries information; no filler sentences.

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

Completeness4/5

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

With an output schema present, the description needn't detail return values, and annotations cover the safety profile. It supplies the payload shape and the get_capabilities prerequisite, leaving only workflow context (quote -> checkout, auth) unstated, which is a minor gap for a creation tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by enumerating the inner config keys and pointing to get_capabilities as the source of valid process/material/color ids, which is genuinely useful invocation guidance not present in the structured fields.

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

Purpose4/5

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

The description opens with a specific verb+resource ('Create a quote') and then outlines the payload shape. It does not name the sibling tools (update_quote, get_quote, discard_quote) it must be distinguished from, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

'See get_capabilities for valid ids' gives one concrete prerequisite for constructing a valid call, and 'Returns prices, speed options... and next_steps' hints at the quoting workflow. However, there is no guidance on when to create a new quote versus updating an existing one (update_quote) or when a quote must precede checkout, so usage is only implied.

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.

Resources