Skip to main content
Glama

NAIF Agent Gravity — MCP Diagnostics & Recovery

Quote Repair

quote_repair

Use only after diagnose_issue when the caller wants a priced bounded repair. Creates a new non-binding quote for the selected or automatically matched public service. Repeating the call may create a different quoteId, so it is intentionally non-idempotent. It does not accept the quote, create checkout, send payment or start execution. If the quote is accepted by the caller, pass its quoteId and one offered payment rail to prepare_repair.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceNoOptional attribution label for the calling agent or integration.
productIdNoOptional exact public productId suggested by diagnose_issue or chosen from the catalog. Omit to let NAIF match the closest service.
descriptionYesSanitized bounded repair need derived from diagnose_issue; describe the failure and desired repair outcome without secrets or PII.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
etaNoEstimated delivery time or service ETA when available.
errorNoPresent when the requested service is unavailable or commerce could not create a quote.
phaseNoQUOTE on a successful quote.
priceNoCommercial price returned by the quote service.
stateNoCurrent quote state returned by commerce.
quoteIdNoUnique non-binding quote identifier to pass to prepare_repair after explicit caller acceptance.
currencyNoQuote currency.
nextToolNoprepare_repair after explicit caller acceptance.
productIdNoMatched public repair product identifier.
exactAmountNoExact settlement amount when the selected payment design requires one; preserve it exactly as returned.
productNameNoHuman-readable matched repair service name.
automaticJobNoFalse; this tool never starts a repair job.
paymentRailsNoPayment rail descriptors offered for this quote; pass one descriptor id to prepare_repair.rail.
quoteAcceptedNoFalse; creating a quote does not accept it.
checkoutCreatedNoFalse; creating a quote does not create checkout.
commercialStateNoCommercial lifecycle state when available.
automaticPaymentNoFalse; this tool never sends or charges payment.
automaticExecutionNoFalse; this tool never starts repair execution.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedOutput schema / properties / paymentRails / description
      Previous value: -"Payment rails offered for this quote; choose exactly one of these in prepare_repair."New value: +"Payment rail descriptors offered for this quote; pass one descriptor id to prepare_repair.rail."
    • addedOutput schema / properties / paymentRails / items / additionalProperties
      Added value: +true
    • addedOutput schema / properties / paymentRails / items / properties
      Added value: +{
      +  "id": {
      +    "description": "Rail identifier to pass as prepare_repair.rail.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / paymentRails / items / required
      Added value: +[
      +  "id"
      +]
    • changedOutput schema / properties / paymentRails / items / type
      Previous value: -"string"New value: +"object"
  2. Changed4 schema fields changed
    • addedInput schema / properties / description / description
      Added value: +"Sanitized bounded repair need derived from diagnose_issue; describe the failure and desired repair outcome without secrets or PII."
    • addedInput schema / properties / productId / description
      Added value: +"Optional exact public productId suggested by diagnose_issue or chosen from the catalog. Omit to let NAIF match the closest service."
    • addedInput schema / properties / source / description
      Added value: +"Optional attribution label for the calling agent or integration."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Non-binding repair quote. A successful result includes quoteId, price/currency, offered paymentRails and nextTool=prepare_repair. An error field indicates no quote was created.",
      +  "properties": {
      +    "automaticExecution": {
      +      "description": "False; this tool never starts repair execution.",
      +      "type": "boolean"
      +    },
      +    "automaticJob": {
      +      "description": "False; this tool never starts a repair job.",
      +      "type": "boolean"
      +    },
      +    "automaticPayment": {
      +      "description": "False; this tool never sends or charges payment.",
      +      "type": "boolean"
      +    },
      +    "checkoutCreated": {
      +      "description": "False; creating a quote does not create checkout.",
      +      "type": "boolean"
      +    },
      +    "commercialState": {
      +      "description": "Commercial lifecycle state when available.",
      +      "type": "string"
      +    },
      +    "currency": {
      +      "description": "Quote currency.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "description": "Present when the requested service is unavailable or commerce could not create a quote.",
      +      "type": "string"
      +    },
      +    "eta": {
      +      "description": "Estimated delivery time or service ETA when available."
      +    },
      +    "exactAmount": {
      +      "description": "Exact settlement amount when the selected payment design requires one; preserve it exactly as returned."
      +    },
      +    "nextTool": {
      +      "description": "prepare_repair after explicit caller acceptance.",
      +      "type": "string"
      +    },
      +    "paymentRails": {
      +      "description": "Payment rails offered for this quote; choose exactly one of these in prepare_repair.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "phase": {
      +      "description": "QUOTE on a successful quote.",
      +      "type": "string"
      +    },
      +    "price": {
      +      "description": "Commercial price returned by the quote service."
      +    },
      +    "productId": {
      +      "description": "Matched public repair product identifier.",
      +      "type": "string"
      +    },
      +    "productName": {
      +      "description": "Human-readable matched repair service name.",
      +      "type": "string"
      +    },
      +    "quoteAccepted": {
      +      "description": "False; creating a quote does not accept it.",
      +      "type": "boolean"
      +    },
      +    "quoteId": {
      +      "description": "Unique non-binding quote identifier to pass to prepare_repair after explicit caller acceptance.",
      +      "type": "string"
      +    },
      +    "state": {
      +      "description": "Current quote state returned by commerce.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare idempotentHint=false and readOnlyHint=false, but the description adds the operational consequence the annotation cannot express: repeating the call may yield a different quoteId. It also enumerates what the tool deliberately does not do, which is real behavioral scope beyond the annotation flags. It stops short of stating auth requirements or quote expiry, so it is strong but not exhaustive.

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

Conciseness5/5

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

Four short sentences, front-loaded with the precondition before the mechanics. Every sentence carries a distinct payload: gating, creation semantics, non-idempotency, negative scope, and the successor call. No filler.

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?

With an output schema present, return values need not be described, and the description instead supplies the full workflow contract: what precedes it (diagnose_issue), what it produces (quoteId), and what consumes it (prepare_repair). Nothing an agent needs in order to call it correctly is missing.

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 productId, description and source are already documented with length bounds and semantics; the description's 'selected or automatically matched public service' only echoes the schema's productId omission behavior. No new format or syntax guidance is added, so the baseline 3 applies.

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 precise verb + resource: 'Creates a new non-binding quote for the selected or automatically matched public service.' It also draws the boundary against siblings by naming diagnose_issue as the prerequisite and prepare_repair as the successor, so an agent can place this tool in the workflow without opening any schema.

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?

Explicit gating condition ('Use only after diagnose_issue when the caller wants a priced bounded repair'), an explicit exclusion list ('does not accept the quote, create checkout, send payment or start execution'), and a named handoff rule ('pass its quoteId and one offered payment rail to prepare_repair'). When-not and alternative routing are both covered.

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.