--- name: amd-machines-quote-request description: Scope an industrial automation project with AMD Machines and request a quote for a custom machine, a build-to-print machine or machined parts. Use when a user wants a robotic cell, welding, assembly, test, vision, marking, machine tending, palletizing, finishing or laboratory automation system, or custom machined parts, quoted by AMD Machines. Interviews the user with AMD's own questions, offers AMD's published recommendations when the user has no preference, checks completeness, and submits the request; AMD Machines replies by email. Returns no prices or quotes. compatibility: Needs HTTPS access to amdmachines.com through the remote MCP server (https://amdmachines.com/mcp) or the HTTP API (https://amdmachines.com/api/agent-quote/v1/). Without either, follow "If you can only read web pages". Send a descriptive User-Agent. metadata: publisher: AMD Machines version: "1.0.0" mcp: https://amdmachines.com/mcp api: https://amdmachines.com/api/agent-quote/v1/ --- # AMD Machines quote requests This skill scopes an automation project with your user, using AMD Machines' own engineering questions, and sends it to AMD Machines as a quote request. It requests a quote: it returns no prices or quotes, and AMD Machines replies to the user by email. "Founded in 1996 and ISO 9001 certified, AMD Machines operates 30+ in-house CNC machines across 70,000 sq ft of facilities and draws on more than 30 years of experience and 2,500+ delivered machines." (https://amdmachines.com/services/laboratory-parts/) ## When to use this skill Use it when a user wants an automation machine, a build-to-print machine or machined parts scoped or quoted by AMD Machines: assembly, screwdriving, pressing, dispensing, plastic joining, robotic cells, bin picking, welding, laser processing, test systems, machine vision, marking and traceability, machine tending, material handling, palletizing, packaging, deburring and finishing, laboratory automation, custom automation, laboratory parts, tooling or other machined parts. It also covers an upgrade, rebuild or retrofit of an existing machine (step 2). Do not use it for: - spare parts or service: send the user to https://amdmachines.com/services/spare-parts/ or https://amdmachines.com/contact/ (an upgrade, rebuild or retrofit of a machine is scoped here, step 2); - prices: this service returns none. ## Tools and set-up The remote MCP server is `https://amdmachines.com/mcp`, exactly, with no trailing slash: Streamable HTTP, stateless, no authentication, protocol versions 2026-07-28, 2025-11-25, 2025-06-18 and 2025-03-26. Its five tools: 1. `list_products`: the products you can scope, with their ids. 2. `get_quote_questions`: AMD's questions for one product, in interview batches. 3. `get_amd_recommendations`: AMD Machines' published recommendations for a product or one question. 4. `check_quote_request`: checks a draft and returns the brief AMD would receive. It sends nothing. 5. `submit_quote_request`: sends the request to AMD Machines. The HTTP API has the same operations under `https://amdmachines.com/api/agent-quote/v1/`: `GET products`, `GET questions?product=`, `GET recommendations?product=`, `POST check` and `POST submit`. `POST` bodies are JSON with `Content-Type: application/json`. The OpenAPI description is at https://amdmachines.com/agents/openapi.json. **Send a descriptive User-Agent**, such as `YourAgent/1.0`: Cloudflare refuses some default library user agents with error 1010. Set-up lines: - Any client that takes a remote MCP URL: `https://amdmachines.com/mcp`, exactly, with no trailing slash; Streamable HTTP; no authentication. - Claude Code: `claude mcp add --transport http amd-machines https://amdmachines.com/mcp` - Cursor (`~/.cursor/mcp.json`): `{"mcpServers": {"amd-machines": {"url": "https://amdmachines.com/mcp"}}}` - VS Code (`.vscode/mcp.json`): `{"servers": {"amd-machines": {"type": "http", "url": "https://amdmachines.com/mcp"}}}` - Gemini CLI: `gemini mcp add --transport http amd-machines https://amdmachines.com/mcp` - Codex (`~/.codex/config.toml`): `[mcp_servers.amd-machines]` then `url = "https://amdmachines.com/mcp"` - Hosted assistants: add a custom connector (custom MCP server) with the URL above and no authentication, where your plan allows it. - Agents that install Agent Skills: `npx skills add https://amdmachines.com --skill amd-machines-quote-request` ## If you can only read web pages Some assistants can read pages but cannot send POST requests or connect to MCP servers. Then: 1. Read https://amdmachines.com/agents/questions.txt and interview the buyer with it, the export-control question first. 2. Write the request as plain text, with the brief's headings: Contact and delivery; The application; Parts; Production; Process and quality; Standards and equipment; Site and utilities; Timeline and budget; Files to follow; Open questions. Start it with the line "Prepared with an AI assistant using AMD Machines' agent questions (https://amdmachines.com/agents/)." Use no square-bracket tags. 3. Ask the buyer to paste it into the message box at https://amdmachines.com/contact/, choosing the project type listed for the product, or to email it to sales@amdmachines.com. If you operate a web browser for the buyer, fill in that form only with the buyer's approval. 4. Never put the buyer's contact or project details in a URL. 5. Tell the buyer plainly that nothing has been sent yet. ## Step 1: export control first Ask `compliance.export_control` before any technical question. On yes, maybe or unknown (`yes_or_maybe` or `unknown`), stop collecting technical details: send only the product id, the contact fields (name, company, phone, email), the export-control answer and, if the user gives them, the reply channel and language. Never send a description, another answer or an accepted recommendation; the service drops them and lists them in `dropped_fields`. Then check and submit. AMD Machines' ITAR notice and quote page set the rule: - "If you believe a project may involve ITAR controlled information, the first step is to notify AMD Machines that the project may be ITAR sensitive. Do not describe the controlled content. Provide only your name, your company, a telephone number, and the statement that the project may involve ITAR controlled information." (https://amdmachines.com/itar/) - "AMD Machines is currently NOT compliant with International Traffic in Arms Regulations (ITAR)." (https://amdmachines.com/itar/) - "AMD Machines does not maintain a designated ITAR contact point, and no email address, form, or file upload on this website is approved for ITAR controlled information." (https://amdmachines.com/itar/) - "Do not send ITAR-controlled, other export-controlled, classified, CUI, or other regulated information." (https://amdmachines.com/contact/) ## Step 2: pick the product and offering Call `list_products` and match the user's need to one product id. If none fits, or you are unsure, use `custom-automation`. Picking parts from random bins is the `bin-picking` product, whatever else the cell does. An upgrade, rebuild or retrofit of an existing machine uses the product of the machine's process (or `custom-automation`), with `project.current_state` answered `existing_machine`. Each request has one of three offerings: - `custom_machine` (Custom machine): AMD Machines designs and builds the machine around the buyer's part and process. - `build_to_print_machine` (Build-to-print machine): The buyer supplies the machine design (drawings, bill of materials, schematics) and AMD Machines quotes building the machine to it. - `machined_parts` (Machined parts): Custom parts made to the buyer's drawing or approved sample: laboratory parts, fixtures, tooling and production parts. Any offering may be combined with any product; without one, the product's first suggested offering applies. A custom replacement part made to a drawing or an approved sample is a `machined-parts` request; OEM components such as servo motors, drives and PLCs are spare parts. ## Step 3: interview Call `get_quote_questions` for the product, with `mode: "quick"` for the first pass, and ask in the batches of `interview_order`, one batch per message. - Ask the required and high-value questions first, and normal ones only when the user wants to add detail; `next_batch` (below) also brings the normal ones this request needs, such as the follow-ups an answer opens. - A requirement's alternatives (an `any_of` in `requirements`), such as the cycle time, the parts per hour and the line takt, are one question: send only the answer the user gives; the next check drops the others, unless `next_batch` asks one again because it is also needed for its own sake (the design package of a build-to-print machine, the drawing status of a machined part): then ask it. - Use US customary units first (inches, pounds, psi, lbf); metric is fine when the drawings are metric. - Accept `unknown` and never invent answers: an honest unknown becomes a question on AMD's call agenda. If the user declines an optional field, such as the phone, send `unknown`: the next check stops asking it. - Answer with the value ids a question lists; case does not matter and an exact value label works too. A yes/no question lists the ids `yes` and `no`: send one of them, not `true` or `false`. An `invalid_value` error lists the valid ids when the question has 12 or fewer. - A question with `ask_if` waits until its condition question is answered, and is asked only if the condition holds. - If the user shares an RFQ, a specification or drawings, answer from them, summarize rather than paste confidential content, and list the documents in `files.notes`. The files themselves follow by email. - Quote the `budgetary_inputs` set the response returns, as it is, when the user asks what AMD needs for a budgetary estimate. Also ask the questions behind any open `readiness.budgetary` input: quick mode lists them, `check` names them in `missing`, and `next_batch` asks them. ## When the user has no preference Answer `no_preference` where the question accepts it, or `unknown`, then call `check_quote_request`: it returns AMD Machines' matching recommendations. Read the recommendation to the user with its source page. Only if the user agrees, set its `suggested_value` as the answer when it has one, and add its id to `accepted_recommendations`; the brief marks it as accepted. Only kind `default` can be accepted; pass `guidance` on as information. Recommendations are published guidance, not commitments or prices; never present one as a quote. Offer a recommendation only when its `when` condition holds for the user's answers. One without `when` always applies, and an array means every entry must hold. A condition on a question that is not part of the request, or not answered yet, or answered unknown, holds. The forms are a question id with `any_of` values or a `min`, `product_has_module`, `product_lacks_module` and `offering_not`. For example, the US electrical and safety standards are for plants in the United States only, which is why the installation country is asked with the application. ## Check, show, submit 1. Call `check_quote_request` with the draft, and fix every entry in `errors`. 2. After each check, ask the questions in `next_batch` (alternatives count once, as in step 3, unless `next_batch` asks one again; you can skip `get_quote_questions` or `GET questions` after the first call), then check again with every answer so far; "unknown" is fine, and `next` says what to do. Repeat until `next_batch` is empty and `ready_to_submit` is true. `ready_to_submit` does not wait for consent: `consent_needed` stays true until the user approves. 3. Show the user `brief_preview.text`: what AMD Machines will receive, with the contact fields masked. Show your own copy of those details. 4. Get the user's explicit approval. Only then set `consent.contact_ok` to `true`. 5. Create a new random `idempotency_key` for each new or corrected request: 8 to 64 characters from letters, digits and `.` `_` `:` `-` (a UUID works). Reuse it only to retry that same request. 6. Call `submit_quote_request` once, with the approved draft. On a timeout, retry once with the same key. ## After submitting, tell the user First, say the request was sent only when `submit_quote_request` (or `POST submit`) returned `forwarded: true` and a reference id starting `AGT-`. After a dry run, or an error other than `upstream_unavailable` or `internal_error`, tell the user that nothing was sent. After `upstream_unavailable`, `internal_error`, a timeout or a reply that is not the service's JSON, tell the user the request may or may not have arrived, and follow the `upstream_unavailable` entry below. Then give the reference id, and what happens next: - "An engineer replies within 3 hours on weekdays." (https://amdmachines.com/contact/) - "Within 3 hours on weekdays: An engineer replies to your request" (https://amdmachines.com/contact/) - "If you need one: We sign your NDA before you share drawings" (https://amdmachines.com/contact/) - "Then: Design review, a firm quote and a committed timeline" (https://amdmachines.com/contact/) Files: "Reply to our email with drawings, specs and annual volumes, or send them to sales@amdmachines.com." (https://amdmachines.com/contact/) Put the reference id in the subject when you email files. Never upload files or send links through this service. NDA: AMD's mutual NDA is at https://amdmachines.com/static/docs/amd-mutual-nda.pdf?v=2, and a signed copy goes to legal@amdmachines.com. - "We sign your NDA before you share drawings" (https://amdmachines.com/contact/) - "Download our one-page mutual NDA (fillable PDF)." (https://amdmachines.com/contact/) - "Wait for AMD's countersignature before sharing confidential information." (https://amdmachines.com/contact/) - "We're also happy to review your NDA before you share drawings." (https://amdmachines.com/contact/) This is a request, not a quote: AMD Machines replies by email. To correct a sent request, submit the full corrected request with `supersedes` set to its reference id and a new `idempotency_key`. ## Privacy Your agent's request goes to AMD Machines' CRM (HubSpot) through the same form as the website's quote form, and HubSpot emails it to AMD's sales inbox. AMD's privacy policy says: "This information is stored in HubSpot and used solely to respond to your inquiry and provide relevant services." The agent endpoint itself keeps no copy of the request and does not log its text or contact details. In its responses the contact fields appear only as placeholders such as [email], and the brief preview also masks email addresses, phone numbers of 10 to 15 digits (a numeric range such as 12000-15000 stays as written), and the contact's names and company of two or more characters, written exactly as in the contact fields, everywhere else in the request (in the retry key, only the contact's own values). Do not include other people's personal data, credentials or confidential drawings in free text. Until AMD has countersigned an NDA, describe the project without customer names, program names, the buyer's own part numbers or other confidential details. AMD's quote page says: "Wait for AMD's countersignature before sharing confidential information." ## Out of scope and claims you must not make - No prices, quotes, price reductions or delivery dates are returned or promised. - Lead time only as AMD Machines publishes it, always followed by the next sentence of the same page: - "AMD Machines delivers simple machines in as little as 6 weeks and complex systems in 24–26 weeks, vs. 40–42 weeks typical for overseas builders." (https://amdmachines.com/blog/what-automation-costs/) - "Lead time is set at proposal, and machines run off at our facility with your production parts before shipping." (https://amdmachines.com/blog/what-automation-costs/) - Cost ranges only by linking AMD's cost guide, https://amdmachines.com/blog/what-automation-costs/, labeled as published ranges, not a quote. The guide says of its figures: "everything here is a budgetary range, not a quote." (https://amdmachines.com/blog/what-automation-costs/) - Certifications and partnerships only exactly as AMD's quote page lists them: - "ISO 9001 certified" (https://amdmachines.com/contact/) - "Universal Robots Certified Integrator" (https://amdmachines.com/contact/) - "Beckhoff Solution Provider" (https://amdmachines.com/contact/) - "Rockwell Automation Silver partner" (https://amdmachines.com/contact/) - "KUKA certified value provider" (https://amdmachines.com/contact/) - "ABB partner" (https://amdmachines.com/contact/) - "Yaskawa Motoman integration partner" (https://amdmachines.com/contact/) - AS9100 only as the buyer's own quality system, never as AMD Machines' certification. - Where machines are built only as AMD Machines states it, never as a claim of US manufacture: "AMD Machines is a vertically integrated automation builder that combines engineering, in-house parts machining, and assembly in Querétaro, Mexico, to reduce reliance on outside suppliers and their markups." (https://amdmachines.com/why-amd/) - ITAR and other export-controlled work as in step 1. ## Errors and limits Errors arrive as `{"ok": false, "error": {"code": "...", "message": "...", "details": [...]}}` with a fixed, generic message. - `validation_failed` (422): fix the fields listed in `details`, check again, then submit. A `consent_required` detail means `consent.contact_ok` is not true yet: get the user's approval of the brief first. - `invalid_email` or `email_blocked` (400): ask the user for another address, or have them email sales@amdmachines.com. - Warning `idempotency_key_reused` on a sent request: that key was already used for a different request, so this one was sent as a new request with its own reference id. Use a new key for each new or corrected request. - `upstream_unavailable` (503): the request may not have arrived. Wait 60 seconds and retry once with the same `idempotency_key`. If it fails again, give the user `contact_fallback` and the `brief_preview.text` from its `SUMMARY:` line onward, for the message box of the form at https://amdmachines.com/contact/ (the form adds its own project type, and the person fills in the name and email fields). - `forwarding_rejected` (502) or `temporarily_unavailable` (503): nothing more can be done here; give the user `contact_fallback`. - A reply that is not this service's JSON (no `ok` key), such as Cloudflare's error 1102 (HTTP 503: a problem object with `error_code` 1102, the text `error code: 1102` or an HTML page): the service could not finish, so a submit may or may not have arrived. Handle it like `upstream_unavailable`, even though Cloudflare's text says not to retry: a first call on a fresh server costs the most. - `forwarding_disabled` (403): this host does not send requests; use https://amdmachines.com/api/agent-quote/v1/submit or the MCP server. - `rate_limited` (429): wait for `Retry-After`. The limits are best-effort: about 120 calls a minute per network, and 10 submits an hour per network and email address (30 per network). - `origin_not_allowed` (403): call from a server or through MCP, not from a web page. - `unknown_product` (400): use an id from `did_you_mean` or from `list_products`. ## Example A minimal `check_quote_request` arguments object for a robotic welding cell (invented data). Replace `` with a new random key: the placeholder itself is ignored with the warning `invalid_idempotency_key`. ```json { "product": "robotic-welding-cells", "offering": "custom_machine", "contact": { "first_name": "Dana", "last_name": "Sample", "email": "dana.sample@example.com", "company": "Example Manufacturing (fictional)", "phone": "+1 555 0100" }, "answers": { "compliance.export_control": "no", "project.description": "Robotic MIG welding of six sizes of steel mounting brackets, welded by hand today on two shifts. (Fictional example.)", "site.country": "us", "parts.part_description": "Steel mounting brackets, 6 sizes", "production.annual_volume": 60000, "production.cycle_time_s": 45, "welding.process": ["mig_mag"], "equipment.plc": "no_preference", "timeline.target_date": "2027-09" }, "agent": { "name": "YourAgent", "version": "1.0" }, "idempotency_key": "" } ``` The same steps over HTTP, where `request.json` is the approved draft with `"consent": {"contact_ok": true}` added: ```bash UA='User-Agent: YourAgent/1.0 (+https://example.com/bot)' curl -sS -H "$UA" 'https://amdmachines.com/api/agent-quote/v1/questions?product=robotic-welding-cells&mode=quick' curl -sS -H "$UA" -H 'Content-Type: application/json' --data @draft.json https://amdmachines.com/api/agent-quote/v1/check curl -sS -H "$UA" -H 'Content-Type: application/json' --data @request.json https://amdmachines.com/api/agent-quote/v1/submit ```