# Fabworks MCP Server

Connect an AI agent to Fabworks to quote laser-cut sheet metal and tube parts from STEP files.

The Fabworks MCP server connects AI agents to Fabworks online laser cutting. An agent can search the manufacturing catalog, upload STEP files, create quotes, review pricing and DFM results, update quote parts, weld bent parts, and check orders. It works with Claude Code, Codex, Cursor, and any client that supports remote MCP servers.

Quotes cover laser-cut flat sheet, bent sheet, and tube parts. Signed uploads keep STEP file bytes out of the agent context.

## Connect an agent

Copy this prompt into an agent that supports remote MCP servers:

```text [Prompt for an AI agent]
Add the Fabworks remote MCP server to this agent.

Name: Fabworks
URL: https://api.fabworks.com/mcp
Transport: Streamable HTTP
Authentication: OAuth

Configure the server and start OAuth. If you cannot edit your MCP
configuration, give me the exact steps for this client. Then list
the Fabworks tools to verify the connection.
```

OAuth opens a Fabworks sign-in page. MCP clients that support custom headers can also use a Fabworks user or organization API key:

```text [Authorization header]
Authorization: Bearer $FABWORKS_API_KEY
```

Keep API keys in an environment variable or secret store. Do not paste a key into chat or commit it to a repository.

## Generate an API key

Use OAuth when your client supports it. For an automated client that requires a Bearer token, create and manage a Fabworks API key below.

:mcp-api-keys

If an organization is active in Fabworks, Clerk creates an organization API key. Otherwise, it creates a personal API key.

## Set up your client

### Claude Code

Add Fabworks for your user so it is available in every project:

```text [Terminal]
claude mcp add --transport http --scope user fabworks https://api.fabworks.com/mcp
```

Open `/mcp` in Claude Code, select Fabworks, and complete the browser sign-in. Use `/mcp` again to confirm that the Fabworks tools are connected.

### Codex

Add the remote server, then start OAuth:

```text [Terminal]
codex mcp add fabworks --url https://api.fabworks.com/mcp
codex mcp login fabworks
```

After sign-in, start a new Codex session and ask it to list the Fabworks tools.

### OpenClaw

Save Fabworks as a Streamable HTTP server and start OAuth:

```text [Terminal]
openclaw mcp add fabworks \
  --url https://api.fabworks.com/mcp \
  --transport streamable-http \
  --auth oauth
openclaw mcp login fabworks
openclaw mcp doctor fabworks --probe
```

The final command checks the connection and lists any authorization problem.

### Hermes Agent

Add Fabworks and sign in:

```text [Terminal]
hermes mcp add fabworks --url https://api.fabworks.com/mcp --auth oauth
hermes mcp login fabworks
hermes mcp test fabworks
```

Hermes adds the Fabworks tools to later agent sessions after the connection test succeeds.

## Agent Guidance

The [Agent Guidance](/resources/developers/agent-guidance) page is where agents start: the rules, the quoting workflow, and links to the Fabworks pages that hold the details. The server tells every client to load it with `get_agent_guidance` before quoting.

## Quote STEP files

Use this workflow:

1. Call `find_materials` to get exact material and finish IDs.
2. Call `create_upload` for each STEP file and upload the file to the returned signed URL.
3. Call `create_quote` with the upload IDs, quantities, names, material ID, and finish ID.
4. If processing continues, call `get_quote`. It waits for a result by default.
5. Review the price, manufacturing configuration, DFM results, and checkout URL with the user.

Do not send STEP files as base64. The signed upload keeps file bytes out of the agent context. Do not select a suggested material without user confirmation. Exact tube searches treat `box`, `square`, and `rectangular` as the same profile family.

## What a quote returns

A ready quote includes the price of each part, the subtotal, and the checkout URL. It also runs the same DFM checks as checkout:

- `dfm.errors` and `dfm.warnings` count the problems across the quote. Each part lists its own `dfm_issues`, for example a flange shorter than the minimum for its thickness or a cutout inside a bend's distortion zone.
- `dfm.checkout_blocked` is `true` while any error remains. Fix the model or change the material, then quote again.
- Warnings do not block checkout. The agent should still show them before you order.

Bent parts also list each bend with its angle, inside radius, flange length, and the limits for the selected material: minimum flange, distortion zone, and tooling radius. A failing bend names the check it failed, so the agent can tell you which flange to lengthen and by how much.

Each part has a `review_url` that opens the quote scrolled to that part. Bent parts also have a `bending_url` that opens the press brake simulation for that part. Add `&step=N` to hold the simulation after step N, which lets an agent with a browser screenshot a specific bend. The simulation page carries a hidden status block (`[data-press-brake-summary]`) with the search result, the step order, and a `data-settled` flag that turns true once playback stops. The bend sequence simulation runs only in the browser, so bent parts get one more check there. The subtotal does not include shipping or tax.

## Weld bent parts

Fabworks welds the seams where two flanges of a bent sheet part meet, such as the corners of a box. An agent can weld them without opening the 3D viewer:

1. Call `find_weld_seams` with the quote ID to see which bent parts can be welded.
2. Call it again with a `part_id` to list that part's seams. Seams are numbered longest first, with their length and end points in the STEP file's coordinates, and show any welds already on them.
3. Call `update_quote_parts` with `welds`, for example `[{ "seam": 1 }, { "seam": 2, "stitch": { "length": 1, "gap": 2 }, "ground": true }]`. A seam without `stitch` gets one continuous weld. `ground` grinds the weld flush. The quote comes back repriced.
4. Give the user the `welding_url`. It opens the part in the weld editor so they can check the welds before checkout.

Welding a seam replaces the welds already on it and leaves other seams alone. `remove` clears one seam and `clear_welds` clears the part. Galvanized steel and material thicker than 0.25 in cannot be welded. Welds between parts of an assembly are placed in the dashboard.

The checkout URL opens the quote in the Fabworks account that owns it. Sign in to that account before you open the link. An API key belongs to the account or organization that created it.

## Tools

The server covers what the Fabworks dashboard does. Checkout, payment, and ownership changes stay in the dashboard: the agent hands you a link and you finish there.

| Tool                      | Use                                                                                              |
| ------------------------- | ------------------------------------------------------------------------------------------------ |
| `get_account`             | Show the user and organizations the connection acts for, and where new quotes go.                |
| `find_materials`          | Find exact sheet, tube, and finish IDs.                                                          |
| `find_hole_operations`    | List taps, countersinks, and hardware that fit a material and thickness.                         |
| `find_weld_seams`         | List which bent parts can be welded, and the numbered seams on one part.                         |
| `create_upload`           | Create a temporary signed upload URL for one STEP file.                                          |
| `create_quote`            | Create and price a quote from one or more uploaded files, in a personal or organization account. |
| `add_quote_parts`         | Upload more STEP files into an existing quote.                                                   |
| `get_quote`               | Read status, prices, DFM, bend data, configurable holes, and price breaks at other quantities.   |
| `get_delivery_options`    | Delivery dates and shipping cost per tier for a ZIP code.                                        |
| `list_quotes`             | Find quotes by name or number, including archived ones.                                          |
| `update_quote_parts`      | Change quantities, names, materials, finishes, hole operations, and welds, or remove parts.      |
| `update_quote`            | Rename a quote, set its ZIP code or local pickup, archive or restore it.                         |
| `update_quote_assemblies` | Change how many sets of an assembly are ordered, or split it into standalone parts.              |
| `duplicate_quote`         | Copy a quote before trying changes.                                                              |
| `share_quote`             | Create a read-only link for a purchaser or teammate.                                             |
| `get_link`                | Link to a quote, part, bend simulation step, checkout, order, or list in the dashboard.          |
| `list_orders`             | List orders with status and tracking.                                                            |
| `check_order_status`      | Read one order's jobs, totals, shipments, and tracking.                                          |
| `reorder`                 | Start a new quote from a past order at current prices.                                           |
| `search_docs`             | Search Fabworks guidelines, materials, services, FAQs, and policies.                             |
| `read_doc`                | Read a Fabworks docs page as markdown.                                                           |
| `get_agent_guidance`      | Read the Agent Guidance playbook as markdown.                                                    |

The server also provides the same guidance as the `resource://fabworks/agent-guide` resource and a `quote_step_files` prompt.

### Choose toolsets

Clients that can't turn individual tools on and off can pick toolsets in the server URL. The toolsets are `catalog`, `quotes`, `orders`, `docs`, and `account`. Add `read_only=true` to leave out every tool that changes data:

```text [Server URL]
https://api.fabworks.com/mcp?toolsets=quotes,docs&read_only=true
```

## Example requests

```text [Things to ask your agent]
Quote 25 of bracket.step in 0.125-inch 5052 aluminum.

Quote these square-tube STEP files in A513 steel and name the parts.

Open my latest quote and explain its price and DFM results.

Change every part in this quote to quantity 50 and show the new total.

Check order 26-12345 and summarize its production and shipping status.

How much are these parts at 1, 10, and 100, and when would they arrive in 93003?

Tap the four small holes in the bracket for 8-32 and show me the new price.

Weld the four corners of the enclosure and grind them flush.

Show me step 2 of the bend sequence for the channel.
```