Robot parts with origin and US landed cost; quotes for CNC, sheet metal, molding and wire harnesses
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer mgl_ API key from trymaglev.com/dashboard. Only the quote and order tools need it.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Build a request for Maglev to buy listed parts, price unlisted ones, or make custom versions. Returns the request document and a ready-to-send email. Nothing is sent or ordered: show it to your person first.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http parts https://trymaglev.com/mcp
Headers
Authorization (optional, not in the config above): Bearer mgl_ API key from trymaglev.com/dashboard. Only the quote and order tools need it.Build a request for Maglev to buy listed parts, price unlisted ones, or make custom versions. Returns the request document and a ready-to-send email. Nothing is sent or ordered: show it to your person first.
| Argument | Type | Description |
|---|---|---|
| items* | array | |
| notes | string | |
| company | string | |
| needed_by | string | |
| contact_name | string | |
| contact_email | string | |
| ship_to_country | string |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"qty"
],
"properties": {
"id": {
"type": "string"
},
"qty": {
"type": "integer",
"minimum": 1
},
"notes": {
"type": "string"
},
"request": {
"enum": [
"buy",
"quote",
"custom"
],
"type": "string",
"default": "quote"
}
}
}
},
"notes": {
"type": "string"
},
"company": {
"type": "string"
},
"needed_by": {
"type": "string"
},
"contact_name": {
"type": "string"
},
"contact_email": {
"type": "string"
},
"ship_to_country": {
"type": "string",
"default": "US"
}
}
}Use this after uploading CAD files and before quoting, when the user asks whether a part can be made, wants a DFM (design for manufacturing) review, or asks what to change. Sends each uploaded file to the design check of a shop that makes its process (CNC machining, sheet metal, injection molding, wire harness) and returns ok, blockers and warnings per file plus ready_to_quote. The user's CAD file goes to that outside shop. Fix blockers before calling get_quotes. Requires a Maglev API key.
| Argument | Type | Description |
|---|---|---|
| options | object | Optional per-file options: { file_id: { material, finish, tolerance_mm, wall_mm, draft_deg, speed } }. finish: CNC standard|anodized|polished|bead_blasted, sheet metal as_cut|deburred|anodized|powder_coat. Each offer reports finish_applied; shops that ignore an option say so. |
| file_ids* | array | file_id values returned by the upload commands from upload_cad_for_quote |
| processes | object | Optional per-file process override: { file_id: process } |
{
"type": "object",
"required": [
"file_ids"
],
"properties": {
"options": {
"type": "object",
"description": "Optional per-file options: { file_id: { material, finish, tolerance_mm, wall_mm, draft_deg, speed } }. finish: CNC standard|anodized|polished|bead_blasted, sheet metal as_cut|deburred|anodized|powder_coat. Each offer reports finish_applied; shops that ignore an option say so.",
"additionalProperties": {
"type": "object"
}
},
"file_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "file_id values returned by the upload commands from upload_cad_for_quote"
},
"processes": {
"type": "object",
"description": "Optional per-file process override: { file_id: process }",
"additionalProperties": {
"enum": [
"cnc_machining",
"sheet_metal",
"injection_molding",
"wire_harness"
],
"type": "string"
}
}
}
}Check a bench test result for a joint actuator against the result format (/api/test/result.schema.json, template at /api/test/result-template.json) and compare the measured values with the part's datasheet in the catalog: peak torque, continuous torque, backlash, Kv, Kt. Returns errors, warnings and each measured-vs-datasheet delta. Nothing is stored.
| Argument | Type | Description |
|---|---|---|
| result* | object | One result in maglev.test-result/0.1 format |
{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"description": "One result in maglev.test-result/0.1 format"
}
}
}Side-by-side comparison of 2-10 parts: shared spec keys, price at a quantity, origin, NDAA.
| Argument | Type | Description |
|---|---|---|
| ids* | array | |
| qty | integer |
{
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 2
},
"qty": {
"type": "integer",
"default": 1,
"minimum": 1
}
}
}Drop-in or near equivalents for a part from other makers, optionally restricted by origin lens, plus parts it is commonly paired with.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| lens | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"lens": {
"enum": [
"any",
"cn",
"not-cn",
"us",
"usmca",
"allied"
],
"type": "string"
}
}
}Full record for one part: specs, dated prices with sources, maker, origin, HTS, NDAA/Blue UAS/FCC, equivalents and compatible parts.
| Argument | Type | Description |
|---|---|---|
| id* | string | Maglev part id, e.g. from search_parts |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Maglev part id, e.g. from search_parts"
}
}
}Use this when the user wants prices or lead times for making their uploaded parts: a CNC, sheet metal, injection molding or wire harness quote. Asks these shops in parallel, and the user's CAD file goes to them: CNC machining, Make Parts Now (US) plus AFN network shops; sheet metal, RMFG (US) plus AFN network shops; injection molding, SSG MFG's budgetary molding estimate (US) plus AFN 3D-printing offers for the same file, which come back as process 3d_printing; wire harness, MiniProto (US). AFN offers give each shop's ship-from country. Returns parts[], each with offers[] in one shape: shop, price_type (firm or budgetary), total_usd, one_time_costs, lead_time_days, ships_by, quote_id. Show the user every offer; do not pick a winner for them. To see what ordering one would cost and how, pass its quote_id to preview_order. For catalog parts, use build_rfq. Requires a Maglev API key.
| Argument | Type | Description |
|---|---|---|
| sort | string | How to order each part's offers. Default price. |
| options | object | Optional per-file options: { file_id: { material, finish, tolerance_mm, wall_mm, draft_deg, speed } }. finish: CNC standard|anodized|polished|bead_blasted, sheet metal as_cut|deburred|anodized|powder_coat. Each offer reports finish_applied; shops that ignore an option say so. |
| file_ids* | array | file_id values returned by the upload commands from upload_cad_for_quote |
| quantity* | integer | Units per part, unless overridden per file in options.quantity |
| processes | object | Optional per-file process override: { file_id: process } |
How to bench-test a robot joint actuator: nine tests in run order (what each tells you, method, equipment, values to report, sources) and three bench kits (starter, serious, lab) with catalog part ids, quantities and listed prices. Use when someone has built or bought an actuator and asks how to verify it, or what test equipment to buy.
| Argument | Type | Description |
|---|---|---|
| kit | string | Optional kit id to return only that kit, e.g. "starter" |
{
"type": "object",
"properties": {
"kit": {
"type": "string",
"description": "Optional kit id to return only that kit, e.g. \"starter\""
}
}
}Estimate US landed cost for a part in the Maglev catalog. Needs its catalog id: find it with search_parts first; parts outside the catalog cannot be priced here. Returns goods value + duty stack for the origin (MFN, Section 301, other programs, each with a source) + merchandise processing fee + freight. An estimate, not customs advice.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| qty | integer | |
| origin | string | ISO-2 country it ships from; defaults to the part's origin |
| unit_usd | number | Unit price to use when the part has no listed price |
| freight_usd | number |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"qty": {
"type": "integer",
"default": 1,
"minimum": 1
},
"origin": {
"type": "string",
"description": "ISO-2 country it ships from; defaults to the part's origin"
},
"unit_usd": {
"type": "number",
"description": "Unit price to use when the part has no listed price"
},
"freight_usd": {
"type": "number",
"default": 0
}
}
}Categories and subcategories with part counts and the spec columns each subcategory compares on.
No arguments.
{
"type": "object",
"properties": {}
}Route a design requirement to parts: give a subcategory (e.g. joint-actuators, strain-wave-reducers, frameless-bldc) and the numbers the design needs, and get every part ranked against them. Each result says, per requirement, whether it meets, is close (within 15%), misses, or is unknown, and the response names the requirement blocking the most options and how far to relax it. Call requirement_keys first to see which keys a subcategory accepts.
| Argument | Type | Description |
|---|---|---|
| qty | integer | |
| lens | string | |
| limit | integer | |
| ndaa_only | boolean | |
| priorities | array | Requirement keys that count double in the fit score |
| subcategory* | string | |
| requirements* | array |
{
"type": "object",
"required": [
"subcategory",
"requirements"
],
"properties": {
"qty": {
"type": "integer",
"default": 1,
"minimum": 1
},
"lens": {
"enum": [
"any",
"cn",
"not-cn",
"us",
"usmca",
"allied"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1
},
"ndaa_only": {
"type": "boolean"
},
"priorities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requirement keys that count double in the fit score"
},
"subcategory": {
"type": "string"
},
"requirements": {
"type": "array",
"items": {
"type": "object",
"required": [
"key"
],
"properties": {
"any": {
"type": "array",
"items": {
"type": "string"
},
"description": "For text keys such as interface: matches if any token is present, e.g. [\"CAN\",\"EtherCAT\"]"
},
"key": {
"type": "string",
"description": "Spec key from requirement_keys, e.g. peak_torque_nm, mass_g, voltage_v, interface, price_usd, torque_density"
},
"max": {
"type": "number"
},
"min": {
"type": "number"
}
}
}
}
}
}Ordering through the API is paused: this tool always refuses and orders, pays and sends nothing. Call preview_order instead and show the user its terms; to order, the user sends the quote_id to Maglev. We quote you one price for the build, fixed before you commit. Every number you pay is on that quote.
| Argument | Type | Description |
|---|---|---|
| quote_id* | string | quote_id of one offer returned by get_quotes |
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"quote_id": {
"type": "string",
"description": "quote_id of one offer returned by get_quotes"
}
}
}Plan a complete robot joint from targets: peak torque, output speed, bus voltage, mass budget and quantity. Returns complete joint actuators that meet the targets, and joints built from parts (frameless motor + reducer + driver + encoder) with the torque and speed math shown, listed price and mass totals, which parts still need a quote, lead times where known and where each part is made. Checks the catalog cannot make are reported as not checked.
| Argument | Type | Description |
|---|---|---|
| qty | integer | |
| limit | integer | |
| speed_rpm | number | Output speed the joint needs, rpm |
| voltage_v* | number | Bus voltage, V |
| max_mass_g | number | Mass budget for the joint, g |
| peak_torque_nm* | number | Peak output torque the joint needs, N·m |
{
"type": "object",
"required": [
"peak_torque_nm",
"voltage_v"
],
"properties": {
"qty": {
"type": "integer",
"default": 1,
"minimum": 1
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1
},
"speed_rpm": {
"type": "number",
"description": "Output speed the joint needs, rpm"
},
"voltage_v": {
"type": "number",
"description": "Bus voltage, V"
},
"max_mass_g": {
"type": "number",
"description": "Mass budget for the joint, g"
},
"peak_torque_nm": {
"type": "number",
"description": "Peak output torque the joint needs, N·m"
}
}
}Use this when the user wants to order one of the offers from get_quotes. Returns the quoted total for that quote_id (parts plus the shipping the shop quoted), what the total excludes (such as tax and US import duty), whether the price is firm or budgetary, and the terms for ordering. Reads the saved quote only: contacts no shop, places nothing, charges nothing. Requires a Maglev API key.
| Argument | Type | Description |
|---|---|---|
| quote_id* | string | quote_id of one offer returned by get_quotes |
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"quote_id": {
"type": "string",
"description": "quote_id of one offer returned by get_quotes"
}
}
}The requirement keys a subcategory accepts for match_requirements: numeric keys with unit and catalog range, and text keys with their options.
| Argument | Type | Description |
|---|---|---|
| subcategory* | string |
{
"type": "object",
"required": [
"subcategory"
],
"properties": {
"subcategory": {
"type": "string"
}
}
}Search the Maglev parts catalog (compute modules, motors and drivers, robot actuators, drone parts). Match on part number, brand, or spec words such as "48V", "Orin NX", "harmonic". Filter by where it is made and NDAA status.
| Argument | Type | Description |
|---|---|---|
| lens | string | Origin filter: any, cn (China incl. HK), not-cn, us, usmca (US/CA/MX), allied |
| limit | integer | |
| query | string | Search words; empty returns everything in scope |
| category | string | compute-modules | motors | actuators | drone |
| ndaa_only | boolean | Only NDAA-compliant or Blue UAS listed parts |
{
"type": "object",
"properties": {
"lens": {
"enum": [
"any",
"cn",
"not-cn",
"us",
"usmca",
"allied"
],
"type": "string",
"description": "Origin filter: any, cn (China incl. HK), not-cn, us, usmca (US/CA/MX), allied"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1
},
"query": {
"type": "string",
"description": "Search words; empty returns everything in scope"
},
"category": {
"type": "string",
"description": "compute-modules | motors | actuators | drone"
},
"ndaa_only": {
"type": "boolean",
"description": "Only NDAA-compliant or Blue UAS listed parts"
}
}
}Use this when the user wants a custom part made or quoted from CAD: a STEP or STP file for CNC machining, sheet metal or injection molding, or a wire-harness spec in JSON. First step of the quoting flow. Needs the path of each file on the user's machine: if you do not have one, ask the user for it; never make up a file name. Returns one curl command per file that uploads it to Maglev (up to 20 MB) and how it will be routed. Run each command with your shell tool; with no shell, give the commands to the user to run. Each upload prints a file_id; pass the file_ids to check_manufacturability and get_quotes. Requires a Maglev API key. Not for off-the-shelf parts: use search_parts.
| Argument | Type | Description |
|---|---|---|
| file_names* | array | Local file names or paths, e.g. ["bracket_sheetmetal.step"] |
{
"type": "object",
"required": [
"file_names"
],
"properties": {
"file_names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Local file names or paths, e.g. [\"bracket_sheetmetal.step\"]"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.
{
"type": "object",
"required": [
"file_ids",
"quantity"
],
"properties": {
"sort": {
"enum": [
"price",
"lead_time"
],
"type": "string",
"description": "How to order each part's offers. Default price."
},
"options": {
"type": "object",
"description": "Optional per-file options: { file_id: { material, finish, tolerance_mm, wall_mm, draft_deg, speed } }. finish: CNC standard|anodized|polished|bead_blasted, sheet metal as_cut|deburred|anodized|powder_coat. Each offer reports finish_applied; shops that ignore an option say so.",
"additionalProperties": {
"type": "object"
}
},
"file_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "file_id values returned by the upload commands from upload_cad_for_quote"
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Units per part, unless overridden per file in options.quantity"
},
"processes": {
"type": "object",
"description": "Optional per-file process override: { file_id: process }",
"additionalProperties": {
"enum": [
"cnc_machining",
"sheet_metal",
"injection_molding",
"wire_harness"
],
"type": "string"
}
}
}
}