Skip to main content
Glama

Make Parts Now: 3D Printing & CNC Machining Quotes

Server Details

Instant 3D printing and CNC machining quotes from your CAD files (STL, STEP, 3MF, OBJ): price and ship date for SLS nylon, FDM plastic, aluminum and brass parts made in the US

Ownership verified
Status
Healthy
Uptime
97.8% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 18 tools

Disambiguation5/5

Each tool targets a distinct resource+action (account, quote, part, order, payment), and the two payment paths are explicitly labeled as 'Option A' (create_checkout_link) and 'Option B' (pay_with_crypto). Edge cases like update_quote vs create_quote, or discard_quote vs request_order_cancellation, are clearly separated by scope (quote vs order). No two tools appear to do the same thing.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun convention (create_quote, get_order, list_quotes, update_account, upload_part, pay_with_crypto). Verbs map predictably to CRUD/lifecycle operations and the pattern never breaks.

Tool Count4/5

18 tools is on the higher side but justified by a genuinely multi-domain server spanning accounts, quotes, parts, orders, and two payment methods. Slightly heavy but each tool earns its place; nothing feels redundant enough to trim.

Completeness4/5

The surface covers the full lifecycle: account create/read/update, capabilities discovery, part upload/get, quote create/get/update/discard/list, order get/list/cancel, and refund handling. Minor gaps exist (no standalone part listing/deletion or explicit quote duplication), but core workflows have no dead ends.

Available Tools

18 tools
create_agent_accountAInspect

Create an autonomous agent account and API key. accept_terms must be true (Terms of Sale + Agent Terms). ship_to: {name, line1, line2?, city, state, postal_code, country: 'US', phone?}. The api_key is shown once.

NameRequiredDescriptionDefault
nameYesName of the agent or app placing orders
emailYesEmail that receives the account notice, receipts, and order problems
ship_toNoUS shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?}
accept_termsYesMust be true to accept the Terms of Sale and Agent Terms
callback_urlNoPublic https URL for signed part, quote, and order webhooks
organizationNoCompany or person operating the agent

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare the safety profile (readOnly=false, idempotent=false, openWorld=true), but the description adds two things annotations cannot: that accept_terms must be true or the call fails, and that the api_key is shown only once (non-recoverable). That is meaningful behavioral context beyond the structured fields.

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?

Three short sentences, front-loaded with the core action and the hard gating requirement, then the address shape and the one-time key. Efficient, though the ship_to restatement duplicates the schema rather than earning its place.

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

Completeness4/5

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

An output schema exists so return values need not be explained, and the description covers the critical validation and one-time-secret behavior. It omits prerequisites (no existing account required?), webhook/callback expectations, and how to recover or rotate the key, which would fully round it out.

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

Parameters3/5

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

Schema description coverage is 100%, and the description's parameter text (accept_terms requirement, ship_to object shape) is verbatim-equivalent to the schema descriptions. It adds no syntax, constraint, or default information the schema lacks, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create an autonomous agent account and API key'), which clearly separates it from read-oriented siblings like get_account and from order-flow tools like create_checkout_link. It does not explicitly name or contrast with any sibling, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the tool is evidently the onboarding step that must precede order/quote tools, but the description never says when to call it versus get_account or what the prerequisite state is. No exclusions or alternatives are given.

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

create_quoteAInspect

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.

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

NameRequiredDescription
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)

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.

discard_quoteA
Idempotent
Inspect

Close a quote you no longer need, so it stops counting toward the open-quote limit. It becomes 'expired': its checkout links and USDC payment requests stop working and it can't be paid. Discarding it again is harmless. An ordered quote, or one with a USDC payment received, can't be discarded.

NameRequiredDescriptionDefault
quote_idYesQuote id (qt_...) returned by create_quote

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by spelling out the concrete consequences: the quote becomes 'expired', checkout links and USDC payment requests stop working, it can't be paid, and it can't be discarded once ordered or paid. This confirms and enriches the idempotentHint (repeat discard is harmless) and clarifies the destructiveHint=false nuance.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the purpose and effect, followed by idempotency and preconditions. No filler; every sentence carries a distinct fact an agent needs.

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

Completeness5/5

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

An output schema exists, so return values need not be explained, and the description still covers effect, irreversibility characteristics, and failure preconditions. Nothing material for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%; the single quote_id parameter is already documented as 'qt_... returned by create_quote'. The description adds no further parameter detail, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('close a quote') and immediately gives the business reason ('stops counting toward the open-quote limit'). The described state transition to 'expired' clearly separates it from siblings like update_quote and get_quote.

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 a clear when-to-use condition ('a quote you no longer need') and explicit preconditions for failure ('an ordered quote, or one with a USDC payment received, can't be discarded'). It does not name a sibling alternative or direct the agent to update_quote for milder edits, 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.

get_accountA
Read-onlyIdempotent
Inspect

The authenticated account: contact email, default ship_to, credit balance, spending limits.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds that it returns the authenticated account specifically (not an arbitrary account) and lists fields, but those fields are likely also in the output schema, so the added value is modest.

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

Conciseness5/5

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

The description is a single, short fragment that front-loads the resource and its contents. Every word contributes, and there is no unnecessary verbosity.

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

Completeness4/5

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

Given the simplicity (no parameters), read-only annotations, and an existing output schema, the description is nearly complete. The only minor gap is the absence of an explicit verb, but the fragment 'The authenticated account: ...' is sufficient for an agent to understand the tool's purpose.

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?

There are zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and it provides no misleading parameter information.

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 identifies the resource (the authenticated account) and enumerates the fields returned, so an agent can tell what it provides. However, it lacks an explicit action verb and does not differentiate from sibling tools such as get_capabilities or get_order, so it falls short of a 5.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives are provided. The description only states what the tool returns, leaving an agent to infer the appropriate context.

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

get_capabilitiesB
Read-onlyIdempotent
Inspect

Processes, materials, colors, finishes, services, speeds, file formats, limits and payment methods.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds a content list but no behavioral context such as caching, authentication requirements, or how the data is sourced, so it adds little beyond structured fields.

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

Conciseness4/5

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

The description is a single concise fragment, front-loaded with the capability categories. Every word contributes to defining the scope, with no wasted text. It is a list rather than a sentence, but that is appropriate for a zero-parameter getter.

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

Completeness3/5

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

With an output schema and rich annotations, the description only needs to cover purpose and usage. It covers purpose via the category list but omits any usage guidance or differentiation. For a simple zero-parameter tool, this is minimally viable, but the missing when-to-use context is a clear gap.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 per the rules. The description does not need to explain parameter semantics, and none are present to document.

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 enumerates the specific capability categories returned (processes, materials, colors, finishes, services, speeds, file formats, limits, payment methods), making the resource scope very clear. It lacks an action verb (relying on the tool name) and does not differentiate from siblings, but no sibling overlaps in purpose.

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

Usage Guidelines2/5

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

No when-to-use guidance is provided, no alternatives mentioned, and no prerequisites stated. The description only lists content, leaving the agent to infer when this tool should be called.

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

get_orderC
Read-onlyIdempotent
Inspect

Order status, ship-by and arrive-by dates, tracking.

NameRequiredDescriptionDefault
order_idYesOrder id (ord_...) from list_orders or the paid quote

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond the field list — no error behavior for unknown order ids, no permission or rate-limit notes — so it contributes little on this dimension.

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

Conciseness3/5

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

It is a single terse fragment with no filler, and the most useful content leads. But it is a verbless noun phrase rather than a structured statement, which reads as under-specification rather than disciplined brevity.

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

Completeness3/5

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

An output schema exists, so the returned fields (status, dates, tracking) did not need restating here, and annotations cover the safety profile. The genuine gaps — how it differs from list_orders/get_quote and behavior on a missing order — are minor for such a simple one-parameter read tool.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, and the schema description is richer than the tool description, naming the ord_... prefix and the sources (list_orders, paid quote). Baseline 3 applies since the schema does all the work.

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

Purpose3/5

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

The fragment names the resource (order) and enumerates the data it surfaces (status, ship-by/arrive-by dates, tracking), so an agent can infer this is a single-order lookup. However, it supplies no verb and gives no signal distinguishing it from list_orders or get_quote, so the purpose is only implied.

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

Usage Guidelines2/5

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

The description says nothing about when to call this tool versus list_orders (bulk) or get_quote (pre-purchase). The only routing hint, 'from list_orders or the paid quote', lives in the input schema, not the description.

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

get_partA
Read-onlyIdempotent
Inspect

Part status, measured geometry (mm), suggested units, DFM warnings, and processes that fit it. Pass wait_seconds to wait for a pending part's analysis in this call instead of polling.

NameRequiredDescriptionDefault
part_idYesPart id (prt_...) returned by upload_part or get_upload_url
wait_secondsNoSeconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so safety is covered. The description adds genuinely useful behavior beyond that: the fact that a part's analysis can be 'pending' and that the call can optionally block server-side for it.

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

Conciseness4/5

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

Two sentences, no filler; the return contents are front-loaded and the optional wait behavior follows. Slightly dense enumeration in sentence one, but every item earns its place.

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

Completeness5/5

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

Return values are already covered by an output schema, and both parameters are fully documented in the schema; the description still summarizes the payload and the pending/wait nuance. For a 2-parameter read tool, nothing needed to call it correctly is missing.

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 earns the bump by explaining why wait_seconds exists (to wait on a pending part 'instead of polling'), which the schema only describes mechanically as '0 answers at once'.

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

Purpose4/5

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

States a specific resource (part) and enumerates exactly what is returned: status, measured geometry in mm, suggested units, DFM warnings, and fitting processes. That is far more concrete than a generic 'get_part', though it never names a sibling to contrast against.

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 a clear usage instruction for the pending-analysis case: pass wait_seconds to block in this call 'instead of polling'. It does not say when this tool should be skipped or which sibling to prefer, but the polling-vs-wait tradeoff is explicit.

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

get_quoteB
Read-onlyIdempotent
Inspect

Current pricing, speeds, shipping options, warnings and next_steps for a quote.

NameRequiredDescriptionDefault
quote_idYesQuote id (qt_...) returned by create_quote

Output Schema

NameRequiredDescription
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)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description does add genuinely useful context by revealing that the payload carries warnings and next_steps (i.e. actionable state), but says nothing about freshness/staleness, quote expiry, or auth needs.

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?

A single front-loaded fragment that lists the returned fields with zero filler. It is compact and earns its place, though it is a bare fragment rather than a structured sentence.

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

Completeness4/5

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

An output schema exists so return values need not be spelled out, one required parameter is fully documented in the schema, and annotations carry the safety profile. The remaining gap is the absence of usage routing versus list_quotes/update_quote, which is minor given the surrounding coverage.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter quote_id is documented in the schema, including its qt_ prefix and origin. The description adds no parameter detail, so the baseline of 3 for high-coverage schemas applies.

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

Purpose4/5

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

The description names the resource (a quote) and enumerates the specific content returned: pricing, speeds, shipping options, warnings and next_steps. An agent can tell it is a single-quote retrieval rather than a listing, but it never explicitly contrasts with siblings like list_quotes or get_order.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative named. The only routing signal ('quote_id returned by create_quote') lives in the schema, not the description, so the description itself leaves usage to inference.

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

get_upload_urlAInspect

Get a one-time URL to HTTP PUT a large file directly (no auth header needed). Returns the part on upload.

NameRequiredDescriptionDefault
filenameYesFile name with extension (.stl, .3mf, .obj, .step)
no_controlled_dataYesMust be true: confirms the file contains no CUI, ITAR, or export-controlled data

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare the non-read-only, non-idempotent, non-destructive profile; the description adds genuinely new context: the URL is one-time, requires no auth header, and the part is returned on upload. It does not state how long the URL stays valid or what happens if the PUT fails.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action and the key operational detail (no auth header), with zero filler.

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

Completeness3/5

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

With an output schema present, return values need no explanation, and the description covers the auth exception. However, for a workflow tool that sits alongside upload_part, omitting how the two relate and how long the one-time URL lives leaves a meaningful gap for correct invocation sequencing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are already documented in the schema (including the allowed file extensions and the CUI/ITAR confirmation). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource (get a one-time URL) and the intended mechanism (HTTP PUT directly, no auth header). It is clear what the tool produces, but it never distinguishes itself from the sibling upload_part, which an agent could easily confuse with this pre-upload step.

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?

'large file' implies a size-based usage condition versus presumably smaller uploads, but there is no explicit when-to-use/when-not or any pointer to upload_part as the alternative path. Usage must be inferred rather than read.

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

list_ordersA
Read-onlyIdempotent
Inspect

Orders for this account, newest first. Filter by quote_id to check whether a checkout link was paid.

NameRequiredDescriptionDefault
quote_idNoOnly orders for this quote id (qt_...)

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so safety is covered. The description adds context annotations do not carry: results are scoped to 'this account' and sorted newest-first, which tells the agent what to expect from the result set.

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

Conciseness5/5

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

Two short sentences, the default ordering is front-loaded, and the filter guidance follows immediately. No sentence is wasted.

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

Completeness4/5

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

With an output schema present, return formatting is covered, and annotations cover the safety profile. For a one-optional-param list tool this is nearly complete; the only omission is any mention of result limits or pagination behavior.

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

Parameters4/5

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

Schema coverage is 100% and already documents quote_id's format (qt_...), so the baseline is 3. The description goes beyond that by explaining the intent behind the filter (verifying a checkout link was paid), which is meaning the schema does not supply.

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

Purpose4/5

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

The description names the resource ('Orders for this account') and a default ordering ('newest first'), which is enough to distinguish it from the singular get_order sibling. It stops short of using an explicit listing verb, but the resource+scope pairing is clear.

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?

It gives one concrete use case ('filter by quote_id to check whether a checkout link was paid'), which implies when to reach for the filter. It never states when not to use this tool or points to alternatives like get_order for a single order, leaving routing to inference.

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

list_quotesA
Read-onlyIdempotent
Inspect

Your quotes, newest first: id, number, status, item_count, expires_at and the last priced total_before_tax. Nothing is repriced; use get_quote for current prices. Use it to find quotes to discard when you hit the open-quote limit.

NameRequiredDescriptionDefault
limitNoHow many to return, newest first (1-200)
statusNoWhich quotes: 'open' (the default), 'expired' (discarded), 'ordered', or 'all'open

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, non-destructive read, so the safety bar is met. The description goes beyond that by disclosing that results are not repriced and that total_before_tax is the last priced value — a meaningful behavioral quirk. It doesn't mention pagination or the default-status scoping, but the core behavioral disclosure is strong.

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

Conciseness5/5

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

Two compact sentences with zero filler. The result shape is front-loaded, followed immediately by the pricing caveat and 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.

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 does not need to explain return values, and it covers usage and the pricing caveat well. One small gap: 'your quotes' reads as all quotes while the schema default is status='open', leaving the default scoping to the schema rather than stating it.

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

Parameters3/5

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

Schema description coverage is 100%, so both limit and status are fully documented in the schema including the enum meanings and defaults. The description only echoes 'newest first' and adds no syntax or semantics beyond what the schema already provides, making the baseline 3 appropriate.

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 resource ('your quotes') with ordering ('newest first') and enumerates the returned fields (id, number, status, item_count, expires_at, total_before_tax). It also distinguishes itself from get_quote, so an agent can tell the list tool apart from the single-fetch sibling without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit alternative ('use get_quote for current prices') and a concrete trigger for calling this tool ('to find quotes to discard when you hit the open-quote limit'). This directly ties the tool to the discard_quote workflow and to the sibling get_quote.

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

pay_with_cryptoA
Destructive
Inspect

Option B: pay autonomously in USDC via x402 (agent accounts only). Call without payment_signature to get the payment requirements (amount, asset, pay_to, network); nothing is charged. Then sign an x402 'exact' payment and call again with payment_signature (the base64 PAYMENT-SIGNATURE value). If account credit covers the whole total, you get status 'credit_confirmation_required' and a credit_confirmation token instead; call again with confirm_credit to place the order.

NameRequiredDescriptionDefault
quote_idYesQuote id (qt_...) returned by create_quote
use_creditNoApply account credit before charging USDC
confirm_creditNoThe credit_confirmation token from the previous call, to place an order fully paid by account credit
payment_signatureNoBase64 x402 PAYMENT-SIGNATURE for the requirements from the first call; omit to get the requirements

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the mutation risk is covered, but the description adds real value: it reveals the multi-call state machine, that the first call is a free requirements fetch, and the 'credit_confirmation_required' status/token branch. It stops short of stating authorization or rate-limit behavior.

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?

Purpose is front-loaded, then the flow is laid out in three short, sequential sentences with no filler. It is dense but every sentence maps to a concrete call branch.

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 multi-step payment tool with an output schema carrying return values, the description covers the branching paths an agent must follow (requirements fetch, signed payment, credit confirmation). Only the when-to-choose-this-over-alternatives dimension is thin.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, including payment_signature and confirm_credit. The prose mostly restates the schema's two-step flow rather than adding format or edge-case detail, so baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource (pay in USDC via x402) and scopes it to agent accounts. 'Option B' implies a competing payment path but never names it, so sibling differentiation against create_checkout_link or a credit-only option is left implicit.

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?

It gives explicit call conditions: omit payment_signature to fetch requirements (nothing charged), then call again with the signed value, or use confirm_credit when credit covers the total. It does not, however, say when to prefer this over the other payment routes available among the siblings.

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

request_order_cancellationA
Idempotent
Inspect

Ask the shop to cancel an order that hasn't shipped. A person reviews it; production may already have started. Asking again within 24 hours adds the reason without notifying the shop twice. The order.status_changed webhook and get_order show the outcome.

NameRequiredDescriptionDefault
reasonYesWhy the order should be canceled, for the person who reviews it
order_idYesOrder id (ord_...) from list_orders or the paid quote

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Goes beyond the annotations ('destructiveHint: false', 'idempotentHint: true') by disclosing that a human reviews the request, that production may already have started so cancellation is not guaranteed, and the specific retry quirk where re-asking within 24 hours only amends the reason without a second notification. It does not cover auth or permission requirements.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the action and its precondition, then the review/uncertainty caveat, then retry semantics and where to observe the result. No filler.

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

Completeness5/5

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

For a mutating request tool with an output schema present, the description supplies everything else an agent needs: the eligibility condition, that fulfillment is human-mediated and may fail, idempotency behavior on retry, and where to read the outcome. Nothing material is missing.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (order_id, reason) are documented in the schema, including the ord_... format and that the reason is for the reviewer. The description adds no further parameter detail, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Ask the shop to cancel an order') and immediately scopes it with 'that hasn't shipped', which separates it from the read-side siblings get_order and list_orders. An agent knows this is a request/negotiation action, not an immediate destructive cancel.

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 the operative condition ('hasn't shipped') and points to the outcome path (order.status_changed webhook, get_order). It also covers the repeat-call case explicitly, though it never states the inverse condition (what to do if the order has shipped) or names a distinct alternative tool.

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

set_refund_preferenceB
Idempotent
Inspect

For USDC orders: receive refunds as 'usdc' (sent to the paying wallet) or 'credit' (account credit).

NameRequiredDescriptionDefault
methodYes'usdc' sends refunds to the paying wallet; 'credit' adds them to account credit
order_idYesOrder id (ord_...) from list_orders or the paid quote

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety and repeatability profile is covered. The description adds genuine behavioral meaning by explaining where each refund route lands (paying wallet vs account credit), but says nothing about reversibility, timing relative to a refund event, or whether it is per-order or account-wide.

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?

A single sentence with the scope condition front-loaded and zero filler. It earns its place, though the value definitions duplicate what the enum descriptions already carry, so it is slightly redundant rather than maximally tight.

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

Completeness3/5

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

With an output schema present, return values need no explanation, and annotations plus full schema coverage carry the mechanics. What is still missing for a mutation tool is lifecycle context: whether the preference must be set before a refund is triggered and whether it can be overwritten later.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents both the enum meanings and the order_id format. The description's parentheticals restate the same enum semantics rather than adding format, constraints, or defaults, so it is a baseline 3.

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

Purpose4/5

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

The description names the specific setting (refund preference), its applicable scope (USDC orders), and enumerates the two behaviors. An agent can tell this apart from every sibling, none of which touch refunds. It stops short of a clean verb+resource phrasing like 'Sets the refund preference for an order', but the intent 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?

The qualifier 'For USDC orders' acts as an implicit precondition, telling the agent this tool is only relevant to USDC-paid orders. However, it gives no guidance on when to call it relative to the payment/refund lifecycle, whether it can be changed after being set, or what alternatives exist for non-USDC orders.

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

update_accountA
DestructiveIdempotent
Inspect

Change the agent account's name, organization, email, default ship_to or callback_url; omitted fields stay. A new email or callback_url is emailed to the previous account email. Agent accounts only.

NameRequiredDescriptionDefault
nameNoName of the agent or app placing orders
emailNoEmail for the account notice, receipts, and order problems
ship_toNoUS shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?}
callback_urlNoPublic https URL for signed part, quote, and order webhooks; empty string removes it
organizationNoCompany or person operating the agent

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Adds context the annotations do not carry: omitted fields stay (partial/PATCH semantics), and a new email or callback_url triggers a notification to the previous account email. Combined with destructiveHint=true and idempotentHint=true, the agent knows changes overwrite supplied fields but leave the rest intact. It does not say which values are rejected or what authorization is required.

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

Conciseness5/5

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

Two compact sentences, zero waste, with the field scope and 'omitted fields stay' semantics front-loaded before the notification side effect. Nothing is repeated unnecessarily.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the description covers partial-update semantics, the notification side effect, and account-type scope. It stops short of stating permission requirements or validation failures for a destructive, mutation-capable tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema, including the US address shape and the 'empty string removes it' behavior for callback_url. The description only restates the field list, adding no syntax or constraint detail beyond 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 (Change) and resource (the agent account) and enumerates the exact mutable fields: name, organization, email, ship_to, callback_url. The trailing scope note 'Agent accounts only' separates it from create_agent_account and get_account without ambiguity.

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

Usage Guidelines3/5

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

The 'Agent accounts only' restriction tells the agent when the tool is applicable, but there is no guidance on when to prefer this over create_agent_account or get_account, and no stated prerequisites. Usage is implied rather than prescribed.

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

update_quoteB
Destructive
Inspect

Change speed (economy|standard|fast|faster|fastest), ship_to, shipping_option, items. update_items: [{item_id, quantity?, config?, notes?}] where config is merged into the item's config.

NameRequiredDescriptionDefault
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?}
quote_idYesQuote id (qt_...) returned by create_quote
add_itemsNoParts to add, each {part_id, quantity (1-100000), notes?, config: {units, process, material, color?, finishes?, finish_color?, services?, infill?, layer_height?}}
po_numberNoYour purchase order number, printed on the quote and order
update_itemsNoChanges to existing items: [{item_id, quantity?, config?, notes?}]; config is merged into the item's config
contact_emailNoEmail for receipts and order updates; defaults to the account email
remove_item_idsNoItem ids (itm_...) to remove from the quote
shipping_optionNoShipping option id from the quote's shipping_options

Output Schema

NameRequiredDescription
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)

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact — config is merged into the item's existing config rather than replaced — but says nothing about re-pricing, editability windows, or what remove_item_ids/add_items imply for the quote state.

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?

Two sentences, front-loaded with the changeable fields, which is good. However the second sentence duplicates the schema's update_items description almost verbatim, so it consumes space without adding information beyond the merge note.

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

Completeness3/5

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

For a 9-parameter mutation tool with an output schema and full schema coverage, the description is serviceable but incomplete at the conceptual level: it never mentions that items can be added (add_items) or removed (remove_item_ids), or that po_number/contact_email are settable, so an agent scanning only the description may miss that this tool also handles item add/remove.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all nine parameters, including the speed enum and the item shapes. The description largely restates schema content (speed values, ship_to, update_items shape) and adds only the merge-vs-replace nuance, landing at the baseline for a schema-complete tool.

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 verb 'Change' plus the enumerated mutable fields (speed, ship_to, shipping_option, items) makes it clear this edits an existing quote rather than creating one. It doesn't explicitly name the quote resource or distinguish itself from discard_quote/get_quote in prose, but the field list is specific enough to identify the operation.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing states that the quote must already exist, must still be editable, or that this is the path to modify an existing quote versus create_quote or discard_quote. The agent must infer the call context from the required quote_id alone.

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

upload_partAInspect

Upload a CAD file (STL, 3MF, OBJ, STEP) from an https URL or base64 content (filename required for base64). MCP requests are limited to 4 MB, so base64 works for files up to about 3 MB; use a URL or get_upload_url for larger files. no_controlled_data must be true: confirms the file has no CUI/ITAR/export-controlled data. Returns a part with status 'pending'; poll get_part until 'ready' (usually seconds), or pass wait_seconds.

NameRequiredDescriptionDefault
urlNoPublic https URL of the CAD file; we fetch it server-side
filenameNoFile name with extension (.stl, .3mf, .obj, .step); required with content_base64
wait_secondsNoSeconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once
content_base64NoThe file's bytes, base64-encoded (up to about 3 MB)
idempotency_keyNoSame key on a retry returns the first result instead of creating another
no_controlled_dataYesMust be true: confirms the file contains no CUI, ITAR, or export-controlled data

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare mutation/idempotency/open-world traits; the description adds operational constraints the annotations cannot convey: the 4 MB MCP request ceiling, the ~3 MB practical base64 limit, the mandatory no_controlled_data compliance gate, and the asynchronous 'pending' → 'ready' lifecycle.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and accepted formats, then limits, then compliance, then return/polling behavior. No filler and no repetition of structured data.

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

Completeness5/5

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

An output schema exists so return details needn't be spelled out, yet the description still notes the 'pending' status and polling path. Together with limits, compliance gating, and the large-file alternative, nothing needed to call this correctly is missing.

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 baseline is 3, but the description adds meaning beyond the schema: it ties filename to the base64 path, explains the base64 size ceiling, and states no_controlled_data must be true as a compliance assertion rather than just a flag.

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?

Opens with a specific verb and resource ('Upload a CAD file') and enumerates the accepted formats (STL, 3MF, OBJ, STEP) plus the two input channels (https URL or base64). This clearly separates it from siblings like get_upload_url and get_part.

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

Usage Guidelines5/5

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

Explicitly routes the agent: base64 only works up to ~3 MB due to the 4 MB MCP request limit, so 'use a URL or get_upload_url for larger files'. It also names the follow-up action (poll get_part until 'ready', or use wait_seconds).

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedcreate_quote1 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"
        +}
    • Changedget_quote1 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"
        +}
    • Changedupdate_quote1 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. 7 tool updates
    • Changedcreate_quote4 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"
    • Changedget_part1 field changed
      • addedInput schema / properties / wait_seconds
        Added value: +{
        +  "default": 0,
        +  "description": "Seconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once",
        +  "maximum": 30,
        +  "minimum": 0,
        +  "title": "Wait Seconds",
        +  "type": "integer"
        +}
    • Changedget_quote4 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: -"get_quoteDictOutput"New value: +"QuoteView"
    • Addedrequest_order_cancellation
    • Addedupdate_account
    • Changedupdate_quote4 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: -"update_quoteDictOutput"New value: +"QuoteView"
    • Changedupload_part1 field changed
      • addedInput schema / properties / wait_seconds
        Added value: +{
        +  "default": 0,
        +  "description": "Seconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once",
        +  "maximum": 30,
        +  "minimum": 0,
        +  "title": "Wait Seconds",
        +  "type": "integer"
        +}
  3. 3 tool updates
    • Changedcreate_checkout_link1 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"
        +}
    • Changedcreate_quote1 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"
        +}
    • Changedupload_part1 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. 3 tool updates
    • Addeddiscard_quote
    • Addedlist_quotes
    • Changedpay_with_crypto1 field changed
      • addedInput schema / properties / confirm_credit
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "The credit_confirmation token from the previous call, to place an order fully paid by account credit",
        +  "title": "Confirm Credit"
        +}
  5. 14 tool updates
    • First observedcreate_agent_account
    • First observedcreate_checkout_link
    • First observedcreate_quote
    • First observedget_account
    • First observedget_capabilities
    • First observedget_order
    • First observedget_part
    • First observedget_quote
    • First observedget_upload_url
    • First observedlist_orders
    • First observedpay_with_crypto
    • First observedset_refund_preference
    • First observedupdate_quote
    • First observedupload_part

Publisher details

Operator
MakePartsNow.com · Publisher source
Vendor relationship
Not available
Restrictions
None of Quotes, Account for orders. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Get live UK 3D printing prices for your own STL/3MF/STEP files or Printables and Thingiverse models, with a checkout link. Also finds mail-in electronics repair prices and checks order or repair progress.
    9
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for real FDM 3D-printing slicing, quoting, and design-for-manufacturability analysis via the FabTally API, supporting 12 printer profiles and 12 materials. Includes free discovery/printability tools and paid slice/quote/orientation tools settled via x402 (USDC on Base).
    6
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Calculates 3D printing cost, time, material weight and build-plate fit from plain dimensions given in the conversation, with no STL upload and no API key. Covers PLA, PETG, ABS, ASA, TPU, Nylon, PC and PLA-CF, plus build volumes for Bambu Lab, Prusa, Creality, Voron and Elegoo printers.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Give your AI assistant the ability to inspect, measure, and compare 3D CAD models by dropping in a STEP file and asking engineering questions. Runs entirely on your machine with no cloud, no CAD license, and no setup.
    61 npm
    7
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources