Steady Steel
Quotes laser-cut steel, stainless and aluminum plate and catalog products. Newmarket, Ontario.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"steady-steel": {
"url": "https://www.steadysteel.org/mcp"
}
}
}Remote endpoints
https://www.steadysteel.org/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟢list_materials
List the plate materials Steady Steel laser cuts, each with every thickness sold in it (thickness_in, inches), whether it is stocked, and a lead time in business days. Call it before quote_plate: a plate quote takes a material id and a thickness_in exactly as listed here. Empty while plate is not quoted online.
Input Schema
{
"type": "object",
"properties": {}
}🟢search_products(query)
Find the pre-designed steel products Steady Steel sells on steadysteel.org/products, by words in their name or description; send no query to list them all. Each lists its tiers: kit (the steel cut to our drawings) and welded (built in our shop), with a firm unit price in CAD cents before HST. Only a tier marked orderable can be quoted. Freight on a kit or a welded unit is quoted by Steady Steel after the order.
Input Schema
{
"type": "object",
"properties": {
"query": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
}
}🟡quote_plate(bends, holes, label, material, outline, ...)
Price one flat plate of steel, stainless or aluminum, laser cut to an outline with holes, slots and bends, at a firm price from the engine behind the plate quoter on steadysteel.org. Every length is inches, +x right and +y up. material and thickness_in must be exactly as list_materials gives them. The outline is a rectangle, circle, ring (a washer) or polygon; holes and bends use its frame, and for a rectangle, circle or ring the origin is the lower-left corner of the box around it. quantity is how many (1 to 999), and quantity_options prices up to five other quantities. A part that cannot be made as asked comes back blocked, with an issue saying why: change it and quote again. Amounts are CAD cents with HST as its own figure, firm until expires_at. Show the person the drawing at preview_url. Nothing is bought here: to order, make a link with create_handoff_link and give it to the person, who checks the part and pays on steadysteel.org.
Input Schema
{
"type": "object",
"properties": {
"bends": {
"items": {
"additionalProperties": false,
"description": "A straight fold across the whole part, on the line through start_in\nand end_in ([x, y] in the item's frame; any two points on the line).\nangle_deg is how far it folds: 90 is a square bend. direction is up (a\nmountain fold seen from above) or down (a valley fold); it does not\nchange the price.",
"properties": {
"angle_deg": {
"default": 90,
"exclusiveMinimum": 0,
"maximum": 180,
"type": "number"
},
"direction": {
"default": "up",
"enum": [
"up",
"down"
],
"type": "string"
},
"end_in": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"maximum": 120,
"minimum": 0,
"type": "number"
},
{
"maximum": 120,
"minimum": 0,
"type": "number"
}
],
"type": "array"
},
"start_in": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"maximum": 120,
"minimum": 0,
"type": "number"
},
{
"maximum": 120,
"minimum": 0,
"type": "number"
}
],
"type": "array"
}
},
"required": [
"start_in",
"end_in"
],
"type": "object"
},
"maxItems": 10,
"type": "array"
},
"holes": {
"items": {
"oneOf": [
{
"additionalProperties": false,
"description": "One round hole diameter_in across, centred at (x_in, y_in).",
"properties": {
"diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "single",
"type": "string"
},
"x_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"y_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
}
},
"required": [
"kind",
"x_in",
"y_in",
"diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "count round holes in a row. The first is centred at\n(start_x_in, start_y_in) and each one after it is spacing_in further\nalong angle_deg: 0 runs right, 90 runs up.",
"properties": {
"angle_deg": {
"default": 0,
"maximum": 360,
"minimum": -360,
"type": "number"
},
"count": {
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "linear",
"type": "string"
},
"spacing_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"start_x_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"start_y_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
}
},
"required": [
"kind",
"start_x_in",
"start_y_in",
"count",
"spacing_in",
"diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A grid of round holes, columns across and rows up, centred on\n(center_x_in, center_y_in). The spacings are centre to centre, and\nrotation_deg turns the whole grid about its centre, counter-clockwise.",
"properties": {
"center_x_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"center_y_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"columns": {
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "grid",
"type": "string"
},
"rotation_deg": {
"default": 0,
"maximum": 360,
"minimum": -360,
"type": "number"
},
"rows": {
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"x_spacing_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"y_spacing_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
}
},
"required": [
"kind",
"center_x_in",
"center_y_in",
"columns",
"rows",
"x_spacing_in",
"y_spacing_in",
"diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "count round holes spaced evenly on a circle bolt_circle_diameter_in\nacross, centred on (center_x_in, center_y_in). The first hole sits at\nstart_angle_deg, counter-clockwise from +x.",
"properties": {
"bolt_circle_diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"center_x_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"center_y_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"count": {
"maximum": 100,
"minimum": 2,
"type": "integer"
},
"diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "bolt_circle",
"type": "string"
},
"start_angle_deg": {
"default": 0,
"maximum": 360,
"minimum": -360,
"type": "number"
}
},
"required": [
"kind",
"center_x_in",
"center_y_in",
"count",
"bolt_circle_diameter_in",
"diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A slot with round ends, width_in across and length_in from tip to\ntip, centred on (center_x_in, center_y_in). angle_deg turns its long\naxis counter-clockwise from +x.",
"properties": {
"angle_deg": {
"default": 0,
"maximum": 360,
"minimum": -360,
"type": "number"
},
"center_x_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"center_y_in": {
"maximum": 120,
"minimum": 0,
"type": "number"
},
"kind": {
"const": "slot",
"type": "string"
},
"length_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"width_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
}
},
"required": [
"kind",
"center_x_in",
"center_y_in",
"width_in",
"length_in"
],
"type": "object"
}
]
},
"maxItems": 200,
"type": "array"
},
"label": {
"anyOf": [
{
"maxLength": 60,
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"material": {
"enum": [
"mild_steel",
"stainless_304",
"stainless_316",
"aluminum_6061"
],
"type": "string"
},
"outline": {
"oneOf": [
{
"additionalProperties": false,
"description": "A rectangle width_in across and height_in up, its lower-left corner\non the origin.",
"properties": {
"height_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "rectangle",
"type": "string"
},
"width_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
}
},
"required": [
"kind",
"width_in",
"height_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A round plate diameter_in across. The origin is the lower-left\ncorner of the square around it, so the centre is at\n(diameter_in / 2, diameter_in / 2).",
"properties": {
"diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "circle",
"type": "string"
}
},
"required": [
"kind",
"diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A washer: a round plate with a round bore on the same centre. The\norigin is the lower-left corner of the square around it. The wall,\nhalf the difference of the two diameters, must be at least 1/8 in.",
"properties": {
"inner_diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
},
"kind": {
"const": "ring",
"type": "string"
},
"outer_diameter_in": {
"exclusiveMinimum": 0,
"maximum": 120,
"type": "number"
}
},
"required": [
"kind",
"outer_diameter_in",
"inner_diameter_in"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A straight-sided outline: its corners in order around the part,\neither way round, each [x, y] in inches, 3 to 200 of them. The outline\ncloses itself; a last corner that repeats the first is dropped. The\ncorners set the frame, and the item's holes and bends use it too.",
"properties": {
"kind": {
"const": "polygon",
"type": "string"
},
"points_in": {
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"maximum": 120,
"minimum": 0,
"type": "number"
},
{
"maximum": 120,
"minimum": 0,
"type": "number"
}
],
"type": "array"
},
"maxItems": 200,
"minItems": 3,
"type": "array"
}
},
"required": [
"kind",
"points_in"
],
"type": "object"
}
]
},
"quantity": {
"default": 1,
"maximum": 999,
"minimum": 1,
"type": "integer"
},
"quantity_options": {
"items": {
"maximum": 999,
"minimum": 1,
"type": "integer"
},
"maxItems": 5,
"type": "array"
},
"thickness_in": {
"exclusiveMinimum": 0,
"maximum": 4,
"type": "number"
}
},
"required": [
"material",
"thickness_in",
"outline"
]
}🟡quote_product(label, quantity, quantity_options, slug, tier)
Price a catalog product at its firm unit price: the slug and a tier from search_products (kit or welded), only a tier marked orderable. quantity is 1 to 50. Amounts are CAD cents before HST, with HST as its own figure. Freight is quoted by Steady Steel after the order and is not in the quote. Nothing is bought here: to order, make a link with create_handoff_link and give it to the person, who orders and pays on steadysteel.org.
Input Schema
{
"type": "object",
"properties": {
"label": {
"anyOf": [
{
"maxLength": 60,
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"quantity": {
"default": 1,
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"quantity_options": {
"items": {
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"maxItems": 5,
"type": "array"
},
"slug": {
"maxLength": 80,
"pattern": "^[A-Za-z0-9_-]{1,80}$",
"type": "string"
},
"tier": {
"enum": [
"kit",
"welded"
],
"type": "string"
}
},
"required": [
"slug",
"tier"
]
}🟢get_quote(quote_id)
Get a quote quote_plate or quote_product made, by its id, exactly as it was priced. Its status reads expired once it is past expires_at: ask for a new quote then. A quote is kept 30 days past its expiry.
Input Schema
{
"type": "object",
"properties": {
"quote_id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"quote_id"
]
}🟡create_handoff_link(quote_ids)
Make the link the person orders from: one page on steadysteel.org showing what was quoted, with a button for each item that opens the page selling it (a plate in the plate quoter, a product on its order page), where they check it and pay. Takes one to ten quote ids, each ready and unexpired, with ten items at most across them. Give the person the url. Anyone holding it can open the page, so give it only to them. Nothing is paid through this server.
Input Schema
{
"type": "object",
"properties": {
"quote_ids": {
"items": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"required": [
"quote_ids"
]
}🟡create_rfq_link(description, material, quantity, thickness_in)
For work quote_plate and quote_product cannot price (a part from a drawing, a weldment, a repair, plate past the laser): describe the job in words, sizes in inches, and get a link to Steady Steel's quote request form with it filled in. The person adds their own name and contact details there and sends it; Steady Steel replies with a price. Send nothing about the person: a name, email or phone field, or a description carrying a link, a web or email address or a phone number, is refused. The link works for 30 days.
Input Schema
{
"type": "object",
"properties": {
"description": {
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"material": {
"anyOf": [
{
"maxLength": 60,
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"quantity": {
"anyOf": [
{
"maximum": 100000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"thickness_in": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 12,
"type": "number"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"description"
]
}Community
Evidence