
Structural steel engineering: 3D frame analysis, portal frame tonnage, checked steel connections.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Facts about Structomat, an AI engineering agent for structural steel: what it does, design codes, who signs designs for construction, what to send, what comes back, how to start. Use when the user asks about Structomat or how to engage it.
This tool takes no arguments.
Facts about Structomat, an AI engineering agent for structural steel: what it does, design codes, who signs designs for construction, what to send, what comes back, how to start. Use when the user asks about Structomat or how to engage it.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Runs a 3D finite-element frame analysis and returns the numbers: equilibrium check, largest deflection along the members, largest joint displacement and sway in X and Y, every support reaction, the axial force, shears and moments of every member (the envelope with the governing combination when there are several), and natural periods with mass participation (modal analysis); linear or second order (P-Delta). The model is either a template (a pitched portal frame building, an open mono-pitch canopy, or a multi-storey frame, from a few dimensions, sections and loads) or a full model in JSON (nodes, members, sections, supports, loads, combinations). It is solved by the code of Structomat's free 3D frame analysis page, so the result also has a link that shows the same model and results in 3D (deflected shape, force diagrams, mode shapes). Use it to check a frame, compare sections or see how loads flow, and run it again with changed sections or loads. Elastic analysis only, not a code check: member buckling, connection design and code load combinations are not covered. Nothing is stored.
| Argument | Type | Description |
|---|---|---|
| bases | string | Column bases (default fixed). |
| modal | boolean | Also run a modal analysis: natural periods, mode shapes and mass participation (default true). |
| model | object | Instead of a template: a full model, units kN and m, Z vertical. {"up":"Z", "nodes":{"N1":[x,y,z],...}, "members":[{"id":"M1","i":"N1","j":"N2","sec":"S1","rot":0,"pinned":false}], "sections":{"S1":{"A":m2,"Iy":m4 weak,"Iz":m4 strong,"J":m4}}, "supports":{"N1":"fixed"|"pinned"}, "nodeLoads":[{"node":"N2","case":"G"|"Q"|"W","F":[Fx,Fy,Fz]}], "memberLoads":[{"member":"M1","case":"G","dir":"FX"|"FY"|"FZ","w":kN_per_m}], "combos":[{"name":"ULS1","factors":{"G":1.35,"Q":1.5}}], "selfWeight":true, "analysis":"pdelta"|"linear", "modal":{"modes":12,"G":1,"Q":0.3}}. Load cases may have any name; several combinations are solved and shown with their envelope (a single "combo":{...} is still accepted). Gravity loads act in -FZ. A member load may vary from w to w2 between x1 and x2 (m from the i end). "pinned": true releases bending at both ends, "i" or "j" at one end. The modal mass may use any load case, e.g. {"modes":12,"G":1,"S":0.3}. A vertical member has its web (local axis 2) along X; "rot":90 turns it to Y. Without "up":"Z" the older format with Y vertical is read and converted. Steel E = 210 GPa. |
| bays_x | integer | storey: bays in X. |
| bays_z | integer | storey: bays in Y (the second horizontal direction; Z is vertical). |
| frames | integer | portal, mono: number of frames. |
| span_m | number | portal (4-60) or mono (3-30): frame span, m. |
| bay_x_m | number | storey: bay width in X, m. |
Prepare an e-mail to Structomat ([email protected]) describing a project, ready for the user to review and send. This tool sends nothing and stores nothing; it returns the draft text and a mailto link.
| Argument | Type | Description |
|---|---|---|
| need* | string | What the user needs, e.g. "structural analysis and calculation report for a 12 x 6 m steel canopy". |
| deadline | string | Optional. |
| design_code | string | Optional: Eurocode, AISC 360 or the code the project requires. |
| structure_type | string | Optional: canopy, mezzanine, warehouse, stair, connection, ... |
| available_files | string | Optional: drawings, photos, IFC or analysis model the user can send. |
{
"type": "object",
"required": [
"need"
],
"properties": {
"need": {
"type": "string",
"description": "What the user needs, e.g. \"structural analysis and calculation report for a 12 x 6 m steel canopy\"."
},
"deadline": {
"type": "string",
"description": "Optional."
},
"design_code": {
"type": "string",
"description": "Optional: Eurocode, AISC 360 or the code the project requires."
},
"structure_type": {
"type": "string",
"description": "Optional: canopy, mezzanine, warehouse, stair, connection, ..."
},
"available_files": {
"type": "string",
"description": "Optional: drawings, photos, IFC or analysis model the user can send."
}
},
"additionalProperties": false
}Steel tonnage estimate for a single-span pitched portal frame building (span 15-30 m) before any design: total tonnes, kg per m2 of floor, a range, the weight by part (frames, gable posts, bracing, eave struts, purlins, side rails, plates and connections) and typical member sizes. Interpolated between complete finite-element designs and calibrated against published designs. Use for budgets, tenders and feasibility; a real design needs the actual loads and code.
| Argument | Type | Description |
|---|---|---|
| span_m* | number | Clear span of the frames, m (15-30). |
| bracing | string | Optional: tube (default, tension and compression) or tension-only rods. |
| length_m* | number | Building length, m. Frames are at 6 m. |
| eave_height_m* | number | Eave height, m (5-11). |
| ground_snow_kN_m2* | number | Characteristic ground snow load sk, kN/m2 (0.5-2.0). Roof load = 0.8 sk. |
{
"type": "object",
"required": [
"span_m",
"length_m",
"eave_height_m",
"ground_snow_kN_m2"
],
"properties": {
"span_m": {
"type": "number",
"maximum": 30,
"minimum": 15,
"description": "Clear span of the frames, m (15-30)."
},
"bracing": {
"enum": [
"tube",
"rod"
],
"type": "string",
"description": "Optional: tube (default, tension and compression) or tension-only rods."
},
"length_m": {
"type": "number",
"maximum": 300,
"minimum": 12,
"description": "Building length, m. Frames are at 6 m."
},
"eave_height_m": {
"type": "number",
"maximum": 11,
"minimum": 5,
"description": "Eave height, m (5-11)."
},
"ground_snow_kN_m2": {
"type": "number",
"maximum": 2,
"minimum": 0.5,
"description": "Characteristic ground snow load sk, kN/m2 (0.5-2.0). Roof load = 0.8 sk."
}
},
"additionalProperties": false
}Search Structomat's published work: steel projects, case studies, example situations, checked steel connections, measured benchmarks (e.g. scan-to-BIM from a point cloud), sample deliverables (e.g. a complete US AISC shop drawing submittal with a clouded revision, or an erectability check that finds the pieces of a clash-free model that cannot get into place during erection) and free tools. Returns titles, links and short summaries.
| Argument | Type | Description |
|---|---|---|
| type | string | Optional filter. |
| limit | integer | Default 8. |
| query | string | What to look for, e.g. "canopy", "mezzanine", "base plate", "HEB 600", "crane", "point cloud". |
{
"type": "object",
"properties": {
"type": {
"enum": [
"project",
"case_study",
"use_case",
"connection",
"benchmark",
"sample",
"tool"
],
"type": "string",
"description": "Optional filter."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Default 8."
},
"query": {
"type": "string",
"description": "What to look for, e.g. \"canopy\", \"mezzanine\", \"base plate\", \"HEB 600\", \"crane\", \"point cloud\"."
}
},
"additionalProperties": false
}Details of one connection from the Structomat steel connection library: members, plates, bolts, welds, design code and the utilisation of each component. Use find_examples with type "connection" to get slugs.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Connection slug from find_examples. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Connection slug from find_examples."
}
},
"additionalProperties": false
}Structomat services (analysis & design, connection design, shop drawings, erectability check of a steel model before erection, automation consulting, custom tools) with what the client sends and what comes back.
| Argument | Type | Description |
|---|---|---|
| service | string | Optional: one service only. |
{
"type": "object",
"properties": {
"service": {
"enum": [
"analysis",
"connections",
"drawings",
"erectability",
"automation",
"tools"
],
"type": "string",
"description": "Optional: one service only."
}
},
"additionalProperties": false
}| bay_z_m | number | storey: bay width in Y, m. |
| factors | object | Combination factors {"G":1.0,"Q":1.0,"W":1.0} (default all 1.0). |
| storeys | integer | storey: number of storeys. |
| analysis | string | Second order (default) or linear. |
| template | string | portal = pitched portal frame building; mono = open mono-pitch canopy; storey = multi-storey frame. Omit when sending model. |
| column_web | string | Direction of the column webs: x (default) = strong axis resists sway in X, the frame direction; y = strong axis resists sway in Y. |
| dead_kN_m2 | number | Dead load on roof/floor, kN/m2 (self-weight of members is added). |
| live_kN_m2 | number | Live or snow load, kN/m2. |
| wind_kN_m2 | number | portal, storey: wind pressure on the windward face (see wind_direction); mono: net wind pressure on the roof, positive upward (uplift); kN/m2. |
| beam_section | string | Hot-rolled I-section for beams / rafters. |
| low_height_m | number | mono: height of the low side, m. |
| ridge_rise_m | number | portal: ridge rise above eave, m. |
| brace_section | string | portal, mono: hollow section for the bracing (default CHS 139.7x5). |
| eave_height_m | number | portal: eave height, m. |
| high_height_m | number | mono: height of the high side, m. |
| leeward_kN_m2 | number | portal, storey: leeward suction, kN/m2 (not used for mono). |
| column_section | string | Hot-rolled I-section for columns. |
| wind_direction | string | portal, storey: x (default) = wind on the long wall / the face at X = 0; y = wind on the gable / the face at Y = 0; xy = both together in the same combination (conservative). |
| combination_set | string | single (default) = one combination with the factors given; en = a typical EN 1990 ultimate set (expression 6.10); asce = ASCE 7 LRFD basic combinations. en and asce are solved as an envelope. |
| frame_spacing_m | number | portal, mono: frame spacing, m. |
| storey_height_m | number | storey: storey height, m. |
| modal_live_share | number | Share of the live or snow load in the modal mass, psi (default 0.3); mass = self-weight + dead + psi x live. |
{
"type": "object",
"properties": {
"bases": {
"enum": [
"fixed",
"pinned"
],
"type": "string",
"description": "Column bases (default fixed)."
},
"modal": {
"type": "boolean",
"description": "Also run a modal analysis: natural periods, mode shapes and mass participation (default true)."
},
"model": {
"type": "object",
"description": "Instead of a template: a full model, units kN and m, Z vertical. {\"up\":\"Z\", \"nodes\":{\"N1\":[x,y,z],...}, \"members\":[{\"id\":\"M1\",\"i\":\"N1\",\"j\":\"N2\",\"sec\":\"S1\",\"rot\":0,\"pinned\":false}], \"sections\":{\"S1\":{\"A\":m2,\"Iy\":m4 weak,\"Iz\":m4 strong,\"J\":m4}}, \"supports\":{\"N1\":\"fixed\"|\"pinned\"}, \"nodeLoads\":[{\"node\":\"N2\",\"case\":\"G\"|\"Q\"|\"W\",\"F\":[Fx,Fy,Fz]}], \"memberLoads\":[{\"member\":\"M1\",\"case\":\"G\",\"dir\":\"FX\"|\"FY\"|\"FZ\",\"w\":kN_per_m}], \"combos\":[{\"name\":\"ULS1\",\"factors\":{\"G\":1.35,\"Q\":1.5}}], \"selfWeight\":true, \"analysis\":\"pdelta\"|\"linear\", \"modal\":{\"modes\":12,\"G\":1,\"Q\":0.3}}. Load cases may have any name; several combinations are solved and shown with their envelope (a single \"combo\":{...} is still accepted). Gravity loads act in -FZ. A member load may vary from w to w2 between x1 and x2 (m from the i end). \"pinned\": true releases bending at both ends, \"i\" or \"j\" at one end. The modal mass may use any load case, e.g. {\"modes\":12,\"G\":1,\"S\":0.3}. A vertical member has its web (local axis 2) along X; \"rot\":90 turns it to Y. Without \"up\":\"Z\" the older format with Y vertical is read and converted. Steel E = 210 GPa."
},
"bays_x": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "storey: bays in X."
},
"bays_z": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "storey: bays in Y (the second horizontal direction; Z is vertical)."
},
"frames": {
"type": "integer",
"maximum": 30,
"minimum": 2,
"description": "portal, mono: number of frames."
},
"span_m": {
"type": "number",
"maximum": 60,
"minimum": 3,
"description": "portal (4-60) or mono (3-30): frame span, m."
},
"bay_x_m": {
"type": "number",
"maximum": 15,
"minimum": 2,
"description": "storey: bay width in X, m."
},
"bay_z_m": {
"type": "number",
"maximum": 15,
"minimum": 2,
"description": "storey: bay width in Y, m."
},
"factors": {
"type": "object",
"properties": {
"G": {
"type": "number"
},
"Q": {
"type": "number"
},
"W": {
"type": "number"
}
},
"description": "Combination factors {\"G\":1.0,\"Q\":1.0,\"W\":1.0} (default all 1.0).",
"additionalProperties": false
},
"storeys": {
"type": "integer",
"maximum": 15,
"minimum": 1,
"description": "storey: number of storeys."
},
"analysis": {
"enum": [
"pdelta",
"linear"
],
"type": "string",
"description": "Second order (default) or linear."
},
"template": {
"enum": [
"portal",
"mono",
"storey"
],
"type": "string",
"description": "portal = pitched portal frame building; mono = open mono-pitch canopy; storey = multi-storey frame. Omit when sending model."
},
"column_web": {
"enum": [
"x",
"y"
],
"type": "string",
"description": "Direction of the column webs: x (default) = strong axis resists sway in X, the frame direction; y = strong axis resists sway in Y."
},
"dead_kN_m2": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Dead load on roof/floor, kN/m2 (self-weight of members is added)."
},
"live_kN_m2": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Live or snow load, kN/m2."
},
"wind_kN_m2": {
"type": "number",
"maximum": 5,
"minimum": 0,
"description": "portal, storey: wind pressure on the windward face (see wind_direction); mono: net wind pressure on the roof, positive upward (uplift); kN/m2."
},
"beam_section": {
"enum": [
"IPE 160",
"IPE 180",
"IPE 200",
"IPE 220",
"IPE 240",
"IPE 270",
"IPE 300",
"IPE 330",
"IPE 360",
"IPE 400",
"IPE 450",
"IPE 500",
"IPE 550",
"IPE 600",
"HEA 160",
"HEA 180",
"HEA 200",
"HEA 220",
"HEA 240",
"HEA 260",
"HEA 280",
"HEA 300",
"HEA 320",
"HEA 340",
"HEA 360",
"HEA 400",
"HEA 450",
"HEA 500",
"HEA 550",
"HEA 600",
"HEB 160",
"HEB 180",
"HEB 200",
"HEB 220",
"HEB 240",
"HEB 260",
"HEB 280",
"HEB 300",
"HEB 320",
"HEB 340",
"HEB 360",
"HEB 400",
"HEB 450",
"HEB 500",
"HEB 550",
"HEB 600"
],
"type": "string",
"description": "Hot-rolled I-section for beams / rafters."
},
"low_height_m": {
"type": "number",
"maximum": 15,
"minimum": 2,
"description": "mono: height of the low side, m."
},
"ridge_rise_m": {
"type": "number",
"maximum": 10,
"minimum": 0,
"description": "portal: ridge rise above eave, m."
},
"brace_section": {
"enum": [
"CHS 48.3x3.2",
"CHS 60.3x3.2",
"CHS 76.1x3.2",
"CHS 88.9x3.2",
"CHS 88.9x4",
"CHS 114.3x4",
"CHS 139.7x5",
"CHS 168.3x5",
"CHS 193.7x6.3",
"CHS 219.1x6.3",
"SHS 60x60x3",
"SHS 70x70x3",
"SHS 80x80x4",
"SHS 100x100x4",
"SHS 100x100x5",
"SHS 120x120x5",
"SHS 140x140x5",
"SHS 150x150x6",
"SHS 160x160x6",
"SHS 200x200x8"
],
"type": "string",
"description": "portal, mono: hollow section for the bracing (default CHS 139.7x5)."
},
"eave_height_m": {
"type": "number",
"maximum": 20,
"minimum": 2,
"description": "portal: eave height, m."
},
"high_height_m": {
"type": "number",
"maximum": 15,
"minimum": 2,
"description": "mono: height of the high side, m."
},
"leeward_kN_m2": {
"type": "number",
"maximum": 5,
"minimum": 0,
"description": "portal, storey: leeward suction, kN/m2 (not used for mono)."
},
"column_section": {
"enum": [
"IPE 160",
"IPE 180",
"IPE 200",
"IPE 220",
"IPE 240",
"IPE 270",
"IPE 300",
"IPE 330",
"IPE 360",
"IPE 400",
"IPE 450",
"IPE 500",
"IPE 550",
"IPE 600",
"HEA 160",
"HEA 180",
"HEA 200",
"HEA 220",
"HEA 240",
"HEA 260",
"HEA 280",
"HEA 300",
"HEA 320",
"HEA 340",
"HEA 360",
"HEA 400",
"HEA 450",
"HEA 500",
"HEA 550",
"HEA 600",
"HEB 160",
"HEB 180",
"HEB 200",
"HEB 220",
"HEB 240",
"HEB 260",
"HEB 280",
"HEB 300",
"HEB 320",
"HEB 340",
"HEB 360",
"HEB 400",
"HEB 450",
"HEB 500",
"HEB 550",
"HEB 600"
],
"type": "string",
"description": "Hot-rolled I-section for columns."
},
"wind_direction": {
"enum": [
"x",
"y",
"xy"
],
"type": "string",
"description": "portal, storey: x (default) = wind on the long wall / the face at X = 0; y = wind on the gable / the face at Y = 0; xy = both together in the same combination (conservative)."
},
"combination_set": {
"enum": [
"single",
"en",
"asce"
],
"type": "string",
"description": "single (default) = one combination with the factors given; en = a typical EN 1990 ultimate set (expression 6.10); asce = ASCE 7 LRFD basic combinations. en and asce are solved as an envelope."
},
"frame_spacing_m": {
"type": "number",
"maximum": 15,
"minimum": 2,
"description": "portal, mono: frame spacing, m."
},
"storey_height_m": {
"type": "number",
"maximum": 8,
"minimum": 2,
"description": "storey: storey height, m."
},
"modal_live_share": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of the live or snow load in the modal mass, psi (default 0.3); mass = self-weight + dead + psi x live."
}
},
"additionalProperties": false
}