Skip to main content
Glama

Inspect CAD file

inspect_cad
Read-only

Open a CAD file on CADProps servers and report its format, size, volume, area, units and accuracy, with an interactive 3D preview. Supported: 3DM, 3DXML, 3MF, 7Z, AMF, ASM, BMP, CATDRAWING, CATPART, CATPRODUCT, CGM, DFT, DRW, DWF, DWFX, DWG, DXF, EMF, F3D, GCODE, GIF, GLB, GLTF, GZ, IAM, ICO, IDW, IFC, IFCZIP, IGES, IGS, IPT, JPG, JT, NEU, OBJ, PAR, PCX, PDF, PLT, PLY, PNG, PRC, PRT, PSM, RAR, SAB, SAT, SLDASM, SLDDRW, SLDPRT, STEP, STL, STP, SVG, TGA, TGZ, TIFF, U3D, UNV, VDA, VDAFS, VRML, WEBP, WMF, WRL, WRZ, X3D, X3DV, X_B, X_T, ZIP. Creo .prt files with supported saved triangle strips show a partial 3D preview with unverified units and no physical measurements. Other Creo .prt files, Creo .asm files and CATIA .CATProduct files show only the thumbnail saved in the file when available. Call with no file to get a one-time upload link. Files are deleted about one hour after upload.

Input Schema

NameRequiredDescriptionDefault
refNoReference returned by an earlier inspect_cad call.
fileNoHosted CAD file from the chat platform. Prefer this when the host already uploaded the attachment; otherwise omit and use the upload link flow.
wait_secondsNoSeconds to wait for inspect to finish before returning status=running, 0–20, default 15.
upload_ticketNoTicket from a previous upload link, after the user says the upload is done.

Output Schema

NameRequiredDescriptionDefault
refNo
unitsNo
formatNo
statusNo
failureNo
area_mm2No
filenameNo
warningsNo
expires_atNo
incompleteNo
part_countNo
upload_urlNo
volume_mm3No
step_outputNo
upload_ticketNo
representationNo
bounding_box_mmNo
precision_gradeNo
precision_summaryNo
missing_componentsNo
measurement_accuracyNo
source_precision_qualifiedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / file / description
      Added value: +"Hosted CAD file from the chat platform. Prefer this when the host already uploaded the attachment; otherwise omit and use the upload link flow."
    • addedInput schema / properties / file / properties / download_url / description
      Added value: +"HTTPS URL the connector may fetch once, e.g. https://files.oaiusercontent.com/.../part.step"
    • addedInput schema / properties / file / properties / file_id / description
      Added value: +"Host file id for the attachment, e.g. file-abc123"
    • addedInput schema / properties / file / properties / file_name / description
      Added value: +"Optional original file name with extension, e.g. bracket.sldprt"
    • addedInput schema / properties / file / properties / mime_type / description
      Added value: +"Optional MIME type from the host, e.g. application/step or model/stl"
    • addedInput schema / properties / wait_seconds / description
      Added value: +"Seconds to wait for inspect to finish before returning status=running, 0–20, default 15."
  2. Changed5 schema fields changed
    • addedOutput schema / $defs
      Added value: +{
      +  "BRepPrecisionSummary": {
      +    "properties": {
      +      "actual_pc_occurrences": {
      +        "minimum": 1,
      +        "title": "Actual Pc Occurrences",
      +        "type": "integer"
      +      },
      +      "actual_pc_samples": {
      +        "maximum": 524288,
      +        "minimum": 129,
      +        "title": "Actual Pc Samples",
      +        "type": "integer"
      +      },
      +      "certificate_sha256": {
      +        "pattern": "^[0-9a-f]{64}$",
      +        "title": "Certificate Sha256",
      +        "type": "string"
      +      },
      +      "geometry_error_limit_mm": {
      +        "const": 0.01,
      +        "title": "Geometry Error Limit Mm",
      +        "type": "number"
      +      },
      +      "maximum_curve_surface_error_mm": {
      +        "maximum": 0.01,
      +        "minimum": 0,
      +        "title": "Maximum Curve Surface Error Mm",
      +        "type": "number"
      +      },
      +      "reference_validation": {
      +        "const": "not_measured_at_runtime",
      +        "title": "Reference Validation",
      +        "type": "string"
      +      },
      +      "samples_per_actual_pc_span": {
      +        "const": 129,
      +        "title": "Samples Per Actual Pc Span",
      +        "type": "integer"
      +      },
      +      "scope": {
      +        "const": "finite65-native-span/129-actual-pcurve-span",
      +        "title": "Scope",
      +        "type": "string"
      +      },
      +      "step_readback_relative_volume_error": {
      +        "maximum": 0.000001,
      +        "minimum": 0,
      +        "title": "Step Readback Relative Volume Error",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "certificate_sha256",
      +      "geometry_error_limit_mm",
      +      "maximum_curve_surface_error_mm",
      +      "actual_pc_occurrences",
      +      "actual_pc_samples",
      +      "samples_per_actual_pc_span",
      +      "step_readback_relative_volume_error",
      +      "scope",
      +      "reference_validation"
      +    ],
      +    "title": "BRepPrecisionSummary",
      +    "type": "object"
      +  },
      +  "SourceSPPrecisionSummary": {
      +    "additionalProperties": false,
      +    "description": "Public finite-tier facts only; private qualification objects never enter it.",
      +    "properties": {
      +      "added_error_limit_mm": {
      +        "const": 0.01,
      +        "title": "Added Error Limit Mm",
      +        "type": "number"
      +      },
      +      "certificate_sha256": {
      +        "pattern": "^[0-9a-f]{64}$",
      +        "title": "Certificate Sha256",
      +        "type": "string"
      +      },
      +      "excluded_incident_feature_pairs": {
      +        "minimum": 0,
      +        "title": "Excluded Incident Feature Pairs",
      +        "type": "integer"
      +      },
      +      "feature_scope": {
      +        "const": "finite-nonincident-FF/EE/FE+trimwire;incident/self-fold-unverified",
      +        "title": "Feature Scope",
      +        "type": "string"
      +      },
      +      "finite_feature_pairs": {
      +        "minimum": 0,
      +        "title": "Finite Feature Pairs",
      +        "type": "integer"
      +      },
      +      "finite_features_verified": {
      +        "const": true,
      +        "title": "Finite Features Verified",
      +        "type": "boolean"
      +      },
      +      "global_error_or_clearance_certified": {
      +        "const": false,
      +        "title": "Global Error Or Clearance Certified",
      +        "type": "boolean"
      +      },
      +      "inherited_consistency_max_mm": {
      +        "minimum": 0,
      +        "title": "Inherited Consistency Max Mm",
      +        "type": "number"
      +      },
      +      "inherited_consistency_scope": {
      +        "const": "private-per-entity-caps-verified;global-maxima-are-summary-only",
      +        "title": "Inherited Consistency Scope",
      +        "type": "string"
      +      },
      +      "inherited_per_entity_caps_verified": {
      +        "const": true,
      +        "title": "Inherited Per Entity Caps Verified",
      +        "type": "boolean"
      +      },
      +      "inherited_source_cap_max_mm": {
      +        "exclusiveMinimum": 0,
      +        "title": "Inherited Source Cap Max Mm",
      +        "type": "number"
      +      },
      +      "maximum_added_source_error_mm": {
      +        "maximum": 0.01,
      +        "minimum": 0,
      +        "title": "Maximum Added Source Error Mm",
      +        "type": "number"
      +      },
      +      "readback_actual_occurrences": {
      +        "minimum": 1,
      +        "title": "Readback Actual Occurrences",
      +        "type": "integer"
      +      },
      +      "readback_actual_samples": {
      +        "maximum": 262144,
      +        "minimum": 129,
      +        "title": "Readback Actual Samples",
      +        "type": "integer"
      +      },
      +      "readback_metadata_normalized": {
      +        "title": "Readback Metadata Normalized",
      +        "type": "boolean"
      +      },
      +      "readback_original_undercoverage_occurrences": {
      +        "minimum": 0,
      +        "title": "Readback Original Undercoverage Occurrences",
      +        "type": "integer"
      +      },
      +      "readback_source_events_renewed": {
      +        "const": false,
      +        "title": "Readback Source Events Renewed",
      +        "type": "boolean"
      +      },
      +      "readback_source_identity_renewed": {
      +        "const": false,
      +        "title": "Readback Source Identity Renewed",
      +        "type": "boolean"
      +      },
      +      "readback_tol_coverage_verified": {
      +        "const": true,
      +        "title": "Readback Tol Coverage Verified",
      +        "type": "boolean"
      +      },
      +      "reference_validation": {
      +        "const": "not_measured_at_runtime",
      +        "title": "Reference Validation",
      +        "type": "string"
      +      },
      +      "samples_per_native_span": {
      +        "const": 129,
      +        "title": "Samples Per Native Span",
      +        "type": "integer"
      +      },
      +      "source_analytic_occurrences": {
      +        "minimum": 0,
      +        "title": "Source Analytic Occurrences",
      +        "type": "integer"
      +      },
      +      "source_fin_occurrences": {
      +        "minimum": 1,
      +        "title": "Source Fin Occurrences",
      +        "type": "integer"
      +      },
      +      "source_finite_occurrences": {
      +        "minimum": 1,
      +        "title": "Source Finite Occurrences",
      +        "type": "integer"
      +      },
      +      "source_geometry_verified": {
      +        "const": true,
      +        "title": "Source Geometry Verified",
      +        "type": "boolean"
      +      },
      +      "source_original_precision": {
      +        "const": false,
      +        "title": "Source Original Precision",
      +        "type": "boolean"
      +      },
      +      "source_schedule_paid_samples": {
      +        "minimum": 0,
      +        "title": "Source Schedule Paid Samples",
      +        "type": "integer"
      +      },
      +      "source_schedule_required_samples": {
      +        "minimum": 129,
      +        "title": "Source Schedule Required Samples",
      +        "type": "integer"
      +      },
      +      "source_schedule_reused_samples": {
      +        "minimum": 0,
      +        "title": "Source Schedule Reused Samples",
      +        "type": "integer"
      +      },
      +      "source_scope": {
      +        "const": "finite-source-primary-bindings/native65/129",
      +        "title": "Source Scope",
      +        "type": "string"
      +      },
      +      "step_per_entity_tolerance_preserved": {
      +        "const": false,
      +        "title": "Step Per Entity Tolerance Preserved",
      +        "type": "boolean"
      +      },
      +      "step_readback_relative_volume_error": {
      +        "maximum": 0.000001,
      +        "minimum": 0,
      +        "title": "Step Readback Relative Volume Error",
      +        "type": "number"
      +      },
      +      "step_volume_error_limit": {
      +        "const": 0.000001,
      +        "title": "Step Volume Error Limit",
      +        "type": "number"
      +      },
      +      "trimwire_checks": {
      +        "minimum": 1,
      +        "title": "Trimwire Checks",
      +        "type": "integer"
      +      },
      +      "writer_tolerance_mm": {
      +        "exclusiveMinimum": 0,
      +        "title": "Writer Tolerance Mm",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "certificate_sha256",
      +      "maximum_added_source_error_mm",
      +      "inherited_consistency_max_mm",
      +      "inherited_source_cap_max_mm",
      +      "source_fin_occurrences",
      +      "source_finite_occurrences",
      +      "source_analytic_occurrences",
      +      "source_schedule_required_samples",
      +      "source_schedule_paid_samples",
      +      "source_schedule_reused_samples",
      +      "readback_actual_occurrences",
      +      "readback_actual_samples",
      +      "step_readback_relative_volume_error",
      +      "writer_tolerance_mm",
      +      "readback_metadata_normalized",
      +      "readback_original_undercoverage_occurrences",
      +      "finite_feature_pairs",
      +      "excluded_incident_feature_pairs",
      +      "trimwire_checks",
      +      "source_geometry_verified",
      +      "inherited_per_entity_caps_verified",
      +      "readback_tol_coverage_verified",
      +      "finite_features_verified",
      +      "added_error_limit_mm",
      +      "samples_per_native_span",
      +      "source_original_precision",
      +      "source_scope",
      +      "inherited_consistency_scope",
      +      "readback_source_events_renewed",
      +      "readback_source_identity_renewed",
      +      "step_volume_error_limit",
      +      "step_per_entity_tolerance_preserved",
      +      "feature_scope",
      +      "global_error_or_clearance_certified",
      +      "reference_validation"
      +    ],
      +    "title": "SourceSPPrecisionSummary",
      +    "type": "object"
      +  }
      +}
    • changedOutput schema / properties / measurement_accuracy / enum
      Previous value: -[
      -  "exact",
      -  "mesh_approximate",
      -  "unavailable"
      -]New value: +[
      +  "exact",
      +  "bounded_brep_approximate",
      +  "mesh_approximate",
      +  "unavailable"
      +]
    • addedOutput schema / properties / precision_grade
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "trial-001",
      +        "source-sp-engineering-v1"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Precision Grade"
      +}
    • addedOutput schema / properties / precision_summary
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/BRepPrecisionSummary"
      +    },
      +    {
      +      "$ref": "#/$defs/SourceSPPrecisionSummary"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Precision Summary"
      +}
    • addedOutput schema / properties / source_precision_qualified
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Source Precision Qualified"
      +}
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive and closed-world, so the safety profile is covered. The description goes beyond them usefully: one-hour file retention, and the important caveat that Creo .prt files with triangle strips yield a partial preview with unverified units and no physical measurements, while other Creo and CATIA .CATProduct files show only a thumbnail. That is exactly the kind of degraded-output disclosure an agent needs; it only lacks detail on status=running behavior, which is left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and behavior lead, with the caveats and upload flow before the format list. The 70+ entry format enumeration is bulky but genuinely useful for deciding whether a file is supported, so it earns its place, though it could be trimmed or grouped to reduce scan cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description still supplies the retention window, the upload-link fallback, and the per-format fidelity caveats that determine whether results are trustworthy. Minor gap: nothing about the asynchronous status=running outcome beyond what the wait_seconds schema field implies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (ref, file, wait_seconds, upload_ticket) are already documented, which sets the baseline at 3. The description adds only the framing that omitting a file triggers the upload-link flow; it does not explain ref reuse or the wait_seconds/running semantics beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Open a CAD file on CADProps servers') and enumerates exactly what it reports: format, size, volume, area, units, accuracy, plus an interactive 3D preview. That is far more than a restatement of the title and lets an agent distinguish it from convert_cad or open_in_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete routing guidance for the upload flow ('Call with no file to get a one-time upload link', files deleted about one hour after upload) and the schema reinforces 'prefer this when the host already uploaded the attachment'. It does not explicitly contrast against the sibling tools convert_cad or open_in_workspace, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources