# Make Parts Now: 3D Printing & CNC Machining Quotes

> Instant quotes and ordering for 3D printing and CNC machining: SLS, FDM, aluminum and brass parts.

- name: com.makepartsnow/manufacturing
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.makepartsnow%2Fmanufacturing
- tools: https://api.protogrid.dev/v1/servers/com.makepartsnow%2Fmanufacturing/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "manufacturing": {
      "type": "http",
      "url": "https://makepartsnow.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MANUFACTURING_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${MANUFACTURING_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-96% +updated-14d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 18 of 18 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 4,119 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 16 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 18, about 4,119 tokens to load them all
- tool set hash: 7d188e3dfc14df9fb2f048bfb8ac1afc
- tools last changed: 2026-10-14T19:55:20.005Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.makepartsnow/manufacturing.svg)](https://protogrid.dev/servers/com.makepartsnow/manufacturing)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-14 `update_quote` changed (outputSchema)
- 2026-10-14 `get_quote` changed (outputSchema)
- 2026-10-14 `create_quote` changed (outputSchema)
- 2026-10-11 `request_order_cancellation` added
  - 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.
- 2026-10-11 `update_quote` changed (outputSchema)
- 2026-10-11 `get_quote` changed (outputSchema)
- 2026-10-11 `create_quote` changed (outputSchema)
- 2026-10-11 `get_part` changed (description, inputSchema) **meaning changed**
  - before: Part status, measured geometry (mm), suggested units, DFM warnings, and processes that fit it.
  - after: 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.
- 2026-10-11 `upload_part` changed (description, inputSchema)
  - before: 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).
  - after: 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.
- 2026-10-11 `update_account` added
  - 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.

Full history: https://api.protogrid.dev/v1/servers/com.makepartsnow%2Fmanufacturing/changes

## Remotes

- https://makepartsnow.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.962963)

## Packages

_none_

## Tools (18)

- `create_agent_account`: 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.
- `create_checkout_link`: 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.
- `create_quote`: Create a quote. items: [{part_id, quantity, config: {units, process, material, color, finishes, finish_color, services, infill, layer_height}}].
    See get_capabilities for valid ids. Returns prices, speed options with ship/arrival dates, and next_steps.
- `discard_quote`: 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.
- `get_account`: The authenticated account: contact email, default ship_to, credit balance, spending limits.
- `get_capabilities`: Processes, materials, colors, finishes, services, speeds, file formats, limits and payment methods.
- `get_order`: Order status, ship-by and arrive-by dates, tracking.
- `get_part`: 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.
- `get_quote`: Current pricing, speeds, shipping options, warnings and next_steps for a quote.
- `get_upload_url`: Get a one-time URL to HTTP PUT a large file directly (no auth header needed). Returns the part on upload.
- `list_orders`: Orders for this account, newest first. Filter by quote_id to check whether a checkout link was paid.
- `list_quotes`: 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.
- `pay_with_crypto`: 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.
- `request_order_cancellation`: 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.
- `set_refund_preference`: For USDC orders: receive refunds as 'usdc' (sent to the paying wallet) or 'credit' (account credit).
- `update_account`: 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.
- `update_quote`: 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.
- `upload_part`: 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.
