Skip to main content
Glama
fauguste

boondmanager-mcp-server

Créer un(e) note de frais

boond_expenses_create

Create a monthly expense report for a resource in BoondManager and optionally include actual expense lines with project, delivery, date, tax, and amount details.

Instructions

Crée une note de frais dans BoondManager. Une note de frais = un mois (term) × une ressource, dont les lignes sont portées par actualExpenses.

Plutôt que : boond_expenses_update pour ajouter des lignes à un mois déjà ouvert — mais actualExpenses y remplace tout le tableau, ce qui efface les lignes existantes si elles ne sont pas renvoyées.

⚠️ Appeler boond_expenses_default d'abord : il fournit agencyId, currencyAgency, exchangeRateAgency, les expenseTypeReference disponibles (définis par agence, absents de boond_application_dictionary) et les couples projectId / deliveryId imputables. Sans ces valeurs l'API répond 422.

Sur une ligne, amountIncludingTax est le montant TTC et tax un taux de TVA en %. Le montant HT et le montant de TVA sont recalculés par BoondManager, ils ne se saisissent pas.

L'état de la note de frais n'est pas pilotable ici : une création part toujours en savedAndNoValidation, le passage en validation relève du workflow BoondManager.

Returns: Données de la note de frais créée avec son ID.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
termYesMois de la note de frais (YYYY-MM). Une note de frais = un mois × une ressource.
advanceNoAvance à reprendre.
agencyIdNoID de l'agence — voir `boond_expenses_default`. Déduit de la ressource si omis.
resourceIdYesID de la ressource (le collaborateur qui a engagé les frais).
actualExpensesNoLignes de frais réels. Omettre pour créer une note de frais vide.
currencyAgencyNoID de devise de l'agence (`setting.currency`).
exchangeRateAgencyNoTaux de change agence. Obligatoire côté API.
informationCommentsNoCommentaires de la note de frais.
ratePerKilometerTypeReferenceNoCode du barème kilométrique (`reference`) — voir `boond_expenses_default`.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoIdentifiant de l'entité créée/modifiée
typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed19 schema fields changedv2.14.0
    • addedInput schema / properties / actualExpenses
      Added value: +{
      +  "description": "Lignes de frais réels. Omettre pour créer une note de frais vide.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "activityType": {
      +        "default": "production",
      +        "description": "Type d'activité rattachée au frais.",
      +        "enum": [
      +          "production",
      +          "internal",
      +          "absence"
      +        ],
      +        "type": "string"
      +      },
      +      "amountIncludingTax": {
      +        "description": "Montant TTC. Ignoré pour un frais kilométrique (recalculé = km × barème).",
      +        "type": "number"
      +      },
      +      "batchId": {
      +        "description": "ID du lot. Absent = aucun lot.",
      +        "type": "string"
      +      },
      +      "currency": {
      +        "default": 0,
      +        "description": "ID de devise (`setting.currency`, 0 = EUR).",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "deliveryId": {
      +        "description": "ID de la prestation (delivery) à imputer. Obligatoire — voir `boond_expenses_default`.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "exchangeRate": {
      +        "default": 1,
      +        "description": "Taux de change vers la devise agence.",
      +        "type": "number"
      +      },
      +      "expenseTypeReference": {
      +        "description": "Code du type de frais (`reference`), à lire via `boond_expenses_default` — les types de frais sont définis par agence et ne figurent PAS dans `boond_application_dictionary`. À omettre pour un frais kilométrique.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "file": {
      +        "description": "ID du justificatif déjà téléversé, suffixé (ex: `52979_proof`). Un fichier doit d'abord être créé via `boond_documents_create` (`parentType: 'expensesReport'`).",
      +        "type": "string"
      +      },
      +      "isKilometricExpense": {
      +        "default": false,
      +        "description": "`true` pour un frais kilométrique : renseigner `numberOfKilometers` et omettre `expenseTypeReference`.",
      +        "type": "boolean"
      +      },
      +      "numberOfKilometers": {
      +        "description": "Nombre de kilomètres (frais kilométrique uniquement).",
      +        "type": "number"
      +      },
      +      "projectId": {
      +        "description": "ID du projet à imputer. Obligatoire — les couples (projet, prestation) autorisés sont donnés par `boond_expenses_default`.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "reinvoiced": {
      +        "default": false,
      +        "description": "Frais refacturable au client.",
      +        "type": "boolean"
      +      },
      +      "startDate": {
      +        "description": "Date du frais (YYYY-MM-DD). Doit tomber dans le mois `term` de la note de frais.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "tax": {
      +        "description": "Taux de TVA en % (ex: 20 pour 20 %) — un taux, pas un montant. Défaut API: 0.",
      +        "type": "number"
      +      },
      +      "title": {
      +        "description": "Description libre de la ligne (marchand, motif, invités...).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "startDate",
      +      "projectId",
      +      "deliveryId"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / advance
      Added value: +{
      +  "description": "Avance à reprendre.",
      +  "type": "number"
      +}
    • addedInput schema / properties / agencyId
      Added value: +{
      +  "description": "ID de l'agence — voir `boond_expenses_default`. Déduit de la ressource si omis.",
      +  "type": "string"
      +}
    • removedInput schema / properties / amount
      Removed value: -{
      -  "description": "Montant du frais",
      -  "type": "number"
      -}
    • removedInput schema / properties / currency
      Removed value: -{
      -  "description": "Devise (EUR, USD...)",
      -  "type": "string"
      -}
    • addedInput schema / properties / currencyAgency
      Added value: +{
      +  "description": "ID de devise de l'agence (`setting.currency`).",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedInput schema / properties / exchangeRateAgency / default
      Added value: +1
    • changedInput schema / properties / exchangeRateAgency / description
      Previous value: -"Taux de change agence"New value: +"Taux de change agence. Obligatoire côté API."
    • removedInput schema / properties / expenseDate
      Removed value: -{
      -  "description": "Date du frais (YYYY-MM-DD)",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • addedInput schema / properties / informationComments
      Added value: +{
      +  "description": "Commentaires de la note de frais.",
      +  "type": "string"
      +}
    • removedInput schema / properties / note
      Removed value: -{
      -  "description": "Description / justification",
      -  "type": "string"
      -}
    • removedInput schema / properties / projectId
      Removed value: -{
      -  "description": "ID du projet associé",
      -  "type": "string"
      -}
    • addedInput schema / properties / ratePerKilometerTypeReference
      Added value: +{
      +  "description": "Code du barème kilométrique (`reference`) — voir `boond_expenses_default`.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedInput schema / properties / resourceId / description
      Previous value: -"ID de la ressource"New value: +"ID de la ressource (le collaborateur qui a engagé les frais)."
    • removedInput schema / properties / state
      Removed value: -{
      -  "description": "État de la note de frais",
      -  "maximum": 9007199254740991,
      -  "minimum": -9007199254740991,
      -  "type": "integer"
      -}
    • changedInput schema / properties / term / description
      Previous value: -"Période de la note de frais (YYYY-MM)"New value: +"Mois de la note de frais (YYYY-MM). Une note de frais = un mois × une ressource."
    • addedInput schema / properties / term / pattern
      Added value: +"^\\d{4}-\\d{2}$"
    • removedInput schema / properties / typeOf
      Removed value: -{
      -  "description": "Type de frais (transport, repas, hébergement...)",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "resourceId",
      -  "expenseDate",
      -  "amount"
      -]New value: +[
      +  "resourceId",
      +  "term"
      +]
  2. Changed2 schema fields changedv2.12.2
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  3. Changed2 schema fields changedv2.8.0
    • addedInput schema / properties / exchangeRateAgency
      Added value: +{
      +  "description": "Taux de change agence",
      +  "type": "number"
      +}
    • addedInput schema / properties / term
      Added value: +{
      +  "description": "Période de la note de frais (YYYY-MM)",
      +  "type": "string"
      +}
  4. Changed1 schema field changedv2.7.0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "id": {
      +      "description": "Identifiant de l'entité créée/modifiée",
      +      "type": "string"
      +    },
      +    "type": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  5. First observedv2.1.0

TDQS

A4.8/5.0
Behavior5/5

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

With all annotations false, the description carries the full burden of behavioral disclosure. It reveals that creation always results in 'savedAndNoValidation', explains that amountIncludingTax and tax are TTC and rate respectively with net amounts recalculated by the system, and states that the tool does not control workflow state. These are substantial behavioral details beyond what annotations provide.

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?

The description is longer than the ideal two-sentence example but every sentence carries essential information or a warning. It is well-structured with bolded key terms, a warning emoji, and a logical flow from purpose to alternatives to prerequisites to semantics to state. It is dense but not verbose, earning a near-perfect score.

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?

For a tool with 9 parameters, a nested array, and an output schema, the description covers all critical context: prerequisite calls, tax/amount semantics, state behavior, output format, and differentiation from update. It also complements the schema's explanations without duplicating them. An agent has everything needed to call it correctly.

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 parameters are already documented. The description adds significant semantic value: clarifying that term represents a specific month, that amountIncludingTax is TTC and tax is a percentage rate, and that agency-related fields must come from boond_expenses_default. It also explains the replacement pitfall of actualExpenses in the update context. This goes beyond the schema descriptions.

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 clear statement of what the tool does: 'Crée une note de frais dans BoondManager' and immediately defines its core scope (one month × one resource). It explicitly contrasts itself with boond_expenses_update, distinguishing the two use cases. This gives an agent unambiguous purpose and differentiation.

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?

The description explicitly instructs the agent when to use this tool over boond_expenses_update, warns about update's replacement behavior, and mandates calling boond_expenses_default first to obtain required values, noting the 422 error if omitted. It also explains that the workflow state is not controllable here, providing clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools