Agentic Fabrication Network (AFN)
RemoteAbout Agentic Fabrication Network (AFN)
Turn designs into shipped parts: quote 3D printing, CNC, and decals, then check out
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://agenticfabricationnetwork.ai/mcpclaude mcp add --transport http ai-agenticfabricationnetwork-ufp https://agenticfabricationnetwork.ai/mcp{"mcpServers":{"ai-agenticfabricationnetwork-ufp":{"type":"http","url":"https://agenticfabricationnetwork.ai/mcp"}}}Open in Cursor{"servers":{"ai-agenticfabricationnetwork-ufp":{"type":"http","url":"https://agenticfabricationnetwork.ai/mcp"}}}Open in VS Code{"mcpServers":{"ai-agenticfabricationnetwork-ufp":{"type":"http","url":"https://agenticfabricationnetwork.ai/mcp"}}}{"mcpServers":{"ai-agenticfabricationnetwork-ufp":{"serverUrl":"https://agenticfabricationnetwork.ai/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
13| Parameter | Type | Required | Description |
|---|---|---|---|
| cut | string | No | Decal cut style — pass the user's words verbatim ("triangle", "die cut", "circle"). Known: contour|square|oval|kiss_cut; anything else gets closest-match offers with a substitution note. Omit to compare the main options |
| size | string | No | Print size — pass the user's words verbatim ("letter", "24x36", "half letter"). Cards are 3.5x2; flyers 8.5x5.5|8.5x11|11x17; posters 12x18 through 36x48. Unknown sizes get closest-match offers |
| bends | array | No | Sheet-metal bend lines, each as TWO POINTS in the part's own mm frame (flat DXF parts use z=0: a bend from (0,12.7) to (76.2,12.7) is p1 [0,12.7,0], p2 [76.2,12.7,0]). angle_deg is the target bend angle (90 = a right-angle flange), direction "up"/"down" is the fold direction relative to the flat pattern, radius_mm the requested inside radius (omit it — the shop resolves to its tooling and reports what it used). Pass these when the user articulates WHERE the bends go; a bare "it has 2 bends" is bend_count, not this. |
| color | string | No | ONLY a color the user actually asked for — NEVER pick one for them. fdm_print: Filament color for fdm_print (e.g. black, red); resin_print: Resin color for resin_print (e.g. gray, white, black); powder_print: Powder part color: raw gray/white, or a dye ("black", "dark blue") — vendor-resolved; elastomer_print: Elastomer part color — VCJ parts ship raw; asks resolve with an honest substitution note; cnc: Colour for cnc: with finish anodized it is the anodize colour, otherwise the stock's own colour (black Delrin, clear acrylic). Colour WORDS only; each maker resolves the shade and says what it landed on; laser_cut: Colour of the flat stock for laser_cut (black, clear, natural…). Colour WORDS only; each maker quotes the materials it stocks in that colour and drops the ones that cannot be it; print: Print color ask ("full color", "black and white"). Vendors that only price full color note the substitution; apparel: Garment color for apparel ("black", "heather gray") — vendor-resolved |
| paper | string | No | Paper stock — free-form ("matte", "glossy", "recycled", "14pt"). Resolved to the closest stock the vendor runs |
| sides | string | No | single|double sided printing (defaults: cards double, flyers/posters single) |
| units | string | No | sheetmetal: DXF drawing units: "mm" (default) or "in". STEP files carry their own units; laser_cut: DXF drawing units: "mm" (default) or "in" |
| finish | string | No | cnc: CNC surface finish: standard|anodized|polished|bead_blasted (default standard); sheetmetal: as_cut (default) | deburred | anodized | powder_coat — anodized is aluminum-only; powder coat protects mild steel for outdoor use |
| inserts | array | No | PEM-style hardware inserts pressed into holes of a sheet-metal part — one record per hole. `insert` is the species (nut | flush_nut | standoff | blind_standoff | stud) and `thread` its size ("M4", "1/4-20"); both are required. When known, add length_mm (standoff/stud post length), the hole's center (located_at_mm, part's own mm frame), its axis, the drilled diameter, and `points` — the signed unit vector the insert's functional side faces (flip = negate). Pass these when the user asks for press-in nuts/standoffs/studs; vendors with a hardware service price them. |
| process | enum | No | What to fabricate. If the user just drops a file and asks for a price, OMIT this — UFP detects the file type (artwork, mesh — STL/OBJ/PLY/3MF/AMF, BREP — STEP/IGES, DXF) and routes it to every process that can make it; the response's routing.also_possible lists processes UFP can't quote yetfdm_print | resin_print | powder_print | metal_print | elastomer_print | cnc | sheetmetal | laser_cut | decal | print | apparel |
| product | string | No | print: Print product kind: business_cards|flyers|posters. Omit to quote every kind the artwork fits; apparel: apparel: t_shirt|hoodie|long_sleeve|tank_top (free-form — "tee", "crewneck" resolve to the closest product) |
| shore_a | number | No | Numeric Shore A durometer ask (10-95, e.g. 40). Resolved to the NEAREST stocked durometer with a substitution note — never a silent swap |
| tapping | array | No | Tapped (threaded) holes for a sheet-metal part — one record per hole the user wants threads cut into. `thread` is the callout in the user's words ("M6", "M4 x 0.7", "1/4-20") and is all that's required; when known, add the hole's center in the part's own mm frame (located_at_mm), its unit axis, the pre-tap drilled diameter, and depth_mm so the shop taps the right hole. Pass these when the user asks for threaded/tapped holes; vendors with a tapping service price them. |
| vendors | array | No | Only these specific vendors/makers ("just quote Slant 3D") — an INCLUDE list of vendor names as they appear on offers. Friendly names accepted ("A3D", "slant 3d"); unmatched names are reported, never an error. Usually OMIT: pass it only when the user explicitly names the vendors they want |
| callouts | array | No | Dimensions you read off the user's drawing that matter ("hole_diameter 6.5mm ±0.1"). The tightest tolerance prunes vendors that cannot hold it. |
| deadline | string | No | Latest acceptable delivery date, ISO YYYY-MM-DD |
| file_url | string | No | Public URL of the design file — only when the design lives at a URL |
| material | string | No | ONLY a material the user actually asked for — NEVER guess or default one (a silent "pla" on a bare file drop prunes every maker that does not stock it; OMIT instead and each process quotes across its stocked materials so every maker can bid). fdm_print: pla|petg|asa (free-form — "abs", "polycarbonate" asks resolve to the closest stocked filament with a substitution note); resin_print: standard|tough|high_temp|high_detail resin (free-form asks resolve to the closest supported resin); powder_print: Powder-bed nylon: nylon_12|nylon_12_smooth|nylon_11|nylon_12_gf|nylon_12_esd|nylon_12_white|nylon_pa2200|nylon_12_sls|tpu (free-form — "PA12", "glass filled" resolve to the closest stocked powder); elastomer_print: Jetted elastomer: tepu_30a|tepu_50a (free-form — "TPU", "soft rubber" resolve to the closest stocked durometer); cnc: aluminum_6061|aluminum_7075|stainless_304|titanium|brass|acetal|delrin|abs|nylon_pa6|peek|acrylic (free-form asks resolve to the closest supported stock); sheetmetal: mild_steel|aluminum_5052|stainless_304 (free-form — "steel", "5052", "stainless" resolve; unknown asks get closest-match offers). Omit to compare the defaults; laser_cut: acrylic|plywood|mdf|delrin|uhmw|hdpe|g10|carbon_fiber|mild_steel|aluminum_5052|stainless_304 (free-form — "plexiglass", "birch" resolve; unknown asks get closest-match offers); decal: vinyl|holographic|transparent|glitter (free-form — "chrome" etc. gets closest matches) |
| width_in | number | No | Decal width in inches (default 3) |
| food_safe | boolean | No | Must be vendor-certified food safe |
| height_in | number | No | Decal height in inches (default 3) |
| high_temp | boolean | No | Must tolerate sustained heat (vendor heat-resistance claim) |
| placement | string | No | Print placement for apparel: front (default) | back | front_back |
| processes | array | No | Only quote these fabrication processes — a constraint that narrows the auto-routing fan. Friendly terms accepted ("sheet metal", "3d printing", "cnc", "laser"); unmappable terms are reported, never an error. Usually OMIT: auto-routing quotes every process that can make the file. Pass it only when the user explicitly limits the process |
| share_key | string | No | Share key for a LOCKED part — the k=… value from the owner's share link (…/part/UFP-…?k=KEY). Required with part_number when the part is locked; omit otherwise |
| bend_count | number | No | Number of bends in the design (bend lines must be in the file). Prices CNC bending; omit for flat parts |
| quantities | array | No | Quantities the user actually wants — pass [1] or [2] if that's the ask. Vendors with a higher minimum quote AT their minimum and the offer notes it (requested_quantity). Default: 25 for decals, 1 for prints; a part_number reorder defaults to the quantity last purchased |
| ships_from | array | No | Only vendors that ship from these countries/regions ("only US vendors", "keep it domestic") — an INCLUDE list. Friendly terms accepted ("US", "Europe", "Germany", "China", "UK"); unmappable terms are reported, never an error. Vendors whose origin is unknown or whose network is worldwide (origin not guaranteed) are excluded, each with a note saying why. Usually OMIT: pass it only when the user explicitly limits where vendors ship from |
| design_file | any | No | The design file itself (user-attached or generated image/STL). ChatGPT supplies the file reference automatically when the user attached a file — just bind the attachment here. Other clients may pass a data: URL (base64) or a public https URL string. Preferred over file_url. |
| metal_alloy | string | No | Metal AM alloy: stainless_316l|stainless_17_4ph|titanium_ti64|aluminum_alsi10mg|inconel_718|cobalt_chrome|tool_steel_h13|copper (free-form asks like "Ti-6Al-4V" resolve to the closest stocked powder) |
| part_number | string | No | UFP part number from a previous paid order (UFP-… or part_…). Reorders: replaces design_file/file_url entirely; any other fields provided override the stored spec |
| ship_to_zip | string | No | Destination US ZIP code, exactly as the user stated it. OMIT if the user has not given one — NEVER guess or invent a ZIP. Without it, prices come back all-in with shipping to an assumed central-US destination, flagged on routing.ship_to |
| submersible | boolean | No | Must survive submersion in water |
| metal_finish | string | No | Metal AM post-processing: as_printed|bead_blast|machined_critical|polished|heat_treated (as_printed keeps support witness marks) |
| requirements | array | No | Verbatim context terms from the user — materials, finishes, certifications, tolerances ("UV resistant", "anodized: red", "iso 13485", "tolerance: 0.1mm"). UFP applies what it can and reports what it could not; unresolvable terms are logged for vendor sourcing. Do not interrogate the user to fill this — pass what they said. |
| thickness_in | number | No | sheetmetal: Sheet thickness in inches (e.g. 0.063 = 14 ga aluminum). Quoted at the nearest stocked thickness; omit for ~16 ga default; laser_cut: Nominal thickness in inches; quoted at the vendor's nearest stocked thickness. Omit for the material's common stock |
| outdoor_rated | boolean | No | Must survive outdoor exposure |
| powder_finish | string | No | Powder post-processing: as_printed (raw powder surface) | vapor_polished | polished |
| max_budget_usd | number | No | Hard budget cap in USD, all-in |
| attachment_urls | array | No | Additional files for the SAME part — the PDF drawing next to the STEP, spec sheets, BOMs. Pass everything the user gave you; UFP works out which file is the part and which are supporting documents. |
| elastomer_finish | string | No | Elastomer post-processing: as_printed (VCJ parts ship raw — the whole lane today) |
| metal_technology | string | No | Metal AM process: laser_powder_bed (SLM/DMLS/LPBF)|binder_jet|ebm. Omit to let the vendor pick its default for the alloy |
| min_vendor_stars | number | No | Only vendors whose displayed review rating is at least this many stars (1-5). Vendors with no reviews yet are excluded — the filter demands demonstrated quality |
| powder_technology | string | No | Powder process: mjf (HP Multi Jet Fusion) | sls (laser sintering). Omit to let the vendor pick its default lane for the material |
| min_vendor_reviews | integer | No | Only vendors with at least this many verified-purchase reviews |
| proven_spec_orders | integer | No | Only vendors with at least N completed orders for this exact process+material — "a vendor that prints PC reliably" |
| elastomer_technology | string | No | Elastomer process: vapor_cure_jetting (VCJ). Omit to let the vendor pick its default lane for the material |
Details
The maintainer has not added details yet. Check the README in the repository.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.