Skip to main content
Glama

a2a2p — Agent-to-Agent-to-Physical

review_specification

Current file inspection governs geometry readiness: expired, unreadable, mismatched, unsuccessfully parsed or uninspected attachments prevent quote-ready status. Reattach the original file and review again. Instant, synchronous engineering review of a physical requirement — nothing is submitted. So the caller can continue in deb8, the answer may carry a continuation: the purpose and the details sent, held under its reference for 24 hours and then deleted, read only by deb8's server when the caller continues there. Purpose prose is preserved as intent but is not silently converted into loads, geometry, environments, interfaces, or acceptance criteria. The versioned engineering_evaluation receipt lists canonical paths and exact checks run, reports not_evaluated when none ran, and denies engineering-validation, certification, physical-truth, supplier-acceptance, and fabrication authority. Its finding-penalty score is not engineering soundness. Deterministic checks: material identification with handbook-typical properties (density, stiffness, yield, service temperature), explicit rectangular beam deflection, nominal bending stress, and nominal transverse shear with requester-defined acceptance criteria, material/process compatibility, tolerance-vs-process reality, quantity economics (e.g. tooling amortization), environment fit (UV, saltwater, food contact, temperature, medical), flexibility fit, post-processing validity, design-file format fit, and specification completeness. Every matched material reference identifies the current table as an uncited compilation and explicitly denies source verification, exact-state verification, design-allowable use, and simulation eligibility. A criterion that depends on that reference remains not_evaluated; its numerical comparison is reference_only, never a pass, failure, or blocker. Every supplied limit or strength basis is labeled requester_assertion, and every criterion verdict is explicitly conditional on declared inputs and the bounded model—not engineering validation or design certification. Returns findings ranked blocker/warning/info, two readiness scores, and a deterministic clarification_plan: compact next_fields, visible remaining_fields, optional CAD accelerators, an intent-only resolution handoff, next_call with the recommended exact MCP/REST continuation, and continuation_options for explicitly eligible operations: design_brief for complete intent without specifications, or budgetary_pricing and supplier_handoff for a complete specification. Examples are shapes, never invented defaults. For a decomposed design, send specification.assembly with parts and interfaces: a2a2p then checks galvanic pairing and interface fit across parts, which a single-part review cannot, and prices each part separately. Two or more explicitly declared parts always classify as assembly_or_system and can never become quote_ready as one part, regardless of purpose wording or top-level part fields. Undeclared interfaces are unchecked — nothing is inferred. CHECK intake_classification first. a2a2p reviews one manufacturable part at a time; a request naming a behaviour rather than an object ("a device that detects and removes debris") is classified capability_concept and redirected to decomposition, because no material or tolerance can be derived from it. The classification is advisory, never blocks, and defers to any supplied specification. READ resolution_readiness, not quote_readiness, while you are still answering questions. quote_readiness is supplier-facing and stays capped by material/process/dimensions/tolerance that a2a2p derives for you, so it cannot reach quote_ready from intent alone however much you supply. resolution_readiness measures only what the requester owns and reaches ready_to_resolve once you have supplied enough to derive a specification — which is not a supplier quote. completeness.awaiting_requester and completeness.derivable_by_resolution say which fields are whose. Accepts the same input as request_physical_solution (structured intent/specification or legacy flat fields). Forward-compatible fields remain accepted, but uninterpreted_fields names every supplied path in the declared review scope whose value did not influence deterministic engineering checks, uses bounded and privacy-safe RFC 6901 JSON Pointers, caps unqualified ready grades, and provides non-inferential repair guidance; never read HTTP success alone as proof that every field was understood. For intent_only, complete requester context leads to submit_for_specification_resolution; for a supplied specification, apply only facts you know, re-review until quote_ready, then submit if a durable resolution is useful. Error results preserve the human-readable error and also return one stable machine code: purpose_required when the physical purpose is absent, or screening_denied when intake screening refuses the request. Modern MCP responses carry the same object in structuredContent. Multi-part input is reviewed and classified here; decomposition_required belongs to downstream one-part pricing and supplier-package gates, not this advisory review.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
intentNoLayer 1 — the problem. What the physical matter needs to DO. Use this for intent-driven requests where the agent describes purpose and a2a2p recommends solutions.
contactNoOptional email or callback endpoint for quote delivery.
deadlineNoRequired delivery date or timeframe. Maps to intent.timeline.
quantityNoNumber of units needed. Maps to intent.quantity.
budget_usdNoApproximate budget in USD. Maps to intent.budget_envelope.
constraintsNoHard constraints: tolerances, certifications, materials to avoid, size/weight limits. Maps to intent.functional_requirements.
requirementNoPlain-language description of the physical need. Maps to intent.purpose. Include function, dimensions, materials, load/performance requirements, environment, and interfaces where known.
callback_urlNoOptional HTTPS URL. When the quote is ready, a2a2p POSTs it as JSON to this URL.
specificationNoLayer 2 — the solution. What the physical matter IS. Populate what is known. Precise specifications produce faster, tighter quotes. Controlled vocabularies are preferred but open values are accepted.
business_contextNoOptional business requirements (expected volumes, cost targets, ROI constraints). If provided, the quote includes a business case.
rejected_alternativesNoOptions already considered and ruled out. Prevents re-suggesting and builds the learning corpus.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
engineering_evaluationYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / intent / properties / alternates_acceptable
      Added value: +{
      +  "description": "Whether a supplier may propose a different material, process or stock size.",
      +  "type": [
      +    "boolean",
      +    "string"
      +  ]
      +}
    • addedInput schema / properties / intent / properties / inspection_documents
      Added value: +{
      +  "description": "Inspection or material documents required with the parts, or \"none required\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / intent / properties / quote_by
      Added value: +{
      +  "description": "Date a quote is needed by.",
      +  "type": "string"
      +}
    • addedInput schema / properties / intent / properties / ship_to_region
      Added value: +{
      +  "description": "Delivery region. When present, a supplier package asks for a price including freight to it; when absent, freight is excluded.",
      +  "type": "string"
      +}
    • addedInput schema / properties / specification / properties / cutting
      Added value: +{
      +  "description": "Cutting-tool constraints for routed or milled profiles.",
      +  "properties": {
      +    "inside_corner_relief": {
      +      "description": "dogbone or t_bone: the supplier adds that relief; in_file: relief is already drawn; not_required: tool-radius corners are acceptable.",
      +      "enum": [
      +        "dogbone",
      +        "t_bone",
      +        "in_file",
      +        "not_required"
      +      ],
      +      "type": "string"
      +    },
      +    "tool_diameter_mm": {
      +      "description": "Smallest cutter that will be used. Inside corners and holes with a smaller radius are flagged against the measured DXF.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / specification / properties / notes
      Added value: +{
      +  "description": "Manufacturing notes for the supplier. Carried verbatim into the supplier package; never parsed into facts. State anything a check must use in its structured field.",
      +  "maxLength": 4000,
      +  "type": "string"
      +}
    • changedInput schema / properties / specification / properties / process / enum
      Previous value: -[
      -  "cnc_milling",
      -  "cnc_turning",
      -  "fdm_3d_print",
      -  "sla_3d_print",
      -  "sls_3d_print",
      -  "sheet_metal",
      -  "laser_cutting",
      -  "casting",
      -  "injection_molding",
      -  "extrusion"
      -]New value: +[
      +  "cnc_milling",
      +  "cnc_turning",
      +  "cnc_routing",
      +  "fdm_3d_print",
      +  "sla_3d_print",
      +  "sls_3d_print",
      +  "sheet_metal",
      +  "laser_cutting",
      +  "casting",
      +  "injection_molding",
      +  "extrusion"
      +]
    • addedInput schema / properties / specification / properties / sheet_stock
      Added value: +{
      +  "description": "The sheet a flat part is cut from. For plywood a supplier needs face_grade, nominal and actual thickness, ply_count and glue_class; for MDF, grade and thickness. Missing facts are asked, never chosen by a2a2p.",
      +  "properties": {
      +    "actual_thickness_mm": {
      +      "anyOf": [
      +        {
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "properties": {
      +            "max": {
      +              "type": "number"
      +            },
      +            "min": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      ],
      +      "description": "Measured or specified actual thickness. Stock-relative tolerances also satisfy this: the joint follows the sheet."
      +    },
      +    "face_grade": {
      +      "description": "Face/back veneer grade, for example B/BB.",
      +      "type": "string"
      +    },
      +    "glue_class": {
      +      "description": "Bond class, for example EN 314-2 class 1 (interior) or class 3 (exterior).",
      +      "type": "string"
      +    },
      +    "grade": {
      +      "description": "Panel grade for MDF and similar boards, for example standard or moisture_resistant.",
      +      "type": "string"
      +    },
      +    "grain_direction": {
      +      "description": "Face-grain direction relative to the declared X/Y dimensions.",
      +      "enum": [
      +        "along_x",
      +        "along_y",
      +        "not_applicable"
      +      ],
      +      "type": "string"
      +    },
      +    "nominal_thickness_mm": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "ply_count": {
      +      "minimum": 1,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / specification / properties / tolerances
      Added value: +{
      +  "additionalProperties": {
      +    "anyOf": [
      +      {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      },
      +      {
      +        "properties": {
      +          "allowance_mm": {
      +            "description": "Added to the measured stock thickness; negative for an interference fit.",
      +            "type": "number"
      +          },
      +          "fit_class": {
      +            "description": "Optional label such as push_fit or press_fit.",
      +            "type": "string"
      +          },
      +          "minus": {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "nominal": {
      +            "exclusiveMinimum": 0,
      +            "type": "number"
      +          },
      +          "plus": {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "relative_to": {
      +            "enum": [
      +              "measured_stock_thickness"
      +            ],
      +            "type": "string"
      +          },
      +          "unit": {
      +            "type": "string"
      +          },
      +          "value": {
      +            "exclusiveMinimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "description": "Exact numeric tolerance callouts keyed by feature. They govern over tolerance_class for the named feature. Forms: a positive number (plus or minus that amount); { nominal, plus, minus }; or a stock-relative rule { relative_to: \"measured_stock_thickness\", allowance_mm, plus, minus, fit_class } for joints cut to the sheet actually used.",
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / specification / properties / process / enum
      Previous value: -[
      -  "cnc_milling",
      -  "cnc_turning",
      -  "fdm_3d_print",
      -  "sla_3d_print",
      -  "sls_3d_print",
      -  "sheet_metal",
      -  "casting",
      -  "injection_molding",
      -  "extrusion"
      -]New value: +[
      +  "cnc_milling",
      +  "cnc_turning",
      +  "fdm_3d_print",
      +  "sla_3d_print",
      +  "sls_3d_print",
      +  "sheet_metal",
      +  "laser_cutting",
      +  "casting",
      +  "injection_molding",
      +  "extrusion"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "engineering_evaluation": {
      +      "$comment": "JSON Schema constrains the portable envelope. Consumers must also run the semantic validator for deterministic sorting, status/check consistency, exact finding-penalty arithmetic, and the non-authority boundary.",
      +      "$id": "https://a2a2p.com/schema/engineering-evaluation",
      +      "$schema": "https://json-schema.org/draft/2020-12/schema",
      +      "additionalProperties": false,
      +      "properties": {
      +        "authority": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "design_certification": {
      +              "const": false
      +            },
      +            "engineering_validation": {
      +              "const": false
      +            },
      +            "fabrication": {
      +              "const": false
      +            },
      +            "physical_truth": {
      +              "const": false
      +            },
      +            "supplier_acceptance": {
      +              "const": false
      +            }
      +          },
      +          "required": [
      +            "engineering_validation",
      +            "design_certification",
      +            "physical_truth",
      +            "supplier_acceptance",
      +            "fabrication"
      +          ],
      +          "type": "object"
      +        },
      +        "canonical_input_paths_present": {
      +          "items": {
      +            "minLength": 1,
      +            "pattern": "^/",
      +            "type": "string"
      +          },
      +          "type": "array",
      +          "uniqueItems": true
      +        },
      +        "checks_run": {
      +          "items": {
      +            "minLength": 1,
      +            "pattern": "^\\S",
      +            "type": "string"
      +          },
      +          "type": "array",
      +          "uniqueItems": true
      +        },
      +        "contract": {
      +          "const": "a2a2p.engineering-evaluation"
      +        },
      +        "finding_counts": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "blocker": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "info": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "warning": {
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "blocker",
      +            "warning",
      +            "info"
      +          ],
      +          "type": "object"
      +        },
      +        "finding_penalty_score": {
      +          "maximum": 100,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "interpretation": {
      +          "minLength": 1,
      +          "pattern": "\\S",
      +          "type": "string"
      +        },
      +        "purpose_constraints_extracted": {
      +          "const": false
      +        },
      +        "status": {
      +          "enum": [
      +            "not_evaluated",
      +            "partial"
      +          ]
      +        },
      +        "version": {
      +          "const": "1.0.0"
      +        }
      +      },
      +      "required": [
      +        "contract",
      +        "version",
      +        "status",
      +        "canonical_input_paths_present",
      +        "checks_run",
      +        "purpose_constraints_extracted",
      +        "finding_penalty_score",
      +        "finding_counts",
      +        "interpretation",
      +        "authority"
      +      ],
      +      "title": "a2a2p engineering-evaluation receipt",
      +      "type": "object",
      +      "x-a2a2p-semantic-invariants": {
      +        "authority_values": false,
      +        "deterministic_arrays": "canonical_input_paths_present and checks_run are unique and lexicographically sorted.",
      +        "finding_penalty_formula": "max(0, 100 - 25*blocker - 12*warning - 4*info)",
      +        "profile": "https://a2a2p.com/profile/engineering-evaluation",
      +        "purpose_constraints_extracted": false,
      +        "status_checks": "not_evaluated requires zero checks_run entries; partial requires one or more."
      +      }
      +    }
      +  },
      +  "required": [
      +    "engineering_evaluation"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / intent / properties / functional_requirements / properties / load_case / properties / allowable_shear_stress_mpa
      Added value: +{
      +  "description": "Optional requester-supplied transverse-shear design allowable; evaluated independently and never inferred from handbook data.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
  5. Changed5 schema fields changed
    • changedInput schema / properties / intent / properties / purpose / description
      Previous value: -"What the physical matter needs to accomplish (one line minimum, required)."New value: +"What the physical matter needs to accomplish (one non-whitespace line minimum, required)."
    • addedInput schema / properties / intent / properties / purpose / minLength
      Added value: +1
    • addedInput schema / properties / intent / properties / purpose / pattern
      Added value: +"\\S"
    • addedInput schema / properties / requirement / minLength
      Added value: +1
    • addedInput schema / properties / requirement / pattern
      Added value: +"\\S"
  6. Changed4 schema fields changed
    • changedInput schema / properties / specification / properties / design_files / description
      Previous value: -"STEP/STL/DXF file references."New value: +"Temporary or externally hosted manufacturing file references ({url, format, optional role}). Accepted upload aliases: stl, step, stp, dxf, pdf; shared downstream ceiling: 8388608 bytes."
    • addedInput schema / properties / specification / properties / design_files / items / properties / format / enum
      Added value: +[
      +  "stl",
      +  "step",
      +  "stp",
      +  "dxf",
      +  "pdf"
      +]
    • addedInput schema / properties / specification / properties / design_files / items / properties / role
      Added value: +{
      +  "enum": [
      +    "geometry",
      +    "drawing",
      +    "reference"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / specification / properties / design_files / items / required
      Added value: +[
      +  "url",
      +  "format"
      +]
  7. Changed5 schema fields changed
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "requirement"
      +    ]
      +  },
      +  {
      +    "properties": {
      +      "intent": {
      +        "required": [
      +          "purpose"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "intent"
      +    ]
      +  }
      +]
    • addedInput schema / properties / intent / properties / functional_requirements / properties / load_case
      Added value: +{
      +  "description": "Optional bounded structural sanity check. State an explicit static point-load model and rectangular section; height_mm is the bending direction.",
      +  "properties": {
      +    "allowable_stress_mpa": {
      +      "description": "Optional requester-supplied design allowable; never inferred from handbook yield.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "elastic_modulus_gpa": {
      +      "description": "Optional requester-supplied Young's modulus. Otherwise the matched material handbook reference is used and labeled.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "load_n": {
      +      "description": "Static point-load magnitude in Newtons.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "max_deflection_mm": {
      +      "description": "Optional requester-supplied acceptance limit.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "minimum_factor_of_safety": {
      +      "description": "Optional acceptance criterion; evaluated only with requester-supplied yield_strength_mpa.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "model": {
      +      "description": "Supported deterministic models: cantilever_end_load or simply_supported_center_load. Other values are preserved but reported as unsupported.",
      +      "examples": [
      +        "cantilever_end_load",
      +        "simply_supported_center_load"
      +      ],
      +      "type": "string"
      +    },
      +    "section": {
      +      "properties": {
      +        "height_mm": {
      +          "description": "Rectangular section depth in the bending direction, millimetres.",
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        "width_mm": {
      +          "description": "Rectangular section width in millimetres.",
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "width_mm",
      +        "height_mm"
      +      ],
      +      "type": "object"
      +    },
      +    "span_mm": {
      +      "description": "Beam span in millimetres.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "yield_strength_mpa": {
      +      "description": "Optional exact grade/condition/product-form datasheet value supplied by the requester.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "model",
      +    "load_n",
      +    "span_mm",
      +    "section"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / intent / properties / functional_requirements / properties / max_load / description
      Previous value: -"Maximum load in Newtons."New value: +"Maximum load magnitude. A Newton scalar is preferred; { value, unit: \"N\" } remains accepted."
    • addedInput schema / properties / intent / properties / functional_requirements / properties / max_load / oneOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "properties": {
      +      "unit": {
      +        "description": "Force unit; N is canonical.",
      +        "type": "string"
      +      },
      +      "value": {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "value"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / intent / properties / functional_requirements / properties / max_load / type
      Removed value: -"number"
  8. First observed

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: synchronous/nothing-submitted behavior, the 24-hour continuation retention and deletion, server-side read scoping, the versioned receipt's denials of engineering-validation/certification/fabrication authority, the finding-penalty-vs-soundness distinction, uninterpreted_fields semantics, and the two stable error codes (purpose_required, screening_denied). This is unusually rich behavioral disclosure well beyond a bare schema.

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

Conciseness2/5

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

The description runs several hundred words across many run-on sentences, and the lead sentence addresses attachment inspection rather than the tool's identity, so it is neither front-loaded nor economical. While much of the content is substantive, the density and ordering impose a real parsing cost on the agent.

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?

For a tool this complex — 11 params, deep nesting, and an existing output schema — the description covers the operational model thoroughly: classification advisory behavior, readiness-score semantics, decomposition rules, clarification_plan contents, and error handling. It arguably over-explains return values the output schema already carries, but nothing essential for a correct call appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the Layer 1 (intent) vs Layer 2 (specification) split, assembly handling via specification.assembly with parts and interfaces, acceptance of the same input as request_physical_solution plus legacy flat fields, and the forward-compatibility guarantee for uninterpreted fields. It stops short of clarifying individual field interactions, but it meaningfully enriches how the schema should be read.

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

Purpose4/5

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

The description does state the core action — an 'instant, synchronous engineering review of a physical requirement — nothing is submitted' — and contrasts it with downstream one-part pricing and supplier-package gates, so the agent can separate it from siblings like request_physical_solution or build_supplier_request_package. However, the opening sentence is about file-inspection gating rather than the tool's purpose, so the actual verb+resource is buried and the reader must dig for it.

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

Usage Guidelines5/5

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

It gives explicit routing rules: 'CHECK intake_classification first', 'READ resolution_readiness, not quote_readiness, while you are still answering questions', 'For intent_only... submit_for_specification_resolution; for a supplied specification, apply only facts you know, re-review until quote_ready'. It also names the eligible continuations (design_brief, budgetary_pricing, supplier_handoff) and the conditions that select each, which is exactly the when-to-use/when-not guidance the dimension asks for.

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