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
- Status
- Healthy
- Uptime
- 97.8% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
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.
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.
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.
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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the agent or app placing orders | |
| Yes | Email that receives the account notice, receipts, and order problems | ||
| ship_to | No | US shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?} | |
| accept_terms | Yes | Must be true to accept the Terms of Sale and Agent Terms | |
| callback_url | No | Public https URL for signed part, quote, and order webhooks | |
| organization | No | Company or person operating the agent |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_checkout_linkADestructiveInspect
Option A: get a Stripe Checkout URL for a human to pay by card (tax added at checkout). Each new link stops earlier links for the same quote from working.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote id (qt_...) returned by create_quote | |
| idempotency_key | No | Same key on a retry returns the first result instead of creating another |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description earns credit for explaining what that destruction actually is: 'Each new link stops earlier links for the same quote from working.' That is real behavioral detail an agent cannot infer from the flags alone. It still omits auth/permission requirements and any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool returns, and the invalidation warning placed immediately after. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the annotations cover the safety profile. Combined with the explicit link-invalidation disclosure, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents quote_id (qt_... from create_quote) and the idempotency_key retry semantics. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get a Stripe Checkout URL') plus the audience (a human paying by card) and an outcome detail (tax added at checkout). The 'Option A' framing signals it is one of several payment paths, which separates it from the crypto path without naming it outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Option A' implies a counterpart option (likely pay_with_crypto) but never names or describes it, and there is no explicit when-to-use/when-not guidance. The tax note is a small piece of context but not routing guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Parts to quote, each {part_id, quantity (1-100000), notes?, config: {units, process, material, color?, finishes?, finish_color?, services?, infill?, layer_height?}} | |
| speed | No | Production speed: economy, standard, fast, faster, or fastest (FDM only). Faster speeds add a rush fee; get_capabilities lists each process's speeds. | |
| ship_to | No | US shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?} | |
| po_number | No | Your purchase order number, printed on the quote and order | |
| contact_email | No | Email for receipts and order updates; defaults to the account email | |
| idempotency_key | No | Same key on a retry returns the first result instead of creating another |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Quote id (qt_...) |
| items | Yes | Lines: {id, position, part, config, quantity, notes, review_status, review_note, pricing, snapshot_url, action_needed?} |
| ready | Yes | True when the quote can be paid |
| speed | No | Chosen production speed: economy, standard, fast, faster or fastest |
| tiers | No | One entry per speed: price, ship-by and arrive-by dates, eligibility |
| number | No | Quote number shown on the PDF and the website |
| status | No | open, ordered or expired (discarded or past its date) |
| totals | No | Totals for the chosen speed, including total_before_tax |
| ship_to | No | Shipping address {name, company?, line1, line2?, city, state, postal_code, country, phone?} |
| blocking | No | What stops the quote from being ready: {item_id, state, detail} |
| tax_note | No | Sales tax is added at checkout |
| min_order | No | Order minimum in dollars |
| po_number | No | Your purchase order number |
| share_url | No | The quote's page on makepartsnow.com, to show a person the parts and prices |
| created_at | No | ISO 8601 |
| expires_at | No | ISO 8601. Prices hold until then; a later read re-prices at live rates |
| next_steps | Yes | Plain-English instructions for what to do next |
| share_token | No | Token of the quote's share link, {base}/quotes/share/{share_token} |
| needs_review | No | True while a part waits for manual review; payment is blocked until then |
| contact_email | No | Email for receipts and order updates |
| shipping_choice | No | Id of the chosen shipping option |
| rate_set_version | No | Version of the price list the quote was priced with |
| shipping_options | No | Carrier options for ship_to; choose one with shipping_option |
| free_shipping_remaining | No | Dollars more to reach free shipping (0 when reached) |
TDQS
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.
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.
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.
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.
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.
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_quoteAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote id (qt_...) returned by create_quote |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_accountARead-onlyIdempotentInspect
The authenticated account: contact email, default ship_to, credit balance, spending limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_capabilitiesBRead-onlyIdempotentInspect
Processes, materials, colors, finishes, services, speeds, file formats, limits and payment methods.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_orderCRead-onlyIdempotentInspect
Order status, ship-by and arrive-by dates, tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id (ord_...) from list_orders or the paid quote |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is 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.
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.
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.
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.
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.
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_partARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| part_id | Yes | Part id (prt_...) returned by upload_part or get_upload_url | |
| wait_seconds | No | Seconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_quoteBRead-onlyIdempotentInspect
Current pricing, speeds, shipping options, warnings and next_steps for a quote.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote id (qt_...) returned by create_quote |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Quote id (qt_...) |
| items | Yes | Lines: {id, position, part, config, quantity, notes, review_status, review_note, pricing, snapshot_url, action_needed?} |
| ready | Yes | True when the quote can be paid |
| speed | No | Chosen production speed: economy, standard, fast, faster or fastest |
| tiers | No | One entry per speed: price, ship-by and arrive-by dates, eligibility |
| number | No | Quote number shown on the PDF and the website |
| status | No | open, ordered or expired (discarded or past its date) |
| totals | No | Totals for the chosen speed, including total_before_tax |
| ship_to | No | Shipping address {name, company?, line1, line2?, city, state, postal_code, country, phone?} |
| blocking | No | What stops the quote from being ready: {item_id, state, detail} |
| tax_note | No | Sales tax is added at checkout |
| min_order | No | Order minimum in dollars |
| po_number | No | Your purchase order number |
| share_url | No | The quote's page on makepartsnow.com, to show a person the parts and prices |
| created_at | No | ISO 8601 |
| expires_at | No | ISO 8601. Prices hold until then; a later read re-prices at live rates |
| next_steps | Yes | Plain-English instructions for what to do next |
| share_token | No | Token of the quote's share link, {base}/quotes/share/{share_token} |
| needs_review | No | True while a part waits for manual review; payment is blocked until then |
| contact_email | No | Email for receipts and order updates |
| shipping_choice | No | Id of the chosen shipping option |
| rate_set_version | No | Version of the price list the quote was priced with |
| shipping_options | No | Carrier options for ship_to; choose one with shipping_option |
| free_shipping_remaining | No | Dollars more to reach free shipping (0 when reached) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | File name with extension (.stl, .3mf, .obj, .step) | |
| no_controlled_data | Yes | Must be true: confirms the file contains no CUI, ITAR, or export-controlled data |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_ordersARead-onlyIdempotentInspect
Orders for this account, newest first. Filter by quote_id to check whether a checkout link was paid.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | No | Only orders for this quote id (qt_...) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_quotesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, newest first (1-200) | |
| status | No | Which quotes: 'open' (the default), 'expired' (discarded), 'ordered', or 'all' | open |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_cryptoADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Quote id (qt_...) returned by create_quote | |
| use_credit | No | Apply account credit before charging USDC | |
| confirm_credit | No | The credit_confirmation token from the previous call, to place an order fully paid by account credit | |
| payment_signature | No | Base64 x402 PAYMENT-SIGNATURE for the requirements from the first call; omit to get the requirements |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_cancellationAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why the order should be canceled, for the person who reviews it | |
| order_id | Yes | Order id (ord_...) from list_orders or the paid quote |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_preferenceBIdempotentInspect
For USDC orders: receive refunds as 'usdc' (sent to the paying wallet) or 'credit' (account credit).
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | 'usdc' sends refunds to the paying wallet; 'credit' adds them to account credit | |
| order_id | Yes | Order id (ord_...) from list_orders or the paid quote |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_accountADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the agent or app placing orders | |
| No | Email for the account notice, receipts, and order problems | ||
| ship_to | No | US shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?} | |
| callback_url | No | Public https URL for signed part, quote, and order webhooks; empty string removes it | |
| organization | No | Company or person operating the agent |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_quoteBDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | No | Production speed: economy, standard, fast, faster, or fastest (FDM only). Faster speeds add a rush fee; get_capabilities lists each process's speeds. | |
| ship_to | No | US shipping address: {name, line1, line2?, city, state, postal_code, country: 'US', phone?} | |
| quote_id | Yes | Quote id (qt_...) returned by create_quote | |
| add_items | No | Parts to add, each {part_id, quantity (1-100000), notes?, config: {units, process, material, color?, finishes?, finish_color?, services?, infill?, layer_height?}} | |
| po_number | No | Your purchase order number, printed on the quote and order | |
| update_items | No | Changes to existing items: [{item_id, quantity?, config?, notes?}]; config is merged into the item's config | |
| contact_email | No | Email for receipts and order updates; defaults to the account email | |
| remove_item_ids | No | Item ids (itm_...) to remove from the quote | |
| shipping_option | No | Shipping option id from the quote's shipping_options |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Quote id (qt_...) |
| items | Yes | Lines: {id, position, part, config, quantity, notes, review_status, review_note, pricing, snapshot_url, action_needed?} |
| ready | Yes | True when the quote can be paid |
| speed | No | Chosen production speed: economy, standard, fast, faster or fastest |
| tiers | No | One entry per speed: price, ship-by and arrive-by dates, eligibility |
| number | No | Quote number shown on the PDF and the website |
| status | No | open, ordered or expired (discarded or past its date) |
| totals | No | Totals for the chosen speed, including total_before_tax |
| ship_to | No | Shipping address {name, company?, line1, line2?, city, state, postal_code, country, phone?} |
| blocking | No | What stops the quote from being ready: {item_id, state, detail} |
| tax_note | No | Sales tax is added at checkout |
| min_order | No | Order minimum in dollars |
| po_number | No | Your purchase order number |
| share_url | No | The quote's page on makepartsnow.com, to show a person the parts and prices |
| created_at | No | ISO 8601 |
| expires_at | No | ISO 8601. Prices hold until then; a later read re-prices at live rates |
| next_steps | Yes | Plain-English instructions for what to do next |
| share_token | No | Token of the quote's share link, {base}/quotes/share/{share_token} |
| needs_review | No | True while a part waits for manual review; payment is blocked until then |
| contact_email | No | Email for receipts and order updates |
| shipping_choice | No | Id of the chosen shipping option |
| rate_set_version | No | Version of the price list the quote was priced with |
| shipping_options | No | Carrier options for ship_to; choose one with shipping_option |
| free_shipping_remaining | No | Dollars more to reach free shipping (0 when reached) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public https URL of the CAD file; we fetch it server-side | |
| filename | No | File name with extension (.stl, .3mf, .obj, .step); required with content_base64 | |
| wait_seconds | No | Seconds (0-30) to wait server-side for the analysis to finish before answering; 0 answers at once | |
| content_base64 | No | The file's bytes, base64-encoded (up to about 3 MB) | |
| idempotency_key | No | Same key on a retry returns the first result instead of creating another | |
| no_controlled_data | Yes | Must be true: confirms the file contains no CUI, ITAR, or export-controlled data |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
- Changed
create_quote1 field changed- added
Output schema / properties / share_urlAdded 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" +}
- Changed
get_quote1 field changed- added
Output schema / properties / share_urlAdded 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" +}
- Changed
update_quote1 field changed- added
Output schema / properties / share_urlAdded 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" +}
7 tool updates
- Changed
create_quote4 fields changed- added
Output schema / descriptionAdded value: +"A priced quote. Fields can be added; none is removed or renamed within v1." - added
Output schema / propertiesAdded 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" + } +} - added
Output schema / requiredAdded value: +[ + "id", + "items", + "ready", + "next_steps" +] - changed
Output schema / titlePrevious value: -"create_quoteDictOutput"New value: +"QuoteView"
- Changed
get_part1 field changed- added
Input schema / properties / wait_secondsAdded 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" +}
- Changed
get_quote4 fields changed- added
Output schema / descriptionAdded value: +"A priced quote. Fields can be added; none is removed or renamed within v1." - added
Output schema / propertiesAdded 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" + } +} - added
Output schema / requiredAdded value: +[ + "id", + "items", + "ready", + "next_steps" +] - changed
Output schema / titlePrevious value: -"get_quoteDictOutput"New value: +"QuoteView"
- Added
request_order_cancellation - Added
update_account - Changed
update_quote4 fields changed- added
Output schema / descriptionAdded value: +"A priced quote. Fields can be added; none is removed or renamed within v1." - added
Output schema / propertiesAdded 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" + } +} - added
Output schema / requiredAdded value: +[ + "id", + "items", + "ready", + "next_steps" +] - changed
Output schema / titlePrevious value: -"update_quoteDictOutput"New value: +"QuoteView"
- Changed
upload_part1 field changed- added
Input schema / properties / wait_secondsAdded 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 tool updates
- Changed
create_checkout_link1 field changed- added
Input schema / properties / idempotency_keyAdded 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" +}
- Changed
create_quote1 field changed- added
Input schema / properties / idempotency_keyAdded 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" +}
- Changed
upload_part1 field changed- added
Input schema / properties / idempotency_keyAdded 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" +}
3 tool updates
- Added
discard_quote - Added
list_quotes - Changed
pay_with_crypto1 field changed- added
Input schema / properties / confirm_creditAdded 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" +}
14 tool updates
- First observed
create_agent_account - First observed
create_checkout_link - First observed
create_quote - First observed
get_account - First observed
get_capabilities - First observed
get_order - First observed
get_part - First observed
get_quote - First observed
get_upload_url - First observed
list_orders - First observed
pay_with_crypto - First observed
set_refund_preference - First observed
update_quote - First observed
upload_part
Publisher details
- Operator
- MakePartsNow.com · Publisher source
- Operator website
- https://MakePartsNow.com · Publisher source
- Vendor relationship
- Not available
- Documentation
- https://makepartsnow.com/developers · Publisher source
- Trust center
- https://makepartsnow.com/legal/privacy · Publisher source
- Restrictions
- None of Quotes, Account for orders. · Publisher source
Related MCP Connectors
Quote, check and order 3D prints of STL, 3MF, STEP or OBJ files. Made in the USA, shipped in the US.
Turn designs into shipped parts: quote 3D printing, CNC, and decals, then check out.
Get 3D printing and manufacturing quoted by a person, shipped anywhere in the US.
Instant parametric cost estimates for custom manufacturing: CNC, molding, sheet metal, 3DP, PCB.
Related MCP Servers
- AlicenseAqualityBmaintenanceGet 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.9MIT
- AlicenseAqualityCmaintenanceMCP 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).6MIT
- AlicenseAqualityCmaintenanceCalculates 3D printing cost, time, material weight and build-plate fit from plain dimensions given in the conversation, with no STL upload and no API key. Covers PLA, PETG, ABS, ASA, TPU, Nylon, PC and PLA-CF, plus build volumes for Bambu Lab, Prusa, Creality, Voron and Elegoo printers.3MIT
- AlicenseNot gradedqualityAmaintenanceGive 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 npm7MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.