Skip to main content
Glama

qonto_create_invoice

RÉSERVÉ AU STUDIO (token). Crée une facture client Qonto (brouillon/proforma par défaut, ou 'unpaid' = officielle) et renvoie numéro, total, lien de paiement Mollie. Client cherché par id, email puis nom ; création possible avec create_client_if_missing=true + adresse. Anti-doublon : refuse un document identique le même jour (sauf force=true) ; request_id rend l'appel rejouable sans doublon. Aucun PDF dans la réponse : utiliser prepare_quote_email (qonto_type/qonto_number) pour l'envoyer, qonto_get pour l'URL PDF.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoVille — obligatoire pour créer un client.
forceNoCréer même si un document identique (même client, même total, même jour) existe déjà. Défaut false.
itemsYesLignes (au moins 1).
statusNodraft (proforma, à finaliser plus tard) ou unpaid (facture officielle). Défaut : draft.
due_daysNoJours avant échéance (défaut 30).
zip_codeNoCode postal — obligatoire pour créer un client, sauf address_unknown.
client_idNoId Qonto du client (prioritaire sur email/nom).
auth_tokenNoToken d'administration (si le client MCP ne permet pas le header Authorization).
request_idNoIdentifiant unique de CET appel (ex. 'mate027-devis-2026-09-22'). Si le même request_id est rejoué (timeout, relance), le serveur renvoie la réponse d'origine sans rien recréer.
tin_numberNoSIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel.
vat_numberNoN° TVA intracom du client créé (optionnel).
client_kindNoType du client créé. Défaut individual (le nom du label/artiste est conservé tel quel comme nom affiché) ; company UNIQUEMENT avec tin_number (SIREN/SIRET) — sinon Qonto refuse le devis.
client_nameNoNom du client (label, studio, artiste ou 'Prénom Nom'). Recherche exacte insensible à la casse.
client_emailNoEmail du client (recherche par email d'abord).
contact_nameNoPrénom Nom de la personne de contact (ex. 'Rafa Santos') quand client_name est un label — sert de prénom/nom Qonto. Optionnel.
client_countryNoCode pays ISO2 du client créé (défaut FR).
street_addressNoAdresse de facturation (rue) — obligatoire pour créer un client, sauf address_unknown.
address_unknownNoLe client n'a PAS communiqué son adresse : rue/code postal remplacés par « — » (ville + pays requis). JAMAIS inventer une adresse — la demander au client.
create_client_if_missingNoSi le client n'existe pas : le créer (sinon erreur explicite). Exige alors l'adresse ci-dessous.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • addedInput schema / properties / address_unknown
      Added value: +{
      +  "description": "Le client n'a PAS communiqué son adresse : rue/code postal remplacés par « — » (ville + pays requis). JAMAIS inventer une adresse — la demander au client.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / city
      Added value: +{
      +  "description": "Ville — obligatoire pour créer un client.",
      +  "type": "string"
      +}
    • changedInput schema / properties / client_country / description
      Previous value: -"Code pays ISO2 (FR par défaut). Ex : 'US', 'DE', 'NL'."New value: +"Code pays ISO2 du client créé (défaut FR)."
    • changedInput schema / properties / client_email / description
      Previous value: -"Email du client. Utilisé pour la recherche par email d'abord."New value: +"Email du client (recherche par email d'abord)."
    • addedInput schema / properties / client_id
      Added value: +{
      +  "description": "Id Qonto du client (prioritaire sur email/nom).",
      +  "type": "string"
      +}
    • addedInput schema / properties / client_kind
      Added value: +{
      +  "description": "Type du client créé. Défaut individual (le nom du label/artiste est conservé tel quel comme nom affiché) ; company UNIQUEMENT avec tin_number (SIREN/SIRET) — sinon Qonto refuse le devis.",
      +  "enum": [
      +    "company",
      +    "individual"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / client_name / description
      Previous value: -"Nom du client (raison sociale ou 'Prénom Nom'). Utilisé pour la recherche et la création si absent."New value: +"Nom du client (label, studio, artiste ou 'Prénom Nom'). Recherche exacte insensible à la casse."
    • addedInput schema / properties / contact_name
      Added value: +{
      +  "description": "Prénom Nom de la personne de contact (ex. 'Rafa Santos') quand client_name est un label — sert de prénom/nom Qonto. Optionnel.",
      +  "type": "string"
      +}
    • addedInput schema / properties / create_client_if_missing
      Added value: +{
      +  "description": "Si le client n'existe pas : le créer (sinon erreur explicite). Exige alors l'adresse ci-dessous.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / due_days / description
      Previous value: -"Nombre de jours avant échéance (défaut 30)."New value: +"Jours avant échéance (défaut 30)."
    • addedInput schema / properties / force
      Added value: +{
      +  "description": "Créer même si un document identique (même client, même total, même jour) existe déjà. Défaut false.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / items / description
      Previous value: -"Lignes de la facture. Au moins 1 item."New value: +"Lignes (au moins 1)."
    • addedInput schema / properties / request_id
      Added value: +{
      +  "description": "Identifiant unique de CET appel (ex. 'mate027-devis-2026-09-22'). Si le même request_id est rejoué (timeout, relance), le serveur renvoie la réponse d'origine sans rien recréer.",
      +  "type": "string"
      +}
    • changedInput schema / properties / status / description
      Previous value: -"draft (proforma, à finaliser plus tard) ou unpaid (facture officielle envoyée). Défaut : draft."New value: +"draft (proforma, à finaliser plus tard) ou unpaid (facture officielle). Défaut : draft."
    • addedInput schema / properties / street_address
      Added value: +{
      +  "description": "Adresse de facturation (rue) — obligatoire pour créer un client, sauf address_unknown.",
      +  "type": "string"
      +}
    • addedInput schema / properties / tin_number
      Added value: +{
      +  "description": "SIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel.",
      +  "type": "string"
      +}
    • addedInput schema / properties / vat_number
      Added value: +{
      +  "description": "N° TVA intracom du client créé (optionnel).",
      +  "type": "string"
      +}
    • addedInput schema / properties / zip_code
      Added value: +{
      +  "description": "Code postal — obligatoire pour créer un client, sauf address_unknown.",
      +  "type": "string"
      +}
  2. Added

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses idempotency via request_id, same-day duplicate refusal, force=true override behavior, the absence of PDFs in responses, and the client lookup priority (id, email, then name).

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?

The description is dense but efficiently structured: purpose first, then client resolution, duplicate protection, and PDF alternatives. Every clause earns its place, and it is not padded with redundant schema repetition.

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?

Despite 19 parameters and no output schema or annotations, the description is complete enough for an agent to invoke the tool safely: it covers statuses, return values, client creation, idempotency, duplicate handling, and the correct sibling tools for sending and PDF retrieval. Remaining parameter details live in a fully covered schema.

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 cross-parameter meaning beyond individual schema descriptions: client matching precedence, the condition that create_client_if_missing requires an address, and how request_id prevents duplicate creation. This synthesis helps an agent choose and combine parameters correctly.

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?

The description opens with a specific verb and resource: "Crée une facture client Qonto", and clarifies the status variants (draft/proforma vs unpaid official). It also states what the tool returns (numéro, total, lien de paiement Mollie) and explicitly routes PDF-related needs to sibling tools, distinguishing it from prepare_quote_email and qonto_get.

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?

The description gives clear context on when to use this tool versus alternatives: it creates invoices, not PDFs, and explicitly says to use prepare_quote_email for sending and qonto_get for the PDF URL. It also explains client resolution order and creation behavior, though it does not explicitly say "use qonto_create_quote for quotes" — the distinction is implied by the word facture.

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