For agents
Anything a person can see here, an agent can read: no key, no login, no CAPTCHA, no rate wall for normal use. CORS is open.
Add the MCP server
# Claude Code claude mcp add maglev-parts --transport http https://trymaglev.com/parts/mcp # any MCP client (JSON config) { "mcpServers": { "maglev-parts": { "type": "http", "url": "https://trymaglev.com/parts/mcp" } } } # offline / local, from the repo { "mcpServers": { "maglev-parts": { "command": "node", "args": ["catalog/mcp/server.mjs"] } } }
Catalog tools, no key: search_parts (Search the parts catalog), match_requirements (Match parts to requirements), requirement_keys (Requirement keys for a subcategory), get_part (Get one part), list_categories (List categories), compare_parts (Compare parts), landed_cost (Estimate US landed cost), find_equivalents (Find equivalent parts), get_test_protocol (Actuator test protocol), check_test_result (Check a bench test result), build_rfq (Draft a parts request), plan_joint (Plan a robot joint).
Custom parts from CAD, with a Maglev API key (curl -fsSL https://trymaglev.com/connect.sh | sh): upload_cad_for_quote (Start a quote from CAD files), check_manufacturability (Check manufacturability (DFM)), get_quotes (Get manufacturing quotes from shops), preview_order (Preview an order: total and terms). Ordering through the API is paused: place_order is listed but always refuses.
Route a requirement to parts
match_requirements (or GET /api/route) takes a subcategory and the numbers a design needs, and returns every part ranked against them: which requirements each part meets, nearly meets (within 15%), misses or leaves unknown, plus which single requirement is blocking the most options and how far to relax it. It is the same engine as the find page.
curl "https://trymaglev.com/parts/api/route?sub=joint-actuators&peak_torque_nm=60-&mass_g=-1000&interface=CAN&price_usd=-300&w=mass_g"
Plain HTTP
| Request | Returns |
|---|---|
GET /api/index.json | Categories, subcategories, counts, every endpoint |
GET /api/parts.json | The whole catalog in one document |
GET /api/parts/{id}.json | One part: specs, prices with sources, origin, compliance, equivalents |
GET /api/categories/{category}.json | One category with its parts |
GET /api/search?q=&lens=&ndaa= | Ranked search, same as the search box. lens: any, cn, not-cn, us, usmca, allied |
GET /api/route?sub=&{key}={min}-{max} | Rank a subcategory against your numbers. Keys per subcategory: /api/find/index.json. POST the same as JSON. |
GET /api/landed?id=&qty=&origin=&freight= | Landed-cost estimate with the duty stack and sources |
GET /api/trade.json | HTS codes, duty programs by country, fees, compliance references |
GET /p/{id}/index.md | One part as Markdown |
GET /llms.txt, /llms-full.txt | Orientation, and the whole catalog as Markdown |
GET /openapi.json | OpenAPI 3.1 description of all of the above |
curl https://trymaglev.com/parts/api/parts/cm-jetson-orin-nano-4gb.json curl "https://trymaglev.com/parts/api/search?q=frameless+48V&lens=not-cn"
Asking for a quote
build_rfq returns a request document and a filled-in email to Maglev. Your agent should show it to its person before sending; nothing is ordered without a human saying yes.
Being a good citizen
Prefer /api/parts.json over crawling HTML. Prices carry a date and a source; quote them that way. Fields we could not confirm say unknown; do not fill them in.