Koskamo

StructuPath MCP

An official MCP server by StructuPath providing stateless tools for structural steel estimation and documentation. It includes calculators for steel weight, gauge, and thickness, as well as generators for RFQs, RFIs, NCRs, and Bluebeam-compatible PDF markups, designed for steel fabricators and contractors.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

StructuPath MCP logo, by StructuPathVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by StructuPath
MCP endpoint (Streamable HTTP)
https://www.structupath.ai/api/mcp
Vendor documentation

What its tools do

14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

14 of 14 have a description · 0 of 14 declare behavior hints · 10 of 14 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to structupath.ai ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Calculate steel beam, plate, and tube weights
  • Generate RFQ workbooks from takeoff items
  • Create Bluebeam-compatible marked-up drawing PDFs
  • Screen mill test reports against AISC specs

Source and maintenance

Vendor evidenceRegistry 1.7.0

Protocol and capabilities

Server
structupath-steel 1.7.0
MCP protocol negotiated in check
2025-11-25
Tools
14 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

14 advertised

steel_gauge_thickness — Steel Gauge Thickness
Advertised by the server during the last successful anonymous check.

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.

steel_gauge_thickness input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "gauge"
  ],
  "properties": {
    "gauge": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Sheet steel gauge number, 3 through 28"
    },
    "material": {
      "enum": [
        "steel",
        "galvanized",
        "stainless"
      ],
      "type": "string",
      "default": "steel",
      "description": "Gauge series — the same number is a different thickness each"
    }
  }
}
steel_plate_weight — Steel Plate Weight
Advertised by the server during the last successful anonymous check.

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.

steel_plate_weight input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "thickness_in",
    "width_in",
    "length_in"
  ],
  "properties": {
    "width_in": {
      "type": "number",
      "maximum": 2000,
      "description": "Plate width in INCHES (a 4x8 ft plate is 48 x 96 in)",
      "exclusiveMinimum": 0
    },
    "length_in": {
      "type": "number",
      "maximum": 2000,
      "description": "Plate length in INCHES",
      "exclusiveMinimum": 0
    },
    "price_per_lb": {
      "type": "number",
      "maximum": 1000,
      "description": "Optional material price in $/lb, to include a cost estimate",
      "exclusiveMinimum": 0
    },
    "thickness_in": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 16
        },
        {
          "type": "number"
        }
      ],
      "description": "Plate thickness in inches — decimal or fraction (\"3/4\", \"1-1/8\")"
    }
  }
}
steel_shape_weight — Structural Shape Weight
Advertised by the server during the last successful anonymous check.

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.

steel_shape_weight input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "designation"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "maximum": 10000,
      "description": "Optional piece count",
      "exclusiveMinimum": 0
    },
    "length_ft": {
      "type": "number",
      "maximum": 500,
      "description": "Optional piece length in feet, for a piece weight",
      "exclusiveMinimum": 0
    },
    "designation": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "description": "AISC designation, e.g. \"W21X50\", \"HSS6X6X3/8\", \"L4X4X3/8\""
    }
  }
}
steel_connection_reference — Steel Connection Reference
Advertised by the server during the last successful anonymous check.

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.

steel_connection_reference input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "name_or_slug"
  ],
  "properties": {
    "name_or_slug": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "Connection name, alias or slug (e.g. \"clip angle\", \"base-plate\") or a bolt grade (e.g. \"A490\")"
    }
  }
}
steel_bolt_pretension — Bolt Pretension & Turn-of-the-Nut
Advertised by the server during the last successful anonymous check.

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.

steel_bolt_pretension input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "dia"
  ],
  "properties": {
    "dia": {
      "type": "string",
      "maxLength": 8,
      "minLength": 1,
      "description": "Bolt diameter in inches — fraction (\"3/4\") or decimal (0.75)"
    },
    "length_in": {
      "type": "number",
      "maximum": 60,
      "description": "Optional bolt length in inches, for the turn-of-the-nut rotation",
      "exclusiveMinimum": 0
    }
  }
}
steel_pipe_schedule — Pipe Schedule Lookup
Advertised by the server during the last successful anonymous check.

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.

steel_pipe_schedule input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "nps"
  ],
  "properties": {
    "nps": {
      "type": "string",
      "maxLength": 8,
      "minLength": 1,
      "description": "Nominal pipe size, e.g. \"2\", \"1/2\", \"1-1/4\""
    },
    "schedule": {
      "type": "string",
      "maxLength": 8,
      "minLength": 1,
      "description": "Optional schedule: \"40\", \"80\", \"160\", \"STD\", \"XS\", \"XXS\", \"5\", \"10\""
    }
  }
}
steel_section_weight — Bar & Tube Section Weight
Advertised by the server during the last successful anonymous check.

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.

steel_section_weight input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "section",
    "dim1_in"
  ],
  "properties": {
    "dim1_in": {
      "type": "number",
      "maximum": 120,
      "description": "First dimension in inches: diameter (round bar), side (square bar), width (flat bar) or OD (round tube)",
      "exclusiveMinimum": 0
    },
    "dim2_in": {
      "type": "number",
      "maximum": 60,
      "description": "Second dimension in inches: thickness (flat bar) or wall (round tube); unused for round and square bar",
      "exclusiveMinimum": 0
    },
    "section": {
      "enum": [
        "round-bar",
        "square-bar",
        "flat-bar",
        "round-tube"
      ],
      "type": "string",
      "description": "Cross-section type"
    },
    "material": {
      "enum": [
        "carbon",
        "stainless",
        "aluminum"
      ],
      "type": "string",
      "description": "Default carbon steel; stainless is +2%, aluminum ×0.35"
    },
    "length_ft": {
      "type": "number",
      "maximum": 10000,
      "description": "Optional length in feet for a piece weight",
      "exclusiveMinimum": 0
    }
  }
}
steel_mtr_check — Mill Test Report Mechanicals Screen
Advertised by the server during the last successful anonymous check.

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.

steel_mtr_check input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "grade",
    "yield_ksi",
    "tensile_ksi"
  ],
  "properties": {
    "grade": {
      "type": "string",
      "maxLength": 24,
      "minLength": 2,
      "description": "Steel grade: \"A992\", \"A572 Gr. 50\" or \"A36\""
    },
    "yield_ksi": {
      "type": "number",
      "maximum": 200,
      "description": "Reported yield, ksi",
      "exclusiveMinimum": 0
    },
    "tensile_ksi": {
      "type": "number",
      "maximum": 200,
      "description": "Reported tensile, ksi",
      "exclusiveMinimum": 0
    }
  }
}
steel_takeoff_weight — Takeoff Weight Roll-Up
Advertised by the server during the last successful anonymous check.

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.

steel_takeoff_weight input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "members"
  ],
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "designation",
          "length_ft",
          "qty"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "maximum": 100000,
            "description": "Piece count",
            "exclusiveMinimum": 0
          },
          "length_ft": {
            "type": "number",
            "maximum": 10000,
            "description": "Piece length, feet",
            "exclusiveMinimum": 0
          },
          "designation": {
            "type": "string",
            "maxLength": 32,
            "description": "AISC designation, e.g. W21X50, L4X4X1/2, HSS6X6X3/8"
          }
        }
      },
      "maxItems": 500,
      "minItems": 1,
      "description": "The member list to roll up, one line per mark/size"
    }
  }
}
steel_coating_area — Coating / Surface Area
Advertised by the server during the last successful anonymous check.

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.

steel_coating_area input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "designation"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "maximum": 100000,
      "description": "Optional piece count (default 1) when a length is given",
      "exclusiveMinimum": 0
    },
    "length_ft": {
      "type": "number",
      "maximum": 10000,
      "description": "Optional length in feet for a piece/lot area",
      "exclusiveMinimum": 0
    },
    "designation": {
      "type": "string",
      "maxLength": 32,
      "description": "AISC designation, e.g. W21X50, HSS6X6X3/8, Pipe4STD"
    },
    "include_inside_faces": {
      "type": "boolean",
      "description": "Tubes only: add interior surface, as hot-dip galvanizing coats vented HSS/pipe interiors. Default false (outside only)."
    },
    "coverage_sqft_per_gal": {
      "type": "number",
      "maximum": 2000,
      "description": "Optional practical coverage rate from the coating datasheet, to estimate gallons",
      "exclusiveMinimum": 0
    }
  }
}
steel_rfq_generate — RFQ Workbook Generator
Advertised by the server during the last successful anonymous check.

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.

steel_rfq_generate input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_name",
    "project_name",
    "line_items"
  ],
  "properties": {
    "terms": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 500
      },
      "maxItems": 30,
      "description": "Override the eight default terms; omit for the standard set"
    },
    "line_items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "item",
          "category",
          "description",
          "size",
          "grade",
          "qty",
          "stock_length",
          "purchase_wt_lbs",
          "material_type"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "maximum": 100000,
            "minimum": 0,
            "description": "Piece or stick count; a zero-qty row is excluded"
          },
          "item": {
            "type": "string",
            "maxLength": 40,
            "description": "Estimate item number, e.g. \"A-01\""
          },
          "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\""
          },
          "notes": {
            "type": "string",
            "maxLength": 300
          },
          "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"
          },
          "stock_length": {
            "type": "string",
            "maxLength": 80,
            "description": "How it is purchased, e.g. \"3 sticks × 30′\""
          },
          "material_type": {
            "enum": [
              "w-shape",
              "plate",
              "flat-bar"
            ],
            "type": "string",
            "description": "Grouping key: w-shape, plate, or flat-bar"
          },
          "purchase_wt_lbs": {
            "type": "number",
            "maximum": 10000000,
            "minimum": 0,
            "description": "Estimated purchase weight in pounds"
          },
          "is_stock_purchase": {
            "type": "boolean",
            "description": "True for consolidated stock items that supersede piece-level plate/flat-bar rows"
          }
        }
      },
      "maxItems": 500,
      "minItems": 1,
      "description": "Parsed takeoff line items — the calling agent reads the estimate"
    },
    "date_issued": {
      "type": "string",
      "maxLength": 60,
      "description": "Free-form issue date; a blank line is used if omitted"
    },
    "company_name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "Buyer company on the RFQ header and terms — required"
    },
    "nesting_rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "material",
          "nesting_plan",
          "drop_notes"
        ],
        "properties": {
          "material": {
            "type": "string",
            "maxLength": 120
          },
          "drop_notes": {
            "type": "string",
            "maxLength": 300
          },
          "nesting_plan": {
            "type": "string",
            "maxLength": 200
          }
        }
      },
      "maxItems": 100,
      "description": "Optional fabricator-facing nesting/drop reference rows"
    },
    "project_name": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1,
      "description": "Project name for the header and filename"
    },
    "company_location": {
      "type": "string",
      "maxLength": 120,
      "description": "City, state under the company name, e.g. \"Denver, CO\""
    },
    "project_location": {
      "type": "string",
      "maxLength": 160
    }
  }
}
steel_pdf_markup — Bluebeam PDF Markup Writer
Advertised by the server during the last successful anonymous check.

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.

steel_pdf_markup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "markups"
  ],
  "properties": {
    "scale": {
      "type": "string",
      "maxLength": 40,
      "description": "Document scale for measurements, e.g. \"1/4 in = 1 ft\" or \"1:100\""
    },
    "author": {
      "type": "string",
      "maxLength": 120,
      "description": "Markups List author column"
    },
    "markups": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "page"
        ],
        "properties": {
          "at": {
            "anyOf": [
              {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              {
                "type": "array",
                "items": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ]
                },
                "maxItems": 2000
              }
            ]
          },
          "bump": {
            "type": "number",
            "maximum": 200
          },
          "data": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          },
          "fill": {
            "type": "string",
            "maxLength": 9
          },
          "page": {
            "type": "integer",
            "maximum": 5000,
            "minimum": 1,
            "description": "1-based page number"
          },
          "rect": {
            "type": "array",
            "description": "[x, y, w, h] in the markup's coordinate space",
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ]
          },
          "size": {
            "type": "number",
            "maximum": 1000
          },
          "tool": {
            "type": "string",
            "maxLength": 60,
            "description": "A steel takeoff preset key, e.g. hss-ea, w-beam-lf, rfi-cloud"
          },
          "type": {
            "type": "string",
            "maxLength": 40,
            "description": "Annotation type when not using a preset tool"
          },
          "arrow": {
            "type": "boolean"
          },
          "box_h": {
            "type": "number",
            "maximum": 10000
          },
          "box_w": {
            "type": "number",
            "maximum": 10000
          },
          "color": {
            "type": "string",
            "maxLength": 9,
            "description": "Hex color, e.g. #FF0000"
          },
          "label": {
            "type": "string",
            "maxLength": 200
          },
          "scale": {
            "type": "string",
            "maxLength": 40,
            "description": "Per-markup scale, e.g. \"1/4 in = 1 ft\""
          },
          "width": {
            "type": "number",
            "maximum": 100
          },
          "author": {
            "type": "string",
            "maxLength": 120
          },
          "points": {
            "type": "array",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ]
            },
            "maxItems": 2000
          },
          "opacity": {
            "type": "number",
            "maximum": 1,
            "minimum": 0
          },
          "subject": {
            "type": "string",
            "maxLength": 120
          },
          "arrow_at": {
            "type": "array",
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ]
          },
          "contents": {
            "type": "string",
            "maxLength": 2000
          },
          "font_size": {
            "type": "number",
            "maximum": 200
          },
          "column_data": {
            "type": "array",
            "items": {},
            "maxItems": 50
          },
          "fill_opacity": {
            "type": "number",
            "maximum": 1,
            "minimum": 0
          },
          "coordinate_space": {
            "enum": [
              "ratio",
              "pdf"
            ],
            "type": "string"
          }
        }
      },
      "maxItems": 500,
      "minItems": 1,
      "description": "Markups to place — geometry in ratio (0–1 from top-left) or pdf coordinates"
    },
    "pdf_url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2000,
      "description": "HTTPS URL of the source drawing PDF (fetched server-side, SSRF-guarded)"
    },
    "pdf_base64": {
      "type": "string",
      "maxLength": 4800000,
      "description": "Base64 PDF for small files (~3 MB max decoded); prefer pdf_url for drawing sets"
    },
    "page_scales": {
      "type": "object",
      "description": "Per-page scale overrides, keyed by page number string",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "coordinate_space": {
      "enum": [
        "ratio",
        "pdf"
      ],
      "type": "string"
    }
  }
}
steel_rfi_generate — RFI Document Generator
Advertised by the server during the last successful anonymous check.

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.

steel_rfi_generate input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_name",
    "rfi_number",
    "date",
    "project_name",
    "submitted_to",
    "submitted_by",
    "subject",
    "description"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Submission date"
    },
    "reason": {
      "type": "string",
      "maxLength": 60,
      "description": "Category: Design Omission, Design Error, Constructability Issue, Scope Clarification, Site Condition, Missing Information, Coordination Conflict — or free text"
    },
    "subject": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1,
      "description": "One-line subject — one issue per RFI"
    },
    "spec_refs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 20
    },
    "rfi_number": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "description": "RFI number from the project register, e.g. \"RFI-017\""
    },
    "attachments": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 160
      },
      "maxItems": 20
    },
    "description": {
      "type": "string",
      "maxLength": 4000,
      "minLength": 1,
      "description": "The issue: specific references, what is missing or conflicting, why it matters. Newlines respected."
    },
    "company_name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "Contractor issuing the RFI — appears in the header"
    },
    "drawing_refs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 20,
      "description": "Exact drawing numbers with revisions"
    },
    "project_name": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1
    },
    "submitted_by": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1,
      "description": "Name — company"
    },
    "submitted_to": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1,
      "description": "The party who must respond — engineer, architect, GC"
    },
    "project_number": {
      "type": "string",
      "maxLength": 60
    },
    "company_location": {
      "type": "string",
      "maxLength": 120
    },
    "proposed_solution": {
      "type": "string",
      "maxLength": 2000,
      "description": "Suggested path forward, framed as a proposal"
    },
    "response_needed_by": {
      "type": "string",
      "maxLength": 60
    }
  }
}
steel_ncr_generate — NCR Document Generator
Advertised by the server during the last successful anonymous check.

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.

steel_ncr_generate input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_name",
    "ncr_number",
    "date",
    "project_name",
    "raised_by",
    "description",
    "requirement_violated",
    "resolution"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Date raised"
    },
    "location": {
      "type": "string",
      "maxLength": 200,
      "description": "Area, level, grid, or piece mark"
    },
    "raised_by": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1,
      "description": "Name — role"
    },
    "ncr_number": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "description": "NCR number from the project register, e.g. \"NCR-008\""
    },
    "resolution": {
      "enum": [
        "accept-as-is",
        "repair",
        "rework",
        "reject"
      ],
      "type": "string",
      "description": "Disposition: accept-as-is (no physical work), repair, rework, or reject"
    },
    "root_cause": {
      "type": "string",
      "maxLength": 2000
    },
    "containment": {
      "type": "string",
      "maxLength": 1000,
      "description": "What was done on the spot — quarantine, stop work, tag"
    },
    "description": {
      "type": "string",
      "maxLength": 4000,
      "minLength": 1,
      "description": "What was found, measured against what was required"
    },
    "company_name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "Contractor raising the NCR — appears in the header"
    },
    "project_name": {
      "type": "string",
      "maxLength": 160,
      "minLength": 1
    },
    "project_number": {
      "type": "string",
      "maxLength": 60
    },
    "root_cause_whys": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300
      },
      "maxItems": 5,
      "description": "5-Whys chain, first why to root; overrides root_cause"
    },
    "company_location": {
      "type": "string",
      "maxLength": 120
    },
    "corrective_action": {
      "type": "string",
      "maxLength": 2000,
      "description": "Bringing this instance into compliance"
    },
    "preventive_action": {
      "type": "string",
      "maxLength": 2000,
      "description": "Stopping recurrence — procedure, inspection, supplier"
    },
    "trade_or_supplier": {
      "type": "string",
      "maxLength": 160
    },
    "requirement_violated": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "description": "The cited requirement — spec section, drawing/detail, or code clause. An NCR without a cited requirement is dispute fuel."
    },
    "resolution_justification": {
      "type": "string",
      "maxLength": 1000,
      "description": "Required in practice for accept-as-is — the concession basis"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
445 ms
95th percentile latency
445 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 445 ms · metadata changed · 14 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http structupath-mcp https://www.structupath.ai/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add structupath-mcp --url https://www.structupath.ai/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable structupath-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "structupath-mcp": {
      "url": "https://www.structupath.ai/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "structupath-mcp": {
      "type": "streamableHttp",
      "url": "https://www.structupath.ai/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start structupath-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "structupath-mcp": {
      "type": "http",
      "url": "https://www.structupath.ai/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http structupath-mcp https://www.structupath.ai/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.structupath.ai/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "structupath-mcp": {
      "serverUrl": "https://www.structupath.ai/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like StructuPath MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run StructuPath MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing