Skip to main content
Glama

Nitech — heating spare parts and ordering

create_order

DestructiveIdempotent

Au client, parler de sa commande et de la prochaine action utile. Garder les noms d’outils, états bruts, identifiants internes, clés, jetons et étapes techniques hors du dialogue courant. Les autorisations affichées par l’application de l’assistant relèvent de cette application et ne remplacent pas l’accord demandé par Nitech. Après le récapitulatif et le lien vers les CGV de l’aperçu, poser une seule question, adaptée au montant réel. Exemple « Confirmez-vous cette commande de 210 € TTC et acceptez-vous les CGV ? » Une réponse explicite à cette question suffit pour l’accord de commande et les CGV. Ne pas demander de formule à recopier ni plusieurs déclarations. Après création, donner la référence client, le montant et la prochaine action utile. Créer une vraie commande Nitech dans le canal MCP autonome, sans boutique Web ni paiement. Appeler d’abord avec confirmation.confirmed=false pour présenter au client les articles, adresses, montant, terms_version et le lien terms_url des CGV conservables. Faire consulter ce lien avant de recueillir l’accord. Après son accord explicite, rappeler avec la même clé UUID, le token retourné, confirmed=true, confirmed_at, proof_reference et terms_version. Prix, stock, port et conditions sont revérifiés. Un changement exige un nouveau récapitulatif. Conserver la même clé et les mêmes arguments pour toute reprise, y compris après timeout ou résultat incertain ; ne jamais créer une nouvelle clé pour contourner pending ou un conflit. 30 lignes, 100 unités par ligne, 300 au total, 32 Kio. Ne déclenche ni paiement, facture, e-mail ni réservation. Après création, poursuivre par défaut sur MCP avec prepare_payment. Les liens privés web_resume des quatre boutiques restent des alternatives uniquement si le client les demande ; ne pas les proposer systématiquement. Ils conservent le même caddie et leur validité existante. 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. En cas de saisie invalide rejetée avant création (category=invalid_input, operation_outcome=not_created), lire error.fields (path, reason, expected_correction), demander la correction puis rappeler confirmed=false avec la même clé. Présenter les coordonnées et le montant actualisés et recueillir un nouvel accord avant confirmed=true. Une ancienne confirmation ne couvre pas une adresse corrigée. Pour unknown, pending ou un conflit d’idempotence : ne changer ni clé ni arguments, réconcilier. La facturation utilise la référence pays, pas les zones desservies. Aucun contrôle d’existence de rue ou de correspondance rue–ville–code postal.

Input Schema

NameRequiredDescriptionDefault
linesYes
customerYes
deliveryNo
confirmationYes
interaction_idYes
billing_addressYes
idempotency_keyYes
shipping_addressYes

Output Schema

NameRequiredDescriptionDefault
errorNo
stateNo
originNo
statusYes
summaryNo
currencyNo
order_idNo
replayedNo
referenceNo
web_resumeNo
confirmationNo
amount_to_payNo
order_createdNo
schema_versionYes
payment_createdNo
operation_outcomeNo
operation_referenceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • removedInput schema / properties / confirmation / properties / terms_version / const
      Removed value: -"livraison-2026-10-08-v1"
    • addedInput schema / properties / confirmation / properties / terms_version / maxLength
      Added value: +100
    • addedInput schema / properties / confirmation / properties / terms_version / minLength
      Added value: +1
    • addedInput schema / properties / confirmation / properties / terms_version / pattern
      Added value: +"^[A-Za-z0-9._-]+$"
    • changedOutput schema / properties / confirmation / properties / terms_version / const
      Previous value: -"livraison-2026-10-08-v1"New value: +"nitech-mcp-cgv-2026-11-02-v1"
    • removedOutput schema / properties / confirmation / properties / terms_version / type
      Removed value: -"string"
    • addedOutput schema / properties / summary / properties / terms_sha256
      Added value: +{
      +  "const": "f230ffaafbccf237d225b3ece289e4b03787c4399eb2aaa6a6103d2620e951c9"
      +}
    • addedOutput schema / properties / summary / properties / terms_url
      Added value: +{
      +  "const": "https://mcp.nitech.fr/payments/terms/nitech-mcp-cgv-2026-11-02-v1.txt"
      +}
    • addedOutput schema / properties / summary / properties / terms_version
      Added value: +{
      +  "const": "nitech-mcp-cgv-2026-11-02-v1"
      +}
    • changedOutput schema / properties / summary / required
      Previous value: -[
      -  "customer",
      -  "billing_address",
      -  "shipping_address",
      -  "lines",
      -  "currency",
      -  "products_amount_ht",
      -  "shipping_amount_ht",
      -  "grand_total_ht",
      -  "amount_to_pay",
      -  "tax_breakdown",
      -  "terms_text",
      -  "terms_notice"
      -]New value: +[
      +  "customer",
      +  "billing_address",
      +  "shipping_address",
      +  "lines",
      +  "currency",
      +  "products_amount_ht",
      +  "shipping_amount_ht",
      +  "grand_total_ht",
      +  "amount_to_pay",
      +  "tax_breakdown",
      +  "terms_text",
      +  "terms_notice",
      +  "terms_version",
      +  "terms_url",
      +  "terms_sha256"
      +]
  2. Changed4 schema fields changed
    • 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"
      +}
    • changedOutput schema / properties / error / 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 / summary / properties / delivery
      Added value: +{
      +  "oneOf": [
      +    {
      +      "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"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "mode": {
      +          "const": "home"
      +        }
      +      },
      +      "required": [
      +        "mode"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / summary / properties / shipping_amount_ttc
      Added value: +{
      +  "pattern": "^[0-9]+[.][0-9]{2}$",
      +  "type": "string"
      +}
  3. Changed5 schema fields changed
    • addedOutput schema / properties / error / properties / arguments_may_change
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / error / properties / category
      Added value: +{
      +  "enum": [
      +    "invalid_input",
      +    "destination_not_served",
      +    "temporarily_unavailable",
      +    "operation_uncertain",
      +    "other_rejection"
      +  ]
      +}
    • addedOutput schema / properties / error / 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 / error / 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"
      +  ]
      +}
    • addedOutput schema / properties / operation_outcome
      Added value: +{
      +  "enum": [
      +    "not_created",
      +    "unknown"
      +  ]
      +}
  4. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, and the description adds real context beyond that: price/stock/shipping/terms are re-verified on the confirmed call, no payment, invoice, email or reservation is triggered, and limits are given (30 lines, 100 units/line, 300 total, 32 KiB). It also specifies that any change (address, relay) invalidates the prior preview and token, which is meaningful for a destructive, idempotent mutation. It does not describe the response payload, but an output schema exists.

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?

A single dense ~450-word block with no headings or paragraphing, mixing customer-facing dialogue scripts, consent policy, error taxonomy, GLS logistics, and hard limits. The most important fact (it creates an order via a two-call confirm flow) is not front-loaded, and several sentences are policy prose rather than invocation guidance.

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 an 8-parameter, nested-object mutation with an output schema available, the description covers the confirmation protocol, idempotency/retry reconciliation (same key and arguments on timeout, pending, or conflict, never a fresh key), invalid_input handling via error.fields, and post-creation next steps. The main omissions are the meaning of interaction_id and proof_reference, which an agent must construct without guidance.

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 description coverage is 0%, so the description must carry parameter meaning, and it does much of that: the delivery object shape {mode:gls_pickup, relay_id} and how to source relay_id, the confirmation object's two-phase fields, the reused UUID idempotency key, independent billing vs shipping addresses, and country-reference-based billing. Gaps remain: interaction_id is never explained and proof_reference is named in the call sequence without defining what it must contain.

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 core statement 'Créer une vraie commande Nitech dans le canal MCP autonome, sans boutique Web ni paiement' gives a specific verb, resource, and channel, and the text names prepare_payment as the follow-up and web_resume links as alternatives, so it is distinguishable from siblings. However, the description opens with customer-dialogue scripting rather than the tool's purpose, so the actual function is buried mid-paragraph.

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 two-phase usage is spelled out: call first with confirmation.confirmed=false to present items, addresses, amount, terms_version and terms_url; after explicit agreement call again with the same UUID key plus token, confirmed=true, confirmed_at, proof_reference and terms_version. It also states when not to escalate to web_resume links ('ne pas les proposer systématiquement'), how to obtain a relay_id via search_relay_points, and that the default follow-up is prepare_payment.

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