Skip to main content
Glama

Nitech — heating spare parts and ordering

quote_cart

Read-onlyIdempotent

Contrat JSON : destination et lines sont obligatoires à la racine. country_code et postal_code sont des chaînes DANS destination, jamais à la racine. Sans delivery (domicile), destination contient uniquement country_code et postal_code : ne pas envoyer city ni address_line1. France : postal_code complet requis. lines est un tableau d’objets {product_id: entier, quantity: entier}, sans autre champ. Exemple minimal domicile France : {"destination":{"country_code":"FR","postal_code":"54000"},"lines":[{"product_id":1843,"quantity":1}]}. Avec delivery GLS, conserver le contrat existant : destination contient aussi city et address_line1, delivery={mode:gls_pickup,relay_id} obtenu par search_relay_points. quote_cart n’accepte ni confirmation ni coordonnées de commande. Préparer un devis complet du panier depuis les offres et le port Nitech actuels. Pays et code postal selon la zone, product_id et quantity seulement. 30 lignes distinctes, 100 unités par ligne, 300 au total, 8 Kio. Doublons refusés. Lecture seule sans panier, réservation, commande ni paiement. Toute ligne invalide bloque les totaux. Offres et port à relire lors de la commande ; checkout des boutiques autoritaire. Livraison GLS optionnelle : delivery={mode:gls_pickup,relay_id}, identifiant obtenu par search_relay_points ; destination de recherche complète requise pour les devis. Aucun champ libre de relais. Le récapitulatif confirmed=false porte le mode, le relais vérifié, les frais et le total. Conserver identité/email/téléphone du destinataire, et facturation indépendante. Toute modification exige un nouvel aperçu et un nouvel accord/token ; jamais de remplacement silencieux du relais. Lire category et fields (path, reason, expected_correction) dans les erreurs. Corriger la saisie si demandé ; destination_not_served appelle une autre destination ou Nitech ; temporarily_unavailable appelle la même demande sans accuser l’adresse. Après correction : nouveau devis, puis coordonnées et montant à faire confirmer avant création. Aucun contrôle postal réel.

Input Schema

NameRequiredDescriptionDefault
linesYesTableau obligatoire à la racine ; chaque objet contient product_id et quantity, tous deux entiers JSON.
deliveryNo
destinationYesObjet obligatoire à la racine. Domicile sans delivery : country_code et postal_code seulement ; pas de city/address_line1. Avec delivery GLS : city et address_line1 aussi requis selon allOf.

Output Schema

NameRequiredDescriptionDefault
linesNo
scopeYes
errorsNo
statusYes
currencyNo
roundingNo
shippingNo
warningsNo
expires_atYes
tax_breakdownNo
grand_total_htNo
schema_versionYes
grand_total_ttcNo
products_amount_htNo
shipping_amount_htNo
products_amount_ttcNo
shipping_amount_ttcNo
shipping_tax_amountNo
products_rounding_adjustment_ttcNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • changedInput schema / description
      Previous value: -"30 lignes distinctes, 100 unités par ligne, 300 unités au total, 8192 octets JSON. Doublons refusés. Panier vide et quantité invalide : erreurs structurées. France : code postal requis. Aucune donnée personnelle ni donnée commerciale client."New value: +"Contrat JSON : destination et lines sont obligatoires à la racine. country_code et postal_code sont des chaînes DANS destination, jamais à la racine. Sans delivery (domicile), destination contient uniquement country_code et postal_code : ne pas envoyer city ni address_line1. France : postal_code complet requis. lines est un tableau d’objets {product_id: entier, quantity: entier}, sans autre champ. Exemple minimal domicile France : {\"destination\":{\"country_code\":\"FR\",\"postal_code\":\"54000\"},\"lines\":[{\"product_id\":1843,\"quantity\":1}]}. Avec delivery GLS, conserver le contrat existant : destination contient aussi city et address_line1, delivery={mode:gls_pickup,relay_id} obtenu par search_relay_points. quote_cart n’accepte ni confirmation ni coordonnées de commande. 30 lignes distinctes, 100 unités par ligne, 300 unités au total, 8192 octets JSON. Doublons refusés. Panier vide et quantité invalide : erreurs structurées. France : code postal requis. Aucune donnée personnelle ni donnée commerciale client."
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "destination": {
      +      "country_code": "FR",
      +      "postal_code": "54000"
      +    },
      +    "lines": [
      +      {
      +        "product_id": 1843,
      +        "quantity": 1
      +      }
      +    ]
      +  }
      +]
    • addedInput schema / properties / destination / description
      Added value: +"Objet obligatoire à la racine. Domicile sans delivery : country_code et postal_code seulement ; pas de city/address_line1. Avec delivery GLS : city et address_line1 aussi requis selon allOf."
    • addedInput schema / properties / destination / properties / address_line1 / description
      Added value: +"Chaîne : uniquement pour delivery GLS ; ne pas transmettre pour un devis domicile sans delivery."
    • addedInput schema / properties / destination / properties / city / description
      Added value: +"Chaîne : uniquement pour delivery GLS ; ne pas transmettre pour un devis domicile sans delivery."
    • addedInput schema / properties / destination / properties / country_code / description
      Added value: +"Chaîne de deux lettres dans destination, par exemple FR ; jamais un champ racine."
    • addedInput schema / properties / destination / properties / postal_code / description
      Added value: +"Chaîne dans destination, par exemple 54000 entre guillemets ; code complet requis pour la France."
    • addedInput schema / properties / lines / description
      Added value: +"Tableau obligatoire à la racine ; chaque objet contient product_id et quantity, tous deux entiers JSON."
    • addedInput schema / properties / lines / items / properties / product_id / description
      Added value: +"Entier JSON obligatoire dans chaque objet de lines ; pas une chaîne."
    • addedInput schema / properties / lines / items / properties / quantity / description
      Added value: +"Entier JSON obligatoire dans chaque objet de lines ; pas une chaîne."
  2. Changed7 schema fields changed
    • addedInput schema / allOf
      Added value: +[
      +  {
      +    "if": {
      +      "required": [
      +        "delivery"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "destination": {
      +          "required": [
      +            "country_code",
      +            "postal_code",
      +            "address_line1",
      +            "city"
      +          ]
      +        }
      +      }
      +    }
      +  }
      +]
    • addedInput schema / properties / delivery
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "mode": {
      +      "const": "gls_pickup"
      +    },
      +    "relay_id": {
      +      "pattern": "^[A-Za-z0-9_-]{1,80}$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "mode",
      +    "relay_id"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / destination / properties / address_line1
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / destination / properties / city
      Added value: +{
      +  "maxLength": 100,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedOutput schema / properties / errors / items / properties / code / enum
      Previous value: -[
      -  "EMPTY_CART",
      -  "DUPLICATE_PRODUCT_ID",
      -  "INVALID_QUANTITY",
      -  "INVALID_ARGUMENTS",
      -  "REQUEST_TOO_LARGE",
      -  "PRODUCT_NOT_FOUND",
      -  "PRODUCT_NOT_PUBLIC",
      -  "PRODUCT_NOT_ON_SALE",
      -  "PRODUCT_NOT_ORDERABLE",
      -  "PRICE_UNAVAILABLE",
      -  "CURRENCY_MISMATCH",
      -  "DESTINATION_NOT_SERVED",
      -  "ZONE_UNDETERMINED",
      -  "INCOMPLETE_LOGISTICS_PROFILE",
      -  "CURRENT_RULE_UNSUPPORTED",
      -  "OFFER_SOURCE_UNAVAILABLE",
      -  "SHIPPING_SOURCE_UNAVAILABLE",
      -  "SOURCE_UNAVAILABLE",
      -  "BACKEND_ACCESS_DENIED"
      -]New value: +[
      +  "EMPTY_CART",
      +  "DUPLICATE_PRODUCT_ID",
      +  "INVALID_QUANTITY",
      +  "INVALID_ARGUMENTS",
      +  "REQUEST_TOO_LARGE",
      +  "PRODUCT_NOT_FOUND",
      +  "PRODUCT_NOT_PUBLIC",
      +  "PRODUCT_NOT_ON_SALE",
      +  "PRODUCT_NOT_ORDERABLE",
      +  "PRICE_UNAVAILABLE",
      +  "CURRENCY_MISMATCH",
      +  "DESTINATION_NOT_SERVED",
      +  "ZONE_UNDETERMINED",
      +  "INCOMPLETE_LOGISTICS_PROFILE",
      +  "CURRENT_RULE_UNSUPPORTED",
      +  "OFFER_SOURCE_UNAVAILABLE",
      +  "SHIPPING_SOURCE_UNAVAILABLE",
      +  "SOURCE_UNAVAILABLE",
      +  "BACKEND_ACCESS_DENIED",
      +  "GLS_UNAVAILABLE",
      +  "RELAY_INVALID",
      +  "RELAY_NOT_ELIGIBLE"
      +]
    • changedOutput schema / properties / errors / items / properties / next_action / enum
      Previous value: -[
      -  "correct_then_requote_and_confirm",
      -  "change_destination_or_contact_nitech",
      -  "retry_same_request",
      -  "reconcile_same_key_same_arguments",
      -  "renew_confirmation",
      -  "contact_nitech"
      -]New value: +[
      +  "correct_then_requote_and_confirm",
      +  "change_destination_or_contact_nitech",
      +  "retry_same_request",
      +  "reconcile_same_key_same_arguments",
      +  "renew_confirmation",
      +  "contact_nitech",
      +  "search_relay_then_requote_and_confirm",
      +  "change_delivery_then_requote_and_confirm"
      +]
    • addedOutput schema / properties / shipping / properties / delivery
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "mode": {
      +      "const": "gls_pickup"
      +    },
      +    "relay": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "address": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "address_line1": {
      +              "maxLength": 200,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "address_line2": {
      +              "maxLength": 161,
      +              "minLength": 0,
      +              "type": "string"
      +            },
      +            "city": {
      +              "maxLength": 100,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "country_code": {
      +              "pattern": "^[A-Z]{2}$",
      +              "type": "string"
      +            },
      +            "postal_code": {
      +              "maxLength": 12,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "address_line1",
      +            "address_line2",
      +            "postal_code",
      +            "city",
      +            "country_code"
      +          ],
      +          "type": "object"
      +        },
      +        "holidays_gls": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "EndDate": {
      +                "format": "date",
      +                "type": "string"
      +              },
      +              "StartDate": {
      +                "format": "date",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "StartDate",
      +              "EndDate"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 100,
      +          "type": "array"
      +        },
      +        "name": {
      +          "maxLength": 120,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "opening_hours": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "breaks": {
      +                "items": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "from": {
      +                      "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$",
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "from",
      +                    "to"
      +                  ],
      +                  "type": "object"
      +                },
      +                "maxItems": 10,
      +                "type": "array"
      +              },
      +              "day": {
      +                "enum": [
      +                  "MON",
      +                  "TUE",
      +                  "WED",
      +                  "THU",
      +                  "FRI",
      +                  "SAT",
      +                  "SUN"
      +                ]
      +              },
      +              "periods": {
      +                "items": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "from": {
      +                      "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$",
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "from",
      +                    "to"
      +                  ],
      +                  "type": "object"
      +                },
      +                "maxItems": 10,
      +                "minItems": 1,
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "day",
      +              "periods",
      +              "breaks"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 7,
      +          "type": "array"
      +        },
      +        "relay_id": {
      +          "pattern": "^[A-Za-z0-9_-]{1,80}$",
      +          "type": "string"
      +        },
      +        "working_days_gls": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "Breaks": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "OpeningHours": {
      +                    "items": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "From": {
      +                          "maximum": 86400000,
      +                          "minimum": -3600000,
      +                          "type": "integer"
      +                        },
      +                        "To": {
      +                          "maximum": 86400000,
      +                          "minimum": -3600000,
      +                          "type": "integer"
      +                        }
      +                      },
      +                      "required": [
      +                        "From",
      +                        "To"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "maxItems": 10,
      +                    "type": "array"
      +                  }
      +                },
      +                "required": [
      +                  "OpeningHours"
      +                ],
      +                "type": "object"
      +              },
      +              "DayOfWeek": {
      +                "enum": [
      +                  "MON",
      +                  "TUE",
      +                  "WED",
      +                  "THU",
      +                  "FRI",
      +                  "SAT",
      +                  "SUN"
      +                ]
      +              },
      +              "OpeningHours": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "OpeningHours": {
      +                    "items": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "From": {
      +                          "maximum": 86400000,
      +                          "minimum": -3600000,
      +                          "type": "integer"
      +                        },
      +                        "To": {
      +                          "maximum": 86400000,
      +                          "minimum": -3600000,
      +                          "type": "integer"
      +                        }
      +                      },
      +                      "required": [
      +                        "From",
      +                        "To"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "maxItems": 10,
      +                    "type": "array"
      +                  }
      +                },
      +                "required": [
      +                  "OpeningHours"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "DayOfWeek",
      +              "OpeningHours"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 7,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "relay_id",
      +        "name",
      +        "address"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "mode",
      +    "relay"
      +  ],
      +  "type": "object"
      +}
  3. Changed4 schema fields changed
    • addedOutput schema / properties / errors / items / properties / arguments_may_change
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / errors / items / properties / category
      Added value: +{
      +  "enum": [
      +    "invalid_input",
      +    "destination_not_served",
      +    "temporarily_unavailable",
      +    "operation_uncertain",
      +    "other_rejection"
      +  ]
      +}
    • addedOutput schema / properties / errors / items / properties / fields
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "expected_correction": {
      +        "maxLength": 600,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "path": {
      +        "maxLength": 160,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "reason": {
      +        "maxLength": 80,
      +        "pattern": "^[a-z_]+$",
      +        "type": "string"
      +      },
      +      "validation_layer": {
      +        "enum": [
      +          "format",
      +          "serviceability",
      +          "reference",
      +          "technical"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "path",
      +      "reason",
      +      "expected_correction",
      +      "validation_layer"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • addedOutput schema / properties / errors / items / properties / next_action
      Added value: +{
      +  "enum": [
      +    "correct_then_requote_and_confirm",
      +    "change_destination_or_contact_nitech",
      +    "retry_same_request",
      +    "reconcile_same_key_same_arguments",
      +    "renew_confirmation",
      +    "contact_nitech"
      +  ]
      +}
  4. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), yet the description adds substantial behavioral context: hard limits (30 lines, 100 units/line, 300 total, 8 KiB), duplicate rejection, 'any invalid line blocks totals', the fact that the quote is non-authoritative and prices/shipping must be re-read at order time, and that there is no real postal validation. It also previews the confirmed=false recap contents (mode, verified relay, fees, total) and the error shape (category, path, reason, expected_correction).

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

Conciseness3/5

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

The content is valuable but poorly front-loaded — the tool's actual purpose appears mid-text after schema mechanics — and several rules are stated twice (the GLS delivery={mode:gls_pickup,relay_id} from search_relay_points requirement, and the 'destination/lines at root' contract). Trimming the repetition and leading with what the tool does would make it materially easier to scan.

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?

Given an output schema exists, the description need not explain return values, and it correctly focuses on the contract, limits, delivery branch, error taxonomy, and remediation paths (destination_not_served → different destination or Nitech; temporarily_unavailable → retry same request). For a nested-object, conditionally-required quote tool, nothing an agent needs in order to call it correctly 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?

With 67% schema coverage the description still adds real meaning: country_code/postal_code live inside destination and never at the root, city/address_line1 must be omitted for home delivery but are required with GLS delivery, lines objects accept only product_id and quantity as integers, and relay_id must come from search_relay_points. It also supplies a minimal worked example, which helps more than prose. Some of this restates the schema's own property descriptions, limiting it below a 5.

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 purpose is stated — 'Préparer un devis complet du panier depuis les offres et le port Nitech actuels' — but it is buried in the middle after a long JSON-contract preamble, so an agent must read several sentences to learn what the tool does. It does distinguish itself from order flows ('quote_cart n'accepte ni confirmation ni coordonnées de commande', 'checkout des boutiques autoritaire') but never names the closest sibling, quote_cart_shipping, to differentiate.

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 clear operating conditions and exclusions: read-only, no cart/order/payment, no confirmation or order coordinates accepted, GLS delivery only if a relay_id was obtained via search_relay_points, and a new quote plus confirmation required after any correction. The main gap is that it never says when to prefer quote_cart versus quote_cart_shipping, leaving a genuine routing ambiguity between two sibling tools.

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