steel-tools
Steel takeoff, weight and gauge calculators plus RFQ, RFI, NCR and Bluebeam markup generators.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"steel-tools": {
"url": "https://www.structupath.ai/api/mcp"
}
}
}リモートエンドポイント
https://www.structupath.ai/api/mcpstreamable-httpできること
ツール一覧
ツール(14)
⚪steel_gauge_thickness(gauge, material)
Look up sheet steel gauge thickness (gauges 3-28) in inches and mm with lb/ft², for plain, galvanized or stainless series. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"gauge": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Sheet steel gauge number, 3 through 28"
},
"material": {
"default": "steel",
"description": "Gauge series — the same number is a different thickness each",
"type": "string",
"enum": [
"steel",
"galvanized",
"stainless"
]
}
},
"required": [
"gauge"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢steel_plate_weight(thickness_in, width_in, length_in, price_per_lb)
Compute carbon steel plate weight from thickness (decimal or fraction) and width/length in inches, with optional material cost via price_per_lb. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"thickness_in": {
"anyOf": [
{
"type": "string",
"maxLength": 16
},
{
"type": "number"
}
],
"description": "Plate thickness in inches — decimal or fraction (\"3/4\", \"1-1/8\")"
},
"width_in": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 2000,
"description": "Plate width in INCHES (a 4x8 ft plate is 48 x 96 in)"
},
"length_in": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 2000,
"description": "Plate length in INCHES"
},
"price_per_lb": {
"description": "Optional material price in $/lb, to include a cost estimate",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"required": [
"thickness_in",
"width_in",
"length_in"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪steel_shape_weight(designation, length_ft, qty)
Look up an AISC shape designation (W, C, MC, L, HSS, PIPE) for lb/ft, depth and area, with optional piece weight. 14th-Edition-era data. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"designation": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "AISC designation, e.g. \"W21X50\", \"HSS6X6X3/8\", \"L4X4X3/8\""
},
"length_ft": {
"description": "Optional piece length in feet, for a piece weight",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500
},
"qty": {
"description": "Optional piece count",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
}
},
"required": [
"designation"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢steel_connection_reference(name_or_slug)
Describe a structural steel connection type (behaviour, use, what goes wrong) by name, alias or slug — or look up a structural bolt grade (A325, A490, A307). Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"name_or_slug": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Connection name, alias or slug (e.g. \"clip angle\", \"base-plate\") or a bolt grade (e.g. \"A490\")"
}
},
"required": [
"name_or_slug"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪steel_bolt_pretension(dia, length_in)
RCSC minimum pretension for A325/A490 structural bolts by diameter, with the turn-of-the-nut rotation when a bolt length is given. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"dia": {
"type": "string",
"minLength": 1,
"maxLength": 8,
"description": "Bolt diameter in inches — fraction (\"3/4\") or decimal (0.75)"
},
"length_in": {
"description": "Optional bolt length in inches, for the turn-of-the-nut rotation",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 60
}
},
"required": [
"dia"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢steel_pipe_schedule(nps, schedule)
Steel pipe dimensions by NPS and schedule: OD, wall, inside diameter and lb/ft for schedules 5, 10, 40/STD, 80/XS, 160 and XXS. Omit the schedule to list them all. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"nps": {
"type": "string",
"minLength": 1,
"maxLength": 8,
"description": "Nominal pipe size, e.g. \"2\", \"1/2\", \"1-1/4\""
},
"schedule": {
"description": "Optional schedule: \"40\", \"80\", \"160\", \"STD\", \"XS\", \"XXS\", \"5\", \"10\"",
"type": "string",
"minLength": 1,
"maxLength": 8
}
},
"required": [
"nps"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪steel_section_weight(section, dim1_in, dim2_in, length_ft, material)
Weight of round bar, square bar, flat bar or round tube from dimensions in inches — lb/ft and optional piece weight, in carbon, stainless or aluminum. For AISC designations use steel_shape_weight; for plate use steel_plate_weight. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"round-bar",
"square-bar",
"flat-bar",
"round-tube"
],
"description": "Cross-section type"
},
"dim1_in": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 120,
"description": "First dimension in inches: diameter (round bar), side (square bar), width (flat bar) or OD (round tube)"
},
"dim2_in": {
"description": "Second dimension in inches: thickness (flat bar) or wall (round tube); unused for round and square bar",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 60
},
"length_ft": {
"description": "Optional length in feet for a piece weight",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10000
},
"material": {
"description": "Default carbon steel; stainless is +2%, aluminum ×0.35",
"type": "string",
"enum": [
"carbon",
"stainless",
"aluminum"
]
}
},
"required": [
"section",
"dim1_in"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢steel_mtr_check(grade, yield_ksi, tensile_ksi)
Screen a mill cert's yield and tensile against the specified limits for A992, A572 Gr. 50 or A36 — a screening aid, not acceptance. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"grade": {
"type": "string",
"minLength": 2,
"maxLength": 24,
"description": "Steel grade: \"A992\", \"A572 Gr. 50\" or \"A36\""
},
"yield_ksi": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200,
"description": "Reported yield, ksi"
},
"tensile_ksi": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200,
"description": "Reported tensile, ksi"
}
},
"required": [
"grade",
"yield_ksi",
"tensile_ksi"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢steel_takeoff_weight(members)
Roll a member list (AISC designation, length in feet, piece count — up to 500 lines) into a bill-of-steel ledger: weight per line, total pounds and tons, piece and lineal-foot counts. Net weight only; unmatched designations are listed, not guessed. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"members": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"designation": {
"type": "string",
"maxLength": 32,
"description": "AISC designation, e.g. W21X50, L4X4X1/2, HSS6X6X3/8"
},
"length_ft": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10000,
"description": "Piece length, feet"
},
"qty": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000,
"description": "Piece count"
}
},
"required": [
"designation",
"length_ft",
"qty"
]
},
"description": "The member list to roll up, one line per mark/size"
}
},
"required": [
"members"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪steel_coating_area(designation, length_ft, qty, include_inside_faces, coverage_sqft_per_gal)
Surface area to coat for an AISC shape: ft² per foot from the cross-section perimeter, piece/lot area with length and qty, optional interior faces for galvanized tubes and gallons at a supplied coverage rate. Published nominal values for estimating and orientation, not design guidance.
入力スキーマ
{
"type": "object",
"properties": {
"designation": {
"type": "string",
"maxLength": 32,
"description": "AISC designation, e.g. W21X50, HSS6X6X3/8, Pipe4STD"
},
"length_ft": {
"description": "Optional length in feet for a piece/lot area",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10000
},
"qty": {
"description": "Optional piece count (default 1) when a length is given",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"include_inside_faces": {
"description": "Tubes only: add interior surface, as hot-dip galvanizing coats vented HSS/pipe interiors. Default false (outside only).",
"type": "boolean"
},
"coverage_sqft_per_gal": {
"description": "Optional practical coverage rate from the coating datasheet, to estimate gallons",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 2000
}
},
"required": [
"designation"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡steel_rfq_generate(company_name, company_location, project_name, project_location, date_issued, ...)
Generate a vendor-ready Request for Quotation (.xlsx) from structured takeoff line items — grouped by material, with vendor pricing columns, totals and standard terms. You pass parsed line items and a company name; returns a download link that expires within ~48 hours. Nothing you submit is stored.
入力スキーマ
{
"type": "object",
"properties": {
"company_name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Buyer company on the RFQ header and terms — required"
},
"company_location": {
"description": "City, state under the company name, e.g. \"Denver, CO\"",
"type": "string",
"maxLength": 120
},
"project_name": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Project name for the header and filename"
},
"project_location": {
"type": "string",
"maxLength": 160
},
"date_issued": {
"description": "Free-form issue date; a blank line is used if omitted",
"type": "string",
"maxLength": 60
},
"line_items": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string",
"maxLength": 40,
"description": "Estimate item number, e.g. \"A-01\""
},
"category": {
"type": "string",
"maxLength": 60,
"description": "Shop category, e.g. \"Columns\", \"Plate\", \"Flat Bar\""
},
"description": {
"type": "string",
"maxLength": 300,
"description": "Full description; a row containing \"BY OTHERS\" is excluded"
},
"size": {
"type": "string",
"maxLength": 80,
"description": "AISC designation or plate/bar dimensions"
},
"grade": {
"type": "string",
"maxLength": 40,
"description": "Material grade, e.g. \"A992 Gr.50\", \"A36\""
},
"qty": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"description": "Piece or stick count; a zero-qty row is excluded"
},
"stock_length": {
"type": "string",
"maxLength": 80,
"description": "How it is purchased, e.g. \"3 sticks × 30′\""
},
"purchase_wt_lbs": {
"type": "number",
"minimum": 0,
"maximum": 10000000,
"description": "Estimated purchase weight in pounds"
},
"notes": {
"type": "string",
"maxLength": 300
},
"material_type": {
"type": "string",
"enum": [
"w-shape",
"plate",
"flat-bar"
],
"description": "Grouping key: w-shape, plate, or flat-bar"
},
"is_stock_purchase": {
"description": "True for consolidated stock items that supersede piece-level plate/flat-bar rows",
"type": "boolean"
}
},
"required": [
"item",
"category",
"description",
"size",
"grade",
"qty",
"stock_length",
"purchase_wt_lbs",
"material_type"
]
},
"description": "Parsed takeoff line items — the calling agent reads the estimate"
},
"nesting_rows": {
"description": "Optional fabricator-facing nesting/drop reference rows",
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"material": {
"type": "string",
"maxLength": 120
},
"nesting_plan": {
"type": "string",
"maxLength": 200
},
"drop_notes": {
"type": "string",
"maxLength": 300
}
},
"required": [
"material",
"nesting_plan",
"drop_notes"
]
}
},
"terms": {
"description": "Override the eight default terms; omit for the standard set",
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
}
},
"required": [
"company_name",
"project_name",
"line_items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡steel_pdf_markup(pdf_url, pdf_base64, markups, scale, page_scales, ...)
Add real Bluebeam-compatible annotation objects to a drawing PDF — counts, length/area measurements with live scales, RFI clouds, callouts — from a markups JSON you supply plus placement coordinates. Pass the PDF as an https URL or small base64; returns a marked PDF download link that expires within ~48 hours. Markups appear in Bluebeam Revu's Markups List. You decide placement; the tool guarantees the format. Nothing you submit is stored.
入力スキーマ
{
"type": "object",
"properties": {
"pdf_url": {
"description": "HTTPS URL of the source drawing PDF (fetched server-side, SSRF-guarded)",
"type": "string",
"maxLength": 2000,
"format": "uri"
},
"pdf_base64": {
"description": "Base64 PDF for small files (~3 MB max decoded); prefer pdf_url for drawing sets",
"type": "string",
"maxLength": 4800000
},
"markups": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 5000,
"description": "1-based page number"
},
"tool": {
"description": "A steel takeoff preset key, e.g. hss-ea, w-beam-lf, rfi-cloud",
"type": "string",
"maxLength": 60
},
"type": {
"description": "Annotation type when not using a preset tool",
"type": "string",
"maxLength": 40
},
"at": {
"anyOf": [
{
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
},
{
"maxItems": 2000,
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
}
}
]
},
"points": {
"maxItems": 2000,
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
}
},
"rect": {
"description": "[x, y, w, h] in the markup's coordinate space",
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
]
},
"arrow": {
"type": "boolean"
},
"arrow_at": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
},
"size": {
"type": "number",
"maximum": 1000
},
"bump": {
"type": "number",
"maximum": 200
},
"box_w": {
"type": "number",
"maximum": 10000
},
"box_h": {
"type": "number",
"maximum": 10000
},
"subject": {
"type": "string",
"maxLength": 120
},
"label": {
"type": "string",
"maxLength": 200
},
"contents": {
"type": "string",
"maxLength": 2000
},
"author": {
"type": "string",
"maxLength": 120
},
"color": {
"description": "Hex color, e.g. #FF0000",
"type": "string",
"maxLength": 9
},
"fill": {
"type": "string",
"maxLength": 9
},
"fill_opacity": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"opacity": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"width": {
"type": "number",
"maximum": 100
},
"font_size": {
"type": "number",
"maximum": 200
},
"scale": {
"description": "Per-markup scale, e.g. \"1/4 in = 1 ft\"",
"type": "string",
"maxLength": 40
},
"coordinate_space": {
"type": "string",
"enum": [
"ratio",
"pdf"
]
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"column_data": {
"maxItems": 50,
"type": "array",
"items": {}
}
},
"required": [
"page"
]
},
"description": "Markups to place — geometry in ratio (0–1 from top-left) or pdf coordinates"
},
"scale": {
"description": "Document scale for measurements, e.g. \"1/4 in = 1 ft\" or \"1:100\"",
"type": "string",
"maxLength": 40
},
"page_scales": {
"description": "Per-page scale overrides, keyed by page number string",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"coordinate_space": {
"type": "string",
"enum": [
"ratio",
"pdf"
]
},
"author": {
"description": "Markups List author column",
"type": "string",
"maxLength": 120
}
},
"required": [
"markups"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡steel_rfi_generate(company_name, company_location, rfi_number, date, project_name, ...)
Generate a formal Request for Information PDF from structured fields — header, meta grid, subject, description, proposed solution, attachments, and a blank response block for the design team. You do the judgement (one issue per RFI, exact drawing references, a proposed path forward); the tool guarantees the format. Returns a download link that expires within ~48 hours. Nothing you submit is stored.
入力スキーマ
{
"type": "object",
"properties": {
"company_name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Contractor issuing the RFI — appears in the header"
},
"company_location": {
"type": "string",
"maxLength": 120
},
"rfi_number": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "RFI number from the project register, e.g. \"RFI-017\""
},
"date": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "Submission date"
},
"project_name": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"project_number": {
"type": "string",
"maxLength": 60
},
"submitted_to": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "The party who must respond — engineer, architect, GC"
},
"submitted_by": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Name — company"
},
"reason": {
"description": "Category: Design Omission, Design Error, Constructability Issue, Scope Clarification, Site Condition, Missing Information, Coordination Conflict — or free text",
"type": "string",
"maxLength": 60
},
"drawing_refs": {
"description": "Exact drawing numbers with revisions",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
}
},
"spec_refs": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
}
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "One-line subject — one issue per RFI"
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 4000,
"description": "The issue: specific references, what is missing or conflicting, why it matters. Newlines respected."
},
"proposed_solution": {
"description": "Suggested path forward, framed as a proposal",
"type": "string",
"maxLength": 2000
},
"response_needed_by": {
"type": "string",
"maxLength": 60
},
"attachments": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 160
}
}
},
"required": [
"company_name",
"rfi_number",
"date",
"project_name",
"submitted_to",
"submitted_by",
"subject",
"description"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡steel_ncr_generate(company_name, company_location, ncr_number, date, project_name, ...)
Generate a formal Nonconformance Report PDF: identification, description, the violated requirement, containment, root cause (prose or 5-Whys chain), disposition (accept-as-is/repair/rework/reject) with actions, and blank quality-review and sign-off blocks. Flags accept-as-is dispositions whose corrective action describes physical work. The disposition decision belongs to the responsible quality authority. Returns a download link that expires within ~48 hours. Nothing you submit is stored.
入力スキーマ
{
"type": "object",
"properties": {
"company_name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Contractor raising the NCR — appears in the header"
},
"company_location": {
"type": "string",
"maxLength": 120
},
"ncr_number": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "NCR number from the project register, e.g. \"NCR-008\""
},
"date": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "Date raised"
},
"project_name": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"project_number": {
"type": "string",
"maxLength": 60
},
"raised_by": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Name — role"
},
"trade_or_supplier": {
"type": "string",
"maxLength": 160
},
"location": {
"description": "Area, level, grid, or piece mark",
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 4000,
"description": "What was found, measured against what was required"
},
"requirement_violated": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "The cited requirement — spec section, drawing/detail, or code clause. An NCR without a cited requirement is dispute fuel."
},
"containment": {
"description": "What was done on the spot — quarantine, stop work, tag",
"type": "string",
"maxLength": 1000
},
"root_cause": {
"type": "string",
"maxLength": 2000
},
"root_cause_whys": {
"description": "5-Whys chain, first why to root; overrides root_cause",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"maxLength": 300
}
},
"resolution": {
"type": "string",
"enum": [
"accept-as-is",
"repair",
"rework",
"reject"
],
"description": "Disposition: accept-as-is (no physical work), repair, rework, or reject"
},
"resolution_justification": {
"description": "Required in practice for accept-as-is — the concession basis",
"type": "string",
"maxLength": 1000
},
"corrective_action": {
"description": "Bringing this instance into compliance",
"type": "string",
"maxLength": 2000
},
"preventive_action": {
"description": "Stopping recurrence — procedure, inspection, supplier",
"type": "string",
"maxLength": 2000
}
},
"required": [
"company_name",
"ncr_number",
"date",
"project_name",
"raised_by",
"description",
"requirement_violated",
"resolution"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}コミュニティ
エビデンス