Skip to main content
Glama

a2a2p — Agent-to-Agent-to-Physical

request_physical_solution

Submit a physical-world requirement (a part, product, device, or capability that must exist in the physical world). a2a2p resolves it and returns a RESOLUTION REPORT: a recommended path (best existing commercial solution vs. custom fabrication), pricing, tradeoffs, a delivery plan with contingencies and expedite options, and a business case when business context is provided. Response is asynchronous: you receive a request_id immediately with an instant spec_review. Poll check_request_status; as soon as an automated draft exists it is returned with an a2a2p.resolution-report-delivery receipt that distinguishes machine_draft from operator_published. If the finite attempt budget is exhausted, status returns generation_failed; if the bounded automatic retry window expires first, it returns generation_expired. Either terminal state permits only a new caller-confirmed request from caller-held input. Operator review and publication are not guaranteed or subject to a service-level promise. No state is professional engineering certification or a supplier quote.

ENTRY MODES — arrive with what you have: • fully_specified: provide 'specification' (part_type, material, process, dimensions, tolerance_class, design_files). Go straight to resolution report. • intent_only: provide 'intent' (purpose, environment, functional_requirements, quantity, timeline, priority). a2a2p recommends 2-3 specification options with tradeoffs. • partial: provide what you know in either layer; a2a2p fills the gaps.

Layer 1 (intent) describes the PROBLEM. Layer 2 (specification) describes the SOLUTION. At minimum, provide 'requirement' (legacy) or 'intent.purpose' (structured) — one line describing what you need. Use 'rejected_alternatives' to record options already ruled out.

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.

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
    • 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"
      +}
  4. 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"
  5. 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"
      +]
  6. 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"
  7. First observed

TDQS

A4.4/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 does so thoroughly: asynchronous request_id return, instant spec_review, polling via check_request_status, the machine_draft vs operator_published receipt distinction, both terminal states (generation_failed, generation_expired) and what triggers them, and the explicit absence of an SLA or certification guarantee.

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?

Front-loads the core purpose, response shape, and status semantics before the entry-mode bullets. It is long, but most sentences earn their place by carrying terminal-state or entry-mode facts; the density is justified for an async multi-mode tool, though it could be trimmed.

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

Completeness5/5

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

No output schema exists, and the description compensates by describing the return artifacts (resolution report contents, receipt, request_id, spec_review) and every terminal status. Combined with 100% schema coverage, an agent has everything needed to call and interpret the tool.

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 the baseline is 3. The description adds a conceptual framing (Layer 1 = problem/intent, Layer 2 = solution/specification, rejected_alternatives) that maps to the schema's own structure, but adds no syntax or format detail beyond what the schema already documents.

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?

Opens with a specific verb+resource ('Submit a physical-world requirement') and immediately scopes it to parts/products/devices/capabilities. It also names the downstream flow and the sibling used for polling (check_request_status), so an agent can distinguish it from the many validate_/prepare_ siblings.

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 explicit entry modes (fully_specified, intent_only, partial) and the minimum input ('requirement' or 'intent.purpose'), which tells the agent exactly how to reach a valid call. It doesn't state when to prefer siblings like review_specification or qualify_specification_exchange_need, so it falls short of full when/when-not/alternatives guidance.

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