Skip to main content
Glama
silamir

boondmanager-mcp-server

by silamir

BoondManager MCP Server

CI CodeQL npm version npm downloads Node.js TypeScript MCP Registry Docker Hub GHCR License: Apache 2.0

Installation 1-clic :

Add to Cursor Install in VS Code Install in VS Code Insiders

LM Studio, Goose et Gemini CLI s'installent via leur procédure dédiée (deeplink natif ou commande) — voir la section Installation. GitHub ne rend pas cliquables les liens à schéma non-HTTP (lmstudio://, goose://), c'est pourquoi ils n'ont pas de bouton 1-clic ici.

Serveur MCP (Model Context Protocol) pour l'API BoondManager, permettant a Claude (Desktop, Cowork, Code) de rechercher, consulter, creer et modifier des enregistrements dans votre instance BoondManager.

235 outils couvrant 42 domaines de l'API BoondManager. Voir TOOLS.md pour le catalogue auto-généré (outils + prompts + ressources).

Sorties structurées. En plus du texte lisible, les outils search, create, update et delete renvoient un structuredContent conforme à un outputSchema MCP : search → { total?, count, items[] } (résumés compacts, pas les ressources JSON:API complètes), create/update → { id?, type? }, delete → { id, deleted, reason? }. Les clients MCP qui exploitent les sorties structurées obtiennent une référence d'entité fiable pour chaîner les appels. Les outils get restent en texte seul (leur texte est déjà du JSON exploitable).

Domaines couverts

CRM & Commercial

Domaine

Outils

Operations

Candidats

10

CRUD + information, technical-data, administrative, actions, positionings

Ressources

20

CRUD + information, technical-data (+ update), administrative, advantages, actions, positionings, projects, times-reports, expenses-reports, absences-reports, timesheets, references (create/update/delete)

Contacts

11

CRUD + information, actions, opportunities, projects, orders, invoices

Societes

14

CRUD + information, contacts, actions, opportunities, projects, orders, invoices, purchases, provider-invoices

Opportunites

10

CRUD + information, actions, positionings, projects, simulation

Gestion de projets

Domaine

Outils

Operations

Projets

12

CRUD + information, actions, simulation, deliveries-groupments, orders, purchases, productivity

Positionnements

4

search, get, create, delete

Livraisons / CRA

2

search, get

Achats / Sous-traitance

4

search, get, create, delete

Facturation & Finance

Domaine

Outils

Operations

Factures client

5

CRUD complet

Factures fournisseur

2

search, get

Bons de commande

5

CRUD complet

Paiements

2

search, get

Notes de frais

5

CRUD complet

Produits

5

CRUD complet

RH & Temps

Domaine

Outils

Operations

Absences

5

CRUD complet

Planning absences

1

search (vue globale)

Feuilles de temps

3

search, get, resource timesheets

Contrats

2

get, create

Avantages

2

search, get

Suivi d'activite

Domaine

Outils

Operations

Actions

5

search, get, create, update, delete

Validations

2

search, get

Todolists

2

search, get

Reporting

Domaine

Outils

Operations

Reporting societes

1

search

Reporting projets

1

search

Reporting ressources

1

search

Reporting synthese

1

search

Reporting plans de production

1

search

Administration & Configuration

Domaine

Outils

Operations

Comptes utilisateurs

2

search, get

Agences

2

search, get

Business Units

2

search, get

Poles

2

search, get

Roles

2

search, get

Calendriers

2

search, get

Drapeaux / Etiquettes

2

search, get

Webhooks

2

search, get

Logs d'audit

2

search, get

Notifications

2

search, get

Fils de discussion

2

search, get

Documents / CV

3

get (telechargement), create (upload par URL + parsing CV), delete

Application

2

dictionnaire, utilisateur courant

Detail des onglets par entite

Les entites principales disposent d'outils dedies par onglet pour un acces cible :

Entite

Onglets disponibles

Candidats

information, technical-data, administrative, actions, positionings

Ressources

information, technical-data, administrative, advantages, actions, positionings, projects, times-reports, expenses-reports, absences-reports

Contacts

information, actions, opportunities, projects, orders, invoices

Societes

information, contacts, actions, opportunities, projects, orders, invoices, purchases, provider-invoices

Opportunites

information, actions, positionings, projects, simulation

Projets

information, actions, simulation, deliveries-groupments, orders, purchases, productivity

Related MCP server: Neo MCP

Ressources MCP (dictionnaires)

Le serveur expose les dictionnaires de reference Boond comme ressources MCP (clients qui en supportent l'affichage : Claude Desktop, MCP Inspector, etc.). Permet au modele de traduire un state ou typeOf entier en libelle sans appel d'outil supplementaire.

URI

Contenu

boond://application/current-user

Profil de l'utilisateur courant (id, agence, permissions)

boond://dictionary/states/{entity}

Etats par entite : resources, candidates, contacts, companies, opportunities, projects, invoices, orders, positionings, deliveries, payments, purchases, provider-invoices, products, quotations, probations

boond://dictionary/typeOf/{entity}

Types par entite : resources, contacts, projects, contracts, deliveries, purchases, activities

boond://dictionary/actions/{entity}

Types d'action par entite de rattachement : candidates, contacts, resources, opportunities, projects, invoices, orders (le typeOf de boond_actions_create)

boond://dictionary/{sources,origins}

Sources de candidature, origines d'opportunite

boond://dictionary/{paymentMethods,paymentTerms,taxRates,contractEndReasons}

Parametres finance / RH utilises par les ecritures

boond://application/current-user/rights

Niveau, agences / poles / BU, apps et droits par entite de l'utilisateur (vue condensee de current-user)

boond://dictionary/countries

Liste des pays

boond://dictionary/currencies

Liste des devises

boond://dictionary/languages

Liste des langues

Pour les dictionnaires hors de cette liste curee, l'outil boond_application_dictionary reste disponible.

Prompts pre-orchestres

En plus des outils, le serveur expose des prompts MCP (templates pre-cables) qui orchestrent les bons appels d'outils dans le bon ordre pour les workflows recurrents. Visibles dans les clients qui supportent les prompts (Claude Desktop, Cowork, Claude Code, MCP Inspector...) sous forme de slash-commands ou de menu.

Workflows transverses

Prompt

Usage

synthese_equipe

Etat d'une equipe : qui fait quoi, qui est absent, qui est dispo (par defaut : mon equipe).

pipeline_commercial

Opportunites avec closing dans une periode : repartition par etat, CA pondere, top 10.

factures_a_relancer

Factures impayees dont l'echeance est depassee, regroupees par societe.

candidats_pour_opportunite

A partir d'une opportunite, propose les candidats actifs qui matchent (outils, expertise, mobilite, dispo).

fiche_consultant

Vue 360 d'une ressource : info + technique + positionnements + absences + CRA recents.

recap_hebdo

Recap hebdomadaire : pipeline qui a bouge, equipe absente, projets actifs, actions a mener.

traiter_note_de_frais

A partir d'une photo/PDF de justificatif joint, extrait la depense et cree la ligne de frais dans Boond apres recapitulatif et validation explicite.

Ressources, competences & CV

Prompt

Usage

staffing_disponible

Consultants internes disponibles sur une fenetre donnee (filtre optionnel par competences libres et perimetre), tries par dispo croissante avec top 3 prioritaires.

fin_de_mission

Anticipation des fins de mission sous N jours (defaut 60). Marque en urgent les fins <= 15j sans relais identifie.

cartographie_competences

Cartographie des competences d'un perimetre (equipe / agence) : top N, competences rares (bus-factor), saturees, manquantes vs opportunites ouvertes.

cvs_a_mettre_a_jour

Audit fraicheur des CV / dossiers techniques (seuil d'obsolescence configurable). Priorise les ressources bientot sur le marche.

recherche_profil_competences

Recherche multi-source (ressources internes + candidats) par mix de competences libres, sans opportunite requise. Classe par adequation /10.

Comment invoquer un prompt

Les prompts MCP sont des modeles de message utilisateur : tu les invoques toi-meme, le LLM execute ensuite le runbook qu'ils contiennent. Aucun filtre BoondManager a connaitre — tout est embarque cote serveur.

Claude Desktop / Cowork / MCP Inspector : tape / dans la barre de saisie, choisis le prompt dans la liste, remplis les arguments dans le formulaire qui s'affiche, valide.

Claude Code : pareil, / puis selection ; les arguments sont demandes inline.

Fallback (clients sans UI dediee aux prompts) : cite le prompt par son nom dans une demande libre, le client va recuperer la definition via le protocole MCP. Exemple : "lance le runbook staffing_disponible entre le 1er juin et le 1er septembre 2026, competences Java Spring AWS".

Exemples d'invocation des prompts ressources / competences / CV :

/staffing_disponible
  start_date  = 2026-06-01
  end_date    = 2026-09-01
  competences = Java Spring AWS Kubernetes
  manager_id  = (vide -> mon equipe)
/fin_de_mission
  horizon_jours = 30
/cartographie_competences
  agency_id = 7
  top_n     = 15
/cvs_a_mettre_a_jour
  seuil_mois = 6
/recherche_profil_competences
  competences        = .NET Azure DevOps
  experience_min     = 5 ans
  dispo_avant        = 2026-07-15
  inclure_candidats  = oui

Apres modification de la config Claude (claude_desktop_config.json etc.), redemarrer le client : la liste des prompts MCP n'est pas hot-reloadee.

Prerequis

  • Node.js >= 22

  • Un compte BoondManager avec acces API active

  • L'option "Allow API Rest calls using BasicAuth authentication" activee dans la configuration BoondManager (si BasicAuth)

Installation

Claude Desktop (one-click)

Telechargez le fichier .mcpb depuis la derniere release GitHub, puis dans Claude Desktop : Fichier > Installer une extension... et selectionnez le fichier. Les identifiants sont demandes a l'installation et stockes de maniere chiffree (Keychain macOS / Credential Manager Windows).

Claude Code (plugin, recommande)

Meme confort que le one-click Desktop : un formulaire de configuration, aucune variable d'environnement a poser soi-meme.

/plugin marketplace add silamir/boondmanager-mcp-server
/plugin install boondmanager-mcp@boondmanager

Claude Code affiche alors le formulaire des 14 options (identifiants, URL de base, restrictions d'acces). Tout est optionnel a l'ecran, mais il faut renseigner un des trois modes d'authentification : le trio User Token + Client Token + Client Key (JWT genere automatiquement, recommande), ou le Token JWT pre-construit, ou le couple Utilisateur + Mot de passe (BasicAuth). Les champs laisses vides retombent sur les valeurs par defaut.

Si le serveur n'apparait pas immediatement dans /mcp, un /reload-plugins suffit — inutile de relancer Claude Code.

Details utiles :

  • Ou vont les secrets : les 5 champs sensibles (User Token, Client Token, Client Key, Token JWT, Mot de passe) vont dans le Keychain macOS (ou ~/.claude/.credentials.json a defaut), pas dans settings.json. Les options non sensibles (URL, restrictions) sont stockees en clair dans pluginConfigs de votre ~/.claude/settings.json.

  • Nommage des outils : cote client les outils sont prefixes mcp__boondmanager__, par exemple mcp__boondmanager__boond_candidates_search. C'est ce nom qu'il faut utiliser dans une allow-list de permissions.

  • Version : le plugin lance la version npm epinglee dans son manifeste. Pour passer a une nouvelle release : /plugin marketplace update boondmanager puis reinstaller le plugin.

  • Restreindre la surface : les champs Restriction du formulaire mappent sur les variables BOOND_MCP_* (profil metier, domaines, operations, lecture seule). Voir docs/access-control.md.

  • Suppressions : Claude Code supporte l'elicitation MCP, donc chaque boond_*_delete demande une confirmation avant d'agir (option Confirmer les suppressions, activee par defaut).

Pour desinstaller : /plugin uninstall boondmanager-mcp@boondmanager.

Claude Code (manuel, claude mcp add)

A privilegier si vous voulez piloter vous-meme les variables d'environnement, ou epingler une version differente de celle du plugin.

# Avec un token API (recommande)
claude mcp add --transport stdio --env BOOND_API_TOKEN=votre_token_jwt \
  boondmanager -- npx -y boondmanager-mcp-server

# Avec BasicAuth
claude mcp add --transport stdio \
  --env BOOND_USER=votre_login \
  --env BOOND_PASSWORD=votre_mot_de_passe \
  boondmanager -- npx -y boondmanager-mcp-server

Windows : ajoutez cmd /c avant npx :

claude mcp add --transport stdio --env BOOND_API_TOKEN=votre_token \
  boondmanager -- cmd /c npx -y boondmanager-mcp-server

Pour rendre le serveur disponible dans tous vos projets, ajoutez --scope user :

claude mcp add --transport stdio --scope user \
  --env BOOND_API_TOKEN=votre_token_jwt \
  boondmanager -- npx -y boondmanager-mcp-server

Claude Code - Configuration partagee en equipe

Ajoutez un fichier .mcp.json a la racine de votre projet (a commiter dans git) :

{
  "mcpServers": {
    "boondmanager": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "${BOOND_API_TOKEN}"
      }
    }
  }
}

Chaque membre de l'equipe n'a qu'a definir la variable d'environnement BOOND_API_TOKEN sur sa machine. Le fichier .mcp.json supporte la syntaxe ${VAR} et ${VAR:-default} pour les variables d'environnement.

Claude Code Enterprise (deploiement administre)

Les administrateurs peuvent deployer le serveur MCP pour tous les utilisateurs via le fichier managed-mcp.json :

OS

Chemin

macOS

/Library/Application Support/ClaudeCode/managed-mcp.json

Linux / WSL

/etc/claude-code/managed-mcp.json

Windows

C:\Program Files\ClaudeCode\managed-mcp.json

{
  "mcpServers": {
    "boondmanager": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "${BOOND_API_TOKEN}",
        "BOOND_BASE_URL": "https://votre-instance.boondmanager.com/api"
      }
    }
  }
}

Ce fichier prend le controle exclusif des serveurs MCP : les utilisateurs ne peuvent pas ajouter ou modifier de serveurs en dehors de cette configuration.

Pour restreindre les serveurs autorises tout en laissant les utilisateurs en ajouter, utilisez plutot managed-settings.json :

{
  "allowedMcpServers": [
    { "serverName": "boondmanager" }
  ]
}

Claude Desktop / Cowork (configuration manuelle)

Ajoutez dans votre fichier de configuration Claude :

macOS : ~/Library/Application Support/Claude/claude_desktop_config.json Windows : %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "boondmanager": {
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "votre_token_jwt"
      }
    }
  }
}

Via npm

npx boondmanager-mcp-server

Ou installation globale :

npm install -g boondmanager-mcp-server
boondmanager-mcp-server

Depuis les sources

git clone https://github.com/silamir/boondmanager-mcp-server.git
cd boondmanager-mcp-server
npm install
npm run build

Smithery

Le serveur est aussi disponible sur Smithery. La configuration est dans smithery.yaml à la racine du repo : Smithery propose une UI avec les champs d'authentification (JWT auto / JWT pré-construit / BasicAuth) et installe le serveur via npx.

LobeChat / LobeHub

Le serveur est listé sur le marketplace MCP de LobeHub. Dans LobeChat (auto-hebergé ou cloud), ajouter le MCP via Reglages > Plugins > MCP > Ajouter avec :

{
  "name": "boondmanager",
  "command": "npx",
  "args": ["-y", "boondmanager-mcp-server"],
  "env": {
    "BOOND_USER_TOKEN": "<votre_user_token>",
    "BOOND_CLIENT_TOKEN": "<votre_client_token>",
    "BOOND_CLIENT_KEY": "<votre_client_key>"
  }
}

Ou utiliser le transport HTTP (voir section Transports) pour un deploiement partage en mode gateway.

Cursor

Cliquez sur le badge Add to Cursor en haut du README (ou ajoutez le serveur manuellement dans Settings > MCP > Add new MCP server). Renseignez ensuite l'authentification en ajoutant un bloc env au serveur dans ~/.cursor/mcp.json :

{
  "mcpServers": {
    "boondmanager": {
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "votre_token_jwt"
      }
    }
  }
}

VS Code (GitHub Copilot / agent MCP)

Cliquez sur le badge Install in VS Code en haut du README, ou ajoutez le serveur a .vscode/mcp.json (par projet) ou a votre settings.json utilisateur :

{
  "servers": {
    "boondmanager": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "${input:boond_api_token}"
      }
    }
  }
}

LM Studio

Dans LM Studio : Program > Install > Edit mcp.json et ajoutez :

{
  "mcpServers": {
    "boondmanager": {
      "command": "npx",
      "args": ["-y", "boondmanager-mcp-server"],
      "env": {
        "BOOND_API_TOKEN": "votre_token_jwt"
      }
    }
  }
}

Goose

Ajoutez une extension de type STDIO dans Settings > Extensions > Add avec la commande npx -y boondmanager-mcp-server et la variable d'environnement BOOND_API_TOKEN. En CLI :

goose session --with-extension "npx -y boondmanager-mcp-server"

Gemini CLI

Le depot embarque un manifeste d'extension Gemini CLI (gemini-extension.json). Installez l'extension directement depuis GitHub :

gemini extensions install https://github.com/silamir/boondmanager-mcp-server

Definissez ensuite l'authentification dans votre environnement (Gemini interpole ${VAR} au demarrage) :

export BOOND_API_TOKEN="votre_token_jwt"
# ou le trio JWT auto :
export BOOND_USER_TOKEN="..." BOOND_CLIENT_TOKEN="..." BOOND_CLIENT_KEY="..."

Configuration

Logs

Le serveur utilise pino pour des logs structures JSON (agrégateurs, observabilité).

Variable

Défaut

Description

LOG_LEVEL

info

Niveau de log : trace, debug, info, warn, error, fatal

LOG_FORMAT

(auto)

json pour JSON pur, sinon pino-pretty en dev

En production (NODE_ENV=production), les logs sont en JSON par défaut. En dev, le format pretty (colorisé) est actif sauf si LOG_FORMAT=json. Chaque requête HTTP reçoit un corrId (8 hex) pour tracer la requête dans les logs.

Les logs sont toujours écrits sur stderr, quel que soit le transport : en mode stdio, stdout est réservé au flux JSON-RPC et toute autre écriture corrompt la connexion côté client. Claude Desktop capture stderr dans son visualiseur de logs (Developer → Logs), c'est donc là que les avertissements (politique d'accès, mise à jour disponible, dictionnaires) sont visibles.

Authentification

Option 1 : Token API JWT (recommande)

export BOOND_API_TOKEN="votre_token_jwt"

Option 2 : BasicAuth

export BOOND_USER="votre_login"
export BOOND_PASSWORD="votre_mot_de_passe"

Transport HTTP en authentification statique (BOOND_HTTP_STATIC_AUTH)

Par défaut, le transport HTTP (MCP_TRANSPORT=http) est une ressource protégée OAuth2 : chaque requête MCP porte le token BoondManager de son utilisateur (voir docs/oauth.md). BOOND_HTTP_STATIC_AUTH=true remplace ce modèle par les credentials d'environnement ci-dessus, partagés par toutes les requêtes — pour un déploiement mono-locataire auto-hébergé, un pipeline CI ou une passerelle interne sans flux OAuth.

Dans ce mode, plus rien n'authentifie le client MCP : quiconque atteint le port agit avec les droits BoondManager de l'opérateur (lecture et écriture selon la politique d'accès). D'où :

Variable

Rôle

MCP_HTTP_API_KEY

Secret partagé que le client doit présenter, en Authorization: Bearer <clé> ou X-Api-Key: <clé>. Comparaison en temps constant ; absente ou fausse → 401. Obligatoire dès que le serveur n'écoute pas sur loopback (0.0.0.0, image Docker) : sinon il refuse de démarrer.

MCP_HTTP_INSECURE_STATIC_AUTH

1 pour accepter explicitement de démarrer sans clé hors loopback (réseau privé faisant office de frontière). Le nom dit ce qu'il fait.

export MCP_TRANSPORT=http
export MCP_HTTP_HOST=0.0.0.0
export BOOND_HTTP_STATIC_AUTH=true
export MCP_HTTP_API_KEY="$(openssl rand -hex 32)"
export BOOND_USER_TOKEN=… BOOND_CLIENT_TOKEN=… BOOND_CLIENT_KEY=…
npx boondmanager-mcp-server
# côté client : Authorization: Bearer <MCP_HTTP_API_KEY>

/healthz reste accessible sans clé. En mode OAuth (défaut), MCP_HTTP_API_KEY est ignorée avec un avertissement : le Bearer y est le token BoondManager.

URL personnalisee (si instance dediee)

export BOOND_BASE_URL="https://votre-instance.boondmanager.com/api"

Par defaut, l'URL est https://ui.boondmanager.com/api.

Delai d'expiration HTTP

Chaque requete vers l'API BoondManager expire au bout de 30 secondes par defaut. Pour les tenants lents ou des rapports volumineux, augmenter via :

export BOOND_HTTP_TIMEOUT_MS=60000   # 60 s

Si une requete depasse le delai, le serveur renvoie une erreur explicite mentionnant BOOND_HTTP_TIMEOUT_MS plutot que de rester bloque indefiniment.

Tentatives en cas d'echec transitoire

Le client HTTP retente automatiquement les erreurs transitoires avec un backoff exponentiel + jitter :

  • GET : retry sur 5xx, 429, erreurs reseau (ECONNRESET, etc.) et timeouts (GET etant idempotent).

  • POST / PUT / PATCH / DELETE : retry uniquement sur 429 afin d'eviter de dupliquer une ecriture cote serveur. Les 5xx et erreurs reseau remontent immediatement.

  • L'en-tete Retry-After (en secondes ou en HTTP-date) est honore et plafonne a BOOND_HTTP_RETRY_MAX_MS.

Variable

Defaut

Description

BOOND_HTTP_MAX_RETRIES

2

Nombre maximal de tentatives supplementaires (3 essais au total). 0 desactive entierement les retries.

BOOND_HTTP_RETRY_BASE_MS

200

Delai de base utilise pour le backoff exponentiel (base * 2^attempt, avec jitter).

BOOND_HTTP_RETRY_MAX_MS

5000

Plafond du delai entre deux tentatives.

Limitation de debit (rate limiting)

Pour eviter qu'une boucle d'outils emballee n'inonde l'API (et n'enchaine les 429), le client applique un token bucket local. Defauts : 10 req/s soutenu, rafale 20 — invisible en usage interactif normal. Les retentatives consomment aussi un jeton.

Variable

Defaut

Description

BOOND_HTTP_RATE_LIMIT_RPS

10

Debit soutenu (requetes/seconde). 0 desactive completement.

BOOND_HTTP_RATE_LIMIT_BURST

20

Capacite du bucket = taille maximale de rafale immediate.

En transport HTTP OAuth, le bucket est par utilisateur (identite derivee du Bearer) : la rafale d'un utilisateur ne ralentit pas les autres. En stdio et en static auth, une seule identite, donc un seul bucket — la limite est par identite, pas par processus.

Cache du dictionnaire

L'API BoondManager n'expose qu'un seul endpoint /application/dictionary qui renvoie l'intégralité des libellés (états, types, pays…). Le serveur le met en cache en mémoire pour éviter de le re-télécharger à chaque résolution état/type → libellé.

Variable

Defaut

Description

BOOND_DICTIONARY_TTL_MS

3600000 (1 h)

Durée de vie du cache du dictionnaire, en millisecondes. Une valeur non numérique ou ≤ 0 retombe sur le défaut.

Restriction d'accès (profils / domaines / lecture seule)

Vous pouvez restreindre ce que l'IA voit et peut faire, entièrement par variables d'environnement : exposer seulement certains domaines (ex. la comptabilité), et/ou bloquer les écritures et suppressions.

Variable

Effet

BOOND_MCP_PROFILE

Profil préconfiguré : recruiting, sales, finance, delivery, admin (CSV = union). Raccourci pour ne pas lister les domaines à la main. Ignoré si BOOND_MCP_DOMAINS est défini.

BOOND_MCP_DOMAINS

Liste blanche de domaines (CSV). Absente = tous. Ex. invoices,payments,application

BOOND_MCP_EXCLUDE_DOMAINS

Liste noire de domaines (CSV), appliquée après la liste blanche. Ex. candidates,resources

BOOND_MCP_OPERATIONS

Opérations autorisées (CSV) parmi read,create,update,delete. Absente = toutes.

BOOND_MCP_READ_ONLY

Raccourci : true équivaut à BOOND_MCP_OPERATIONS=read (tout en lecture seule).

⚠️ Ce n'est pas une frontière de sécurité dure. Le filtre masque des outils à l'IA mais n'altère pas les droits du compte BoondManager utilisé. Pour un vrai cloisonnement, configurez d'abord les droits du compte/rôle BoondManager (lecture seule, périmètre comptable…) ; ce filtre vient en complément (économie de tokens, garde-fou anti-action accidentelle).

Exemple — tout le périmètre gestion, en lecture seule :

export BOOND_MCP_PROFILE=finance
export BOOND_MCP_READ_ONLY=true

Guide complet, règles de résolution, contenu de chaque profil (et le nombre d'outils qui en résulte) : docs/access-control.md.

Icônes (SEP-973)

Les outils, prompts et ressources portent une icône par domaine (SVG inline en data: URI, aucun asset à héberger). Coût mesuré : ~40 Kio, soit ~14 % du payload tools/list. Les déploiements qui ne les affichent pas (passerelles, clients texte) peuvent les supprimer :

Variable

Defaut

Description

BOOND_MCP_ICONS

activé

0/false/no/off : n'annonce aucune icône (outils, prompts, ressources).

Libellés personnalisés du dictionnaire

Si votre instance BoondManager utilise des libellés de dictionnaire personnalisés (ex. types d'action ou états en anglais), vous pouvez déclarer le mapping libellé→ID via BOOND_DICTIONARY_OVERRIDES (JSON inline ou chemin vers un fichier JSON) :

export BOOND_DICTIONARY_OVERRIDES='{"action":{"contact":{"Call":61,"Email":63}},"state":{"candidate":{"Interviewed":2}}}'

Le serveur accepte alors ces libellés pour le typeOf de boond_actions_create et les champs state des créations/modifications, les résout automatiquement en IDs numériques, et enrichit les descriptions des outils avec les libellés disponibles. Sans cette variable, le comportement est strictement inchangé.

Format complet, entités supportées et limites : docs/dictionary-overrides.md.

Transports

Le serveur supporte deux transports MCP, selectionnables via la variable d'environnement MCP_TRANSPORT.

Transport

Valeur

Cas d'usage

stdio (defaut)

stdio ou non defini

Claude Desktop, Claude Code, integration locale

Streamable HTTP

http (alias : streamable-http)

Gateway MCP, deploiement distant, conteneurs

Streamable HTTP (pour les gateways MCP)

Depuis la v1.4.0, le serveur peut etre expose en HTTP (transport MCP Streamable HTTP) afin d'etre branche derriere une passerelle MCP ou deploye comme service. La revision de protocole negociee est celle du SDK installe (2025-11-25).

Authentification BoondManager : OAuth2 protected resource. Le serveur HTTP ne detient aucun secret (ni client_secret, ni refresh token, ni stockage utilisateur). Chaque requete MCP doit porter Authorization: Bearer <boond_access_token> ; le serveur transmet le token tel quel a BoondManager. C'est le client MCP (Claude Desktop, Claude Code, gateway…) qui fait la danse OAuth contre BoondManager et qui gere le refresh. Procedure complete : docs/oauth.md.

export MCP_TRANSPORT=http
export MCP_HTTP_HOST=0.0.0.0        # defaut: 127.0.0.1
export MCP_HTTP_PORT=3000           # defaut: 3000
export MCP_HTTP_PATH=/mcp           # defaut: /mcp
# Optionnel: requis uniquement derriere un reverse proxy, pour que
# la discovery annonce la bonne URL publique.
export MCP_HTTP_PUBLIC_URL=https://mcp.votre-domaine.com/mcp

npx boondmanager-mcp-server
# 🚀 BoondManager MCP Server running (streamable HTTP transport)
# 📡 Endpoint: http://0.0.0.0:3000/mcp
# 🔑 Mode: stateless
# 🔐 Boond auth: OAuth2 (per-request Bearer from MCP client)

Variables d'environnement HTTP

Variable

Defaut

Description

MCP_TRANSPORT

stdio

http pour activer le transport HTTP

MCP_HTTP_HOST

127.0.0.1

Interface d'ecoute (0.0.0.0 pour exposer)

MCP_HTTP_PORT

3000

Port TCP

MCP_HTTP_PATH

/mcp

Chemin HTTP de l'endpoint MCP

MCP_HTTP_STATEFUL

false

true pour activer le mode stateful (session Mcp-Session-Id)

MCP_HTTP_JSON_RESPONSE

false

true pour forcer des reponses JSON (sans SSE)

MCP_HTTP_PUBLIC_URL

(derivee)

URL publique annoncee dans la discovery OAuth2 (resource) et le challenge WWW-Authenticate. Requise derriere un reverse proxy.

MCP_HTTP_SESSION_TTL_MS

1800000 (30 min)

En mode stateful, duree d'inactivite au-dela de laquelle une session est fermee.

MCP_HTTP_SESSION_SWEEP_INTERVAL_MS

300000 (5 min)

Frequence de balayage des sessions inactives.

MCP_HTTP_ALLOWED_HOSTS

(auto)

Liste blanche du header Host (anti DNS rebinding, CVE-2025-66414). * pour desactiver explicitement.

MCP_HTTP_ALLOWED_ORIGINS

(auto)

Liste blanche du header Origin (scheme + host + port) pour les clients navigateur ; un Origin hors liste recoit un 403 (exigence spec 2025-11-25). Defaut quand le serveur ecoute en loopback = toute origine loopback, quel que soit le port (http/https sur localhost / 127.0.0.1 / [::1]) plus l'origine de MCP_HTTP_PUBLIC_URL si elle est definie — MCP Inspector (:6274) ou un serveur de dev (:5173) fonctionnent sans configuration, et une origine distante recoit toujours un 403. Validation desactivee sinon. Une liste explicite est en revanche comparee a l'identique (port compris). Une requete sans Origin est toujours acceptee (curl, gateways, clients MCP non-navigateur), et le document de decouverte /.well-known/oauth-protected-resource est exempte. * pour desactiver explicitement ; une valeur vide n'est pas une desactivation.

MCP_HTTP_VALIDATE_TOKEN

false

Mode OAuth : valide chaque Bearer aupres de BoondManager (GET /application/current-user, mis en cache par token pendant MCP_HTTP_TOKEN_VALIDATION_TTL_MS, 60 s par defaut) avant de traiter la requete. Un token expire ou revoque recoit un 401 + WWW-Authenticate: … error="invalid_token", ce que les clients MCP conformes transforment en nouvelle autorisation — sans l'option, le 401 n'apparait que dans le resultat d'un appel d'outil, d'ou aucun client ne relance l'OAuth. BoondManager injoignable → la requete passe (fail open).

Variables OAuth2 — discovery (toutes optionnelles)

Variable

Defaut

Description

BOOND_OAUTH_AUTHORIZATION_SERVER

https://ui.boondmanager.com

Issuer de l'authorization server BoondManager, annonce dans authorization_servers

BOOND_OAUTH_SCOPES

(vide)

Scopes annonces dans scopes_supported (espace ou virgule). Vide = le client negocie directement avec Boond.

Stateless (defaut) : chaque requete HTTP POST est independante, idealement adapte a un gateway qui multiplexe plusieurs serveurs MCP. Aucune session n'est conservee cote serveur.

Stateful : le serveur genere un Mcp-Session-Id a l'initialisation que le client doit renvoyer dans chaque requete suivante. Utile pour les clients MCP natifs qui beneficient du streaming SSE et des notifications serveur.

Exemple : discovery + 401 challenge

# Public, pas d'auth -> documente OU envoyer le user pour autoriser
curl -s http://localhost:3000/.well-known/oauth-protected-resource | jq .
# {
#   "resource": "http://0.0.0.0:3000/mcp",
#   "authorization_servers": ["https://ui.boondmanager.com"],
#   "bearer_methods_supported": ["header"]
# }

# Appel MCP sans token -> 401 + WWW-Authenticate qui pointe vers la discovery
curl -s -o /dev/null -w "%{http_code}\n%header{www-authenticate}\n" \
  -X POST http://localhost:3000/mcp -d '{}'
# 401
# Bearer realm="http://0.0.0.0:3000/mcp", resource_metadata="http://0.0.0.0:3000/.well-known/oauth-protected-resource/mcp"

Exemple : Claude Code via HTTP

Avec un client MCP conforme a la spec MCP Authorization 2025-06-18, la decouverte OAuth est automatique :

claude mcp add --transport http boondmanager https://mcp.votre-domaine.com/mcp
# Le client recoit le 401 + WWW-Authenticate, fetch la metadata, ouvre
# le navigateur pour autoriser l'App BoondManager, puis re-emet la requete
# avec le Bearer token recu.

Exemple : Docker (image officielle)

Une image Docker prete a l'emploi est publiee a chaque release sur deux registres miroirs, multi-arch (linux/amd64 + linux/arm64) :

Registre

Image

Page

GitHub Container Registry

ghcr.io/silamir/boondmanager-mcp-server

github.com/silamir/boondmanager-mcp-server/pkgs/container/boondmanager-mcp-server

Docker Hub

docker.io/fauguste/boondmanager-mcp-server

hub.docker.com/r/fauguste/boondmanager-mcp-server

Memes digests, memes tags — choisissez celui qui s'aligne avec votre tooling. L'image demarre par defaut en transport HTTP, sur le port 3000, sur l'interface 0.0.0.0. Aucun volume, aucun secret a stocker — le serveur est stateless par construction.

# Via GHCR (authentification GitHub si registre prive)
docker run -d --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -e MCP_HTTP_PUBLIC_URL=https://mcp.votre-domaine.com/mcp \
  --name boondmanager-mcp \
  ghcr.io/silamir/boondmanager-mcp-server:latest

# Ou via Docker Hub (anonyme)
docker run -d --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -e MCP_HTTP_PUBLIC_URL=https://mcp.votre-domaine.com/mcp \
  --name boondmanager-mcp \
  fauguste/boondmanager-mcp-server:latest

Tags disponibles sur les deux registres : :latest, :X, :X.Y, :X.Y.Z pour chaque release stable (la version exacte est recommandee pour la prod). Les prereleases (par exemple :2.0.0-alpha) sont publiees uniquement sous leur tag pinne — ni :latest, ni :X, ni :X.Y ne bougent. Variables d'environnement supportees : voir Configuration et Transports.

Exemple : docker-compose

Le repo embarque un docker-compose.yml pret a l'emploi : un seul service stateless, aucun volume, aucun secret cote serveur.

# Optionnel : surcharger MCP_HTTP_PUBLIC_URL si fronted par un reverse proxy
cp .env.example .env

docker compose up -d
docker compose logs -f mcp

Securite : le serveur HTTP est stateless et ne stocke aucun secret BoondManager. Chaque utilisateur authentifie le serveur via son propre token OAuth2 (issu de sa propre App BoondManager), et toutes les actions sont attribuees a son identite dans l'audit log Boond. Derriere un reverse proxy : terminez TLS (HTTPS), forwardez l'en-tete Authorization, et reglez MCP_HTTP_PUBLIC_URL sur l'URL publique pour que la discovery soit coherente.

Clients distants non-Claude (ChatGPT, OpenAI / Gemini Agents SDK)

MCP est un protocole agnostique du modele : le meme endpoint HTTP/OAuth2 est consomme tel quel par tout hote compatible MCP, pas seulement Claude. Aucun package ni build specifique a un LLM n'est requis — il suffit de pointer l'hote sur votre URL MCP_HTTP_PUBLIC_URL.

Hote

Comment brancher le serveur

ChatGPT (connecteurs / Developer mode)

Ajouter un connecteur MCP distant pointant sur l'URL HTTP ; l'OAuth2 est decouvert via la metadata /.well-known/oauth-protected-resource.

OpenAI Agents SDK

Declarer un HostedMCPTool / serveur MCP distant avec l'URL HTTP et le flux OAuth2.

Google Gemini (Agents SDK / Vertex)

Enregistrer le serveur MCP distant cote SDK ; en local, l'extension Gemini CLI (voir Installation) couvre le transport stdio.

Le contrat est identique a celui de Claude Code en HTTP (voir l'exemple claude mcp add --transport http ci-dessus) : seule la maniere de declarer le serveur cote client change.

Exemples d'utilisation

Une fois configure, vous pouvez demander a Claude :

CRM & Commercial

  • "Recherche les candidats avec des competences en React a Paris"

  • "Montre-moi les details techniques de la ressource #12345"

  • "Cree un nouveau contact Jean Dupont chez Acme Corp"

  • "Liste toutes les opportunites en cours"

  • "Quels sont les positionnements de l'opportunite #20 ?"

Gestion de projets

  • "Cree un projet Mission Alpha pour la societe #42"

  • "Affiche le planning du projet #33"

  • "Quels sont les bons de commande du projet #55 ?"

  • "Affiche la productivite du projet #12"

Facturation & Finance

  • "Recherche les factures en attente de paiement"

  • "Liste les factures fournisseur de la societe #100"

  • "Affiche les achats du projet #55"

RH & Temps

  • "Affiche les feuilles de temps de la ressource #100 pour mars 2025"

  • "Liste les absences prevues ce mois-ci"

  • "Affiche les notes de frais de la ressource #200"

  • "Quels sont les avantages de la ressource #50 ?"

Suivi d'activite

  • "Quelles sont les actions recentes sur le candidat #789 ?"

  • "Affiche les validations en attente"

  • "Liste les taches de ma todolist"

Reporting

  • "Affiche le reporting de synthese globale"

  • "Quel est le reporting de productivite des ressources ?"

Administration

  • "Recupere le dictionnaire des types d'actions"

  • "Liste les agences et business units"

  • "Affiche les webhooks configures"

Architecture

boondmanager-mcp-server/
├── src/
│   ├── index.ts              # Point d'entree MCP (selection du transport)
│   ├── server.ts             # Factory createMcpServer() + liste des domaines
│   ├── constants.ts          # Configuration, API paths, onglets
│   ├── types.ts              # Types TypeScript (JSON:API)
│   ├── transports/
│   │   └── http.ts           # Transport Streamable HTTP (gateway/remote)
│   ├── services/
│   │   └── boond-client.ts   # Client HTTP API BoondManager
│   ├── schemas/
│   │   └── index.ts          # Schemas Zod (validation des entrees)
│   └── tools/
│       ├── index.ts          # Barrel export de tous les domaines
│       ├── crud-factory.ts   # Factory generique CRUD (DRY)
│       ├── candidates.ts     # 10 outils (CRUD + 5 onglets)
│       ├── resources.ts      # 20 outils (CRUD + 10 onglets + references/timesheets)
│       ├── contacts.ts       # 11 outils (CRUD + 6 onglets)
│       ├── companies.ts      # 14 outils (CRUD + 9 onglets)
│       ├── opportunities.ts  # 10 outils (CRUD + 5 onglets)
│       ├── projects.ts       # 12 outils (CRUD + 7 onglets)
│       ├── actions.ts        # 5 outils
│       ├── timesheets.ts     # 3 outils
│       ├── invoices.ts       # 5 outils
│       ├── orders.ts         # 5 outils
│       ├── deliveries.ts     # 2 outils
│       ├── absences.ts       # 5 outils
│       ├── expenses.ts       # 5 outils
│       ├── products.ts       # 5 outils
│       ├── positionings.ts   # 4 outils
│       ├── payments.ts       # 2 outils
│       ├── advantages.ts     # 2 outils
│       ├── contracts.ts      # 2 outils
│       ├── purchases.ts      # 4 outils
│       ├── provider-invoices.ts # 2 outils
│       ├── accounts.ts       # 2 outils
│       ├── agencies.ts       # 2 outils
│       ├── business-units.ts # 2 outils
│       ├── poles.ts          # 2 outils
│       ├── roles.ts          # 2 outils
│       ├── calendars.ts      # 2 outils
│       ├── flags.ts          # 2 outils
│       ├── webhooks.ts       # 2 outils
│       ├── logs.ts           # 2 outils
│       ├── notifications.ts  # 2 outils
│       ├── threads.ts        # 2 outils
│       ├── todolists.ts      # 2 outils
│       ├── validations.ts    # 2 outils
│       ├── reporting.ts      # 5 outils
│       ├── planning-absences.ts # 1 outil
│       └── application.ts    # 2 outils
├── dist/                     # Build JavaScript
├── .github/                  # CI/CD, templates, Dependabot
├── package.json
├── tsconfig.json
├── vitest.config.ts
├── eslint.config.js
└── README.md

Depannage

« JSON Schema declares an unsupported dialect (draft-07) » sur les outils *_search

Symptome. Les outils de recherche (boond_candidates_search, boond_resources_search, boond_opportunities_search...) echouent systematiquement, alors que les outils de fiche (boond_*_get), les dictionnaires et les workflows textuels fonctionnent. La dissymetrie est le diagnostic : seuls les ~59 outils qui declarent un outputSchema sont concernes, parce que c'est ce schema-la que l'hote compile -- au moment ou il enregistre l'outil, donc avant tout appel. L'outil n'echoue pas, il devient inutilisable.

Cause. Les versions 2.1.0 a 2.12.1 annoncaient "$schema": "http://json-schema.org/draft-07/schema#" sur leurs schemas (le SDK MCP convertit les schemas Zod avec target: 'draft-7', en dur). Un hote qui valide avec un validateur 2020-12 uniquement refuse de compiler un tel schema.

Correctif : mettre a jour vers >= 2.12.2. Depuis cette version le serveur n'annonce plus aucun dialecte (src/schema-dialect.ts), ce que la suite de tests verifie sur les 185 outils a travers un vrai client, sous validateur 2020-12 et draft-07.

Redemarrer le connecteur ne suffit pas : un redemarrage relance le binaire installe, il ne le met pas a jour. Verifiez la version reellement chargee plutot que celle affichee par le catalogue :

# npm / npx : quelle version est resolue et depuis quel cache
npm view boondmanager-mcp-server version
npx --yes boondmanager-mcp-server@latest --version 2>/dev/null || true

# Le serveur annonce sa version dans la reponse `initialize` (champ serverInfo.version),
# lue depuis son propre package.json -- c'est la seule source fiable.

Selon le canal d'installation :

Canal

Mise a jour

Extension Claude Desktop (.mcpb)

Telecharger le .mcpb de la derniere release et le reinstaller -- les extensions tierces ne s'auto-mettent pas a jour

Plugin Claude Code

/plugin marketplace update boondmanager puis reinstaller le plugin (le lancement est epingle sur boondmanager-mcp-server@X.Y.Z)

claude mcp add / config manuelle

Epingler boondmanager-mcp-server@latest (ou une version >= 2.12.2) dans la commande npx

Docker / GHCR

docker pull ghcr.io/silamir/boondmanager-mcp-server:latest

Verifiez aussi la version de Node : le serveur requiert Node.js >= 22. Un poste encore en Node 20 est en general un poste dont l'installation n'a pas ete rafraichie depuis longtemps.

Securite

  • Les credentials BoondManager (JWT ou BasicAuth) ne transitent jamais via le protocole MCP -- ils sont configures en variables d'environnement cote serveur uniquement

  • En mode stdio, le serveur tourne en local, aucun port reseau n'est expose

  • En mode streamable HTTP, l'authentification est un OAuth2 protected resource : chaque requete MCP porte son propre Authorization: Bearer <token> (le serveur ne stocke aucun secret). Terminez TLS (HTTPS via reverse proxy), forwardez l'en-tete Authorization, reglez MCP_HTTP_PUBLIC_URL sur l'URL publique, et activez la protection anti DNS rebinding via MCP_HTTP_ALLOWED_HOSTS. Restreignez aussi l'acces reseau a votre gateway. Voir docs/oauth.md.

  • Compatible avec les exigences ISO 27001

  • L'API BoondManager est hebergee en France et conforme RGPD

  • Authentification BoondManager : JWT (recommande), BasicAuth, ou JWT construit automatiquement a partir des composants

Developpement

# Mode watch pour le developpement
npm run dev

# Build
npm run build

# Lancer le serveur
npm start

# Tests
npm test               # 645 tests
npm run test:coverage  # Avec couverture

# Qualite
npm run lint
npm run typecheck

Stack technique

  • Runtime : Node.js >= 22 (ES2022)

  • Langage : TypeScript 5.8+ (mode strict)

  • MCP SDK : @modelcontextprotocol/sdk 1.12+

  • Validation : Zod 4

  • Tests : Vitest 4 + couverture V8

  • Lint : ESLint 10 + typescript-eslint

  • Transports : stdio (defaut) + Streamable HTTP (spec MCP 2025-11-25)

Ressources

Licence

Apache License 2.0 — Copyright (c) 2025-2026 Silamir. Créé à l'origine par Frédéric Auguste.

Voir LICENSE et NOTICE pour les détails.

BoondManager est une marque de BoondManager SAS. Ce projet est un client indépendant et non officiel de l'API publique BoondManager, sans affiliation avec BoondManager SAS.

Available Tools

235 tools
boond_absences_createCreer une demande d'absenceA

Crée une demande d'absence (congés, RTT, maladie…) pour une ressource.

Quand : pour poser une absence au nom d'une ressource identifiée par son ID. Plutôt que : boond_absences_update pour modifier une demande déjà déposée.

  • Le détail est porté par absencesPeriods ; si le tableau est omis, une période unique est déduite de startDate/endDate.

  • Pas de state : sur /absences-reports l'état est une chaîne du workflow de validation (waitingForValidation, validated…) que seul le workflow déplace — la demande part en attente de validation, elle n'est pas validée par cet appel (suivi via boond_validations_search).

  • Écriture non idempotente — l'API ne déduplique pas deux demandes sur les mêmes dates.

Returns : confirmation et fiche de la demande créée.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoCommentaire / motif
typeOfYesLibellé de l'absence (congé payé, RTT, maladie, sans solde...) — porté par `title` ; le type effectif est `workUnitTypeReference`.
endDateYesDate de fin (YYYY-MM-DD)
durationNoDurée en jours ; calculée automatiquement si absente
startDateYesDate de début (YYYY-MM-DD)
resourceIdYesID de la ressource en absence
absencesPeriodsNoPériodes d'absence Boond brutes
workUnitTypeReferenceNoCode `reference` du type d'absence, publié par `boond_absences_default` (`workUnitTypesAllowed` de la ressource : RTT, maladie, congés payés…) — nulle part ailleurs. Défaut 1 (à confirmer avec le default).

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing that the call is non-idempotent, that the API does not deduplicate requests on the same dates, and that the created absence starts in a waiting-for-validation state rather than being immediately validated. These are important behavioral traits an agent needs to know.

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 well structured with clear sections for when to use, what to use instead, key behavioral notes, and return value. Every sentence carries useful information, and the most important scoping information is front-loaded.

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 creation tool with no output schema and only negative annotations, the description covers the essential operational aspects: what it creates, how periods are determined, the non-idempotent behavior, the validation workflow, and what the response contains. An agent has enough context to invoke 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 the baseline is 3. The description adds meaningful semantic context by explaining the relationship between absencesPeriods and startDate/endDate, including the fallback behavior when absencesPeriods is omitted. This clarifies a subtle interaction that the schema alone does not convey.

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 verb and object: 'Crée une demande d'absence' for a resource, and lists examples (congés, RTT, maladie). It also distinguishes itself from boond_absences_update, so an agent can immediately tell creation apart from modification.

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 'Quand' section states the exact scenario for using this tool, and 'Plutôt que' explicitly names boond_absences_update as the alternative for modifying an existing request. It also clarifies that validation state is handled elsewhere via boond_validations_search, giving clear routing guidance.

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

boond_absences_defaultRéférentiels d'une demande d'absenceA
Read-onlyIdempotent

Renvoie les types d'absence autorisés pour une ressource (RTT, maladie, congés payés… avec leur code) et les valeurs par défaut d'une demande.

Quand : AVANT boond_absences_create — le code workUnitTypeReference n'est publié que par GET /absences-reports/default (ni dans boond_application_dictionary, ni sur l'agence). Plutôt que : boond_timesheets_default pour les mêmes codes vus du CRA (production comprise) ; aucun autre outil ne donne les types d'absence.

  • Lecture seule ; la réponse brute est réduite aux types (ressource incluse, workUnitTypesAllowed) et aux scalaires de la demande.

Returns : texte : ressource, agence, types d'absence (reference | libellé | activityType), valeurs par défaut.

ParametersJSON Schema
NameRequiredDescriptionDefault
agencyIdNoID de l'agence — déduite de la ressource si omise.
resourceIdYesID de la ressource (requis par l'API).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by noting it is read-only, that the raw response is reduced to absence types and request scalars, and that the response includes the resource and workUnitTypesAllowed. This goes beyond the annotations without contradicting them.

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 well structured with clear front-loaded purpose, then 'Quand', 'Plutôt que', and 'Returns' sections. Every sentence serves a distinct purpose: what it does, when to use it, what to use instead, and what the response contains.

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 lacking an output schema, the Returns section enumerates the response contents: resource, agency, absence types with reference, label, and activityType, plus defaults. Combined with the explicit usage timing and sibling differentiation, an agent has enough context to select and invoke the tool correctly.

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?

The input schema is fully described (100% coverage) and already explains that agencyId is optional and deduced from the resource, while resourceId is required by the API. The description does not add new parameter-level semantics, but with complete schema coverage the baseline of 3 is appropriate.

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: it returns the allowed absence types for a resource (RTT, maladie, congés payés, with their codes) and the default values of an absence request. It also explicitly distinguishes itself from boond_timesheets_default, so an agent can tell exactly what this tool provides.

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?

Usage guidance is explicit and actionable: use it BEFORE boond_absences_create because workUnitTypeReference is only published by GET /absences-reports/default, and prefer it over boond_timesheets_default when the codes are needed from the absence perspective. It even states that no other tool provides absence types, leaving no ambiguity.

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

boond_absences_deleteSupprimer une absenceA
Destructive

Supprime définitivement un(e) demande d'absence de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_absences_get. Plutôt que : boond_absences_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint: true, but the description goes well beyond that: it warns the deletion is irreversible with no trash, explains the confirmation flow when the MCP client supports elicitation (and the alternative direct deletion otherwise), and specifies the return shape including deleted: false on refusal. It also mentions the rights-check to avoid 403s. This is rich, non-redundant behavioral context.

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 structured with clear sections (when, rather-than, safety, warning, return format) and uses bullet points. It is a bit long, but every sentence serves a purpose – no filler. Front-loaded with the core action, then conditions, then details. Efficient for a destructive tool with complex behavior.

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 delete tool with an output schema and destructive annotations, the description covers everything needed: the action, conditions, alternative, safety checks, irreversibility warning, confirmation behavior, and return contract. No significant gap remains for an agent to call it correctly.

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?

The schema already describes `id` with its numeric pattern, so baseline is 3. The description adds a usage prerequisite (verify the ID via boond_absences_get) but does not add new meaning about the parameter itself. That instruction is more about workflow than parameter semantics, so the score stays at the baseline.

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 precise action: 'Supprime définitivement un(e) demande d'absence' – a permanent delete. It clearly distinguishes from boond_absences_update, which is for deactivating or changing state without destruction. This leaves no ambiguity about what the tool does or how it differs from its most similar sibling.

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 'Quand' condition: only on explicit user request, and after verifying the ID with boond_absences_get. It also names the alternative (boond_absences_update) and states why that is usually the better choice. Additionally, it recommends checking boond_rights_get to avoid a 403. This is a model of usage guidance.

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

boond_absences_getDetails d'une absenceA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) demande d'absence par son ID numérique.

Quand : après un boond_absences_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_absences_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_absences_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. It adds valuable behavioral context by noting that an unknown ID returns the raw BoondManager error, and that the response is a JSON entity with attributes and relations. This goes beyond annotations and helps the agent anticipate error behavior and response structure.

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 compact and every sentence contributes value: main action, when to use, when not to use, a warning, and return format. The purpose is front-loaded, and there is no redundant or filler content. It is well-structured for quick agent parsing.

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 a single-parameter get-by-ID tool with high schema coverage and no output schema, the description is sufficiently complete. It explains the return type (JSON entity with attributes and relations) and error behavior. It doesn't list specific fields, but that is acceptable given the typical nature of such tools and the absence of an output 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% with the id parameter described as 'Identifiant unique de l'entité BoondManager (numérique).' The description adds further meaning by explicitly stating the ID must be numeric and must come from boond_absences_search, not guessed. This enhances the schema's baseline and provides necessary usage nuance.

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 clearly states the specific verb and resource: 'Récupère la fiche complète d'un(e) demande d'absence par son ID numérique.' It distinguishes the tool from its siblings by emphasizing that it retrieves full details by numeric ID, contrasting with the search tool that returns a list summary. The purpose is unambiguous and helps an agent select this tool over other absence tools.

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 provides explicit when-to-use and when-not-to-use guidance: 'Quand : après un boond_absences_search' and 'Plutôt que : boond_absences_search si l'ID n'est pas connu.' It also warns that the ID must come from search, not guessed, giving clear operational context. This fully addresses the usage decision relative to the obvious alternative.

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

boond_absences_updateModifier une absenceA
Idempotent

Met à jour une demande d'absence existante, identifiée par son ID.

Quand : pour corriger les dates, le motif ou le commentaire d'une demande déjà déposée. Plutôt que : boond_absences_create si la demande n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits.

  • absencesPeriods fait exception — le tableau fourni remplace l'intégralité des périodes existantes.

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de l'absence à modifier
noteNoCommentaire / motif
endDateNoDate de fin (YYYY-MM-DD)
startDateNoDate de début (YYYY-MM-DD)

TDQS

A4.4/5.0
Behavior4/5

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

With annotations already covering read-only/idempotency, the description adds real behavioral value: partial update semantics and the exception that absencesPeriods replaces all existing periods. However, absencesPeriods is not present in the input schema and is disallowed by additionalProperties:false, which slightly undermines the disclosure.

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 compact, front-loaded with the core action, and uses short labeled sections plus two focused bullets. No sentence is wasted.

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?

Given no output schema, describing the return as confirmation plus updated record is helpful. The tool is nearly complete, but the reference to absencesPeriods creates a schema/description mismatch that an agent would have to resolve.

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 coverage is 100%, so the schema already documents the parameters. The description adds a useful partial-update note, but its mention of absencesPeriods is confusing because that field cannot be provided via this schema, so it does not clearly improve parameter understanding.

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 'Met à jour une demande d'absence existante, identifiée par son ID', giving a precise verb, resource, and identifier-based scope. This is clearly distinct from the sibling boond_absences_create, which creates rather than updates.

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?

It explicitly states when to use the tool ('pour corriger les dates, le motif ou le commentaire d'une demande déjà déposée') and names the alternative, boond_absences_create, with the condition that selects it (absence doesn't exist yet).

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

boond_accounts_getDétails d'un(e) compte utilisateurA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) compte utilisateur par son ID numérique.

Quand : après un boond_accounts_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_accounts_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_accounts_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context: unknown IDs pass through BoondManager's raw error, the ID must come from a prior search rather than guessing, and the response is the full JSON entity with attributes plus relations. No contradiction exists.

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 compact and front-loaded, with the core purpose in the first sentence and supporting usage guidance in short labeled lines. Every sentence earns its place, and the structure makes the key routing information easy 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?

For a simple single-parameter get-by-ID tool with no output schema, the description covers the essential context: prerequisite search, excluded alternative, error behavior, ID provenance, and return shape. Nothing needed to invoke 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 the schema already documents the id parameter as a numeric BoondManager identifier. The description reinforces that only a numeric ID is accepted and that names are not allowed, but it does not add substantial meaning beyond the schema's existing documentation.

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 states a specific verb and resource: 'Récupère la fiche complète d'un(e) compte utilisateur par son ID numérique.' It clearly distinguishes this from boond_accounts_search by emphasizing the full record retrieval and ID-based lookup, so an agent can tell them apart immediately.

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 says when to use it ('après un boond_accounts_search'), when not to use it ('Plutôt que : boond_accounts_search si l'ID n'est pas connu'), and notes the tool does not accept a name. This is strong routing guidance with no reliance on inference.

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

boond_actions_createCréer une actionA

Crée une nouvelle action (appel, email, RDV, note) dans BoondManager, rattachée à un contact, candidat, ressource, opportunité ou projet (relation dependsOn, obligatoire).

Plutôt que : boond_actions_update pour compléter une action déjà enregistrée plutôt que d'en créer un doublon.

Exactement une entité de rattachement parmi contactId / candidateId / resourceId / opportunityId / projectId est requise (422 sinon) ; companyId n'est accepté qu'en complément d'un contactId, et positioningId est exigé par l'API pour les types d'action liés aux positionnements (ex. RQ).

Returns: L'action créée avec son ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoContenu / notes de l'action
titleNoTitre de l'action
typeOfYesType d'action : ID numérique du dictionnaire (setting.action.*, via boond_application_dictionary) ou libellé personnalisé si BOOND_DICTIONARY_OVERRIDES est configuré
endDateNoDate de fin (même format que startDate)
companyIdNoID de la société associée (uniquement en complément d'un contactId)
contactIdNoID du contact auquel rattacher l'action (dependsOn)
projectIdNoID du projet auquel rattacher l'action (dependsOn)
startDateNoDate de début au format ISO 8601 avec timezone (ex: 2026-06-05T10:00:00+0200)
resourceIdNoID de la ressource à laquelle rattacher l'action (dependsOn)
candidateIdNoID du candidat auquel rattacher l'action (dependsOn)
opportunityIdNoID de l'opportunité à laquelle rattacher l'action (dependsOn)
positioningIdNoID du positionnement à lier à l'action (relation positioning). Requis par l'API pour les types d'action liés aux positionnements (ex. RQ) — sans lui, erreur 422 « 1002 - Wrong or missing attribute (/data/relationships/positioning) ».

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, so the write nature is structured data; the description adds genuine context beyond that: the mandatory dependsOn attachment, the 422 failure on missing/invalid attachment, companyId's conditional acceptance, and the API-required positioningId tied to positioning-related action types. It discloses error conditions not visible elsewhere, though it stops short of describing auth needs or side effects like counts.

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, dense sentences, each earning its place: purpose, routing, constraint set, return. The most important scoping information is front-loaded and the constraint sentence packs the validation rules efficiently with 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?

For a 12-parameter creation tool with intricate mutual-exclusivity and conditional-requirement logic and no output schema, this description is complete: it covers the entity types, the update alternative, validation failure modes, positional requirements, and the return value (created action with ID). 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 baseline is 3, but the description adds real relational meaning beyond the schema: it ties the five ID params to the dependsOn relation, states the mutual-exclusivity rule among them, clarifies that companyId is only a complement to contactId, and explains positioningId's API requirement with the exact 422 code. This is genuinely additive semantic information about parameter relationships.

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+resource ('Crée une nouvelle action … dans BoondManager') and enumerates the valid parent entities (contact, candidat, ressource, opportunité, projet). It explicitly names the sibling boond_actions_update, so an agent can distinguish create from update/delete without opening a 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?

The description explicitly routes the agent: 'Plutôt que : boond_actions_update pour compléter une action déjà enregistrée plutôt que d'en créer un doublon.' It names the alternative tool and the exact condition that should select it, plus documents hard constraints (mutual exclusivity, 422 failure). Nothing is left to inference.

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

boond_actions_deleteSupprimer une actionA
Destructive

Supprime définitivement un(e) action de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_actions_get. Plutôt que : boond_actions_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Even though annotations already mark destructiveHint=true, the description adds critical context: the operation is irreversible with no API-side trash, a rights check can avoid a 403, and elicitation-capable clients will trigger user confirmation with structuredContent.deleted set to false on refusal. This goes well beyond the annotations without contradicting them.

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 well-structured with clear sections: core action, when to use, preferred alternative, safety notes, confirmation behavior, and return contract. Every sentence carries meaningful safety or routing information, and the irreversible warning is prominently placed.

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 destructive mutation tool, the description covers all essential context: explicit user consent, ID verification, permission pre-check, irreversibility, conditional confirmation flow, and return-value semantics. There is no meaningful gap an agent would face when deciding whether and how to call this tool.

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?

The schema covers 100% of the single parameter with a description, so the baseline is 3. The tool description does not add new parameter syntax or meaning, though it sensibly advises verifying the ID before deletion via boond_actions_get, which is usage guidance rather than parameter semantics.

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 precise verb and resource: "Supprime définitivement un(e) action de BoondManager." It clearly states a permanent delete operation, which distinguishes it from related siblings like boond_actions_update and boond_actions_get without requiring the agent to infer anything.

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 says when to use it (only on explicit user request, after checking the ID with boond_actions_get) and when not to (prefer boond_actions_update for deactivating or changing state). It also points to boond_rights_get as a pre-flight permission check, giving the agent actionable routing and prerequisites.

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

boond_actions_getDétails d'une actionA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) action par son ID numérique.

Quand : après un boond_actions_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_actions_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_actions_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide readOnly, idempotent, and non-destructive hints. The description adds useful behavioral context: unknown IDs cause the raw BoondManager error to be returned, and the response includes attributes plus relations as returned by the API. It also confirms the operation is read-only.

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 compact, front-loaded with the core action, and uses short labeled sections for when to use, what not to use, error behavior, and return value. Every sentence contributes useful information without 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?

For a single-parameter read-only getter, this description is complete. It explains the purpose, when to use it, what the response contains, and the error behavior for invalid IDs. The annotation set covers safety, and no output schema is needed since the return format is described.

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?

The schema already fully documents the single 'id' parameter with type, pattern, and description. The description adds meaningful usage semantics by specifying that the ID is numeric and must originate from boond_actions_search, never from assumption. This extra provenance guidance goes beyond the schema.

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 states a specific verb and resource: 'Récupère la fiche complète d'un(e) action par son ID numérique.' It clearly distinguishes itself from boond_actions_search by noting it retrieves full attributes not present in the list summary, and it is also distinct from create/update/delete siblings.

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 guidance is given: use after boond_actions_search to obtain full attributes, and avoid it in favor of boond_actions_search when the ID is not known because this tool does not accept a name. The warning that IDs must come from boond_actions_search, never from guesswork, is especially strong.

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

boond_actions_updateModifier une actionA
Idempotent

Met à jour une action existante dans BoondManager (PUT partiel, seuls les champs fournis sont modifiés).

Plutôt que : boond_actions_create si l'action n'existe pas encore.

⚠️ Aucune relation n'est envoyée : le rattachement (dependsOn), le positionnement et la synchronisation calendrier (event Outlook/Teams, invités) sont préservés. Idéal pour ajouter un compte-rendu sans casser l'agenda — contrairement à delete + recreate qui supprime l'événement. text remplace le contenu existant (pas d'ajout).

Returns: L'action mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de l'action à modifier
textNoNouveau contenu / notes (HTML accepté). Remplace l'existant (pas d'ajout).
titleNoNouveau titre de l'action
typeOfNoNouveau type : ID numérique du dictionnaire setting.action.* (via boond_application_dictionary)
endDateNoDate de fin (même format que startDate)
startDateNoDate de début au format ISO 8601 avec timezone (ex: 2026-06-05T10:00:00+0200)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description adds important behavioral detail: only provided fields are modified, no relations are sent, existing dependsOn/positioning/calendar sync is preserved, and `text` replaces rather than appends. This is exactly the kind of non-obvious behavior an agent needs.

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 efficient: main action, partial-PUT semantics, alternative, safety warning, use case, and return value, all in a compact, well-organized structure. Every sentence earns its place.

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 an update tool, the description is complete enough: it covers the operation type, the scope of changes, the behavioral guarantees about relations, the alternative to create, and the return value. The annotations and schema cover the rest.

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?

The input schema already documents all parameters with 100% coverage, so the description does not need to re-explain them. It adds value by stating that omitted relation fields are preserved and that `text` is a replacement operation, which gives the agent a clearer mental model of partial updates.

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 precise verb and resource: "Met à jour une action existante dans BoondManager" and clarifies the partial-PUT semantics. It also explicitly differentiates itself from `boond_actions_create`, making the boundary between update and create obvious.

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?

It directly tells the agent when not to use this tool: "Plutôt que : `boond_actions_create` si l'action n'existe pas encore." It also contrasts the update with delete + recreate, explaining that update is the safe path when preserving calendar/agenda data matters.

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

boond_advantages_createCréer un avantageA

Attribue un avantage (tickets restaurant, mutuelle, véhicule, prime…) à une ressource.

Quand : après boond_advantages_default pour connaître les types et montants de l'agence. Plutôt que : boond_advantages_search d'abord : l'API ne déduplique pas.

  • Corps déduit de models.advantage (date, quantity, advantageType, montants, relations resource / contract / project / delivery) — non éprouvé sur un tenant de test.

  • Écriture non idempotente.

Returns : confirmation et ID de l'avantage (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate de l'avantage (YYYY-MM-DD).
noteNoCommentaires (`informationComments`).
quantityNoQuantité (ex. nombre de tickets).
projectIdNoID du projet à refacturer.
contractIdNoID du contrat de rattachement.
deliveryIdNoID de la prestation.
resourceIdYesID de la ressource bénéficiaire (relation `resource`, requise).
returnDateNoDate de restitution (véhicule, matériel).
agencyAmountNoCharges / coefficient de charge côté agence.
advantageTypeYesType d'avantage : `reference` ou `<reference>_<agencyId>` tel que publié par `boond_advantages_default` (`advantageTypes`).
employeeAmountNoMontant versé au salarié.
participationAmountNoParticipation salarié.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.4/5.0
Behavior4/5

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

The description explicitly states 'Écriture non idempotente', consistent with idempotentHint=false, and adds a useful reliability caveat: the body was inferred from models.advantage and is 'non éprouvé sur un tenant de test'. It also tells the agent the return contains a confirmation and advantage ID. It does not cover auth or errors, but annotations already cover read-only/destructive aspects.

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 compact and well-structured: purpose, when/alternative, caveats, and return value are each in short labeled blocks. There is no filler, and the most important usage constraint is front-loaded.

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 a 12-parameter create operation with full schema descriptions and an output schema, the description supplies the key workflow context, the deduplication warning, non-idempotence, and an implementation caveat. It does not enumerate validation or error behavior, but nothing essential for selecting and invoking the tool 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 coverage is 100% and every parameter already has a description in the input schema. The prose adds a high-level grouping via 'models.advantage' and mentions relationships (resource/contract/project/delivery), but it does not add new per-parameter semantics beyond the schema. Baseline 3 is appropriate.

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 action and resource: 'Attribue un avantage ... à une ressource', with concrete examples (tickets restaurant, mutuelle, véhicule). It also differentiates from siblings by saying to use it after boond_advantages_default and instead of boond_advantages_search first.

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 'Quand' and 'Plutôt que' sections give explicit workflow guidance: run boond_advantages_default first to know types and amounts, and do not call boond_advantages_search first because the API does not deduplicate. This is clear when-to-use and when-not-to-use guidance.

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

boond_advantages_defaultRéférentiels d'un avantageA
Read-onlyIdempotent

Renvoie les valeurs par défaut d'un avantage pour une ressource (types d'avantage de l'agence, montants pré-remplis, devise) avant sa création.

Quand : AVANT boond_advantages_create — les types (advantageType) et leurs quotas viennent de là. Plutôt que : boond_advantages_search pour les avantages déjà attribués à la ressource.

  • Lecture seule (GET /advantages/default) ; la réponse est rendue telle quelle.

Returns : JSON de l'avantage vide pré-rempli, avec les types d'avantage inclus.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoID du projet (avantage refacturable).
contractIdNoID du contrat de rattachement.
deliveryIdNoID de la prestation.
resourceIdYesID de la ressource bénéficiaire.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it is a GET request ('GET /advantages/default') and that the response is returned 'telle quelle', plus a clear description of the payload contents (pre-filled JSON with included advantage types). This goes beyond the annotations without contradicting them.

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 concise and well-structured: it opens with the primary purpose, then clarifies when to use it versus a sibling, and concludes with a brief note on HTTP method and return format. Every sentence serves a purpose with no redundancy.

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 the tool's simplicity (a read-only getter for defaults), the annotated safety profile, and full schema coverage, the description is complete. It explains the return value ('JSON de l'avantage vide pré-rempli, avec les types d'avantage inclus'), covers usage timing, and meets the needs for correct invocation.

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 all four parameters are documented in the input schema. The description adds no detailed semantics beyond the schema—it only hints that the response is tied to a resource. The baseline of 3 is appropriate because the schema does the heavy lifting.

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 states a specific verb ('Renvoie') and resource ('valeurs par défaut d'un avantage pour une ressource'), clearly identifying what the tool provides. It explicitly contrasts with boond_advantages_search and situates itself before boond_advantages_create, making sibling differentiation unambiguous.

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?

Explicitly states when to use ('AVANT boond_advantages_create') and when not to ('Plutôt que boond_advantages_search pour les avantages déjà attribués à la ressource'). Also notes the read-only nature, leaving no ambiguity about the tool's role.

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

boond_advantages_getDétails d'un avantageA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) avantage par son ID numérique.

Quand : après un boond_advantages_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_advantages_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_advantages_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds valuable context: it states the return is a JSON entity (attributes + relations) and that an unknown ID raises the raw BoondManager error. This goes beyond the basic safety hints and discloses error behavior.

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 concise sentences with clear subheadings (Quand, Plutôt que, a bullet for error, and a return note). Front-loaded with the main purpose, zero waste, and efficient use of whitespace.

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 single-parameter get-by-id tool with full schema coverage and safety annotations, the description is complete: it covers when to use, the source of the ID, error behavior, and the return format. Nothing essential is 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?

Schema covers 100% with full parameter description, but the description adds critical semantic guidance: the ID must come from a prior search, not be guessed. This linkage is not in the schema and helps correct parameter sourcing.

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 clearly states it retrieves the complete record of an advantage by its numeric ID, using the specific verb 'Récupère' and naming the resource. It explicitly distinguishes itself from the search tool by noting it provides attributes not in the list summary.

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?

Explicitly gives when to use (after a search, to get full attributes) and when not (if ID unknown, use search instead since this tool doesn't accept a name). Also warns that IDs must come from search, never guessed, providing clear routing to the sibling.

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

boond_agencies_getDétails d'un(e) agenceA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) agence par son ID numérique.

Quand : après un boond_agencies_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_agencies_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_agencies_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.6/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds the behavior that an unknown ID will surface the BoondManager error as-is, and that the ID must come from `boond_agencies_search`, never from a guess. This is useful context beyond the annotations.

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 concise and well-structured: it opens with the core purpose, then provides usage context, a clear contrast with the sibling, a behavior note, and a returns description. Each sentence earns its place, and key information is front-loaded.

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?

The description is complete for this simple one-parameter read tool. It covers what it returns (JSON of the entity with attributes and relations), the read-only nature, error behavior for unknown IDs, and its role in the workflow. The only minor gap is not detailing exact response fields, but that's not critical given the output is JSON from the API.

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?

The schema description coverage is 100%, and the parameter `id` is adequately described as the unique BoondManager entity identifier (numeric). The description reinforces that the ID must be obtained from the search tool)Skip, which adds context beyond the schema. No additional parameter details are needed.

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 clearly states the purpose: retrieving the full record of an agency by its numeric ID. It specifies the resource ('fiche complète d'un(e) agence') and the action ('Récupère'), and it distinguishes this tool from the search tool by noting it does not accept names, only IDs.

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 says when to use this tool: after a `boond_agencies_search` to get full attributes not in the list summary. It also states when NOT to use it: if the ID is not known, use `boond_agencies_search` instead. This clear routing is very helpful.

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

boond_application_current_userUtilisateur courant BoondManagerA
Read-onlyIdempotent

Récupère les informations de l'utilisateur actuellement connecté à l'API BoondManager (profil, permissions, agence...).

Quand : en début de session, pour connaître l'identité, l'agence et le périmètre du compte utilisé — donc ce que « mes données » désigne. Plutôt que : la ressource boond://application/current-user, identique et moins coûteuse ; et boond_resources_search pour quelqu'un d'autre que le titulaire du compte, cet outil ne prenant aucun paramètre.

Returns: Données JSON de l'utilisateur courant.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context: it returns JSON data about the current user, mentions no parameters, and clarifies that this is not the tool for querying other users.

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 well-structured with 'Quand', 'Plutôt que', and 'Returns' sections, and the main purpose is front-loaded. It is slightly longer than necessary and the 'identique et moins coûteuse' phrase adds ambiguity without much benefit.

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 a zero-parameter introspection tool, the description covers the main decision point: when to call it and when to use boond_resources_search instead. Since there is no output schema, the explicit mention of JSON user data with profile, permissions, and agency is useful and sufficient for a basic agent decision.

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?

The input schema has zero parameters, so the baseline is 4. The description reinforces this by explicitly stating that the tool takes no parameters, which is helpful for an agent choosing between this and a parameterized sibling like boond_resources_search.

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 clearly states the tool retrieves information about the currently connected BoondManager API user, including profile, permissions, and agency. It uses a specific verb and resource, and it distinguishes itself from boond_resources_search by the account-holder scope.

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 explicitly says to use this tool at the start of a session to identify the account and its scope, and it points to boond_resources_search when querying someone other than the account holder. However, the comparison with the boond://application/current-user resource is worded ambiguously ('identique et moins coûteuse') and could confuse an agent about whether to prefer the tool or the resource.

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

boond_application_dictionaryRécupérer un dictionnaire BoondManagerA
Read-onlyIdempotent

Récupère un dictionnaire de référence BoondManager (états, types, pays, devises, langues, outils, expertises, ...).

Quand : pour traduire un état ou un type BoondManager entre son ID entier et son libellé, avant de filtrer une recherche. Plutôt que : les ressources boond://dictionary/* pour les tables courantes (états, typeOf, pays, devises, langues) : même contenu par un resources/read, sans consommer un appel d'outil. Cet outil reste nécessaire pour les tables non publiées en ressource.

L'API expose un seul endpoint /application/dictionary qui renvoie tout — le serveur le cache (TTL 1h, configurable via BOOND_DICTIONARY_TTL_MS) et extrait un sous-arbre par chemin dotté.

Chemins usuels de dictionaryType (relatifs à data) : - "setting.state.{resource,candidate,contact,company,opportunity,project,invoice,order,positioning}" → états par entité - "setting.typeOf.{resource,contact,project}" → types par entité - "setting.action.{candidate,resource,opportunity,project,...}" → actions disponibles - "setting.tool" → outils / technos (Java, AWS...) - "setting.expertiseArea" → domaines d'expertise - "setting.experience" → niveaux d'expérience - "setting.languageSpoken" → langues parlées - "setting.activityArea" → secteurs d'activité - "setting.mobilityArea" → mobilités géographiques - "setting.currency" → devises - "setting.civility" → civilités - "country" → pays - "languages" → langues d'interface (fr, en, es)

Note : l'ancienne forme "states/resources" (slash) n'est pas valide — utilisez "setting.state.resource".

Returns : le sous-arbre demandé (souvent un tableau {id, value, …}), ou isError: true avec le chemin fautif s'il est introuvable.

ParametersJSON Schema
NameRequiredDescriptionDefault
dictionaryTypeYesChemin dotté relatif à `data` de /application/dictionary (ex: setting.state.resource, setting.typeOf.project, setting.action.candidate, setting.tool, country, languages). La forme « states/resources » (slash) n'est pas valide.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial context beyond that: the single API endpoint behavior, server-side caching with TTL 1h configurable via BOOND_DICTIONARY_TTL_MS, sub-tree extraction by dotted path, isError: true with faulty path on miss, and the invalid legacy 'states/resources' slash form. No contradiction with annotations.

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 long but logically structured with clear section headers (Quand, Plutôt que, API behavior, Chemins usuels, Returns) and is front-loaded with the core purpose. The common-paths list is arguably the most actionable content for an agent. Minor deduction for length, but every section earns its place.

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?

Complete for this tool: no output schema exists, so the description explains the return format ('souvent un tableau {id, value, …}, ou isError: true'). With 1 well-documented parameter, clear annotations, and coverage of purpose, usage, behavior, paths, and errors, nothing an agent needs 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter dictionaryType, which is already well documented with examples and the slash-form caveat. The description goes further with a 'Chemins usuels' list enumerating ~15 concrete paths (setting.state.resource, setting.tool, country, languages, etc.), giving agents far more than the schema alone.

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+resource: 'Récupère un dictionnaire de référence BoondManager (états, types, pays, devises, langues, outils, expertises, ...)'. It clearly states what the tool retrieves and lists concrete dictionary categories. None of the ~200 sibling tools perform dictionary lookups, so it is easily distinguished.

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?

Has an explicit 'Quand' section stating when to use it (to translate a BoondManager state/type between integer ID and label before filtering a search) and a 'Plutôt que' section naming the alternative: boond://dictionary/* resources for common tables, with the condition that those suffice and only non-published tables require this tool. This is exemplary when/when-not/alternatives guidance.

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

boond_business_units_getDétails d'un(e) business unitA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) business unit par son ID numérique.

Quand : après un boond_business_units_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_business_units_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_business_units_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds useful context: the return value is the full entity JSON with attributes and relations, and unknown IDs surface BoondManager's raw error. This exceeds what annotations alone provide, though it does not describe auth or other operational details.

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 well-structured and front-loaded: the main purpose is stated first, followed by clear usage conditions and return information. Every sentence adds value, and the bullet/list formatting makes it easy to parse.

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 single-parameter, read-only get-by-ID tool, the description covers the key operational concerns: when to use it, where the ID comes from, error behavior, and the shape of the response. No critical information is missing for correct invocation.

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 schema already documents the id parameter. The description adds semantic guidance by emphasizing that the ID is numeric and must be obtained from boond_business_units_search rather than guessed, which helps the agent understand the provenance and validity constraints of the parameter.

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 states a specific action ('Récupère la fiche complète') and resource ('business unit par son ID numérique'), and differentiates it from the sibling search tool by saying it accesses attributes missing from the list summary. An agent can clearly understand what this tool does and how it differs from boond_business_units_search.

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 says when to use it ('après un boond_business_units_search'), what to use instead in a different situation ('Plutôt que : boond_business_units_search si l'ID n'est pas connu'), and warns that the ID must come from search, never from guesswork. This is strong, actionable guidance.

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

boond_calendars_getDétails d'un(e) calendrierA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) calendrier par son ID numérique.

Quand : après un boond_calendars_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_calendars_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_calendars_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already set readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds that unknown IDs return the raw BoondManager error, which is useful behavioral context, but does not describe other edge cases (e.g., network failures, response format details). The description does not contradict annotations.

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 concise and well-structured with clear sections for 'when' and 'rather than', front-loading the primary purpose and usage guidance. No redundant sentences.

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 a single-parameter read-only tool with annotations covering safety, the description covers the key context: when to use, how to get the ID, and what the return is (attributs + relations). It does not detail the output structure, but no output schema exists, so the description is adequate.

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 the schema already documents the `id` parameter as the unique identifier. The description reinforces that it must be numeric and from search, but adds limited new semantic value beyond that.

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 clearly states it retrieves the complete record of a calendar by its numeric ID, distinguishing it from the search tool that returns list summaries. It explicitly says it is for after a search to get full attributes, which differentiates it from sibling get tools.

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 provides explicit when-to-use guidance: after `boond_calendars_search` to obtain attributes not in the list summary, and explicitly says to prefer `boond_calendars_search` when the ID is not known because this tool does not accept names. Also warns that the ID must come from search, not guesswork.

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

boond_candidates_actionsActions liées à un candidatA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) candidat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_candidates_get pour la fiche de base, ou boond_candidates_search si l'ID est inconnu.

Returns : Liste des actions rattachées au candidat. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover safety and idempotency. The description adds that it retrieves actions and is read-only ('Lecture seule'), which slightly reinforces the annotation. It does not disclose any additional behavioral traits such as pagination, response format, or potential for large data sets, but given the annotation coverage, this is acceptable.

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 concise, with key information front-loaded in the first sentence. It uses short paragraphs for usage guidance and return type, making it scannable. It could be slightly more compact, but it is not verbose or redundant.

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?

This is a simple single-parameter read-only tool. The description covers purpose, usage context, and return type. Given the presence of annotations (readOnly, idempotent) and full schema coverage, nothing critical is missing. The only minor gap is not describing the response structure in detail, but the absence of an output schema suggests standard behavior.

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%, and the parameter 'id' is well-documented ('Identifiant unique de l'entité BoondManager (numérique)'). The description does not add any parameter-specific detail beyond the schema, but also does not need to, since the schema covers it fully. Per baseline, score is 3.

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 description states a specific verb ('Récupère') and resource ('actions d'un candidat') and lists the action types (appels, emails, RDV, notes), which distinguishes it from generic get tools. It does not explicitly name the sibling tools it differs from, but the context signals (sibling list) include similar actions tools for other entities, and the description's specificity is sufficient.

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 clearly states when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and provides explicit alternatives ('Plutôt que : `boond_candidates_get` pour la fiche de base, ou `boond_candidates_search` si l'ID est inconnu'). This is exemplary usage guidance with both when and when-not conditions.

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

boond_candidates_administrativeDonnées administratives d'un candidatA
Read-onlyIdempotent

Récupère les données administratives (pièces justificatives, documents contractuels, informations RH) d'un(e) candidat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_candidates_get pour la fiche de base, ou boond_candidates_search si l'ID est inconnu.

Returns : Bloc administratif du candidat, avec les ID de documents exploitables par boond_documents_get. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful context by stating the return is the administrative block and that document IDs can be consumed by boond_documents_get. This goes beyond the annotations without contradicting them.

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 compact, front-loaded with the core action, and organized with 'Quand', 'Plutôt que', and 'Returns' sections. Every element earns its place and there is 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?

For a one-parameter read-only tool, the description covers purpose, usage context, alternatives, and return shape. No output schema exists, but the high-level return description is sufficient for an agent to invoke this tool correctly.

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?

The schema already fully describes the single 'id' parameter with 100% coverage. The description only restates that data is fetched 'par son ID', adding no extra semantic detail beyond the schema.

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 uses a specific verb ('Récupère'), a clear resource ('données administratives d'un candidat'), and an explicit identifier (ID). It also distinguishes this section-scoped tool from the general candidate profile tool, which is a strong differentiator.

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?

It explicitly states when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and names the alternatives to prefer instead: boond_candidates_get for the base profile and boond_candidates_search when the ID is unknown.

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

boond_candidates_createCréer un(e) candidatA

Crée un(e) candidat dans BoondManager.

Quand : pour ajouter un(e) candidat inexistant(e). Plutôt que : boond_candidates_update pour modifier un enregistrement existant, et boond_candidates_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoVille
noteNoNotes / commentaires
stateNoÉtat du candidat (0=en cours, 1=placé, 2=archivé...)
titleNoTitre du poste / fonction
email1NoEmail principal
phone1NoTéléphone principal
countryNoPays
lastNameYesNom de famille du candidat
firstNameYesPrénom du candidat
mainSkillsNoCompétences principales (texte libre)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.8/5.0
Behavior5/5

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

The description explicitly discloses non-idempotent behavior ('deux appels identiques créent deux enregistrements - l'API ne déduplique pas') and explains that relation IDs and state/type IDs are BoondManager numeric IDs requiring pre-resolution. It also discloses the return content and reusability of structuredContent.id. This goes beyond annotations (which only say readOnly=false) and carries the behavioral load well.

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 structured with clear sections (Quand, Plutôt que, bullet point, Returns) and uses short sentences. It front-loads the primary action in the first sentence, then adds conditions, exclusions, behavioral notes, and return value information. No filler or repetition.

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 a create tool with 10 parameters, it is complete enough: it covers usage context, behavioral side effects, ID resolution approach, and return value chaining. It does not document every parameter's semantic nuance, but the schema already does that. Missing explicit prerequisites (e.g., authentication) which annotations and general Boond context might provide, but not material.

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?

The input schema has 100% description coverage for all 10 parameters, each with descriptions in French. The tool description adds meaning for state (numeric ID, needs pre-resolution) and the type/state relation. However, parameter descriptions are mostly short labels; the description could add more about semantics or formats for a few fields. But because schema coverage is 100%, the baseline is 3, and the added ID-resolution guidance elevates it slightly.

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 explicitly states the action ('Crée un(e) candidat dans BoondManager'), specifies when to use it ('pour ajouter un(e) candidat inexistant(e)'), and distinguishes it from sibling tools like boond_candidates_update and boond_candidates_search. This clearly differentiates it from the many sibling candidate tools.

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 provides explicit 'Quand' (when) guidance and 'Plutôt que' (instead of) guidance, naming the alternatives and the workflow: search first with boond_candidates_search, then update with boond_candidates_update, or create. This is comprehensive usage guidance.

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

boond_candidates_deleteSupprimer un(e) candidatA
Destructive

Supprime définitivement un(e) candidat de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_candidates_get. Plutôt que : boond_candidates_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already include destructiveHint=true, but the description adds crucial context: irreversibility, absence of trash, confirmation flow contingent on elicitation capability, and the returned deleted flag semantics. It also explains how a refusal cancels the call. No contradiction with annotations; it enriches them.

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 well-structured with clear sections (Quand, Plutôt que, bullets, Returns). It packs essential information without redundancy. Each sentence adds value, and the most critical facts (permanent delete, alternatives) are front-loaded.

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 the single parameter, existing output schema, and annotations covering destructive behavior, the description goes beyond the minimum. It covers usage conditions, alternatives, rights check, irreversibility, confirmation behavior, and return format. Nothing essential is missing for an agent to invoke correctly.

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 coverage is 100%, so the id parameter is already documented. The description does not add additional meaning about the parameter beyond the schema, but it does emphasize verifying the ID via another tool, which is more of a usage guideline than parameter semantics. Baseline 3 is appropriate.

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 states a specific verb+resource ('Supprime définitivement un(e) candidat') and clearly distinguishes from the sibling update tool by explaining when to use delete vs update. It also notes the permanence and lack of trash, making the purpose unambiguous.

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?

Explicitly states when to use (on explicit user request after verifying ID with boond_candidates_get) and when not to (prefer update for deactivation). Names the alternative tool and the rights-check tool (boond_rights_get), providing clear routing guidance.

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

boond_candidates_getDétails d'un(e) candidatA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) candidat par son ID numérique.

Quand : après un boond_candidates_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_candidates_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_candidates_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds valuable behavioral context: without `tab`, only the base record is returned rather than a merge of tabs; an unknown ID returns the raw BoondManager error; and the ID must come from a search, never from guessing. This meaningfully informs agent expectations.

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 front-loaded with the primary action and then organizes supporting guidance into clear 'Quand', 'Plutôt que', bullet notes, and a Returns line. Each sentence carries useful information, and there is no redundant 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?

For a read-only getter with two parameters and no output schema, this description is complete: it identifies the ID source, explains the optional tab parameter, describes the response shape at a useful level, states the error behavior, and declares read-only semantics. An agent has enough to invoke 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?

The schema already describes both parameters with 100% coverage, so the baseline is 3. The description adds extra semantic value by clarifying that `tab` targets a specific tab and that omitting it returns only the base record, not an aggregate. This exceeds the schema alone without needing to fully compensate for a coverage gap.

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, resource, and identifier ('Récupère la fiche complète d'un(e) candidat par son ID numérique'), making the tool's core function unmistakable. It also explicitly contrasts itself with boond_candidates_search and boond_find, which differentiates it from the most likely sibling alternatives.

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 states exactly when to use the tool ('après un boond_candidates_search') and when not to ('Plutôt que : boond_candidates_search si l'ID n'est pas connu... ou boond_find pour résoudre un nom / un e-mail en ID'). It also explains the optional tab behavior, giving an agent clear selection criteria.

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

boond_candidates_informationInformations générales d'un candidatA
Read-onlyIdempotent

Récupère les informations générales (coordonnées, adresse, état civil, photo, tags, source) d'un(e) candidat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_candidates_get pour la fiche de base, ou boond_candidates_search si l'ID est inconnu.

Returns : Bloc identité et coordonnées du candidat. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.1/5.0
Behavior3/5

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

The description includes "Lecture seule" and a fetching verb, which is consistent with the `readOnlyHint` and `idempotentHint` annotations. With these annotations present, the description adds only a little extra context (return block), but does not disclose errors, authentication, or other operational behavior beyond what the annotations already imply.

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 compact and uses clear labels (Quand, Plutôt que, Returns), making it easy to scan. The main redundancy is that the "Returns" line largely repeats the fields already mentioned in the first sentence, so it falls slightly short of a perfect score.

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 a simple read-only tool with one ID parameter and no output schema, the description provides the purpose, the scope of the returned block, and the alternatives. It does not describe response errors or envelope details, but this is not essential for an agent to call the tool correctly in most cases.

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?

The schema already describes the single parameter `id` with type, pattern, and purpose. The description only restates "par son ID," adding no new semantic details about the ID parameter. With 100% schema description coverage, the baseline of 3 is appropriate.

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 names a specific verb and resource ("Récupère les informations générales ... par son ID") and explicitly contrasts itself with `boond_candidates_get` for the base record and `boond_candidates_search` when the ID is unknown. It lists key fields (coordees, adresse, état civil, photo, tags, source), making the scope clear without needing the 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?

The "Quand" and "Plutôt que" lines give direct, actionable guidance: use this tool when only this section is needed, use `boond_candidates_get` for the base record, and `boond_candidates_search` when the ID is unknown. This fully covers when and when-not relative to the two relevant sibling tools.

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

boond_candidates_positioningsPositionnements d'un candidatA
Read-onlyIdempotent

Récupère les positionnements (placements du candidat sur des opportunités ou des projets) d'un(e) candidat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_candidates_get pour la fiche de base, ou boond_candidates_search si l'ID est inconnu.

Returns : Liste des positionnements du candidat. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful context by saying the result is a list and that this call intentionally fetches only the positionings section. It repeats 'Lecture seule', which is redundant with annotations, but does not contradict them and does add the scoped-loading behavior.

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 short, scannable, and front-loaded with the purpose before usage guidance. The 'Quand / Plutôt que / Returns' structure adds clear organization. It loses a point only because 'Lecture seule' repeats information already carried by annotations.

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 a one-parameter read-only section fetch, this is largely complete: it explains what is returned, when to use it, and how it relates to sibling tools. It does not specify pagination or the exact item shape of a positioning, and there is no output schema, so a perfect-completeness score is not warranted.

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?

The single id parameter is already fully described in the schema with a numeric pattern and an explicit meaning. The description only says 'par son ID', which repeats but does not extend the schema. With schema coverage at 100%, the baseline of 3 is appropriate.

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, specific verb 'Récupère' and identifies the resource: positionnements for a candidate by ID. The parenthetical explanation and the 'Plutôt que' alternatives make it easy to distinguish from boond_candidates_get and boond_candidates_search.

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?

It gives explicit 'Quand' guidance - use it to load only the positionings section rather than the whole record - and names the alternatives: boond_candidates_get for the base fiche and boond_candidates_search when the ID is unknown. This is exactly the kind of routing an agent needs.

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

boond_candidates_technical_dataCompétences techniques d'un candidatA
Read-onlyIdempotent

Récupère le profil technique (compétences, expériences, formations, certifications, langues, CV) d'un(e) candidat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_candidates_get pour la fiche de base, ou boond_candidates_search si l'ID est inconnu.

Returns : Profil technique du candidat. Les ID de documents (CV) qui s'y trouvent alimentent boond_documents_get. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description reinforces this with 'Lecture seule' and adds context about the return content (technical profile, CV document IDs) and how those IDs are used. It does not contradict annotations and adds useful behavioral context 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.

Conciseness5/5

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

The description is well-structured with clear sections (main purpose, when to use, alternatives, returns). It is concise, front-loaded with the main action, and every sentence adds value, such as the relationship to boond_documents_get. No wasted words.

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 single-parameter read-only retrieval with no output schema, the description is complete. It states what is returned, when to use it, and how to chain with other tools. The agent has all necessary information to call it correctly without needing additional details.

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% for the single 'id' parameter, which already has a clear description. The tool description does not add any additional parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies. It only restates 'par son ID' without new details.

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 clearly states the action ('Récupère') and the specific resource ('profil technique' of a candidate) and explicitly distinguishes from siblings by naming boond_candidates_get for the base profile and boond_candidates_search when the ID is unknown. This leaves no ambiguity about what the tool does.

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 includes a 'Quand' section explaining when to use it (to load only this section) and a 'Plutôt que' section giving explicit alternatives and conditions (boond_candidates_get for the base, boond_candidates_search if ID unknown). It also mentions that returned document IDs feed boond_documents_get, providing downstream usage guidance.

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

boond_candidates_updateModifier un(e) candidatA
Idempotent

Met à jour un(e) candidat existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_candidates_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du candidat à modifier
cityNoVille
noteNoNotes
stateNoÉtat du candidat
titleNoTitre / fonction
email1NoEmail principal
phone1NoTéléphone
countryNoPays
lastNameNoNom
firstNameNoPrénom
mainSkillsNoCompétences principales

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses partial-update behavior, the fact that array fields are replaced rather than merged, and the rights-checking tip via boond_rights_get to avoid a 403. It also states the return value. These are meaningful behavioral details that the annotations alone do not provide.

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 well-structured and front-loaded with the action, followed by usage conditions, behavioral caveats, and return information. Each sentence earns its place with no redundant 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?

For an update tool with 11 parameters, the description covers purpose, alternatives, partial-update behavior, array replacement semantics, prerequisite rights checking, and return value. Combined with the complete schema and output schema, nothing essential is missing for an agent to invoke it correctly.

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 the schema already documents every parameter. The description adds general patch semantics ('seuls les champs fournis sont écrits'), but it does not add per-parameter detail beyond what the schema provides. Baseline 3 is appropriate.

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 states a specific verb and resource: 'Met à jour un(e) candidat existant(e), identifié(e) par son ID.' It clearly differentiates the tool from boond_candidates_create and boond_find by naming them explicitly and giving the condition for each alternative.

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 'Quand' section says to use this tool when modifying a few fields of an existing record, and the 'Plutôt que' section explicitly names boond_candidates_create for nonexistent records and boond_find for name/email resolution. This gives clear when-to-use and when-not-to-use guidance.

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

boond_companies_actionsActions liées à une sociétéA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des actions rattachées à la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context by stating the return is a list of actions attached to the company and explicitly notes 'Lecture seule', reinforcing the read-only nature. It doesn't describe pagination or ordering, but for a simple read tool with strong annotations, this is adequate.

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 compact and well-structured: a one-line summary, a 'Quand' usage condition, a 'Plutôt que' alternative routing, and a 'Returns' note. Every sentence earns its place and the most important scoping information is front-loaded.

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 a single-parameter read-only tool with full schema coverage and strong annotations, the description covers the essential context: what it returns, when to use it, and how it differs from siblings. It doesn't mention pagination or response format, but with no output schema and a simple list return, this is a minor gap rather than a critical omission.

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 the single 'id' parameter is already fully documented in the schema. The description adds that the ID is the company's ID and that it retrieves actions for that company, which is consistent with the schema but doesn't add new format or constraint details beyond it. Baseline 3 is appropriate.

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 states a specific verb ('Récupère') and resource ('les actions ... d'un(e) société, par son ID'), and enumerates the action types (appels, emails, RDV, notes). It clearly distinguishes this from sibling tools like boond_companies_get and boond_companies_search by naming them explicitly.

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 says when to use this tool ('Quand : pour ne charger que cette section, sans le reste de la fiche') and names the alternatives to use instead ('Plutôt que : boond_companies_get ... boond_companies_search si l'ID est inconnu'). This gives an agent clear routing guidance.

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

boond_companies_contactsContacts d'une sociétéA
Read-onlyIdempotent

Récupère les contacts (interlocuteurs rattachés à la société) d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des contacts de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it returns a list of contacts and is read-only, which reinforces but adds little beyond annotations. It doesn't detail response structure or potential errors, but annotations cover the main safety profile, so 4 is fitting.

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 short, front-loaded with the main purpose, and includes a compact 'Quand' and 'Plutôt que' section. Every sentence serves a purpose with no fluff.

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 a simple single-parameter read-only tool with annotations covering safety, the description adequately covers when to use and alternatives. It doesn't describe the response format, but since there is no output schema and the tool is simple, it's largely sufficient. Minor gap: no mention of pagination or error handling, but not critical.

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 coverage is 100%, and the only parameter 'id' is well-documented in schema. The description clarifies it's the company's ID and is used to retrieve contacts, but adds no new syntax or format details. Baseline 3 is appropriate.

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 clearly states the tool retrieves contacts for a specific company by its ID, using specific verb and resource. It distinguishes itself from siblings like boond_companies_get and boond_companies_search, making it easy to identify.

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?

Explicitly says when to use: to load only the contacts section, and when not to: use boond_companies_get for the base record or boond_companies_search if ID is unknown. Provides clear alternatives.

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

boond_companies_createCréer un(e) sociétéA

Crée un(e) société dans BoondManager.

Quand : pour ajouter un(e) société inexistant(e). Plutôt que : boond_companies_update pour modifier un enregistrement existant, et boond_companies_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoVille
nameYesNom de la société
noteNoNotes
siretNoNuméro SIRET
stateNoÉtat de la société
email1NoEmail de la société
phone1NoTéléphone
countryNoPays
websiteNoSite web

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

The description explicitly states that the operation is a real write and non-idempotent, meaning two identical calls create two records, and the API does not deduplicate. It also notes that relation IDs and state/type IDs are BoondManager numeric IDs that need to be resolved beforehand, which is crucial for correct invocation. While annotations do not include a readOnlyHint (it is false), the description adds value beyond the annotations by detailing the non-idempotent behavior and the need for pre-resolving IDs, which is important for the agent to understand the side effects and prerequisites.

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 concise and well-structured. It starts with a clear one-line purpose, then groups related information: when to use, alternatives, behavioral warnings, and return value. Every sentence earns its place, and the use of bullet points for behavioral notes improves readability. It is front-loaded with the core purpose and usage, making it easy 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 that there is an output schema and 9 parameters (1 required), the description provides essential context: the non-idempotent behavior, the need to resolve IDs beforehand, and the return value structure (confirmation, created ID, complete record, and that structuredContent.id is reusable for chaining). This covers the risk of duplicate creation and the dependency on external lookups, which are not evident from the schema alone. The description is complete for an agent to correctly invoke the tool without missing critical steps.

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%, meaning every parameter has a description in the schema. The tool description does not enumerate the parameters but mentions that relation IDs and state/type IDs need to be resolved beforehand, which adds context beyond the raw schema names (e.g., 'state' as an integer ID). However, most parameter descriptions in the schema are minimal (e.g., 'Ville', 'Email de la société'), and the description does not provide additional details like required format or examples. Since the schema already covers each parameter, the baseline is 3, and the description adds marginal value by highlighting the ID resolution requirement.

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 uses a specific verb (Crée) and resource (société dans BoondManager), and clearly states the purpose: adding a company that does not yet exist. It distinguishes itself from sibling tools by explicitly naming `boond_companies_update` for modification and `boond_companies_search` for pre-checking existence, making it clear what this tool does and does not do.

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 states when to use this tool ('pour ajouter un(e) société inexistant(e)') and provides alternatives: it directs to use `boond_companies_update` for existing records and `boond_companies_search` first to verify non-existence. This is clear usage guidance with specific conditions and alternative tools, which is exactly what is needed.

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

boond_companies_deleteSupprimer un(e) sociétéA
Destructive

Supprime définitivement un(e) société de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_companies_get. Plutôt que : boond_companies_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond destructiveHint=true, the description discloses irreversibility with no trash, the need for permission checks, and the conditional confirmation flow when the client supports elicitation. It also explains the returned deleted:false + reason shape on user refusal, which the annotations do not cover.

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?

Every sentence earns its place: purpose, when to use, alternative, rights check, irreversibility, and confirmation behavior. The 'Quand'/'Plutôt que' structure and bullet list make it scannable and front-loaded with the core destructive action.

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 one-parameter destructive tool with annotations and an output schema, the description covers prerequisites, alternatives, safety checks, return values, and user-confirmation behavior. No significant information an agent needs to invoke 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 coverage is 100% and the single id parameter is already documented with type and pattern. The description adds operational advice to verify the ID first, but no new semantic detail about the parameter itself, 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?

The description opens with 'Supprime définitivement un(e) société de BoondManager', giving a specific verb, resource, and destructive scope. It also explicitly names boond_companies_update as the safer alternative, clearly distinguishing this tool from its siblings.

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?

It provides explicit 'Quand' conditions: only on explicit user request and after verifying the ID with boond_companies_get. It also gives a 'Plutôt que' alternative for deactivation without destruction, and recommends checking boond_rights_get before attempting deletion.

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

boond_companies_getDétails d'un(e) sociétéA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) société par son ID numérique.

Quand : après un boond_companies_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_companies_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_companies_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable context: it clarifies that without a 'tab' parameter only the base sheet is returned (not the union of tabs), discloses that an unknown ID surfaces the raw BoondManager error, and states the return format (JSON). These go beyond existing annotations and provide actionable behavior.

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 well-structured: a core sentence, then a 'Quand' section, a 'Plutôt que' section, and bullet points for edge cases. Every sentence carries essential information, and the purpose is front-loaded. No redundancy or 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?

Given the tool is a simple GET-by-ID with two parameters and no output schema, the description is fully complete for correct invocation. It covers when to use, what it returns, how the tab parameter behaves, and error handling. An agent can call it correctly without any missing information.

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?

The input schema already documents both parameters with descriptions (100% coverage), so the baseline is 3. The description adds extra meaning for 'tab' (it targets a specific tab, and default behavior) and for 'id' (it must come from search, never guessed), which enhances the agent's understanding beyond the schema. This justifies a score above baseline, though not the full 5 since the schema was already thorough.

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 states a specific verb ('Récupère'), a resource ('la fiche complète d'un(e) société'), and a key parameter ('par son ID numérique'). It clearly distinguishes from boond_companies_search (returns a listing summary) and boond_find (resolves a name/email to an ID), making sibling differentiation explicit.

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 states when to use it ('après un boond_companies_search') and when not to use it, naming alternatives and their conditions. It also warns that this tool does not accept a name and that boond_find is the alternative for name/email resolution, leaving no ambiguity.

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

boond_companies_informationInformations générales d'une sociétéA
Read-onlyIdempotent

Récupère les informations générales (coordonnées, SIRET, site web, secteur, taille, tags) d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Fiche signalétique de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this returns a company summary sheet and is read-only, but these mostly mirror the annotations; richer behavioral detail such as error cases or response structure is not provided. There is no contradiction with annotations.

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 compact, structured into short labeled sections, and every section adds useful context: what is fetched, when to use it, which alternatives exist, and what is returned. It includes some redundancy with annotations ('Lecture seule') but remains efficient.

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 a simple read-only getter with one parameter and no output schema, the description provides enough context: the resource, the lookup key, the returned summary, and the distinction from sibling tools. A fuller output schema or error semantics would be nice but is not essential given the low complexity.

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?

There is only one parameter, and the input schema already describes it as a required numeric-string unique entity ID. The description merely says 'par son ID' and adds no format, example, or edge-case guidance beyond what the schema provides. Baseline 3 is appropriate because schema coverage is 100%.

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 uses a specific verb ('Récupère') and names the exact resource and scope: general company information such as coordinates, SIRET, website, sector, size, and tags, retrieved by ID. It also explicitly contrasts with boond_companies_get and boond_companies_search, making the tool's role unambiguous.

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 'Quand' and 'Plutôt que' sections give explicit usage conditions: use this tool to load only this section without the rest of the record, and prefer boond_companies_get for the full record or boond_companies_search when the ID is unknown. This directly routes an agent to the correct alternative.

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

boond_companies_invoicesFactures d'une sociétéA
Read-onlyIdempotent

Récupère les factures client d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des factures de vente adressées à la société. Ne pas confondre avec boond_companies_provider_invoices (achat). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so 'Lecture seule' is redundant. The description does add the return type (list of sales invoices) but doesn't add non-annotated behavioral details like pagination, errors, or permissions. Since the annotations already carry the safety profile, a score of 3 is appropriate.

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 front-loaded with the core action and organized with 'Quand', 'Plutôt que', and 'Returns'. Every sentence adds useful information; there is no filler, and the format is easy to parse.

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 a single-parameter read-only tool, the description covers the purpose, usage alternatives, and return type. It does not mention potential pagination or output details, which are minor for a simple fetch operation. Overall, it is as complete as needed for its complexity.

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 coverage is 100%, with the id parameter fully described. The description only mentions 'par son ID' without adding any constraints or semantics beyond the schema. Per the guideline, the placeholder baseline of 3 applies because the schema carries the parameter meaning.

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 clearly 'Récupère les factures client d'un(e) société, par son ID' – a specific verb, resource, and action. It also distinguishes itself from boond_companies_get and boond_companies_provider_invoices, so it is unambiguous among its siblings.

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?

Provides explicit 'Quand' (when to use) to load only this section, and 'Plutôt que' to avoid boond_companies_get or search when the ID is known. It also warns not to confuse with boond_companies_provider_invoices (purchase invoices), giving clear selection criteria.

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

boond_companies_opportunitiesOpportunités d'une sociétéA
Read-onlyIdempotent

Récupère les opportunités commerciales d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des opportunités de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context beyond annotations: it returns a list, targets only the opportunities section, and explicitly notes 'Lecture seule'.

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 compact and well structured with labeled sections. The core action and purpose are front-loaded, and each sentence contributes a distinct piece of information without redundancy.

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 simple one-parameter read-only list operation, the description covers what the tool does, when to use it, which alternatives to prefer, and what it returns. The annotations handle safety semantics, and no output schema is expected for a straightforward list retrieval.

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% and the only parameter, 'id', is already well documented in the schema. The description simply confirms lookup 'par son ID', adding no significant meaning beyond the schema.

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 uses a specific verb ('Récupère') with a clear resource ('les opportunités commerciales d'une société') and the required identifier. It is easily distinguished from sibling tools like boond_companies_get or boond_opportunities_search.

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 'Quand' section explicitly states the intended use case: loading only this section without the rest of the record. The 'Plutôt que' section names specific alternatives and the condition that selects each one (boond_companies_get for the base record, boond_companies_search when the ID is unknown).

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

boond_companies_ordersBons de commande d'une sociétéA
Read-onlyIdempotent

Récupère les bons de commande d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des bons de commande de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scoping context ('ne charger que cette section, sans le reste de la fiche') and confirms 'Lecture seule', but it does not disclose return format, ordering, or pagination behavior.

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 compact and well-structured: a one-sentence purpose, a 'Quand' usage note, a 'Plutôt que' routing note, and a returns statement. Every section earns its place with 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?

For a simple one-parameter read-only retrieval tool, the description is complete: it defines the input (id), the purpose, the lightweight usage context, the alternatives, and the return type. Annotations cover safety, and the sibling list confirms the tool's scoped role.

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%, with the id parameter already described as a numeric unique identifier. The description only mentions 'par son ID', which adds no meaning beyond the schema, so the baseline score of 3 is appropriate.

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: 'Récupère les bons de commande d'un(e) société, par son ID'. It clearly scopes the operation to a company's orders and distinguishes itself from boond_companies_get for the full record and boond_companies_search for unknown IDs.

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 states when to use the tool ('Quand : pour ne charger que cette section') and names alternatives with conditions ('Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu'). This gives an agent actionable routing guidance.

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

boond_companies_projectsProjets d'une sociétéA
Read-onlyIdempotent

Récupère les projets d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des projets de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Lecture seule' repeats that rather than adding new behavioral context. It does add that the return is a list of projects, which is useful given the absent output schema, but there is no deeper behavioral disclosure such as pagination or error cases. With annotations carrying the safety profile, this is adequate but not rich.

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 compact and each segment earns its place: purpose, when, alternatives, and return type. It is slightly more expanded than the sparsest possible wording, but the segmentation makes it easy to parse. It is appropriately sized for a tool with one parameter and clear routing.

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 single-parameter, read-only tool with 100% schema coverage and no output schema, the description covers what an agent needs: what is returned, when to use it, and how it relates to alternatives. There is no hidden pagination or complex behavior that would require more explanation here.

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?

The schema covers 100% of the parameter with an 'id' description including pattern and meaning. The description only says 'par son ID', which adds no new meaning beyond the schema. A baseline of 3 is appropriate when the schema already carries the full parameter documentation.

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 states a specific verb ('Récupère'), the resource ('les projets'), and the entity type ('d'un(e) société'/'par son ID'). It names the sibling alternatives explicitly, which distinguishes it from boond_companies_get and boond_companies_search. An agent can instantly know what this tool does and how it differs from close siblings.

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 gives explicit 'Quand' guidance (load only the projects section of a company) and explicit 'Plutôt que' routing to boond_companies_get and boond_companies_search. It tells the agent exactly when to use this tool and when to prefer alternatives, leaving no ambiguity.

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

boond_companies_provider_invoicesFactures fournisseur d'une sociétéA
Read-onlyIdempotent

Récupère les factures fournisseur (factures reçues de la société en tant que prestataire) d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des factures d'achat. Ne pas confondre avec boond_companies_invoices (vente). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false; the description reinforces this with 'Lecture seule' and adds meaningful context about the returned data ('Liste des factures d'achat') and the scoped nature of the request ('ne charger que cette section'). It lacks details like pagination or output structure, but these are less critical for a simple read-only retrieval.

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 compact and well-structured, front-loading the main verb and object, then giving focused usage guidance with 'Quand' and 'Plutôt que', and ending with return type and disambiguation. Every sentence earns its place.

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 a single-parameter read-only tool with no output schema, the description adequately covers the input, return type, when to use it, and which siblings to avoid. It could mention field-level return details or pagination, but nothing an agent needs 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?

The input schema already fully documents the `id` parameter with type, pattern, and description, and the description mentions 'par son ID' without adding additional semantic detail. Since schema coverage is 100%, the baseline of 3 is appropriate.

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 clearly states the action ('Récupère les factures fournisseur'), the resource ('d'un(e) société'), and the identifier. It also distinguishes this tool from `boond_companies_invoices` (sale) so an agent cannot mistake purchase invoices for sales invoices.

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 'Plutôt que' section explicitly names alternatives: `boond_companies_get` for the base record and `boond_companies_search` when the ID is unknown. The 'Quand' clause also clarifies that it should be used to load only this section without the rest of the company record.

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

boond_companies_purchasesAchats d'une sociétéA
Read-onlyIdempotent

Récupère les achats et la sous-traitance d'un(e) société, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_companies_get pour la fiche de base, ou boond_companies_search si l'ID est inconnu.

Returns : Liste des achats engagés auprès de la société. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reinforces with 'Lecture seule' and adds the return type (list of purchases), which is useful context. It does not contradict annotations, but it doesn't go much beyond what annotations already cover.

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?

Three concise sentences: purpose, usage guidance, and return type. The information is front-loaded and every sentence earns its place. No fluff or redundancy.

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 simple read-only tool with a single parameter, the description covers everything needed: what it does, when to use it, and what it returns. The output type is specified, and no other context 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 coverage is 100% with a clear description for the id parameter ('Identifiant unique de l'entité BoondManager (numérique)'). The description only says 'par son ID', which adds no new semantic detail beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool's purpose: retrieving purchases and subcontracting for a company by ID. It explicitly distinguishes itself from siblings by naming boond_companies_get (base file) and boond_companies_search (when ID unknown), so an agent can tell them apart.

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?

Provides explicit when-to-use guidance ('pour ne charger que cette section') and directly names alternatives with conditions ('Plutôt que...'). This tells the agent exactly when to select this tool over its siblings.

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

boond_companies_updateModifier un(e) sociétéA
Idempotent

Met à jour un(e) société existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_companies_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la société à modifier
cityNoVille
nameNoNom
noteNoNotes
siretNoNuméro SIRET
stateNoÉtat
email1NoEmail
phone1NoTéléphone
countryNoPays
websiteNoSite web

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses partial-update semantics: only provided fields are written, others are left in place. It warns that array-type fields are replaced, not merged, and states the return value is a confirmation and the updated record. This goes well beyond what annotations already provide.

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 opens with a clear one-line summary, then uses structured 'Quand' and 'Plutôt que' sections, followed by bullet points for behavioral caveats and a return note. Every sentence serves a purpose with no redundancy, making it well-organized and concise.

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 and full schema coverage, the description covers purpose, usage alternatives, partial-update behavior, array replacement, permission checking, and return value. An agent has all essential information to invoke the tool correctly without ambiguity.

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 meaning by explaining that omitted fields are preserved (partial update), which clarifies that all optional parameters can be sent independently. It does not elaborate each parameter's specifics, but the partial-update note is a valuable semantic addition beyond the schema.

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 states a specific verb ('Met à jour' = updates) and resource ('société existante' = existing company), identified by its ID. It explicitly differentiates from siblings by naming boond_companies_create and boond_find as alternatives when the record doesn't exist or when resolving an identifier.

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 includes a 'Quand' clause defining the exact use case (modifying fields of an existing record) and a 'Plutôt que' clause naming alternative tools with conditions (boond_companies_create for new records, boond_find for resolving names/emails). It also advises checking boond_rights_get before attempting to avoid a 403, providing actionable usage guidance.

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

boond_contacts_actionsActions liées à un contactA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Liste des actions rattachées au contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context by stating 'Lecture seule', the return shape ('Liste des actions'), and the specific action subtypes, though it does not discuss pagination or error behavior.

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 compact and well structured, with labeled blocks for purpose, when-to-use, alternatives, and returns. Every sentence earns its place and the core operation is front-loaded.

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 one-required-parameter, read-only list fetch, the description is complete: it identifies the resource and ID requirement, explains when to use it versus siblings, and states the return type as a list of actions. The absence of an output schema is mitigated by the clear 'Liste des actions' statement.

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?

The input schema fully documents the single 'id' parameter with a numeric pattern and a clear entity-identifier description, giving 100% schema coverage. The description only says 'par son ID' and does not add semantic detail beyond the schema, so 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?

The first sentence states a specific verb ('Récupère'), a precise resource (actions of a contact), and enumerates the action types (calls, emails, appointments, notes). It explicitly distinguishes itself from boond_contacts_get and boond_contacts_search in the 'Plutôt que' line.

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 'Quand' clause gives a concrete trigger: load only the actions section rather than the full contact record. The 'Plutôt que' clause names the two relevant alternatives and the condition for choosing each one.

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

boond_contacts_createCréer un(e) contactA

Crée un(e) contact dans BoondManager.

Quand : pour ajouter un(e) contact inexistant(e). Plutôt que : boond_contacts_update pour modifier un enregistrement existant, et boond_contacts_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoVille
noteNoNotes
titleNoTitre / fonction
email1NoEmail principal
phone1NoTéléphone
countryNoPays
lastNameYesNom de famille
companyIdNoID de la société associée
firstNameYesPrénom du contact

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Although annotations already indicate idempotentHint=false, the description elaborates that two identical calls create two records because the API does not deduplicate, which is practically useful. It also discloses that relation IDs are numeric BoondManager IDs that must be resolved beforehand—information not available from annotations.

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 compact and well-structured: purpose, when to use, alternatives, behavioral caveats, and return value handling are each given one or two sentences. Every line carries information, and the core purpose is front-loaded.

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?

It covers the essential aspects: what it does, when to use it (and when not to), non-idempotence, relational ID resolution, and the structure of success output (confirmation, created ID, complete record, reusable 'structuredContent.id'). Given an output schema exists Sweater, nothing critical is 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?

The schema has 100% coverage with descriptions for all 9 parameters, so the baseline is 3. The description adds a valuable general rule: relation IDs and states/types are numeric BoondManager IDs that need pre-resolution via entity searches or 'boond://dictionary/*'. This clarifies how to correctly populate fields like companyId, pushing semantics above baseline.

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 'Crée un(e) contact dans BoondManager', stating a specific verb and resource. It explicitly distinguishes itself from 'boond_contacts_update' (for modifying) and 'boond_contacts_search' (for pre-checking existence), making its purpose unambiguous relative to siblings.

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 'Quand' clause states to use this tool when adding a contact that does not yet exist. The 'Plutôt que' clause explicitly names alternatives: 'boond_contacts_update' for existing records and 'boond_contacts_search' for prior verification. This is clear when/when-not guidance with specific siblings.

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

boond_contacts_deleteSupprimer un(e) contactA
Destructive

Supprime définitivement un(e) contact de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_contacts_get. Plutôt que : boond_contacts_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavior beyond the destructiveHint annotation: irreversibility with no API-side trash, the elicitation confirmation flow, the structured refusal result, and the suggestion to pre-check rights to avoid a 403. These are precisely the operational details an agent needs before calling.

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 structured with clear labeled sections ('Quand', 'Plutôt que', bullets) and every sentence carries operational value. The irreversibility and confirmation behavior are front-loaded, making the critical risks visible before any other detail.

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 destructive single-parameter tool, the description covers all relevant context: prerequisites, alternatives, irreversibility, rights checking, confirmation behavior, and return-value semantics. Nothing an agent needs to decide whether and how to call this tool 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 coverage is 100% and the single id parameter is fully described in the schema as the unique numeric BoondManager entity identifier. The description adds the practical guidance to verify the ID with boond_contacts_get first, but does not need to restate schema-level details.

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: 'Supprime définitivement un(e) contact de BoondManager', making the destructive scope unambiguous. It also clearly distinguishes itself from the non-destructive alternative boond_contacts_update.

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 gives explicit when-to-use guidance: only on explicit user request and after verifying the ID with boond_contacts_get. It explicitly names boond_contacts_update as the preferred alternative for deactivating without destroying, and recommends checking rights with boond_rights_get first.

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

boond_contacts_getDétails d'un(e) contactA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) contact par son ID numérique.

Quand : après un boond_contacts_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_contacts_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_contacts_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish read-only/idempotent/non-destructive behavior, and the description adds meaningful beyond-schema context: without `tab` only the base fiche is returned, not a union of tabs; unknown IDs surface the raw BoondManager error; and IDs must come from search, never guessed. This is valuable operational transparency.

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 front-loaded with the core purpose and then structured with clear 'Quand', 'Plutôt que', bullet points, and a Returns line. Every sentence earns its place; there is 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?

Even without an output schema, the description states the return shape (JSON entity with attributes and relations), declares read-only behavior, explains tab semantics, covers error behavior, and routes to the right sibling tools. This is complete for a two-parameter read tool.

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 extra meaning: `tab` targets a specific tab and omitting it returns only the base record, not aggregated tabs. It also reinforces that `id` must come from boond_contacts_search. This goes beyond the schema's bare field 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 states a specific verb+resource: 'Récupère la fiche complète d'un(e) contact par son ID numérique.' It clearly differentiates from boond_contacts_search and boond_find, so an agent can tell which tool to use without opening schemas.

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 gives explicit when-to-use guidance ('après un boond_contacts_search'), explicit alternatives ('Plutôt que : boond_contacts_search si l'ID n'est pas connu ... ou boond_find pour résoudre un nom / un e-mail en ID'), and explains tab behavior. No inference is needed.

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

boond_contacts_informationInformations générales d'un contactA
Read-onlyIdempotent

Récupère les informations générales (coordonnées, société de rattachement, fonction, tags) d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Bloc identité et rattachement du contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description only needs to add extra behavioral context. It adds 'Lecture seule' (already covered), and a 'Bloc identité et rattachement' return hint, but does not mention errors, rate limits, or any edge-case behavior. This is acceptable with the strong annotations but not a value-add.

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 split into three short, purposeful paragraphs: purpose, when to use, and return summary. It is front-loaded with the main action. It is slightly more verbose than a single-sentence version, but no sentence is wasted.

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 a simple 1-parameter fetch tool with no output schema, the description covers the core needs: what it gets, how to differentiate it from boond_contacts_get and boond_contacts_search, and a high-level return description. It could be more specific about which exact fields are in the returned 'Bloc', but the listed fields in the first sentence mitigate that gap.

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?

The only parameter, id, is documented at 100% coverage in the input schema with type and pattern. The description adds nothing beyond 'par son ID', so it does not supplement schema semantics. With full schema coverage the baseline 3 is the right score.

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 plainly states the verb, resource, and data scope: 'Récupère les informations générales (coordonnées, société de rattachement, fonction, tags) d'un(e) contact, par son ID.' It also names the two most relevant sibling tools and explains what each alternative is for, which lets an agent pick this tool over boond_contacts_get and boond_contacts_search without opening their 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?

The description gives an explicit 'Quand' condition ('ne charger que cette section, sans le reste de la fiche') and an explicit 'Plutôt que' rule naming boond_contacts_get for the full card and boond_contacts_search when the ID is unknown. This gives the agent a concrete decision rule for choosing this tool over its siblings.

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

boond_contacts_invoicesFactures d'un contactA
Read-onlyIdempotent

Récupère les factures d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Liste des factures adressées au contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the tool returns a list of invoices addressed to the contact and loads only that section rather than the full contact record. This is useful behavioral context beyond the annotations.

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 compact, front-loaded with the core purpose, and uses clear labeled sections: Quand, Plutôt que, and Returns. Every sentence contributes useful information with 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?

For a simple read-only lookup with one well-documented parameter, the description covers what the tool returns, when to use it, which alternatives exist, and its read-only nature. No output schema is present, but the return description is sufficient for this tool.

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?

The input schema has 100% description coverage for the single id parameter, including format guidance and pattern. The description only repeats 'par son ID' without adding new parameter semantics, so the baseline score of 3 is appropriate.

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 states a specific verb and resource: 'Récupère les factures d'un(e) contact, par son ID'. It also explicitly distinguishes this tool from boond_contacts_get and boond_contacts_search, so an agent can confidently select it among many siblings.

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 'Quand' section explicitly states when to use the tool ('pour ne charger que cette section, sans le reste de la fiche'), and the 'Plutôt que' section names the alternatives with their conditions. This is ideal usage guidance.

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

boond_contacts_opportunitiesOpportunités d'un contactA
Read-onlyIdempotent

Récupère les opportunités commerciales (affaires portées par ce contact) d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Liste des opportunités du contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by explicitly stating 'Lecture seule' (read-only) and specifying the return type: 'Returns : Liste des opportunités du contact' (list of the contact's opportunities). It also clarifies the scoping behavior (only the opportunities section, not the full record). This goes beyond the annotations without contradicting them.

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 compact and well-structured. It front-loads the core purpose in the first sentence, then provides usage guidance, alternatives, and return type in a clear, scannable format. Every sentence earns its place, and there is no redundant or filler content.

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 a simple read-only list tool with one parameter, the description is nearly complete. It covers the purpose, when to use it, alternatives, and return type. The only minor gap is that it doesn't describe pagination or sorting behavior, but given the tool's simplicity and the annotations covering safety, this is a minor omission rather than a significant gap.

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 the schema already documents the single 'id' parameter as the unique numeric identifier of the BoondManager entity. The description adds that the ID is the contact's ID, which is a slight clarification, but it doesn't provide additional format or syntax details beyond the schema. Baseline 3 is appropriate when the schema carries the parameter documentation.

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 clearly states the verb 'Récupère' (retrieves), the resource 'opportunités commerciales' of a contact, and the required identifier (ID). It also distinguishes itself from sibling tools by explicitly naming boond_contacts_get and boond_contacts_search as alternatives, making its purpose unambiguous.

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 provides explicit usage guidance: 'Quand : pour ne charger que cette section, sans le reste de la fiche' (when to use: to load only this section without the rest of the record). It also names alternatives and the condition for choosing them: 'Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu' (rather than boond_contacts_get for the base record, or boond_contacts_search if the ID is unknown). This is clear and actionable.

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

boond_contacts_ordersBons de commande d'un contactA
Read-onlyIdempotent

Récupère les bons de commande d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Liste des bons de commande du contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and mutation concerns. The description adds a 'Returns' section indicating the result is a list of orders, which is useful since there is no output schema. However, it does not disclose additional behavioral details (e.g., pagination, authorization, rate limits) beyond what annotations provide, so it adds only modest value beyond the structured fields.

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 succinct, front-loaded with the core purpose, and logically organized into 'Quand', 'Plutôt que', and 'Returns' sections. Every sentence serves a distinct purpose—stating the action, when to use it, what to use instead, and the return type—with no redundant or verbose content. It is an exemplar of concise, structured documentation.

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?

Given the tool's simplicity (one parameter, no output schema, read-only annotations), the description covers all essential aspects: the action, the identifier, usage guidance, alternatives, and the return type. It lacks only minor details such as pagination or ordering of results, but these are not critical for a straightforward read operation. The description is adequate for an agent to invoke this tool correctly.

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?

The input schema covers 100% of the parameter documentation, with the id parameter described as 'Identifiant unique de l'entité BoondManager (numérique)' (numerical unique identifier). The description only restates that the tool uses the contact's ID without adding new semantic meaning, such as format constraints or examples. This aligns with the baseline of 3 for high schema coverage where the schema already does the heavy lifting.

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 clearly states the action: 'Récupère les bons de commande d'un(e) contact, par son ID' (Retrieves the orders of a contact by its ID). It further differentiates from sibling tools by explicitly naming alternatives (boond_contacts_get, boond_contacts_search) and the conditions under which they should be used instead. This makes the tool's distinct purpose unmistakable.

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 provides explicit usage guidance: 'Quand : pour ne charger que cette section, sans le reste de la fiche' (When: to load only this section, without the rest of the record). It also names alternative tools and their appropriate contexts, such as using boond_contacts_get for the full record or boond_contacts_search when the ID is unknown. This gives clear when-to-use versus when-not-to-use guidance.

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

boond_contacts_projectsProjets d'un contactA
Read-onlyIdempotent

Récupère les projets d'un(e) contact, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_contacts_get pour la fiche de base, ou boond_contacts_search si l'ID est inconnu.

Returns : Liste des projets rattachés au contact. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral context beyond the annotations by clearly stating the operation loads only the project subsection ('sans le reste de la fiche') and returns a list of linked projects. The read-only trait is already in annotations, but the scoping behavior and the return shape are useful supplementary details.

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 compact and well structured: a purpose sentence, a 'Quand' condition, an explicit 'Plutôt que' routing, and a clear 'Returns' line. Every line serves a distinct role and none repeat schema content.

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 one-parameter, read-only endpoint with no output schema, the description provides everything needed to call it correctly: what it does, when to use it, which siblings to prefer, and what it returns. The lack of pagination or error details is acceptable for such a simple, self-contained fetch.

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?

The single parameter is already fully described in the input schema (a numeric ID with description and pattern). The tool description only says 'par son ID' without adding new meaning or context about the parameter, so no additional value is provided beyond the schema.

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: 'Récupère les projets d'un(e) contact, par son ID'. It clearly distinguishes from siblings by stating this is only the project list, to be used instead of boond_contacts_get (the full record) or boond_contacts_search (when the ID is unknown).

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 'Quand' section explicitly states the intended use case: 'pour ne charger que cette section, sans le reste de la fiche'. The 'Plutôt que' section then names the alternatives and gives the precise condition for choosing each one had two concrete alternatives, making the routing decision obvious.

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

boond_contacts_updateModifier un(e) contactA
Idempotent

Met à jour un(e) contact existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_contacts_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du contact à modifier
cityNoVille
noteNoNotes
titleNoTitre / fonction
email1NoEmail
phone1NoTéléphone
lastNameNoNom
firstNameNoPrénom

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations are provided (idempotentHint: true, destructiveHint: false), and the description adds substantial context: partial update semantics (only provided fields are written), array fields are replaced not merged, and a note about checking rights first. This goes 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.

Conciseness5/5

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

The description is well-structured with clear sections (when, rather than, partial update details, rights check, return value). It is concise, front-loaded with the core purpose, and every sentence adds value without redundancy.

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?

The description covers the essential usage, partial update behavior, and return value. It mentions returns confirmation and updated fiche. It doesn't detail the output schema but the tool has an output schema, so that's covered. For a update tool with annotations, this is largely complete, but could mention potential errors or response format specifics if needed.

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 coverage is 100%, so the schema already documents all parameters with descriptions. The description does not add per-parameter details but does explain partial update semantics, which adds some context. Baseline 3 is appropriate.

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 clearly states the tool updates an existing contact identified by ID, and specifies it modifies fields of an already-existing record. It distinguishes itself from create and find tools, making the purpose clear and distinct from siblings.

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 provides when to use this tool (modifying fields on an existing record) and when not to (use create if record doesn't exist, use find to resolve names/emails to IDs). It also mentions checking rights via boond_rights_get before attempting to avoid 403 errors, giving proactive guidance.

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

boond_contracts_createCréer un contratA

Crée un contrat de travail rattaché à une ressource.

Quand : pour enregistrer un nouveau contrat (embauche, avenant, renouvellement). Plutôt que : boond_resources_contracts d'abord, pour vérifier qu'un contrat couvrant la même période n'existe pas déjà.

  • Écriture non idempotente : deux appels identiques créent deux contrats.

  • typeOf est un ID entier de boond://dictionary/typeOf/contracts, pas un libellé.

Returns : confirmation et fiche du contrat créé, avec son ID dans structuredContent.id.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires (`informationComments`)
typeOfNoType de contrat : ID entier du dictionnaire `setting.typeOf.contract` (CDI, CDD, freelance…), via `boond_application_dictionary`
endDateNoDate de fin (YYYY-MM-DD)
startDateNoDate de début (YYYY-MM-DD)
resourceIdNoID de la ressource associée

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=false, but the description makes the consequence concrete: two identical calls create two contracts. It also states the return shape (confirmation and created contract with ID at structuredContent.id), which is useful beyond structured annotations. No contradiction with annotations.

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?

Every part of the description earns its place: objective, when, alternative, non-idempotence, typeOf caveat, and return location. It is scannable with labels and bullets, and the core purpose is front-loaded.

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 five-parameter create tool, the description covers the trigger, a duplicate-prevention precondition, non-idempotent behavior, the trickiest parameter (typeOf), and the ID location in the response. With an output schema also present, nothing essential 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 coverage is 100%, so the schema carries most parameter meaning. The description reinforces the typeOf detail by giving the dictionary URI and emphasizing it is an ID, not a label, but this largely restates what the schema already says ('ID entier du dictionnaire'). Therefore it stays at the baseline of 3.

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 opening sentence states a concrete verb and object ('Crée un contrat de travail rattaché à une ressource'), so an agent knows exactly what is created and that the contract is tied to a resource. It is clearly distinct from sibling tools such as boond_contracts_search, boond_contracts_get, and boond_contracts_update, and the description explicitly distances it from boond_resources_contracts.

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 'Quand' clause lists concrete cases (embauche, avenant, renouvellement) and the 'Plutôt que' clause names an alternative tool and the condition to check first (no contract covering the same period). This gives an agent explicit decision guidance rather than leaving usage to inference.

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

boond_contracts_getDétails d'un contratA
Read-onlyIdempotent

Récupère la fiche complète d'un contrat de travail par son ID numérique.

Quand : après boond_contracts_search ou boond_resources_contracts, qui listent les contrats avec leurs IDs. Plutôt que : boond_resources_contracts pour tous les contrats d'une ressource en un appel — cet outil n'accepte pas de nom.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir d'une liste de contrats, jamais d'une supposition.

Returns : JSON du contrat (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the read-only annotations, the description discloses that an unknown ID returns the BoondManager error as-is and that the tool only accepts an ID, not a name. It also states the response is the JSON contract with attributes and relations as returned by the API. This adds genuinely useful behavioral context beyond the structured annotations.

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 concise and well-structured: main purpose first, then usage conditions, alternative routing, a procedural warning, and return behavior. Every section earns its place and there is no redundant 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?

For a single-parameter read-only tool with no output schema, the description covers what the tool does, when to use it, which sibling to prefer instead, how to handle errors, and what the response looks like. An agent has everything it needs to decide and call this tool correctly.

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 coverage is 100%: the sole parameter 'id' is already described as a numeric BoondManager entity identifier with a validation pattern. The description reinforces numeric-ID semantics and warns against supplying names, but this is largely a restatement of what the schema already conveys. It adds only mild contextual value about ID provenance.

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 states a specific verb and resource: 'Récupère la fiche complète d'un contrat de travail par son ID numérique.' It clearly identifies the tool as a single-record fetch by numeric ID, which separates it from list-style siblings like boond_contracts_search and boond_resources_contracts. The resource and action are unambiguous.

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 tells when to use it: after boond_contracts_search or boond_resources_contracts, which list contracts with IDs. It also tells the user when not to use it, directing to boond_resources_contracts when all contracts for a resource are needed, and notes that an ID must come from a list, never a guess. This is explicit routing against alternatives.

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

boond_contracts_updateModifier un(e) contratA
Idempotent

Met à jour un(e) contrat existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_contracts_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du contrat à modifier
noteNoNotes / commentaires (`informationComments`)
typeOfNoType de contrat : ID de `boond://dictionary/typeOf/contracts`
endDateNoDate de fin (YYYY-MM-DD) — prolonger un CDD = repousser cette date
endReasonNoMotif de fin : ID de `boond://dictionary/contractEndReasons`
startDateNoDate de début (YYYY-MM-DD)
annualSalaryNoSalaire annuel
monthlySalaryNoSalaire mensuel
probationEndDateNoFin de période d'essai initiale (YYYY-MM-DD)
numberOfWorkingDaysNoNombre de jours ouvrés annuel
renewalProbationEndDateNoFin de période d'essai renouvelée (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavioral details: partial update semantics, array fields being replaced rather than merged, and the recommendation to verify rights first. These are exactly the non-obvious behaviors an agent needs to know and are not derivable from the annotations alone.

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 well-structured: purpose first, then usage context, then key behavioral warnings, then return value. Every sentence carries useful information and there is no filler or repetition of schema content.

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 the output schema exists and annotations cover safety characteristics, the description provides everything an agent needs: what the tool does, when to use it, partial update behavior, array replacement caveat, rights-check guidance, and what it returns. No critical context 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?

The input schema has 100% description coverage, with each parameter already documented including types, formats, and dictionary references. The tool description itself does not add parameter-level semantics, but with full schema coverage, the baseline of 3 is appropriate.

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 states a specific action: 'Met à jour un(e) contrat existant(e), identifié(e) par son ID.' It clearly identifies the resource (contracts) and the operation (update), and distinguishes itself from boond_contracts_create by explaining the difference between updating an existing record and creating a new one.

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 says when to use this tool ('pour modifier quelques champs d'un enregistrement déjà en base') and names the alternative (boond_contracts_create) with the condition that should route to it instead. It also adds a practical precondition: checking boond_rights_get before attempting the update to avoid a 403.

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

boond_deliveries_createCréer une prestation/livraisonA

Crée une prestation (livraison) rattachée à un projet et à une ressource.

Quand : pour ouvrir la ligne de mission qui rendra la ressource facturable sur ce projet. Plutôt que : boond_projects_deliveries_groupments pour lister les prestations déjà en place sur le projet.

  • project et resource sont obligatoires et attendent des ID numériques.

  • L'ID de prestation retourné est celui qu'exigent les lignes de note de frais (boond_expenses_create).

  • Écriture non idempotente.

Returns : confirmation et fiche de la prestation créée, avec son ID dans structuredContent.id.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes, mappées vers informationComments
stateNoÉtat de la prestation : ID de `boond://dictionary/states/deliveries`
titleNoTitre de la prestation/livraison
typeOfNoType de prestation : ID de `boond://dictionary/typeOf/deliveries`
endDateNoDate de fin (YYYY-MM-DD)
quantityNoNombre de jours / quantité
projectIdYesID du projet
startDateNoDate de début (YYYY-MM-DD)
unitPriceNoPrix journalier HT
resourceIdYesID de la ressource portée par la prestation
averageDailyCostNoCoût journalier moyen
forceAverageDailyPriceExcludingTaxNoForcer le prix journalier HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.2/5.0
Behavior4/5

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

The non-idempotent hint already appears in annotations (idempotentHint=false), so the description's 'Écriture non idempotente' adds no new signal. However, it does add genuine behavioral context by explaining the business effect (ouvre la ligne de mission) and the cross-tool dependency that the returned ID is required by boond_expenses_create. This goes beyond the annotations.

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 well-structured with distinct sections (purpose, when, alternative, bullet points, returns) and no filler. Every sentence contributes meaning: the required params, the cross-tool ID dependency, and the non-idempotency warning. Excellent front-loading of the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description includes usage context, an alternative, required parameters, return location, and a cross-tool note, covering most operational needs. However, the parameter name mismatch creates a critical gap: an agent may be unable to invoke the tool correctly despite the rich context. This reduces overall completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description did not need to explain parameters, but it actively misnames the required fields as `project` and `resource` while the actual parameter names are `projectId` and `resourceId`. This is a serious factual error that could cause an agent to pass non-existent parameters, undermining the otherwise complete schema.

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 'Crée une prestation (livraison) rattachée à un projet et à une ressource', a specific verb+resource statement that clearly separates it from sibling tools like boond_deliveries_update or boond_deliveries_delete. It further names boond_projects_deliveries_groupments as the listing alternative, reinforcing its distinct purpose.

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 'Quand' section explicitly states when to use the tool (to open the mission line making the resource billable) and the 'Plutôt que' section names the exact alternative for listing existing prestations. This gives unambiguous selection criteria, exceptionally clear for an agent.

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

boond_deliveries_deleteSupprimer une prestation/livraisonA
Destructive

Supprime définitivement un(e) livraison (CRA) de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_deliveries_get. Plutôt que : boond_deliveries_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Even though annotations already carry destructiveHint=true and readOnlyHint=false, the description adds substantial value: irreversibility with no API-side recycle bin, the conditional elicitation/confirmation flow (refusal yields deleted:false + reason), and the permission-check pointer. It details the return shape including the refusal case. No contradiction with annotations.

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?

Well-structured with a bolded 'Quand' section, 'Plutôt que' alternative section, and bullet points that front-load the critical safety constraints before the return format. Every sentence earns its place for a destructive operation; the length is justified by the gravity of the action.

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?

Comprehensive for a destructive mutation tool: covers when to use, the safer alternative, irreversibility, permission pre-check, the elicitation confirmation flow with its exact return behavior, and output shape. Even though an output schema exists (making the return description partially redundant), the refusal semantics and confirmation logic would be invisible without the description.

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 coverage is 100% for the single `id` parameter, so the schema fully documents it (numeric pattern, unique identifier description). The description adds the operational context of verifying the ID via boond_deliveries_get before deleting, which is useful but does not add format/syntax detail beyond the schema. Baseline 3 for full coverage is appropriate.

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+resource: 'Supprime définitivement un(e) livraison (CRA)' (permanently deletes a delivery/CRA). It clearly distinguishes this from siblings like boond_deliveries_update (state change) and boond_deliveries_create, making the destructive purpose unambiguous.

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?

Exceptional routing guidance: it states exactly when to use ('uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_deliveries_get'), and explicitly names the alternative (boond_deliveries_update) with the rationale that non-destructive state changes are 'presque toujours l'intention réelle'. Also references boond_rights_get for permission pre-checks.

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

boond_deliveries_getDétails d'une livraison / CRAA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) livraison (CRA) par son ID numérique.

Quand : après un boond_deliveries_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_deliveries_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_deliveries_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable behavior beyond them: unknown IDs surface the raw BoondManager error, and the return value is a JSON entity with attributes and relations. This is useful context the annotations do not provide.

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 compact, front-loaded with the core purpose, and organized with clear 'Quand', 'Plutôt que', and 'Returns' sections. Every sentence earns its place and no filler is present.

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 simple single-parameter read tool with strong annotations, the description covers purpose, usage order, ID provenance, error behavior, and return shape. Nothing essential is missing for an agent to select and invoke 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?

The schema already fully describes the single 'id' parameter with a numeric pattern and explanation. The description adds the key semantic constraint that the ID must originate from boond_deliveries_search and must not be guessed, which goes beyond the schema's wording.

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 uses a specific verb ('Récupère') and precise resource ('fiche complète d'un(e) livraison (CRA) par son ID numérique'). It explicitly differentiates from boond_deliveries_search by noting this tool returns full details not present in the list summary, and that it requires an ID rather than a name.

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 states when to use the tool ('après un boond_deliveries_search') and when not to ('plutôt que boond_deliveries_search si l'ID n'est pas connu'). It also warns that the ID must come from search, never from guesswork, giving clear routing and prerequisites.

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

boond_deliveries_updateModifier une prestation/livraisonA
Idempotent

Met à jour un(e) livraison (CRA) existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_deliveries_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la prestation à modifier
noteNoNotes, mappées vers informationComments
stateNoÉtat de la prestation : ID de `boond://dictionary/states/deliveries`
titleNoTitre de la prestation
typeOfNoType de prestation : ID de `boond://dictionary/typeOf/deliveries`
endDateNoDate de fin (YYYY-MM-DD) — prolonger une prestation = repousser cette date
quantityNoNombre de jours / quantité (`numberOfDaysInvoicedOrQuantity`)
startDateNoDate de début (YYYY-MM-DD)
unitPriceNoPrix journalier HT (`averageDailyPriceExcludingTax`, forcé)
averageDailyCostNoCoût journalier moyen

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description reveals that updates are partial (only supplied fields are written), that array-typed fields are replaced rather than merged, and that rights should be verified beforehand via `boond_rights_get`. It also discloses the return value, a confirmation and the updated record. These details significantly extend what the idempotentHint and readOnlyHint annotations convey.

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 front-loaded with the core action, then organized into Quand, Plutôt que, bullet points for key behaviors, and a Returns line. Each statement earns its place, there is minimal redundancy, and the structure makes it easy to parse quickly.

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 the 10-parameter schema and output schema, the description covers all essential decision points: purpose, when to use, alternative tool, partial-update semantics, array replacement risk, and the recommended rights pre-check. No critical usage detail is missing for an agent to invoke the tool correctly.

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?

All 10 parameters have full descriptions in the schema, so the baseline of 3 applies. The description's partial-update statement clarifies how parameters behave in aggregate, but it adds no per-parameter meaning beyond the detailed schema definitions. The schema already documents mappings, formats, and dictionary references for each field.

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 first sentence states a precise action, 'Met à jour un(e) livraison (CRA) existant(e), identifié(e) par son ID', which clearly identifies the verb, resource, and scope. It explicitly contrasts with `boond_deliveries_create`, so an agent can distinguish it from the most similar sibling. The title and description are fully aligned.

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 gives an explicit 'Quand' condition ('modifier quelques champs d'un enregistrement déjà en base') and an explicit alternative with condition ('Plutôt que boond_deliveries_create si l'enregistrement n'existe pas encore'). It also advises checking `boond_rights_get` before attempting to avoid a 403, which is concrete operational guidance.

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

boond_documents_createTéléverser un documentA

Attache un document à une entité BoondManager à partir d'une URL (l'API BoondManager télécharge elle-même le fichier — aucun fichier local n'est lu).

Quand : pour attacher à une entité un fichier accessible par URL publique. Plutôt que : aucune alternative pour un fichier local : le serveur MCP ne lit jamais le disque, c'est BoondManager qui télécharge l'URL. Il faut donc d'abord héberger le fichier quelque part d'atteignable.

Cas d'usage typiques : attacher un CV à un candidat (parentType=candidateResume, parsing=true pour lancer l'analyse IA Boond), joindre un justificatif à une note de frais (expensesReport), un document à un projet/une société...

Returns: Métadonnées du document créé (ID).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileUrlYesURL (https) du fichier à téléverser — BoondManager télécharge le fichier depuis cette URL.
parsingNoLancer le parsing IA du CV après upload (uniquement pour parentType=candidateResume).
parentIdYesID de l'entité parente
parentTypeYesType d'entité parente. Notables : 'candidateResume' (CV de candidat), 'resourceResume' (CV de ressource), 'candidate'/'resource' (dossier administratif), 'company', 'project', 'invoice'...

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the raw annotations, the description reveals the central behavioral constraint: BoondManager downloads the URL itself, no local file is ever read, so the file must be hosted at an accessible URL. It also flags the parsing side effect (triggers Boond AI analysis) and the response shape (created document metadata/ID).

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 organized with short labeled sections (Quand, Plutôt que, Cas d'usage, Returns) and front-loads the key non-obvious behavior in the first sentence. The only mild repetition around local-file reading reinforces a critical constraint without bloating the text.

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 4-parameter mutation tool with an output schema, the description covers what it does, when to use it, what it cannot do (local files), realistic parameter combinations, and what is returned. Sibling get/delete document tools are different enough that no further reference is needed.

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 schema already documents all four parameters. The description adds practical cross-parameter meaning by mapping real cases to parentType values (candidateResume with parsing=true, expensesReport, project/company) and by reinforcing that fileUrl must be publicly reachable. This is helpful, though not essential given the schema.

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 action and resource: 'Attache un document à une entité BoondManager à partir d'une URL', and the title confirms 'Téléverser un document'. The unique verb and remote-URL behavior separate it from document get/delete siblings without relying only on the tool name.

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?

It has an explicit 'Quand' section defining when to use it (publicly accessible URL), a 'Plutôt que' section excluding local-file uploads and explaining the MCP server never reads the disk, and 'Cas d'usage typiques' with concrete parentType/parsing scenarios. This gives an agent clear selection criteria.

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

boond_documents_deleteSupprimer un documentA
Destructive

Supprime définitivement un document (CV, justificatif, pièce jointe) de BoondManager.

Quand : pour retirer une pièce jointe erronée, sur demande explicite de l'utilisateur. Plutôt que : boond_documents_get d'abord, pour confirmer qu'il s'agit du bon fichier — les ID de documents sont suffixés et un ID mal recopié pointe sur autre chose.

⚠️ Irréversible, sans corbeille côté API. Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as destructive, but the description adds critical behavioral context: the deletion is irreversible with no API-side trash, an elicitation-capable client will request user confirmation, and a refusal cancels the call. This goes well beyond the structured annotations.

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 compact and front-loaded with the core action, then sections for when, alternatives, warnings, and return semantics. Every sentence earns its place and the structure makes it easy for an agent 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?

For a one-parameter destructive tool, this description covers the use case, the safer alternative, irreversibility, confirmation behavior, and how to interpret the result. Nothing essential is missing for correct tool selection and invocation.

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?

The input schema fully describes the id parameter as a numeric unique identifier, so the baseline is 3. The description adds a useful caveat that document IDs are suffixed and a mistyped ID can point to the wrong file, which aids careful invocation, though it does not precisely explain the ID format.

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 states a precise action: 'Supprime définitivement un document (CV, justificatif, pièce jointe) de BoondManager.' It names the resource and scope, and the permanent-deletion wording clearly separates it from read or update operations. It also implicitly distinguishes itself from sibling document tools like boond_documents_get and boond_documents_create.

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 'Quand' section specifies exact conditions: removing an erroneous attachment at the user's explicit request. The 'Plutôt que' section explicitly recommends calling boond_documents_get first to verify the correct file, which is strong, actionable alternative guidance.

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

boond_documents_getTélécharger un documentA
Read-onlyIdempotent

Télécharge un document BoondManager (CV de candidat/ressource, justificatif, contrat, facture...) par son ID, et le rend lisible : texte extrait pour un PDF ou un DOCX, contenu image (visible par le modèle) pour une image, texte brut pour un fichier texte.

Quand : pour récupérer le contenu d'un CV ou d'un justificatif dont l'ID a été relevé dans un onglet d'entité. Plutôt que : boond_candidates_information / boond_candidates_administrative (relations resumes / files) pour trouver l'ID : celui-ci exige un ID exact, suffixe compris (123_resume), et un ID tronqué désigne un autre document.

Où trouver les IDs de documents : dans les onglets des entités — ex. boond_candidates_information expose les relations 'resumes' (CV) et 'files' (dossier administratif). ⚠️ Reprendre l'ID tel quel, suffixe compris (ex. '123_resume') : un ID tronqué à sa partie numérique ne désigne aucun document.

mode: "text" (défaut) : PDF / DOCX → texte extrait côté serveur (borné à 50000 caractères, taille et nombre de pages d'origine indiqués) ; image PNG / JPEG / GIF / WebP → contenu image jusqu'à 2 Mo. Un PDF scanné ou chiffré, dont rien ne s'extrait, est renvoyé tel quel avec un avertissement. mode: "raw" : le fichier tel quel en ressource embarquée (base64) — coûteux en contexte, à réserver aux cas où les octets sont nécessaires (transfert, format non géré). Taille max téléchargée : 5 Mo.

Returns : texte extrait, contenu image, ou ressource embarquée (blob base64) selon le format et le mode. Un ID inconnu est rejeté explicitement plutôt que de renvoyer la page d'accueil BoondManager, que l'API sert en HTTP 200 à la place d'un 404.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant du document, tel qu'exposé par les relations d'entités (ex. 123_resume)
modeNotext (défaut) : PDF et DOCX renvoyés en texte extrait côté serveur, images en contenu `image` ; raw : le fichier tel quel en ressource embarquée (base64).text

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses concrete behaviors: 50000-character extraction limit, 2 MB image limit, 5 MB download limit, scanned/encrypted PDFs returned as-is with a warning, raw mode returning base64 blob, and explicit rejection of unknown IDs instead of the API's HTTP 200 homepage fallback. This is rich, actionable behavioral context.

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?

Though long, the description is densely informative and well-structured with clear sections (Quand, Plutôt que, Où trouver, mode details, Returns, error behavior). Every sentence adds operational value, and the main purpose is front-loaded. The length is justified by the tool's complexity.

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?

There is no output schema, so the description carries the burden of explaining return values, and it does: extracted text, image content, or embedded base64 blob depending on format and mode. It also covers ID sourcing, limits, mode trade-offs, and error behavior. An agent has everything needed to call this tool 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 the baseline is 3. The description adds meaningful semantics beyond the schema: it warns that a truncated ID (without the suffix) designates a different document or no document, and it explains the practical cost and use cases for mode='raw' versus mode='text'. This goes beyond the schema's basic enum and pattern 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 states a specific verb ('Télécharge un document BoondManager'), a clear resource (documents by ID), and the transformation behavior (text extraction for PDF/DOCX, image content, raw text). It also distinguishes itself from sibling tools by naming boond_candidates_information and boond_candidates_administrative as the tools to use for finding IDs, not for downloading content.

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 provides 'Quand' (when to use), 'Plutôt que' (alternatives and why not to use them), and 'Où trouver les IDs' (where to find document IDs). It also gives mode-selection guidance, warning that raw mode is costly and should be reserved for cases where bytes are necessary.

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

boond_expenses_createCréer un(e) note de fraisA

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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A5/5.0
Behavior5/5

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

Annotations are all false (readOnlyHint=false, idempotentHint=false, etc.), so they convey only that this is a non-read-only, non-idempotent mutation. The description carries the burden and does it well: it discloses that a creation always starts as 'savedAndNoValidation', that the validation state is not controllable, that HT and VAT amounts are recalculated by BoondManager, and that missing dependency values cause a 422. These are concrete behavioral traits beyond the sparse annotations.

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?

Every sentence earns its place: the core model, the sibling contrast, the prerequisite call, the tax semantics, the workflow state, and the return value. The structure is front-loaded with the most important concept (month × resource) and uses formatting like bold and a warning emoji to highlight critical instructions. It is appropriately sized for a complex nested tool.

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 the tool's complexity (9 top-level params, nested actualExpenses array), the description is complete: it covers the data model, the mandatory defaults call, line-level tax behavior, the non-controllable state, and the return format. Details of individual fields are left to the fully-covered input schema, and the output schema accounts for return values. There are no critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/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 substantial meaning: it links agencyId, currencyAgency, exchangeRateAgency, expenseTypeReference, and projectId/deliveryId to the boond_expenses_default prerequisite. It also clarifies that amountIncludingTax is TTC and tax is a percentage rate, and that HT/VAT are not entered because they are recalculated. This goes well beyond the schema fields.

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 note de frais dans BoondManager' and immediately defines the model as 'un mois × une ressource'. It also differentiates from the sibling boond_expenses_update by explicitly saying 'Plutôt que : boond_expenses_update pour ajouter des lignes à un mois déjà ouvert', so an agent can distinguish it from other expense tools without opening schemas.

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 gives explicit when/when-not guidance: it contrasts this create tool with boond_expenses_update for adding lines to an already-open month, and warns about the replace semantics of actualExpenses. It also states a hard prerequisite: 'Appeler boond_expenses_default d'abord' and explains that omitting those values triggers a 422 response. This leaves no ambiguity about when to use this tool.

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

boond_expenses_defaultRéférences de saisie d'une note de fraisA
Read-onlyIdempotent

Retourne les référentiels nécessaires pour saisir une note de frais pour une ressource et un mois donnés : agence, devise et taux de change agence, types de frais (reference + libellé + taux de TVA), barèmes kilométriques, et couples projet / prestation imputables.

Quand : systématiquement avant boond_expenses_create — c'est la seule source des codes de types de frais et des couples (projet, prestation) imputables. Plutôt que : rien d'autre : boond_application_dictionary ne publie aucune table de types de frais, et /agencies/{id} ne renvoie qu'un nom. Il n'existe pas de chemin alternatif.

À appeler AVANT boond_expenses_create : les types de frais sont définis par agence et ne figurent pas dans boond_application_dictionary. Les ids projectId et deliveryId sont obligatoires sur chaque ligne et l'API refuse un couple qu'elle ne juge pas imputable sur ce mois.

Returns: Les références à recopier dans boond_expenses_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMois ciblé (YYYY-MM)
agencyIdNoID de l'agence (optionnel — déduit de la ressource)
resourceIdYesID de la ressource

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: returned data is agency-scoped, expense types carry VAT, and projectId/deliveryId pairs must be imputable for the target month. It doesn't disclose error or availability behavior, but that is a minor gap for a read-only lookup.

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 main content is front-loaded in the first sentence and the later sections are labeled (Quand, Plutôt que, À appeler AVANT, Returns), which helps an agent scan it. It loses the top mark because the call-before-expenses_create point and the boond_application_dictionary caveat are each stated twice.

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?

There is no output schema, but the description compensates by enumerating the reference categories returned and stating that they are what must be copied into boond_expenses_create. It stops short of describing the exact response shape, but for a read-only precondition lookup this is largely sufficient.

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 the schema already documents resourceId, term, and agencyId including the note that agencyId is optional and inferred from the resource. The description echoes 'ressource et mois donnés' but adds no new parameter-level semantics beyond the schema.

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 object: 'Retourne les référentiels nécessaires pour saisir une note de frais pour une ressource et un mois donnés', and enumerates exactly what those references are (agency, currency, expense types, mileage scales, project/delivery pairs). It clearly positions the tool as the lookup/prefill step for boond_expenses_create rather than a general search or mutation.

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 gives an explicit trigger condition ('systématiquement avant boond_expenses_create') and explicitly rules out alternatives ('boond_application_dictionary ne publie aucune table... /agencies/{id} ne renvoie qu'un nom. Il n'existe pas de chemin alternatif.'). This is strong when-to-use vs not-to-use guidance.

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

boond_expenses_deleteSupprimer une note de fraisA
Destructive

Supprime définitivement un(e) note de frais de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_expenses_get. Plutôt que : boond_expenses_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that deletion is irreversible with no trash bin on the API side. It also explains the confirmation behavior depending on the MCP elicitation capability and the structured refusal result, which is valuable operational context the annotation cannot convey.

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 well-structured with a clear opening, a Quand/Plutôt que comparison, and bullet points for supplemental guidance. Each sentence serves a distinct purpose—when to use, alternatives, rights checks, irreversibility, confirmation behavior, and return value—so no element is wasted.

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 destructive operation with one parameter, an output schema, and strong annotations, this description covers all relevant decisions: when to invoke, what to check first, which sibling to prefer, irreversibility, user-confirmation behavior, and how to interpret the returned deleted flag. Nothing essential 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 the single id parameter is already documented in the input schema. The description adds the practical suggestion to verify the ID via boond_expenses_get, but does not add new semantic meaning about the parameter itself; the schema carries the burden.

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 states a specific verb and resource: it permanently deletes an expense report from BoondManager. It also explicitly distinguishes itself from boond_expenses_update, which deactivates or changes state rather than destroys the record, so an agent can tell them apart.

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 gives explicit when-to-use guidance: only on explicit user request and after verifying the ID with boond_expenses_get. It also names the preferred alternative, boond_expenses_update, and explains that deactivating/changing state is almost always the real intent, making the routing decision unambiguous.

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

boond_expenses_getDétails d'un(e) note de fraisA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) note de frais par son ID numérique.

Quand : après un boond_expenses_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_expenses_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_expenses_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover readOnly, idempotent, non-destructive. The description adds crucial context: it returns the full entity JSON (attributes + relations), that unknown IDs produce the BoondManager error as-is, and that the ID must originate from search. These details go beyond annotations and help the agent avoid mistakes.

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?

Well-structured with clear sections (Quand, Plutôt que, bullet point, Returns). Front-loaded with the main purpose, no redundant content. Every sentence adds value.

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 simple one-parameter getter with annotations covering safety, the description explains the return format, error behavior, and usage context. There is no output schema, but the description adequately describes what the agent will receive. Nothing essential is missing for correct invocation.

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% (parameter described with pattern). The description reinforces that the ID is numeric and must come from search, adding practical guidance beyond the schema. While the schema already defines the parameter, the description adds usage context that clarifies its source and validity.

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 specific verb (récupère), resource (note de frais), and method (par ID numérique). It clearly distinguishes from search by noting it gets the full fiche versus a summary. An agent can immediately understand what this tool does and how it differs from siblings.

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?

Explicitly states when to use this tool (after boond_expenses_search, to get attributes not in the list summary) and when not (use search if ID unknown, since this tool doesn't accept a name). It also warns against guessing IDs. This is exemplary routing guidance.

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

boond_expenses_updateModifier un(e) note de fraisA
Idempotent

Met à jour un(e) note de frais existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_expenses_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la note de frais à modifier
closedNoClôturer la note de frais
advanceNoAvance à reprendre
actualExpensesNo⚠️ REMPLACE l'intégralité des lignes existantes. Pour ajouter une ligne, relire la note via `boond_expenses_get` et renvoyer l'ensemble des lignes. Omettre pour ne toucher qu'aux autres champs.
currencyAgencyNoID de devise de l'agence
exchangeRateAgencyNoTaux de change agence
informationCommentsNoCommentaires
ratePerKilometerTypeReferenceNoCode du barème kilométrique

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses partial update semantics ('seuls les champs fournis sont écrits'), warns that array fields are replaced not merged, and explains the behavior of `actualExpenses` replacement with a specific read-then-resend strategy. It also mentions the return value ('confirmation et fiche mise à jour'). Annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) are consistent with the description, and the description adds meaningful behavioral context beyond those hints.

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 compact and well-structured: a one-sentence definition, a 'Quand' section, a 'Plutôt que' section, bullet points for key behaviors, and a return note. Every sentence earns its place, and the most important usage guidance is front-loaded.

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 the tool's complexity (8 parameters, nested array objects, partial update semantics), the description covers the essential operational knowledge: when to use, what to avoid, how to handle array replacement, how to check rights, and what the response contains. The output schema exists, so return values don't need further explanation. The description is complete for an agent to invoke this tool 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 description coverage is 100%, so the schema already documents all parameters. The description adds value by highlighting the critical `actualExpenses` replacement behavior and the workflow for adding a line (read via `boond_expenses_get` and resend all lines). It also references `boond_expenses_default` for valid project/delivery pairs, which is useful context not in the schema. However, most parameter-level semantics are already in the schema, so the description's added value is focused on a few key parameters.

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 states a specific verb ('Met à jour'), a specific resource ('note de frais existant(e)'), and the identifier used ('par son ID'). It clearly distinguishes this from the create sibling by naming `boond_expenses_create` as the alternative when the record doesn't exist yet. The title also aligns with the description, and the tool name is unambiguous.

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 says when to use this tool: 'pour modifier quelques champs d'un enregistrement déjà en base.' It also gives a clear exclusion: use `boond_expenses_create` if the record doesn't exist yet. It even provides a pre-check recommendation via `boond_rights_get` to avoid a 403, which is actionable usage guidance.

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

boond_findRésoudre un nom ou un e-mail en IDA
Read-onlyIdempotent

Résout un libellé (« Jean Dupont », « ACME », un intitulé de projet) ou un e-mail en ID BoondManager, pour un candidat, une ressource, un contact, une société, une opportunité ou un projet.

Quand : dès qu'une demande nomme une entité sans donner son ID — avant un _get, un _update, un onglet ou un filtre perimeterManagers / companyId. Plutôt que : le *_search du domaine quand il faut une liste filtrée (états, périmètre, pagination) plutôt qu'une résolution.

  • Choisit le champ à interroger : fullName (essayé dans les deux ordres, l'API attend NOM#PRENOM) puis texte libre pour les personnes, name pour les sociétés, emails quand email est fourni ; au plus 10 résultats.

  • Ne tranche jamais entre homonymes : plusieurs correspondances exactes → isError avec la liste (ID + détail) à soumettre à l'utilisateur ; une seule → structuredContent.match.id.

  • Aucune correspondance exacte mais des résultats proches → la liste est renvoyée sans match : confirmer avec l'utilisateur avant d'utiliser un ID.

Returns : { entity, query, count, match?, ambiguous?, items[{ id, label, detail?, exact }] } et le même contenu en texte. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoRecherche par e-mail à la place du libellé (personnes et sociétés) — plus sûr qu'un nom.
queryYesLibellé : « Prénom Nom » ou « Nom Prénom » (personnes), raison sociale (société), intitulé (opportunité, projet).
entityYesType d'entité à résoudre.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNombre de candidats renvoyés par la recherche (≤ 10)
itemsYes
matchNoPrésent quand exactement un résultat porte le libellé demandé : l'ID à utiliser.
queryYes
entityYes
ambiguousNotrue quand plusieurs résultats portent exactement le libellé demandé

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context beyond annotations: it explains the field selection strategy (fullName tried in both orders, name, emails), the 10-result cap, the exact behavior for multiple exact matches (isError with list), single match (structuredContent.match.id), and near matches (list without match, confirm with user). It also discloses the return shape. No contradiction with annotations.

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 well-structured with clear sections ('Quand', 'Plutôt que', bullet points, 'Returns'). Every sentence earns its place: usage timing, alternatives, field selection, ambiguity handling, and return format. It is dense but not bloated, and the most important usage guidance is front-loaded.

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 the tool's complexity (6 entity types, multiple matching strategies, ambiguity handling) and the presence of an output schema, the description is complete. It covers when to use, how fields are chosen, result limits, exact-match vs. near-match behavior, and the return structure. An agent has everything needed to invoke it correctly and interpret results.

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 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how `query` is interpreted per entity type (e.g., 'NOM#PRENOM' order for fullName, free text for people, name for companies) and how `email` is preferred over a label. It also clarifies the `entity` enum's role in choosing the field. Slight deduction because the description doesn't explicitly map each enum value to its exact field, but it adds clear value over the schema.

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 states a specific verb ('Résout') and resource (a label or email into a BoondManager ID), and enumerates the entity types it covers. It clearly distinguishes itself from the `*_search` siblings by contrasting resolution vs. filtered list retrieval.

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 says when to use it ('dès qu'une demande nomme une entité sans donner son ID — avant un `_get`, un `_update`, un onglet ou un filtre...') and when not to ('Plutôt que : le `*_search` du domaine quand il faut une liste filtrée...'). This is explicit when/when-not guidance with named alternatives.

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

boond_flags_attachPoser un drapeau sur un enregistrementA
Idempotent

Pose un drapeau existant sur un enregistrement (tagging) — POST /attached-flags.

Quand : pour marquer un lot de fiches après un tri (« ces 12 candidats → vivier Java Q4 ») : un appel par fiche. Plutôt que : boond_flags_create si le drapeau n'existe pas encore ; boond_flags_detach pour le retirer.

  • Corps JSON:API { relationships: { flag, dependsOn } } déduit du modèle — la RAML ne documente que la route ; non éprouvé sur un tenant de test.

  • Idempotent côté intention : reposer un drapeau déjà présent ne doit rien changer.

Returns : { entity, id, flagId, attached: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID numérique de l'enregistrement.
entityYesType de l'enregistrement.
flagIdYesID du drapeau (`boond_flags_search`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
entityYes
flagIdYes
attachedYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds a specific clarification (reposing an existing flag changes nothing) plus the JSON:API body format and a candid warning that the route is untested on a test tenant. This goes well beyond the annotations, providing genuine behavioral context.

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 concise and well-organized: purpose first, then when-to-use, then technical body details and return format. It is front-loaded with the most important usage guidance. Slightly dense but not bloated; each sentence adds value.

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 write operation with three parameters, annotations, and an output schema, the description covers purpose, usage context, alternatives, idempotency semantics, request body structure, and return format. It even discloses the untested status, leaving no critical gap for an agent to call it correctly.

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?

The schema already documents all three parameters (id, entity, flagId) with descriptions and patterns (100% coverage), so the baseline is 3. The description mentions the request body but does not add parameter-specific meaning beyond what the schema provides, so no higher score is warranted.

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 states a specific verb ('Pose') and resource (an existing flag on a record), and clearly distinguishes it from siblings by naming boond_flags_create (if flag doesn't exist) and boond_flags_detach (to remove). This allows an agent to select the correct tool without ambiguity.

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 'Quand' (when) provides a concrete scenario (marking a batch after sorting) and 'Plutôt que' (rather than) names the exact alternatives and their conditions. This is fully actionable guidance with no inference required.

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

boond_flags_attachedDrapeaux posés sur un enregistrementA
Read-onlyIdempotent

Liste les drapeaux (tags) posés sur un candidat, une ressource, un contact, une société, une opportunité, un projet, une commande, un produit, un achat, une action, un positionnement ou une facture.

Quand : pour savoir comment un enregistrement est tagué avant d'ajouter ou retirer un drapeau. Plutôt que : boond_flags_search pour le catalogue des drapeaux existants (pas leurs rattachements).

Returns : une ligne par drapeau posé (GET /{entité}/{id}/attached-flags). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID numérique de l'enregistrement.
entityYesType de l'enregistrement.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Lecture seule'. It adds value by specifying the return shape ('une ligne par drapeau posé') and the underlying endpoint, providing useful behavioral context beyond the annotations.

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 well-structured and front-loaded with the core purpose, followed by usage guidance and return information. Every section earns its place, and the entity list, while long, is necessary to identify supported record types.

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 a simple read-only list tool with two fully documented parameters, the description is complete: it specifies when to use it, what it returns, and that it is read-only. It lacks details about the exact fields in each returned flag, but that is not essential for correct tool selection and invocation.

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 coverage is 100%, so the baseline is 3. The description enumerates the same entity types found in the schema enum and confirms the id is numeric, but it does not add significant new meaning beyond what the structured schema already provides.

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 states a specific action ('Liste les drapeaux posés sur...') and enumerates the supported record types, giving an agent a precise picture of scope. It also explicitly distinguishes itself from `boond_flags_search`, which helps differentiate siblings.

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 includes a clear 'Quand' section stating when to use the tool (before adding or removing a flag) and a 'Plutôt que' section naming the alternative `boond_flags_search` with the reason it is not the right choice. This is explicit, actionable guidance.

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

boond_flags_createCréer un drapeauA

Crée un drapeau (tag) réutilisable — « vivier Java Q4 », « à rappeler », « VIP ».

Quand : avant boond_flags_attach quand aucun drapeau existant ne convient (boond_flags_search d'abord). Plutôt que : boond_flags_attach pour poser un drapeau existant sur un enregistrement.

  • Écriture non idempotente : deux appels créent deux drapeaux homonymes.

  • Corps déduit de models.flag (name, mainManager) — non éprouvé sur un tenant de test.

Returns : confirmation et ID du drapeau (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLibellé du drapeau (ex. « vivier Java Q4 »).
mainManagerIdNoID de la ressource responsable du drapeau — l'utilisateur courant si omis.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already set readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds useful behavioral context beyond these: non-idempotency consequence ('deux appels créent deux drapeaux homonymes') and a caveat that the body is inferred from a model and untested ('non éprouvé sur un tenant de test'). It also clarifies the return shape. This goes beyond what annotations provide, though it doesn't cover auth or rate limits, which are less critical for a simple create.

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 compact and well-structured: purpose is front-loaded, usage guidelines follow, then caveats and return info. Every sentence adds value; there is no repetition or filler. The structure aids quick comprehension.

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 simple create tool with 2 parameters, an output schema, and annotations covering mutability/idempotency, the description provides everything an agent needs: when to use it, alternative behavior, non-idempotency warning, and return format. It also flags an untested body, which is extra context that helps the agent set expectations.

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 coverage is 100% (both `name` and `mainManagerId` have clear descriptions). The description mentions `name` and `mainManager` in the model reference but adds no new meaning beyond the schema. It neither clarifies formats nor introduces extra constraints, so baseline 3 for 100% coverage is appropriate.

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 states a specific verb ('Crée') and resource ('un drapeau (tag) réutilisable') and explicitly differentiates from sibling `boond_flags_attach` by explaining that this creates a new flag while attach places an existing one. It also names the search-first prerequisite (`boond_flags_search`), making the tool's role unambiguous among the flags family.

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 gives explicit when-to-use ('avant `boond_flags_attach` quand aucun drapeau existant ne convient') and when-not-to-use ('Plutôt que : `boond_flags_attach` pour poser un drapeau existant'), plus a clear sequence suggestion (`boond_flags_search` d'abord). This is textbook usage guidance with alternatives named.

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

boond_flags_detachRetirer un drapeau d'un enregistrementA
Idempotent

Retire un drapeau d'un enregistrement — DELETE /attached-flags?flag=&<entité>= (route et paramètres documentés dans la RAML).

Quand : pour dé-taguer une fiche ; réversible par boond_flags_attach, le drapeau lui-même n'est pas supprimé. Plutôt que : aucun outil ne supprime un drapeau du catalogue : un drapeau se retire fiche par fiche.

  • Idempotent : retirer un drapeau absent n'échoue pas côté intention (l'erreur API éventuelle est remontée telle quelle).

Returns : { entity, id, flagId, attached: false }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID numérique de l'enregistrement.
entityYesType de l'enregistrement.
flagIdYesID du drapeau (`boond_flags_search`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
entityYes
flagIdYes
attachedYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false, but the description adds meaningful behavior beyond that: the flag itself is not deleted, the operation is reversible via boond_flags_attach, and API errors for absent flags are passed through unchanged. This is useful, non-contradictory context.

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 compact and well-structured: action, route, usage conditions, alternative context, idempotency note, and return shape. Every section earns its place, and the most important purpose statement is front-loaded.

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 simple 3-parameter tool with an output schema and informative annotations, the description covers everything an agent needs: what it does, when to use it, reversibility, idempotency, and the exact return shape. There are no significant gaps.

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 the input schema already documents all three parameters adequately. The description references the RAML for route details but does not add meaning beyond the schema, so the baseline of 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?

The description opens with a specific verb and resource: 'Retire un drapeau d'un enregistrement' and names the exact API operation. It also distinguishes itself from boond_flags_attach (reverse operation) and clarifies that no sibling deletes a flag from the catalog, so the tool's purpose is unambiguous.

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 'Quand' section explicitly states when to use the tool ('pour dé-taguer une fiche'), and the 'Plutôt que' section explains the alternative framing: flags are removed record-by-record, and no tool deletes the flag itself. This gives the agent clear selection criteria relative to sibling tools.

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

boond_flags_getDétails d'un(e) drapeauA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) drapeau par son ID numérique.

Quand : après un boond_flags_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_flags_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_flags_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.9/5.0
Behavior5/5

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

The description adds behavioral context beyond the annotations: it states the tool is read-only ('Lecture seule'), which aligns with readOnlyHint=true, and it discloses error behavior for unknown IDs ('remonte l'erreur BoondManager telle quelle'). It also mentions the return format (JSON of the entity with attributes and relations). No contradictions with annotations; the description enriches the safety profile with error handling and provenance expectations.

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 succinct and well-structured: it opens with the core function, then explains when to use it, contrasts with the alternative, includes a warning, and ends with the return format. Every sentence earns its place, with no redundancy. The most critical info (what it does) is front-loaded.

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 simple read-only get tool with a single parameter and no output schema, the description covers all necessary aspects: purpose, usage context, error behavior, return format, and source of the ID. The annotations already declare safety (idempotent, non-destructive), so the description need not repeat those. Nothing a caller needs to invoke it correctly is 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?

The schema already provides a complete description of the id parameter ('Identifiant unique de l'entité BoondManager (numérique)') with a pattern, so coverage is high. The description adds semantic value by emphasizing that the ID must come from boond_flags_search and never from guessing, clarifying the source and validity of the parameter. This goes slightly beyond the schema's syntax explanation, warranting a 4.

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 clearly states the verb ('Récupère'), the resource ('fiche complète d'un(e) drapeau'), and the key parameter (ID numérique). It also distinguishes itself from the sibling tool boond_flags_search by specifying it retrieves the full record after a search, where list summaries omit attributes. This provides strong 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?

Explicitly states when to use this tool: after a boond_flags_search, to obtain attributes not present in the list summary. It also gives a clear exclusion: use boond_flags_search if the ID is unknown, since this tool only accepts an ID, not a name. Additionally, it warns that the ID must come from search, never from guessing, which is actionable guidance.

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

boond_forms_createCréer un formulaireA

Instancie un formulaire à partir d'un modèle (entretien annuel, bilan de fin de mission, évaluation) pour une ressource ou un candidat.

Quand : pour lancer une campagne d'évaluation ou un bilan, formulaire par formulaire. Plutôt que : boond_forms_default d'abord, pour les questions et les dates attendues par le modèle.

  • Corps déduit de models.form (template, dependsOn, validator, recipient, validateDate, remindDate) — non éprouvé sur un tenant de test ; exactement une entité visée parmi resourceId / candidateId.

  • Écriture non idempotente.

Returns : confirmation et ID du formulaire (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
remindDateNoDate de rappel (YYYY-MM-DD).
resourceIdNoRessource visée (relation `dependsOn`, type resource).
templateIdYesID du modèle de formulaire (relation `template`, requise).
candidateIdNoCandidat visé (relation `dependsOn`, type candidate).
recipientIdNoRessource destinataire (`recipient`).
validatorIdNoRessource qui validera le formulaire (`validator`).
validateDateNoDate de validation souhaitée (YYYY-MM-DD).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description adds that this is a non-idempotent write, that the request body is derived from models.form, and that the behavior has not been proven on a test tenant. It also states the exact-one-target constraint and the returned confirmation/ID, giving a clear contract for a mutation tool.

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 compact, front-loaded with the core action, and uses labeled sections/categories for usage, body behavior, and return value. Every sentence adds information; there is 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?

For a 7-parameter create tool with annotations and an output schema, the description covers when to use it, how it relates to boond_forms_default, the body/return contract, the one-target rule, and even a reliability caveat. Nothing an agent needs to make a correct first invocation is missing, aside from the minor schema-required mismatch already noted.

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?

The schema already documents all seven parameters at 100% coverage, so the baseline is 3. The description adds real value by mapping parameters to model fields (template, dependsOn, validator, recipient, validateDate, remindDate) and enforcing mutual exclusion between resourceId and candidateId. However, this mutual-exclusion constraint is stated in prose while neither parameter is marked required in the schema, creating a small alignment ambiguity.

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 specific verb and resource: 'instancie un formulaire à partir d'un modèle ... pour une ressource ou un candidat', with concrete example templates. This clearly distinguishes the create operation from sibling read/prefill tools such as boond_forms_get and boond_forms_default.

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?

Explicitly gives the trigger condition ('pour lancer une campagne d'évaluation ou un bilan, formulaire par formulaire') and the preferred sibling to consult first ('Plutôt que : boond_forms_default d'abord, pour les questions et les dates attendues par le modèle'). This leaves no doubt about when to invoke this tool versus the alternative.

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

boond_forms_defaultRéférentiels d'un formulaireA
Read-onlyIdempotent

Renvoie un formulaire vide pré-rempli pour un modèle et une entité (questions du modèle, validateur et destinataire par défaut).

Quand : AVANT boond_forms_create, pour connaître les questions et les dates que le modèle attend. Plutôt que : boond_forms_get pour un formulaire déjà créé.

  • Lecture seule (GET /forms/default?template=&resource=) ; la réponse est rendue telle quelle.

Returns : JSON du formulaire vide (questions incluses).

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesID de l'entité visée par le formulaire (`resource`).
templateIdYesID du modèle de formulaire (`template`).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint flags. The description adds context by specifying the GET endpoint, noting the response is returned as-is, and explaining the form's contents (questions, validator, recipient). This goes beyond simply restating annotations, adding useful behavioral details without contradiction.

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 concise and well-structured with a clear purpose statement followed by contextual usage notes, read-only confirmation, and return type. No redundant sentences; every line contributes value.

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 simple read-only tool with two parameters and no output schema, the description covers the essential points: what it does, when to use it, how it differs from alternatives, and what the response contains. Nothing critical is missing for an agent to call it correctly.

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 coverage is 100% with each parameter having a clear description (resourceId, templateId). The description mentions 'template' and 'entity' but adds no new parameter-level semantics beyond what the schema already provides. Baseline 3 is appropriate.

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 states a specific action (returns an empty pre-filled form) with a clear resource (for a template and entity), and distinguishes it from boond_forms_get and boond_forms_create. This makes the tool's purpose unambiguous and differentiates it from siblings.

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 states when to use the tool ('Quand : AVANT boond_forms_create') and what to use instead ('Plutôt que : boond_forms_get'), providing clear guidance on selection among related tools.

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

boond_forms_getDétails d'un formulaireA
Read-onlyIdempotent

Récupère un formulaire (entretien annuel, bilan de fin de mission, évaluation) par son ID : questions, réponses, état, validateur.

Quand : après boond_forms_create, ou depuis l'ID lu dans les relations d'une ressource / d'un candidat. Plutôt que : il n'existe pas de liste des formulaires côté API (GET /forms n'est pas documenté) ; boond_tasks_get avec entity: "form" pour ses tâches.

Returns : JSON du formulaire (attributs + relations). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. The description adds that it returns JSON with attributes and relations, which is behavioral context beyond annotations. No contradiction with annotations.

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 compact, front-loaded with purpose, and uses clear labels (Quand, Plutôt que, Returns). Every sentence adds value with no redundancy.

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 simple get-by-ID tool with full schema coverage and safety annotations, the description provides return structure, usage context, and alternatives. Nothing essential 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 coverage is 100% with a description for 'id' ('Identifiant unique... numérique'). The tool description says 'par son ID' but adds no extra meaning beyond the schema, so the baseline 3 is appropriate.

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 states a specific verb ('Récupère'), a resource ('un formulaire'), and the content (questions, réponses, état, validateur). It differentiates from siblings by mentioning boond_forms_create as the source of the ID and boond_tasks_get for tasks, making its scope unmistakable.

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 'Quand' section tells when to use (after create or from relations) and a 'Plutôt que' section explaining no list endpoint exists and offering boond_tasks_get for tasks. This gives clear when/when-not/alternative guidance.

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

boond_groupments_createCréer un regroupement de prestationsA

Regroupe plusieurs prestations d'un projet sous un même prix et une même période, pour les facturer ensemble.

Quand : pour la facturation multi-prestations (forfait sur plusieurs consultants, lot). Plutôt que : boond_groupments_default d'abord ; boond_groupments_update pour ajuster un regroupement existant.

  • Corps déduit de models.groupment (title, dates, prix / coûts journaliers, relations project / deliveries) — non éprouvé sur un tenant de test.

  • Écriture non idempotente.

Returns : confirmation et ID du regroupement (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoCommentaires (`informationComments`).
titleNoTitre du regroupement.
endDateNoDate de fin (YYYY-MM-DD).
projectIdYesID du projet (relation `project`, requise).
startDateNoDate de début (YYYY-MM-DD).
deliveryIdsNoPrestations regroupées (relation `deliveries`).
averageDailyCostNoCoût journalier moyen.
numberOfDaysFreeNoJours offerts.
averageDailyPriceExcludingTaxNoPrix journalier HT du regroupement.
numberOfDaysInvoicedOrQuantityNoJours / quantité facturés.
forceAverageDailyPriceExcludingTaxNoForcer le prix journalier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare non-readOnly, non-idempotent, non-destructive. The description adds value by warning that the body is derived from 'models.groupment' and is 'non éprouvé sur un tenant de test' (untested on a test tenant), which is a crucial caveat. It also specifies the return format. This exceeds the annotation baseline, though it doesn't describe potential side effects beyond creation, which is implied by non-idempotency.

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 well-structured with clear sections: purpose, when-to-use, alternatives, warnings, and returns. It is concise, with no wasted words, and the key purpose is front-loaded. Bullet points and line breaks improve readability. Every sentence contributes essential information.

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 the tool's complexity (11 params, but many optional), the high schema coverage, existing output schema (mentioned as 'structuredContent.id'), and annotations, the description covers purpose, usage, alternatives, a risk warning, and return format. It is complete enough for an agent to invoke correctly without needing additional information.

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 coverage is 100%, so each parameter already has a description. The description mentions the body is derived from 'models.groupment' (title, dates, prices, relations), which gives a high-level overview but adds no new meaning beyond the schema. It doesn't clarify relationships between parameters or provide usage examples. Baseline 3 is appropriate given complete 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 clearly states the tool's purpose: grouping multiple project services under a single price and period for combined invoicing. It specifies the verb 'Regroupe', the resource 'prestations d'un projet', and the context 'pour les facturer ensemble'. It also distinguishes itself from siblings by explicitly mentioning 'boond_groupments_default' and 'boond_groupments_update'.

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?

Provides explicit usage guidance: 'Quand : pour la facturation multi-prestations' and alternatives: 'Plutôt que : `boond_groupments_default` d'abord ; `boond_groupments_update` pour ajuster un regroupement existant.' This tells the agent exactly when to use this tool versus the alternatives.

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

boond_groupments_defaultRéférentiels d'un regroupement de prestationsA
Read-onlyIdempotent

Renvoie un regroupement vide pré-rempli pour un projet : prestations regroupables, prix et coûts par défaut.

Quand : AVANT boond_groupments_create. Plutôt que : boond_projects_deliveries_groupments pour les prestations et regroupements déjà en place sur le projet.

  • Lecture seule (GET /groupments/default?project=) ; la réponse est rendue telle quelle.

Returns : JSON du regroupement vide, prestations incluses.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesID du projet (requis par `GET /groupments/default`).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the specific HTTP endpoint (GET /groupments/default?project=) and notes 'la réponse est rendue telle quelle', clarifying the read-only, no-transformation behavior. This adds useful context beyond annotations without contradiction.

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 compact, front-loaded with the core purpose, and uses a clear structured format (Quand, Plutôt que, Returns). Every sentence earns its place; there is no fluff or redundancy.

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 simple tool with one parameter and annotations covering safety, the description fully covers what the tool does, when to use it, what it returns, and its read-only nature. Nothing an agent needs 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 coverage is 100% – the schema already documents projectId with its description. The description mentions the parameter in the endpoint example but adds no new semantic detail beyond what the schema provides. Baseline of 3 is appropriate given the high schema coverage.

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 states a specific verb ('Renvoie') and resource ('regroupement vide pré-rempli pour un projet'), lists the contents (prestations regroupables, prix et coûts par défaut), and explicitly differentiates from the sibling boond_projects_deliveries_groupments by clarifying that the latter handles already-existing groupings. This leaves no ambiguity about the tool's function.

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 provides explicit usage timing ('Quand : AVANT boond_groupments_create') and an explicit alternative with the condition ('Plutôt que : boond_projects_deliveries_groupments pour les prestations et regroupements déjà en place sur le projet'). This gives clear when-to-use and when-not-to-use guidance.

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

boond_groupments_getDétails d'un regroupement de prestationsA
Read-onlyIdempotent

Récupère un regroupement de prestations (facturation multi-prestations) par son ID.

Quand : depuis l'ID lu dans boond_projects_deliveries_groupments. Plutôt que : boond_projects_deliveries_groupments pour la liste des regroupements d'un projet — il n'y a pas de liste globale.

Returns : JSON du regroupement (attributs + relations project, deliveries). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context on the return value: 'Returns : JSON du regroupement (attributs + relations project, deliveries),' which is not present in annotations or an output schema. It also restates 'Lecture seule' consistent with annotations.

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 three short, purposeful sentences. It front-loads the core action, then provides usage and return information, with no filler or repetition. Every sentence earns its place.

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 single-parameter read tool with no output schema, the description is fully complete: it explains the resource, the source of the ID, how it differs from the list sibling, what the response contains, and that it is read-only. There is nothing an agent needs to call it correctly that is 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?

The input schema documents the single parameter id with a numeric pattern and description, giving 100% schema coverage. The description adds semantic provenance by stating the ID comes from boond_projects_deliveries_groupments, which helps the agent know where to obtain a valid value. That goes beyond what the schema provides.

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: 'Récupère un regroupement de prestations (facturation multi-prestations) par son ID.' It also clearly distinguishes itself from the sibling tool boond_projects_deliveries_groupments by noting the latter is for listing groupments and that there is no global list.

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 gives explicit when-to-use guidance: 'Quand : depuis l'ID lu dans boond_projects_deliveries_groupments.' It also explicitly says 'Plutôt que : boond_projects_deliveries_groupments pour la liste des regroupements d'un projet — il n'y a pas de liste globale,' preventing misuse and naming the alternative.

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

boond_groupments_updateModifier un regroupement de prestationsA
Idempotent

Met à jour un(e) regroupement de prestations existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_groupments_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du regroupement à modifier.
noteNoCommentaires (`informationComments`).
titleNoTitre du regroupement.
endDateNoDate de fin (YYYY-MM-DD).
startDateNoDate de début (YYYY-MM-DD).
deliveryIdsNoPrestations regroupées (relation `deliveries`).
averageDailyCostNoCoût journalier moyen.
numberOfDaysFreeNoJours offerts.
averageDailyPriceExcludingTaxNoPrix journalier HT du regroupement.
numberOfDaysInvoicedOrQuantityNoJours / quantité facturés.
forceAverageDailyPriceExcludingTaxNoForcer le prix journalier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses partial-update semantics: only supplied fields are written and others are left in place. It also warns that array fields are replaced rather than merged, which is exactly the kind of side-effect an agent needs to know. The return value is also disclosed: confirmation and the updated record.

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 short, sectioned, and front-loaded. The 'Quand', 'Plutôt que', and bulleted warnings each add non-redundant information, and there is 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?

For an update tool with an extensive input schema and an output schema, the description covers the essential contextual points: existing record + ID, when to prefer create, partial-update behavior, array replacement, and the response shape. No critical calling information is 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?

Schema coverage is 100%, so the description does not need to re-document each parameter. It still adds parameter-level meaning by stating that partial updates apply to all supplied fields and that array-typed parameters are overwritten wholesale rather than merged. This goes beyond the schema, though individual parameters are not given extra context.

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 states a precise action: 'Met à jour un(e) regroupement de prestations existant(e), identifié(e) par son ID' (updates an existing group identified by ID). It clearly distinguishes itself from the sibling create tool by saying it modifies an already-stored record rather than creating one.

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?

It has an explicit 'Quand' section saying to use it to modify a few fields of an existing record, and an explicit 'Plutôt que' section directing agents to boond_groupments_create when the record does not exist yet. This gives a clear selection rule relative to the relevant sibling.

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

boond_inactivities_createCréer une période d'inactivitéA

Déclare une période d'inactivité (intercontrat, formation interne, congé sans solde…) pour une ressource, entre deux prestations.

Quand : quand une ressource sort de mission sans relais immédiat — c'est ce qui rend le taux d'occupation et le coût de l'intercontrat justes. Plutôt que : boond_absences_create pour une absence (congés, maladie) ; boond_deliveries_create pour une nouvelle prestation.

  • Corps déduit de models.inactivity (title, startDate, endDate, inactivityType, coûts, relations resource / contract) — non éprouvé sur un tenant de test.

  • Écriture non idempotente.

Returns : confirmation et ID de la période (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoCommentaires (`informationComments`).
titleNoIntitulé (ex. « Intercontrat », « Formation interne »).
endDateYesDate de fin (YYYY-MM-DD).
startDateYesDate de début (YYYY-MM-DD).
contractIdNoID du contrat de rattachement.
resourceIdYesID de la ressource en intercontrat / inactivité (relation `resource`, requise).
inactivityTypeNoType d'inactivité tel que publié par `boond_inactivities_default`.
averageDailyCostNoCoût journalier moyen retenu.
numberOfDaysInvoicedOrQuantityNoNombre de jours de la période.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and idempotentHint=false. The description adds context: 'Écriture non idempotente' confirms the non-idempotency, 'Corps déduit de models.inactivity — non éprouvé sur un tenant de test' warns about reliability, and it states the return includes structuredContent.id. This goes beyond annotations without contradiction.

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 compact and well-organized: a purpose statement, a 'Quand' section, a 'Plutôt que' section with alternatives, bullet points on body derivation and idempotency, and a return note. Every sentence adds value with no fluff, and key information is front-loaded.

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 a write operation with 9 parameters and an output schema, the description covers usage context, alternatives, a reliability caveat, and return structure. It doesn't detail validation rules or error cases, but the schema and output schema provide structural completeness. The description is adequate for an agent to call the tool correctly.

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%, with each parameter already having meaningful descriptions (e.g., resourceId as 'ID de la ressource en intercontrat / inactivité'). The description adds a general reference to the body fields (title, startDate, endDate, inactivityType, coûts) but does not provide additional syntax or format details beyond the schema. Baseline 3 is appropriate given high schema coverage.

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 clearly states the tool declares an inactivity period (intercontrat, formation interne, congé sans solde) for a resource between two assignments. It explicitly differentiates from siblings: 'Plutôt que boond_absences_create pour une absence' and 'boond_deliveries_create pour une nouvelle prestation', making the purpose unambiguous.

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?

It gives explicit when-to-use: 'Quand une ressource sort de mission sans relais immédiat' and provides alternatives with conditions: 'Plutôt que boond_absences_create pour une absence (congés, maladie); boond_deliveries_create pour une nouvelle prestation.' This leaves no ambiguity about tool selection.

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

boond_inactivities_defaultRéférentiels d'une période d'inactivitéA
Read-onlyIdempotent

Renvoie les valeurs par défaut d'une période d'inactivité (intercontrat, formation, congé sans solde…) pour une ressource : types d'inactivité, coût journalier retenu, contrat en cours.

Quand : AVANT boond_inactivities_create — le type d'inactivité n'est publié que là. Plutôt que : boond_resources_get pour la fiche de la ressource ; boond_reporting_resources pour le taux d'occupation agrégé.

  • Lecture seule (GET /inactivities/default?resource=) ; la réponse est rendue telle quelle.

Returns : JSON de l'inactivité vide pré-remplie, avec les types inclus.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesID de la ressource (requis par `GET /inactivities/default`).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying the HTTP method (GET), the endpoint pattern, and that the response is passed through as-is. This gives useful behavioral context beyond the structured hints without contradicting them.

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 well-structured and front-loaded: purpose, usage timing, alternatives, behavior, and return type are each covered in compact labeled sections. Every sentence contributes useful guidance, with no redundancy.

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 a one-parameter read-only tool with no output schema, the description is nearly complete. It explains what is returned (empty pre-filled inactivity JSON with types included) and the endpoint. Minor omissions such as error conditions or authentication requirements are not critical given the annotations and simple scope.

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% and the only parameter, resourceId, is already described in the schema. The description adds only generic context ('pour une ressource') and does not meaningfully expand parameter semantics, so the baseline score of 3 is appropriate.

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 names a specific verb and resource ('Renvoie les valeurs par défaut d'une période d'inactivité') and enumerates the returned fields: types d'inactivité, coût journalier retenu, contrat en cours. It also distinguishes itself from related siblings like boond_resources_get and boond_reporting_resources, so an agent can confidently identify its role.

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 states when to use this tool ('AVANT boond_inactivities_create') and explains why ('le type d'inactivité n'est publié que là'). It also names alternatives for different needs, making the usage boundary clear.

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

boond_inactivities_getDétails d'une période d'inactivitéA
Read-onlyIdempotent

Récupère une période d'inactivité (intercontrat, formation…) par son ID.

Quand : après boond_inactivities_create, ou depuis l'ID lu dans les relations d'une ressource. Plutôt que : il n'existe pas de liste des inactivités côté API (GET /inactivities n'est pas documenté) : boond_reporting_resources donne l'occupation, boond_resources_get la fiche.

Returns : JSON de la période (attributs + relations). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior; the description reinforces 'Lecture seule' and adds useful context: the API has no documented list endpoint, and the response is a JSON period with attributes and relations. No contradiction with annotations.

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 compact and well structured with clear labels: action, 'Quand', 'Plutôt que', and 'Returns'. Every sentence contributes necessary routing or output information, and the most essential action is front-loaded.

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 single-parameter read tool, the description covers when to use it, when not to use it, alternatives, and the response shape. Annotations cover safety and idempotence, and the schema fully documents the parameter. Nothing essential is missing for correct invocation.

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 coverage is 100% and the schema already defines id as a unique numeric BoondManager entity identifier. The description only says 'par son ID' and adds no format or type detail beyond what the schema provides, so 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?

The description states a specific verb and resource: 'Récupère une période d'inactivité ... par son ID'. It also names example types (intercontrat, formation) and explicitly distances itself from list/reporting/contact-sheet tools, so an agent can tell it apart from siblings.

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 'Quand' section gives explicit trigger conditions: after boond_inactivities_create or when an ID is read from resource relations. The 'Plutôt que' section names the unavailable endpoint and redirects to boond_reporting_resources and boond_resources_get for related needs.

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

boond_invoices_actionsActions liées à une factureA
Read-onlyIdempotent

Récupère les actions (envois, relances, notes) d'un(e) facture, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_invoices_get pour la fiche de base, ou boond_invoices_search si l'ID est inconnu.

  • Un envoi de facture par e-mail apparaît ici comme une action, avec ses destinataires dans text.

Returns : Liste des actions rattachées à la facture, la plus récente en premier. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds genuinely useful behavioral context: it explains that email sends appear as actions with recipients in `text`, that results are sorted most recent first, and that the operation is read-only ('Lecture seule'). This goes beyond what the annotations and schema provide.

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 compact and well-structured: the purpose is front-loaded, usage guidance is clearly separated with 'Quand' and 'Plutôt que', and the behavioral note plus return description earn their place. There is no redundant 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?

For a simple single-parameter read-only tool with no output schema, the description is complete: it explains the returned list, its ordering, the meaning of an email-send action, and usage boundaries. An agent has everything needed to call the tool correctly.

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?

The input schema already documents the single `id` parameter with a pattern and description ('Identifiant unique de l'entité BoondManager (numérique)'), giving 100% schema coverage. The description only repeats that the action is fetched by ID and adds no new format or semantic detail, so the baseline score of 3 is appropriate.

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 states a specific action ('Récupère les actions... d'un(e) facture, par son ID') and names the resource and scope clearly. It explicitly distinguishes itself from `boond_invoices_get` and `boond_invoices_search`, so an agent can differentiate it from siblings without reading their schemas.

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?

'Quand : pour ne charger que cette section, sans le reste de la fiche' gives a clear decision rule, and 'Plutôt que : ...' explicitly names the alternatives and the exact condition for choosing them. This leaves no ambiguity about when to invoke this tool versus related invoice tools.

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

boond_invoices_createCréer un(e) factureA

Crée un(e) facture dans BoondManager.

Quand : pour ajouter un(e) facture inexistant(e). Plutôt que : boond_invoices_update pour modifier un enregistrement existant, et boond_invoices_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires
stateNoÉtat de la facture : ID de `boond://dictionary/states/invoices` (ex: 0 = Création, 1 = Transmis au client)
orderIdNoID du bon de commande associé
taxRateNoTaux de TVA (%)
referenceNoRéférence de la facture
invoiceDateNoDate de facturation (YYYY-MM-DD)
invoiceRecordsNoLignes de facture Boond
invoicePaymentsNoPaiements client de la facture
amountExcludingTaxNoMontant HT
expectedPaymentDateNoDate d'échéance/paiement attendu (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.6/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; the description adds concrete behavioral context by spelling out the consequence: 'Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).' It also discloses the prerequisite that relation/state IDs must be resolved beforehand and defines the return contract (confirmation, created ID, full record, chainable structuredContent.id). Failure conditions are not covered, but the core behavioral traits are transparently documented.

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 front-loaded with the core action, then organized into scannable sections: 'Quand', 'Plutôt que', behavioral bullets, and a returns line. Every sentence earns its place; the non-idempotency warning and ID-resolution note are precisely the high-value details an agent needs for a 10-parameter create.

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?

The output schema covers return structure, so the description focuses on the real gaps: when to use, non-idempotency risk, and ID-resolution prerequisites. With 0 required parameters it could clarify what a minimal valid call looks like, but for a fully schema-documented, annotation-covered create this is a minor omission.

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. The description adds value beyond the schema by explaining that 'Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*)', giving agents the resolution workflow for state, orderId, and nested record fields that individual parameter descriptions don't provide.

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 un(e) facture dans BoondManager.' It distinguishes itself from siblings by explicitly naming boond_invoices_update and boond_invoices_search as different operations, so an agent can select it without opening the 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?

The 'Quand' section states the exact trigger condition ('pour ajouter un(e) facture inexistant(e)') and the 'Plutôt que' section names alternatives with their conditions: boond_invoices_update for existing records and boond_invoices_search first to verify non-existence. Selection guidance is explicit, complete, and cites the right siblings.

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

boond_invoices_deleteSupprimer une factureA
Destructive

Supprime définitivement un(e) facture de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_invoices_get. Plutôt que : boond_invoices_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint: true), the description discloses that the operation is irreversible and has no trash/undo in the API. It also explains the elicitation flow: if the MCP client supports elicitation, a confirmation is requested and a refusal cancels the call, returning deleted:false with a reason. The return structure is described. These details go well beyond what annotations already provide.

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 well-structured with bullet points and sections, front-loading the core purpose and then covering usage conditions, alternatives, and return format. Every sentence adds value; there is no fluff. The structure makes it easy for an agent to scan and extract the key information.

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 the tool is a destructive delete with annotations covering the destructive nature, the description adds all necessary context: when to use, what to verify, irreversibility, confirmation behavior, and the return object. It also specifies the output format, so an agent knows how to interpret the response. Nothing needed for correct invocation 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?

The schema already fully describes the id parameter (type, pattern, description), so the baseline is 3. The description adds a usage hint to verify the ID via boond_invoices_get, which is contextual but not strictly parameter semantics. No additional parameter details are given, so the score remains at the baseline.

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 clearly states the tool's purpose: permanently delete an invoice from BoondManager. It uses a specific verb ('Supprime définitivement') and resource ('facture'), and distinguishes itself from the sibling boond_invoices_update by explaining that update should be used for disabling or changing state without destruction. The purpose is unambiguous.

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 states when to use the tool ('uniquement sur demande explicite de l'utilisateur'), prerequisites (verify ID with boond_invoices_get), and the alternative (boond_invoices_update for non-destructive changes). It also recommends checking rights via boond_rights_get before attempting. This gives clear, actionable guidance on when to invoke it versus alternatives.

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

boond_invoices_getDétails d'un(e) factureA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) facture par son ID numérique.

Quand : après un boond_invoices_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_invoices_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_invoices_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond that: unknown IDs produce the raw BoondManager error, and the response is the full entity JSON with attributes and relations. No contradiction with annotations exists.

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 front-loaded with the action, then gives when-to-use, when-not-to-use, error behavior, and the return format. Each section earns its place; there is no filler, and the structure makes the tool easy to understand quickly.

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 one-parameter read-only getter with no output schema, the description fully covers what is needed to call it correctly: the ID source, the error behavior, and the return format. Nothing essential is 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?

Schema coverage is 100% for the id parameter, but the description goes further by emphasizing that the ID is numeric and must come from boond_invoices_search, and that this tool does not accept names. These operational constraints add meaning beyond the schema.

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 first sentence specifies the exact action and resource: 'Récupère la fiche complète d'un facture par son ID numérique.' It explicitly says the tool returns the full record by ID and is differentiates it from the list-returning sibling boond_invoices_search, making the tool's purpose unambiguous.

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 provides explicit routing guidance: use it 'après un boond_invoices_search' and prefer boond_invoices_search if the ID is unknown. It also instructs that the ID must come from a search, not a guess, which is a concrete, actionable usage rule.

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

boond_invoices_informationInformations complètes d'une factureA
Read-onlyIdempotent

Récupère les informations complètes (lignes facturées, coordonnées de facturation et bancaires, échéance, état d'envoi, commande et projet liés) d'un(e) facture, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_invoices_get pour la fiche de base, ou boond_invoices_search si l'ID est inconnu.

Returns : Fiche complète de la facture (relations société, contact, commande, projet, prestation incluses). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by detailing the return contents (relations with company, contact, order, project, service included) and restates 'Lecture seule' consistently. It does not mention failure modes or rate limits, but for a simple read tool with annotations, this is sufficient.

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 highly concise and well-structured: purpose, usage guidance, and return info are clearly separated with labels. It is front-loaded with the main action and contains no redundant or filler sentences.

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 a read-only single-ID fetch with annotations covering safety and a clear usage section, the description is largely complete. It states the return scope but does not mention error handling (e.g., non-existent ID). Given its simplicity and the presence of annotations, it meets the needs of an agent adequately, though a note on error behavior would push it to 5.

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 coverage is 100% and the only parameter 'id' is described as the numeric unique identifier. The description mentions 'par son ID' but adds no new semantic beyond what the schema provides. Baseline 3 is appropriate since the schema fully documents the parameter.

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 clearly states the verb 'Récupère' (retrieves), the resource 'facture' (invoice), and specifies it fetches complete information by ID. It enumerates the contents (billed lines, billing/bank details, due date, sending status, linked order/project) and explicitly names sibling tools to differentiate itself. The purpose is unmistakable.

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?

It provides explicit 'Quand' (when to use) and 'Plutôt que' (alternatives) guidance. It states to use this tool to load only the full invoice section without the rest of the record, and directs to 'boond_invoices_get' for the base record or 'boond_invoices_search' if the ID is unknown. This is clear and actionable.

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

boond_invoices_updateModifier un(e) factureA
Idempotent

Met à jour un(e) facture existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_invoices_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la facture à modifier
noteNoNotes
stateNoÉtat de la facture : ID de `boond://dictionary/states/invoices` (ex: 0 = Création, 1 = Transmis au client)
taxRateNoTaux de TVA (%)
referenceNoRéférence de la facture
invoiceDateNoDate de facturation (YYYY-MM-DD)
invoiceRecordsNoLignes de facture Boond
invoicePaymentsNoPaiements client de la facture
amountExcludingTaxNoMontant HT
expectedPaymentDateNoDate d'échéance/paiement attendu (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: it explains partial-update semantics (only provided fields are written), warns that array fields are replaced rather than merged, and states that the response is a confirmation plus the updated record. The annotations already signal read/write and idempotency, but this description enriches the agent's understanding of side effects.

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 well-structured with a main statement, usage conditions, bullet-point warnings, and a return note. Every sentence contributes useful information, and the key scoping statement is front-loaded. It is appropriately sized for the tool's complexity.

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 10 parameters, full schema coverage, annotations, and an output schema, the description provides the missing contextual pieces: when to use it, what partial update means, array replacement behavior, permission checking, and return content. An agent has enough information to invoke this tool 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 the baseline is 3. The description adds meaningful parameter-related semantics by explaining that only provided fields are written and that array-typed fields are replaced not merged, which affects how `invoiceRecords` and `invoicePayments` should be handled. It does not restate individual field descriptions, but it adds value beyond the schema.

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 states a clear verb and resource: 'Met à jour un(e) facture existant(e), identifié(e) par son ID.' It explicitly differentiates from the sibling `boond_invoices_create` by noting when each should be used, so an agent can distinguish update from create without inspecting other tools.

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?

It gives an explicit 'Quand' condition for partial updates of existing records, names the alternative `boond_invoices_create` for records that do not exist yet, and advises checking `boond_rights_get` first to avoid a 403. This is clear, actionable guidance for tool selection and invocation.

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

boond_logs_getDétails d'un(e) logA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) log par son ID numérique.

Quand : après un boond_logs_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_logs_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_logs_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond that: unknown IDs pass through the raw BoondManager error, the ID must come from boond_logs_search, and the response shape is the entity JSON with attributes and relations.

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 compact and front-loaded with the core action, then uses short labeled sections for when to use, what to prefer instead, a warning, and return format. Every sentence adds distinct information.

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 simple one-parameter read-only getter, this is complete: purpose, sibling routing, error behavior, ID provenance, and return shape are all covered. The absence of an output schema is mitigated by the explicit return-type statement.

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?

The input schema already fully describes the numeric ID parameter, so the baseline is 3. The description adds practical semantic guidance by insisting the ID must originate from boond_logs_search and must not be guessed, which is valuable for correct invocation.

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: retrieving the complete record of a log by numeric ID. It also explicitly contrasts itself with boond_logs_search, so an agent can distinguish the get operation from the search sibling.

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?

It states exactly when to use the tool ('after a boond_logs_search, to get attributes not in the list summary') and when not to ('if the ID is unknown, use boond_logs_search instead'). This is explicit routing with no inference required.

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

boond_notifications_getDétails d'une notificationA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) notification par son ID numérique.

Quand : après un boond_notifications_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_notifications_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_notifications_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: an unknown ID produces the raw BoondManager error, the ID must come from boond_notifications_search, and the return value is the full entity JSON with attributes and relations. This is valuable operational transparency.

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 concise and well structured: a one-line purpose, then explicit 'Quand', 'Plutôt que', and error-warning sections, followed by a return format note. Every sentence earns its place and the most important information is front-loaded.

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 simple single-parameter read tool, the description is complete. It explains when to use it, how it relates to its sibling, what happens on an unknown ID, what the output looks like, and that the operation is read-only. Nothing essential is missing for an agent to invoke it correctly.

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% for the single id parameter, so the schema already documents the numeric ID. The description reinforces that the ID must be numeric and must come from boond_notifications_search, but it does not add much beyond what the schema and the usage guidance already imply.

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 'Récupère la fiche complète d'un(e) notification par son ID numérique', which is a specific verb-plus-resource statement. It clearly distinguishes this tool from boond_notifications_search by stating that it fetches the full notification record for a known numeric ID.

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 says when to use it: after boond_notifications_search, to get attributes not in the list summary. It also names the alternative and the exclusion condition: do not use boond_notifications_search if the ID is unknown because this tool does not accept a name. This is clear routing guidance.

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

boond_opportunities_actionsActions liées à une opportunitéA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) opportunité, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_opportunities_get pour la fiche de base, ou boond_opportunities_search si l'ID est inconnu.

Returns : Liste des actions rattachées à l'opportunité. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds useful context about the returned data being a list of opportunity-bound actions, but it does not describe pagination or any other edge behavior, so it stays at the baseline for annotation-supported definitions.

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 short, front-loaded with the core purpose, and uses compact labeled sections for usage guidance, alternatives, and return value. Each line contributes meaning; the 'Lecture seule' note is redundant with annotations but does not add meaningful bloat.

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 simple one-parameter tool with rich annotations, the description covers what the tool returns, why to use it, and which siblings to prefer in other situations. No critical information needed to select or invoke the tool 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?

The schema already covers the single parameter with a descriptive label and pattern, so schema coverage is 100%. The description clarifies that the ID identifies an opportunity rather than a generic entity, but it adds no additional format or constraint information beyond the schema.

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 ('Récupère'), a clear resource ('les actions ... d'une opportunité'), and the lookup key ('par son ID'). It also distinguishes itself from sibling tools by naming boond_opportunities_get and boond_opportunities_search as alternatives.

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 'Quand' section explicitly states the intended use case: loading only this section without the rest of the record. The 'Plutôt que' section gives concrete alternative tools and the conditions under which they should be chosen instead.

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

boond_opportunities_createCréer un(e) opportunitéA

Crée un(e) opportunité dans BoondManager.

Quand : pour ajouter un(e) opportunité inexistant(e). Plutôt que : boond_opportunities_update pour modifier un enregistrement existant, et boond_opportunities_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNom / titre de l'opportunité
noteNoDescription de l'opportunité (mappée sur /data/attributes/description)
stateNoÉtat de l'opportunité
poleIdNoID du pôle (relation pole)
typeOfNoType d'opportunité : ID numérique du dictionnaire setting.typeOf.project (ex: 1, 3), via boond_application_dictionary
endDateNoDate de fin prévue (YYYY-MM-DD)
agencyIdNoID de l'agence (relation agency)
criteriaNoCritères / compétences recherchées (texte libre). Alimente le matching de boond_workflow_candidats_pour_opportunite.
companyIdNoID de la société cliente (relation company)
contactIdNoID du contact associé (relation contact)
startDateNoDate de début prévue (YYYY-MM-DD ou 'immediate')
hrManagerIdNoID de la ressource responsable RH (relation hrManager)
expertiseAreaNoDomaine d'expertise : ID du dictionnaire setting.expertiseArea (via boond_application_dictionary)
mainManagerIdNoID de la ressource responsable principal / commercial (relation mainManager)
turnoverEstimatedExcludingTaxNoChiffre d'affaires estimé HT (montant)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations are all false (readOnlyHint, idempotentHint, etc.), so the description carries the full burden. It discloses non-idempotency explicitly ('deux appels identiques créent deux enregistrements'), and the requirement to resolve numeric IDs beforehand. This goes beyond the annotations, but it does not mention potential side effects like workflow triggers or error behavior, which would make it more complete.

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 well-structured with 'Quand', 'Plutôt que', bullet points, and 'Returns'. It is front-loaded with the core purpose, then provides usage distinctions, behavioral notes, and return details. Every sentence contributes value; no filler or redundancy.

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 the tool's complexity (15 parameters, 1 required) and the presence of an output schema, the description covers all essential aspects: when to use, how to distinguish from siblings, non-idempotency, ID resolution prerequisites, and what the return value provides (including a usable ID for chaining). Nothing an agent needs to call correctly is 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?

Schema coverage is 100%, so each parameter is described. The description adds a crucial note that relation IDs and state/type are numeric BoondManager IDs that must be resolved beforehand (via dictionary). This directly enhances understanding of many parameters (e.g., poleId, companyId, state) beyond the generic 'ID du pôle' descriptions. It does not cover all parameters but adds meaningful context.

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 explicitly states the verb and resource: 'Crée un(e) opportunité dans BoondManager.' It differentiates from siblings by naming `boond_opportunities_update` and `boond_opportunities_search` and specifying the exact conditions for their use, making the tool's role unambiguous.

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?

Provides explicit when-to-use guidance ('pour ajouter un(e) opportunité inexistant(e)') and when-not-to-use guidance (use update for existing records, search first to verify non-existence). This is a clear directive that leaves no ambiguity about the tool's intended invocation context.

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

boond_opportunities_deleteSupprimer un(e) opportunitéA
Destructive

Supprime définitivement un(e) opportunité de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_opportunities_get. Plutôt que : boond_opportunities_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses that deletion is irreversible with no trash/recycle bin on the API side, and explains the elicitation behavior: if the MCP client supports elicitation, a confirmation is requested and a refusal cancels the call (structuredContent.deleted: false + reason). This goes well beyond the annotations (destructiveHint: true) by adding concrete behavioral context.

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 well-structured with clear sections (Quand, Plutôt que, boond_rights_get, warning, elicitation behavior, Returns). Every sentence earns its place and the most critical information (irreversibility, when to use) is front-loaded.

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?

The description covers the essential context for a destructive operation: when to use, what to check first, irreversibility, permission checking, elicitation/confirmation behavior, and the return value shape. The output schema exists, so return values need not be fully re-explained, but the description still notes the key 'deleted' field to verify.

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 the schema already documents the single 'id' parameter. The description adds the instruction to verify the ID with boond_opportunities_get before calling, which is useful but not parameter-level semantic detail beyond the schema.

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 states a specific verb and resource: 'Supprime définitivement un(e) opportunité de BoondManager' (permanently deletes an opportunity). It clearly distinguishes this from update operations and names the sibling alternative (boond_opportunities_update).

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 states when to use it (only on explicit user request, after verifying the ID with boond_opportunities_get), and when not to (prefer boond_opportunities_update for deactivating or changing state). It also references boond_rights_get for permission checking.

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

boond_opportunities_getDétails d'un(e) opportunitéA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) opportunité par son ID numérique.

Quand : après un boond_opportunities_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_opportunities_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_opportunities_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description reveals two important behaviors: omitting tab returns only the base record rather than merging tabs, and an unknown ID surfaces the raw BoondManager error. It also confirms read-only, consistent with annotations.

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 definition is compact, front-loaded with the core action, and uses short labeled sections and bullets. No sentence is redundant with the schema except the final read-only note, which is harmless.

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 simple two-parameter read tool with rich annotations and no output schema, the description covers return format, tab behavior, and error semantics. An agent has everything needed to decide when to call it and what to expect.

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. The description adds real semantic value by explaining the consequence of omitting tab and warning that IDs must come from a search. The only minor blemish is an example value mismatch (technical-data in the description vs technical in the schema).

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: it retrieves the full opportunity record by numeric ID. It also explicitly distances itself from boond_opportunities_search (which returns a list summary) and boond_find (which resolves names/emails), so an agent can distinguish it from the closest siblings.

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?

It gives an explicit 'Quand' (after a search, to fetch attributes absent from the list summary) and a 'Plutôt que' section naming the alternatives and the conditions under which they should be used instead. This is exactly the level of routing guidance expected.

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

boond_opportunities_informationInformations générales d'une opportunitéA
Read-onlyIdempotent

Récupère les informations générales (client, dates, montant, probabilité, état) d'un(e) opportunité, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_opportunities_get pour la fiche de base, ou boond_opportunities_search si l'ID est inconnu.

Returns : Fiche de l'opportunité. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Les annotations (`readOnlyHint`, `idempotentHint`, `destructiveHint=false`) fournissent déjà le profil de sécurité. La description ajoute 'Returns : Fiche de l'opportunité. Lecture seule' mais ne fait que répéter la lecture seule et ne précise pas le contenu exact du retour ni le comportement en cas d'ID inconnu. L'apport au-delà des annotations est minimal.

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?

La description est organisée en trois courtes sections (objectif, quand/plutôt que, returns) sans aucune répétition ni fioriture. Chaque phrase apporte une information utile et est positionnée en priorité, avec une mise en avant immédiate de l'action.

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?

Pour un outil à 1 paramètre, sans schéma de sortie et avec des annotations de sécurité, la description est complète : elle précise quoi, quand, avec quels alternatives, et ce qu'elle retourne. Légère zone grise : la formulation 'Fiche de l'opportunité' peut paraître ambiguë après avoir évoqué une 'section' limitée, mais elle reste suffisante.

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?

Le schéma couvre 100% du paramètre `id` avec description, pattern `^\d+$` et format numérique. La description mentionne 'par son ID', ce qui lie le paramètre au contexte de l'outil, mais n'ajoute pas de sémantique supplémentaire au-delà du schéma, qui est déjà clair.

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?

La description commence par un verbe précis 'Récupère' et une ressource identifiable 'informations générales d'une opportunité', avec les champs concernés (client, dates, montant, probabilité, état). La distinction avec les outils frères `boond_opportunities_get` et `boond_opportunities_search` est explicitement nommée.

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?

Les sections 'Quand' et 'Plutôt que' donnent explicitement le cas d'usage ('charger que cette section') et les alternatives selon la situation : `_get` pour la fiche de base, `_search` si l'ID est inconnu. L'agent n'a aucune inférence à faire.

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

boond_opportunities_positioningsPositionnements sur une opportunitéA
Read-onlyIdempotent

Récupère les positionnements (candidats et ressources proposés au client) d'un(e) opportunité, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_opportunities_get pour la fiche de base, ou boond_opportunities_search si l'ID est inconnu.

Returns : Liste des positionnements de l'opportunité. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond annotations by stating the tool loads only this section without the rest of the record, and it clarifies what positionings are (candidates and resources offered to the client).

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 compact and tightly structured: a one-sentence purpose, a 'Quand' section, a 'Plutôt que' section, and a returns note. Everything earns its place; the only minor redundancy is 'Lecture seule', which repeats the annotation, but the overall text is highly economical.

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 a single-parameter, read-only sub-resource with rich annotations and no output schema, the description is nearly complete: it gives the purpose, usage scenario, alternatives, and a generic return value (list of positionings). A tiny gap is that the return list shape is not described beyond 'list', but the tool's complexity is low enough that this is a minor omission.

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?

There is only one parameter, and the schema already documents it (at 100% coverage), so the baseline is 3. The description's 'par son ID' restates the schema's purpose without adding formatting, constraints, or usage nuances beyond what the schema provides.

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 clearly states 'Récupère' (retrieves) with a specific resource: the positionings (candidates and resources proposed to the client) of an opportunity by its ID. It also differentiates itself from the sibling tools boond_opportunities_get (full record) and boond_opportunities_search (ID unknown), so an agent can immediately tell it apart.

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 answers 'Quand' (when) to use this tool: to load only the positionings section rather than the whole record, and 'Plutôt que' (rather than), naming the two alternative tools and the condition that selects each one. This is clear, actionable routing guidance with no inference needed.

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

boond_opportunities_projectsProjets issus d'une opportunitéA
Read-onlyIdempotent

Récupère les projets (missions nées de cette affaire une fois gagnée) d'un(e) opportunité, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_opportunities_get pour la fiche de base, ou boond_opportunities_search si l'ID est inconnu.

Returns : Liste des projets liés à l'opportunité. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds modest context about returning only the linked-projects section and states 'Lecture seule', but it does not mention pagination, empty results, or the shape of the returned project list.

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 compact and well-structured with clear labels: purpose, 'Quand', 'Plutôt que', and 'Returns'. It front-loads the main action and uses no filler, making it easy for an agent to parse quickly.

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 a one-parameter read-only list tool, the description covers purpose, usage context, alternatives, and the general return type. It does not detail the project object fields, but since the endpoint is simple and returns only a list, this is a minor gap rather than a blocking one.

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?

There is only one parameter, id, and the schema already covers it fully with a type, pattern, and description ('Identifiant unique de l'entité BoondManager (numérique)'). The description only repeats 'par son ID', adding no new semantic information, 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?

The description says 'Récupère les projets ... d'un(e) opportunité, par son ID', naming a specific verb, resource, and identifier. It also clarifies that 'projets' means 'missions nées de cette affaire une fois gagnée', distinguishing it from generic project tools.

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?

It explicitly says when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and names the alternatives: boond_opportunities_get for the base record and boond_opportunities_search when the ID is unknown. This gives clear routing guidance.

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

boond_opportunities_simulationSimulation financière d'une opportunitéA
Read-onlyIdempotent

Récupère la simulation financière (marge, CA prévisionnel, coûts) d'un(e) opportunité, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_opportunities_get pour la fiche de base, ou boond_opportunities_search si l'ID est inconnu.

Returns : Chiffrage prévisionnel de l'opportunité — prévisionnel, pas du réalisé. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by clarifying the data is 'prévisionnel, pas du réalisé' and stating 'Lecture seule', which is consistent with the annotations. It also clarifies the scope: only the financial simulation section, not the full record.

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 compact and well-structured with labeled sections ('Quand', 'Plutôt que', 'Returns'). It front-loads the purpose, then gives routing and return semantics. Every sentence carries useful information.

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 simple read-only fetch by ID, this is complete: it explains what the tool returns, when to use it, how to choose between siblings, and the forecast nature of the data. No output schema exists, but the description sufficiently characterizes the expected result.

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 coverage is 100% and the single id parameter already has a clear type, pattern, and description. The description reinforces that the ID is the opportunity's identifier, but adds no substantial meaning beyond the schema. Baseline 3 is appropriate.

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 names a specific verb and resource: 'Récupère la simulation financière... d'un(e) opportunité, par son ID.' It also identifies the exact content (marge, CA prévisionnel, coûts) and explicitly contrasts itself with boond_opportunities_get and boond_opportunities_search, making sibling differentiation clear.

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?

Provides explicit when-to-use guidance ('pour ne charger que cette section, sans le reste de la fiche') and names precise alternatives with their conditions: boond_opportunities_get for the base record and boond_opportunities_search when the ID is unknown. This is actionable routing information.

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

boond_opportunities_updateModifier un(e) opportunitéA
Idempotent

Met à jour un(e) opportunité existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_opportunities_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de l'opportunité à modifier
nameNoNom / titre
noteNoDescription de l'opportunité (mappée sur /data/attributes/description)
stateNoÉtat de l'opportunité
poleIdNoID du pôle (relation pole)
typeOfNoType d'opportunité : ID numérique du dictionnaire setting.typeOf.project (ex: 1, 3), via boond_application_dictionary
endDateNoDate de fin prévue (YYYY-MM-DD)
agencyIdNoID de l'agence (relation agency)
criteriaNoCritères / compétences recherchées (texte libre). Alimente le matching de boond_workflow_candidats_pour_opportunite.
companyIdNoID de la société cliente (relation company)
contactIdNoID du contact associé (relation contact)
startDateNoDate de début prévue (YYYY-MM-DD ou 'immediate')
hrManagerIdNoID de la ressource responsable RH (relation hrManager)
expertiseAreaNoDomaine d'expertise : ID du dictionnaire setting.expertiseArea (via boond_application_dictionary)
mainManagerIdNoID de la ressource responsable principal / commercial (relation mainManager)
turnoverEstimatedExcludingTaxNoChiffre d'affaires estimé HT (montant)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Les annotations indiquent déjà que l'outil n'est pas en lecture seule et non destructif, mais la description ajoute des détails comportementaux essentiels : mise à jour partielle (seuls les champs fournis sont écrits), remplacement des tableaux au lieu d'une fusion, et la vérification des droits pour éviter un 403. Aucune contradiction avec les annotations.

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?

La description est bien structurée : phrase d'ouverture sur le but, sections 'Quand' et 'Plutôt que', liste à puces pour les comportements, et retour. Elle est concise, sans verbiage, et chaque phrase apporte une information utile.

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?

Pour un outil de mise à jour avec 16 paramètres, la description couvre l'usage, les alternatives, les détails comportementaux clés (partiel, tableaux, droits) et le format de retour. Elle ne manque pas d'informations critiques, surtout que le schéma de sortie existe déjà.

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?

La couverture du schéma est de 100 % (chaque paramètre a une description), donc le niveau de base est 3. La description apporte une valeur supplémentaire en expliquant que seuls les champs fournis sont mis à jour (mise à jour partielle) et en avertissant sur le comportement des tableaux, ce qui clarifie l'interprétation des paramètres au-delà du schéma.

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?

La description indique clairement que l'outil met à jour une opportunité existante via son ID, et elle le distingue explicitement de boond_opportunities_create et boond_find, ce qui évite toute ambiguïté avec les outils frères.

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?

La section 'Quand' précise le cas d'usage (modifier quelques champs d'un enregistrement déjà en base), et 'Plutôt que' nomme les alternatives avec leurs conditions. Elle recommande aussi de vérifier les droits via boond_rights_get avant d'appeler, ce qui guide clairement l'agent.

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

boond_orders_actionsActions liées à un bon de commandeA
Read-onlyIdempotent

Récupère les actions (envois, relances, notes) d'un(e) bon de commande, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_orders_get pour la fiche de base, ou boond_orders_search si l'ID est inconnu.

Returns : Liste des actions rattachées au bon de commande. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and the description adds the nature of the actions ('envois, relances, notes') and states 'Lecture seule' (aligned with annotations). It also discloses the return type (Liste des actions). This adds useful context beyond the annotations without contradicting them.

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 three concise, well-separated sentences: purpose, usage guidance, and return type. No fluff or redundancy; every sentence adds value.

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 simple read-only tool with one parameter and no output schema, the description covers all necessary aspects: what it does, when to use it, what it returns, and read-only nature. Nothing an agent needs 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 coverage is 100% because the single parameter 'id' has a full description ('Identifiant unique de l'entité BoondManager (numérique)'). The tool description adds no extra parameter meaning, so 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?

The description clearly states the tool retrieves actions (envois, relances, notes) of a purchase order by ID. It distinguishes itself from siblings by naming alternative tools (boond_orders_get, boond_orders_search) for different needs, so an agent can tell it apart without opening schemas.

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?

Explicitly says when to use: 'pour ne charger que cette section' and gives precise alternatives: 'Plutôt que: boond_orders_get pour la fiche de base, ou boond_orders_search si l'ID est inconnu.' This leaves no ambiguity about tool selection.

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

boond_orders_createCréer un(e) bon de commandeA

Crée un(e) bon de commande dans BoondManager.

Quand : pour ajouter un(e) bon de commande inexistant(e). Plutôt que : boond_orders_update pour modifier un enregistrement existant, et boond_orders_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires
stateNoÉtat du bon de commande : ID de `boond://dictionary/states/orders`
endDateNoDate de fin couverte (YYYY-MM-DD)
companyIdNoID de la société
orderDateNoDate du bon de commande (YYYY-MM-DD)
projectIdNoID du projet associé
referenceNoRéférence du bon de commande
schedulesNoLignes/échéances de commande
startDateNoDate de début couverte (YYYY-MM-DD)
customerAgreementNoAccord client reçu
amountExcludingTaxNoMontant HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that the call is a real write and non-idempotent: 'deux appels identiques créent deux enregistrements (l'API ne déduplique pas)'. It also warns that relation IDs and state/type IDs must be resolved beforehand via boond://dictionary/*, adding actionable context. This is consistent with annotations, so no contradiction.

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 well-structured and front-loaded: purpose first, then when/rather-than, then key behavioral notes, then returns. Every sentence adds value with no redundancy or 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?

Given the 11 optional parameters and the existence of an output schema, the description covers all essential invocation context: when to create, how to avoid duplicates, the need to resolve dictionary IDs, and the reusable structuredContent.id for chaining. Nothing important is 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?

Schema coverage is 100%, so the baseline is 3. The description goes further by explaining that relation IDs and states/types are BoondManager numeric IDs that must be resolved beforehand (entity searches, boond://dictionary/*), which adds meaning that applies across parameters like state, companyId, and projectId.

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 clearly states 'Crée un bon de commande dans BoondManager' (creates a purchase order in BoondManager), specifying the exact verb and resource. It also differentiates the tool from siblings by naming boond_orders_update and boond_orders_search as alternatives.

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 states when to use this tool ('pour ajouter un bon de commande inexistant') and when not to, directing users to boond_orders_update for existing records and boond_orders_search for duplicate checks. This is precise and leaves no ambiguity.

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

boond_orders_deleteSupprimer un bon de commandeA
Destructive

Supprime définitivement un(e) bon de commande de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_orders_get. Plutôt que : boond_orders_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true), the description discloses irreversibility ('Irréversible, sans corbeille côté API'), the elicitation-dependent confirmation behavior with a defined refusal outcome (deleted: false + reason), and the direct-deletion path when elicitation is unsupported. Annotations and description are consistent, so no contradiction.

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 front-loaded with the core deletion statement, then uses clear structural markers ('Quand:', 'Plutôt que:', bullets, 'Returns:') so each section is scannable. Every sentence earns its place — rights check, irreversibility, confirmation behavior, and return-field warning all add distinct value. Slightly dense but well-organized.

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 destructive mutation tool, the description is remarkably complete: it covers prerequisites (ID verification, rights check), alternatives, irreversibility, client-capability-dependent confirmation flow, and return-value semantics (check deleted for false on refusal). Combined with a single fully-documented parameter and an output schema, nothing an agent needs to invoke safely 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 coverage is 100% — the single id parameter is fully documented in the schema with its type, pattern, and meaning. The description adds no new parameter-level semantics beyond advising ID verification via boond_orders_get, which is a usage hint rather than parameter documentation. Baseline 3 is appropriate.

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: 'Supprime définitivement un(e) bon de commande de BoondManager' — a permanent deletion of a purchase order. It further distinguishes itself from boond_orders_update, which deactivates/changes state without destroying, so an agent can tell exactly which sibling to pick.

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 when-to-use guidance: 'uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_orders_get'. It names the alternative (boond_orders_update) and states why it is almost always the real intent, and points to boond_rights_get as a pre-flight rights check to avoid a 403. This is exemplary routing guidance.

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

boond_orders_getDétails d'un(e) bon de commandeA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) bon de commande par son ID numérique.

Quand : après un boond_orders_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_orders_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_orders_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive nature. The description adds value by disclosing that an unknown ID returns the raw BoondManager error, and that the return is JSON with attributes and relationships. This goes beyond the annotation-provided safety profile.

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 concise and well-structured with clear sections ('Quand', 'Plutôt que', 'Returns'). The primary purpose is front-loaded, and every sentence contributes meaning without redundancy.

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 simple get-by-ID tool with robust annotations, the description covers when to use, alternative tools, error behavior, and return structure. Nothing an agent needs 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (id is described with pattern). The description adds critical usage semantics: the ID must originate from boond_orders_search, not guessed, and the tool rejects name input. This contextualizes the parameter beyond its type definition.

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 states a specific verb ('Récupère'), resource ('bon de commande'), and method ('par son ID numérique'), clearly distinguishing it from the sibling search tool. It also explicitly says this tool does not accept a name, reinforcing its unique scope.

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?

Provides explicit usage conditions: use after boond_orders_search to get full details, and contrasts with boond_orders_search when the ID is unknown. It also warns that the ID must come from search, never from a guess, giving clear direction on when to invoke this tool versus alternatives.

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

boond_orders_informationInformations complètes d'un bon de commandeA
Read-onlyIdempotent

Récupère les informations complètes (période, conditions de paiement, références acheteur, prestations et projet liés) d'un(e) bon de commande, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_orders_get pour la fiche de base, ou boond_orders_search si l'ID est inconnu.

Returns : Fiche complète du bon de commande (relations société, contact, projet, prestations incluses). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description reinforces them with 'Lecture seule' and 'Récupère'. Beyond the annotations, it discloses the return shape ('Fiche complète du bon de commande (relations société, contact, projet, prestations incluses)'), which helps an agent understand what the call yields. No contradiction with annotations.

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 compact and front-loaded: the first sentence states the action and scope, and the 'Quand', 'Plutôt que', and 'Returns' labels make the routing and output expectations scannable. Every sentence contributes distinct value with minimal redundancy.

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 single-parameter, read-only fetch with no output schema, the description is complete: it states the input, when to use it, which siblings to use instead, and what the return contains. An agent can select and invoke the tool correctly without additional context.

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?

The single id parameter is already fully documented in the schema with type, pattern, and a French description, and schema coverage is 100%. The description only repeats that retrieval is 'par son ID', adding no new semantic detail beyond the schema.

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: 'Récupère les informations complètes ... d'un(e) bon de commande, par son ID', and enumerates the exact sections (période, conditions de paiement, références acheteur, prestations et projet). It also distinguishes itself from the sibling tools by naming boond_orders_get and boond_orders_search and the conditions under which each is preferred.

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?

Usage guidance is explicit and structured with 'Quand' and 'Plutôt que': use it to load only this section without the rest of the fiche, prefer boond_orders_get for the base fiche, and boond_orders_search when the ID is unknown. This gives an agent clear selection criteria among sibling tools.

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

boond_orders_invoicesFactures d'un bon de commandeA
Read-onlyIdempotent

Récupère les factures émises (référence, période, état, montants HT/TTC) d'un(e) bon de commande, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_orders_get pour la fiche de base, ou boond_orders_search si l'ID est inconnu.

  • C'est l'entrée de la préparation de facturation : deltaInvoicedExcludingTax > 0 signifie qu'il reste à facturer sur la commande.

Returns : Liste des factures rattachées au bon de commande, précédée des totaux calculés par BoondManager : commandé HT, facturé HT/TTC, reste à facturer (deltaInvoicedExcludingTax) et répartition par état. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false; the description adds no contradiction and reinforces read-only. It adds useful behavior: the response is a list preceded by computed totals, and explains the deltaInvoicedExcludingTax > 0 meaning. No pagination or error details, but the safety profile is covered by annotations.

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?

Well-structured with front-loaded purpose, then Quand/Plutôt que, a delta note, and Returns. Only minor redundancy is 'Lecture seule', which duplicates the readOnlyHint annotation.

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 single-parameter read-only tool with no output schema, the description is complete: it states what is returned, the totals included, and the delta semantics. It also provides routing guidance. No critical missing information for invocation.

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 covers 100% of the single parameter with type, pattern, and description. The description only repeats 'par son ID' and doesn't add format or source details beyond the schema, so 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 specific verb ('Récupère'), resource ('factures ... d'un bon de commande'), identifier ('par son ID'), and key fields. It explicitly distinguishes itself from boond_orders_get and boond_orders_search, so an agent can select it correctly.

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?

Provides explicit 'Quand' (load only this section without the rest of the record) and 'Plutôt que' alternatives: boond_orders_get for the base record, boond_orders_search when the ID is unknown. Also orients the agent to invoicing preparation with deltaInvoicedExcludingTax.

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

boond_orders_updateModifier un(e) bon de commandeA
Idempotent

Met à jour un(e) bon de commande existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_orders_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du bon de commande à modifier
noteNoNotes
stateNoÉtat du bon de commande : ID de `boond://dictionary/states/orders`
endDateNoDate de fin couverte (YYYY-MM-DD)
orderDateNoDate (YYYY-MM-DD)
referenceNoRéférence
schedulesNoLignes/échéances de commande
startDateNoDate de début couverte (YYYY-MM-DD)
customerAgreementNoAccord client reçu
amountExcludingTaxNoMontant HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate a write operation (readOnlyHint=false) and idempotency (idempotentHint=true). The description goes beyond by disclosing partial update behavior (only provided fields are written), that array fields are replaced rather than merged, and advising a rights check to prevent 403s. This adds significant behavioral context beyond the structured fields.

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 well-structured with a clear purpose statement, a 'Quand' section for usage, bullet points for key behaviors, and a returns note. It is front-loaded with the essential action and efficiently organized; every sentence adds value without redundancy.

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 10 parameters and a required ID, the description covers purpose, usage, behavior (partial update, array replacement), and returns. An output schema is present, so return details are handled. The guidance on rights checking and distinction from create makes it complete for correct invocation. No critical information is 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?

Schema coverage is 100% with descriptions for all parameters, so baseline is 3. The description adds meaning by explaining partial update semantics—only provided fields are modified—which clarifies how optional parameters behave. It also warns that array fields (like schedules) are replaced, adding nuance not in the schema. This slightly exceeds the baseline.

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 clearly states the tool updates an existing purchase order identified by ID, using the verb 'Met à jour' with a specific resource. It distinguishes itself from boond_orders_create by explicitly saying to use create when the record doesn't exist, and the update semantics (partial update) differentiate it from read-only siblings.

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 provides explicit when-to-use guidance ('pour modifier quelques champs d'un enregistrement déjà en base') and contrasts with boond_orders_create for non-existing records. It also recommends using boond_rights_get to verify permissions before attempting, avoiding a 403 error—clear usage context and exclusion criteria.

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

boond_payments_createCréer un paiementA

Enregistre un paiement / règlement fournisseur adossé à un achat.

Quand : pour solder tout ou partie d'un achat existant. Plutôt que : boond_purchases_create si l'achat lui-même n'existe pas encore — un paiement ne peut pas être orphelin.

  • L'API /payments exige une relation purchase : sans ID d'achat valide, l'appel est refusé.

  • Écriture non idempotente : deux appels identiques enregistrent deux règlements.

Returns : confirmation et fiche du paiement créé, avec son ID dans structuredContent.id.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNote interne, mappée vers informationComments
stateNoÉtat du paiement : ID de `boond://dictionary/states/payments`
amountNoMontant HT du paiement, mappé vers amountExcludingTax
endDateNoDate de fin couverte (YYYY-MM-DD)
taxRatesNoTaux de taxes Boond
referenceNoRéférence bancaire ou règlement
startDateNoDate de début couverte (YYYY-MM-DD)
purchaseIdYesID de l'achat réglé
paymentDateNoDate du paiement (YYYY-MM-DD), mappée vers date
expectedDateNoDate de paiement attendu (YYYY-MM-DD)
paymentMethodNoMode de paiement : ID de `boond://dictionary/paymentMethods`
performedDateNoDate de paiement effectif (YYYY-MM-DD)
amountExcludingTaxNoMontant HT du paiement

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description explicitly discloses that the API requires a purchase relation and that the operation is non-idempotent ('deux appels identiques enregistrent deux règlements'). This adds meaningful behavioral context that an agent needs to avoid duplicate payments, and it aligns with the idempotentHint=false annotation.

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 well-structured with clear sections: purpose, when to use, alternative, key behavioral warnings, and return value. Every sentence adds value, and the most important constraints are front-loaded. It is concise without sacrificing critical information.

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 the tool's 13 parameters, full schema coverage, output schema, and annotations, the description covers the essential contextual gaps: when to use it, what not to confuse it with, the mandatory purchase relation, non-idempotency, and where to find the created payment's ID. Nothing critical is missing for an agent to invoke it correctly.

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 the schema already documents all 13 parameters. The description reinforces the critical role of purchaseId but does not add parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

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: 'Enregistre un paiement / règlement fournisseur adossé à un achat.' It clearly distinguishes itself from boond_purchases_create by stating that a payment must be attached to an existing purchase. This makes the tool's purpose unambiguous even among many sibling tools.

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 provides explicit when-to-use guidance ('pour solder tout ou partie d'un achat existant') and explicitly names the alternative tool with the condition for choosing it ('Plutôt que boond_purchases_create si l'achat lui-même n'existe pas encore'). It also states the hard requirement for a valid purchaseId, leaving no ambiguity about prerequisites.

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

boond_payments_deleteSupprimer un(e) paiementA
Destructive

Supprime définitivement un(e) paiement de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_payments_get. Plutôt que : boond_payments_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses irreversibility with no trash, the conditional elicitation/confirmation behavior, the refusal return shape, and the 403-avoidance strategy. These are meaningful behavioral details that an agent needs for a destructive call and are not present in the annotations alone.

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 longer than average, but every section earns its place for a destructive operation: purpose, explicit conditions, alternatives, safety checks, confirmation behavior, and return value are clearly labeled and front-loaded. The bullet format and Returns line make the information easy 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 the tool's destructive nature, the description is complete: it covers prerequisites, alternatives, rights checking, irreversible consequences, client-capability-dependent confirmation, and the exact response shape. The output schema exists, yet the description still explains how to interpret `deleted`, which fully equips an agent to invoke and handle the tool correctly.

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 coverage is 100%, since the single required `id` parameter is documented in the schema with type and pattern. The description adds the operational hint to verify the ID with boond_payments_get first, but it does not substantially extend the parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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 states a specific verb and resource: 'Supprime définitivement un(e) paiement de BoondManager'. It clearly identifies the operation as destructive deletion and distinguishes it from boond_payments_update, making the purpose unambiguous among the many payment-related sibling tools.

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 provides explicit when-to-use guidance: only on explicit user request and after verifying the ID with boond_payments_get. It also names the alternative boond_payments_update for non-destructive state changes and recommends checking rights with boond_rights_get, which is strong actionable routing.

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

boond_payments_getDétails d'un(e) paiementA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) paiement par son ID numérique.

Quand : après un boond_payments_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_payments_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_payments_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, so the description need not repeat those. It adds useful context: that unknown IDs propagate the BoondManager error as-is, that the return is the full JSON entity (attributes + relations), and that the operation is read-only. This goes beyond the annotations.

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 compact, front-loaded with the core purpose, then structured usage guidance (Quand, Plutôt que), a warning bullet, and a returns note. Every sentence adds value with no redundancy, achieving high information density.

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 simple get-by-id tool with one parameter, annotations covering safety, and no output schema, the description is complete. It covers when to use, how to obtain the ID, error behavior, and return format. Nothing essential is 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?

The schema already provides 100% coverage for the single 'id' parameter with a description. The description adds critical semantic guidance: the ID must come from boond_payments_search, never be guessed, and that the tool only accepts numeric IDs. This enriches the schema's basic definition.

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 clearly states the tool retrieves the complete record of a payment by its numeric ID, and explicitly contrasts with the search tool that returns list summaries. It names the specific resource and operation, distinguishing it from siblings like boond_payments_search.

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 guidance on when to use (after a search to get full attributes) and when not to use (if ID is unknown, use search instead). It also warns that the ID must come from search, not guesswork, providing clear alternatives and constraints.

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

boond_payments_updateModifier un(e) paiementA
Idempotent

Met à jour un(e) paiement existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_payments_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du paiement à modifier
noteNoNote interne, mappée vers informationComments
stateNoÉtat du paiement : ID de `boond://dictionary/states/payments`
amountNoMontant HT, mappé vers amountExcludingTax
endDateNoDate de fin couverte (YYYY-MM-DD)
taxRatesNoTaux de taxes Boond
referenceNoRéférence bancaire ou règlement (`number`)
startDateNoDate de début couverte (YYYY-MM-DD)
paymentDateNoDate du paiement (YYYY-MM-DD), mappée vers date
expectedDateNoDate de paiement attendu (YYYY-MM-DD)
paymentMethodNoMode de paiement : ID de `boond://dictionary/paymentMethods`
performedDateNoDate de paiement effectif (YYYY-MM-DD) — régulariser un règlement
amountExcludingTaxNoMontant HT
amountIncludingTaxNoMontant TTC

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-destructive, idempotent mutation. The description adds meaningful behavior beyond that: partial update semantics (only provided fields written), array fields are replaced not merged, and the suggestion to pre-check rights via 'boond_rights_get'. It does not contradict any annotation and provides useful operational context.

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 tight and well-structured, with a clear opening, a 'Quand'/'Plutôt que' pair, and bullet points for key behaviors. Every sentence serves a purpose, and the most important information (update an existing payment) is front-loaded. No redundant content.

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 14 parameters, output schema, and annotations, the description covers the essential operational aspects: when to use, partial update behavior, array handling, permission pre-check, and return value. It is sufficient for an agent to call this tool correctly without additional context.

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?

The input schema already provides 100% coverage with per-parameter descriptions, so the baseline is 3. The description adds general semantics about partial updates and array replacement, but does not deepen understanding of any specific parameter beyond what the schema states. No extra parameter-specific meaning is added.

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: 'Met à jour un(e) paiement existant(e)' (updates an existing payment), and clearly distinguishes itself from the create tool by stating when to use each. The purpose is unambiguous and leaves no doubt about what the tool does.

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?

It explicitly states when to use this tool ('pour modifier quelques champs d'un enregistrement déjà en base') and contrasts it with the alternative 'boond_payments_create' when the record doesn't exist. It also recommends checking 'boond_rights_get' to avoid 403 errors, giving the agent actionable routing guidance.

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

boond_poles_getDétails d'un(e) pôleA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) pôle par son ID numérique.

Quand : après un boond_poles_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_poles_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_poles_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it states that an unknown ID returns the raw BoondManager error, and that the tool returns the entity JSON as sent by the API. It also explicitly labels the operation as read-only, reinforcing the annotations without contradicting them.

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 compact and well-structured: a one-sentence purpose, a 'Quand' section for usage, a 'Plutôt que' section for alternatives, a warning about invalid IDs, and a brief return note. Every sentence earns its place, and the most important routing information is front-loaded.

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 a simple single-parameter read tool with no output schema, the description covers the essential context: when to use it, what it returns, and how to handle errors. The only minor gap is that it doesn't describe the structure of the returned JSON in detail, but since the API response is the source of truth and the tool is a straightforward getter, this is not a significant omission.

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 the schema already documents the single 'id' parameter as a numeric identifier. The description adds the important constraint that the ID must come from boond_poles_search and not be guessed, which is useful, but it doesn't add much beyond that. Baseline 3 is appropriate since the schema carries the parameter documentation burden.

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 clearly states the tool retrieves the complete record ('fiche complète') of a 'pôle' by its numeric ID, using a specific verb ('Récupère') and resource. It also distinguishes itself from the sibling search tool by explaining it provides attributes not present in the list summary, which is essential for differentiating among the many boond_*_get/search pairs.

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 says when to use it ('après un boond_poles_search') and when not to ('Plutôt que : boond_poles_search si l'ID n'est pas connu'), and even warns that the ID must come from the search tool, not a guess. This is clear, actionable routing guidance that leaves no ambiguity.

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

boond_positionings_createCréer un positionnementA

Crée un positionnement : place un candidat ou une ressource sur une opportunité ou un projet.

Quand : pour matérialiser une proposition de profil au client. Plutôt que : boond_positionings_update pour faire avancer l'état d'un positionnement existant (proposé → retenu → refusé) plutôt que d'en créer un second.

  • Écriture non idempotente : rien n'empêche deux positionnements du même profil sur la même affaire.

  • L'état est un ID entier du dictionnaire (boond://dictionary/states/positionings), pas un libellé.

Returns : confirmation et fiche du positionnement créé.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires
stateNoÉtat du positionnement : ID de `boond://dictionary/states/positionings` (`won` rattache le positionnement à un projet)
endDateNoDate de fin (YYYY-MM-DD)
projectIdNoID du projet
startDateNoDate de début (YYYY-MM-DD)
resourceIdNoID de la ressource positionnée
candidateIdNoID du candidat positionné
opportunityIdNoID de l'opportunité

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already signal non-idempotence, but the description enriches this with a concrete consequence: 'rien n'empêche deux positionnements du même profil sur la même affaire.' It also clarifies that state is a dictionary ID integer rather than a label, and it specifies what the tool returns. This adds useful behavioral context beyond the structured annotations.

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 compact, front-loaded with the core purpose, and then organized into clearly labeled sections: 'Quand,' 'Plutôt que,' bullets, and 'Returns.' Each sentence contributes distinct information, and there is no filler or repetition of the tool title.

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?

The description covers the tool's purpose, trigger, sibling distinction, non-idempotence warning, dictionary-state constraint, and return value. With full schema parameter coverage, this is nearly complete. The only minor gap is that it does not explicitly state which of the optional ID parameters are expected to be present, though the 'candidat ou ressource / opportunité ou projet' wording strongly implies the required alternatives.

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 each parameter is already documented. The description adds value by grouping the parameters semantically: 'un candidat ou une ressource' and 'une opportunité ou un projet,' which clarifies the alternative candidateId/resourceId and opportunityId/projectId relationships not made explicit in the schema. The state-ID-as-dictionary-integer point is also reinforced, though largely already present in the schema.

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 un positionnement : place un candidat ou une ressource sur une opportunité ou un projet.' It also explicitly names the sibling tool boond_positionings_update and distinguishes creation from advancing an existing positioning's state. An agent can immediately understand what this tool does and how it differs from related positionings tools.

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 'Quand' section gives the concrete trigger: 'pour matérialiser une proposition de profil au client.' The 'Plutôt que' section explicitly tells the agent to use boond_positionings_update for state advancement instead of creating a second positioning. This is clear, actionable guidance with an explicit alternative.

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

boond_positionings_deleteSupprimer un positionnementA
Destructive

Supprime définitivement un(e) positionnement de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_positionings_get. Plutôt que : boond_positionings_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark destructiveHint true, but the description adds irreversibility, no trash on the API side, the confirmation flow when the MCP client supports elicitation, and the resulting deleted:false + reason payload. This is crucial behavioral context beyond annotations.

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?

Well-structured with bullet points and sections. Purpose and usage are front-loaded, every sentence adds value: when, alternative, rights check, irreversibility, confirmation behavior, and return format. No redundancy.

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?

Comprehensive: covers prerequisites (ID verification, rights check), alternatives, side effects (irreversible, no trash), cancellation behavior, and return format. With the output schema present, nothing an agent needs to call 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 already documents id with pattern and description, and coverage is 100%. The description reinforces verifying the ID before deletion, but doesn't add parameter-specific semantics beyond the schema. Baseline 3 is appropriate.

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 the specific action: permanently deletes a BoondManager positioning. Clearly differentiates from update by saying 'Plutôt que : boond_positionings_update pour désactiver ou changer l'état d'un enregistrement sans le détruire', which names the sibling and the key distinction.

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?

Explicitly states when to use: only on explicit user request and after verifying the ID with boond_positionings_get. Names the alternative (boond_positionings_update) and explains why update is usually the real intent. Also mentions checking rights via boond_rights_get to avoid 403.

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

boond_positionings_getDétails d'un positionnementA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) positionnement par son ID numérique.

Quand : après un boond_positionings_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_positionings_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_positionings_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, and non-destructive hints. The description adds meaningful behavioral advice: unknown IDs surface the BoondManager error as is, so the ID must be sourced from search and never guessed. It also specifies the return shape as JSON attributes + relations, which goes beyond the structural annotations and helps the agent understand the response even without a formal output schema.

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 definition begins with a lead purpose sentence, then moves to usage guidance, then to input constraint, and ends with the return description. Every part contributes value. Minor redundancy: the final 'Lecture seule' repeats the annotation's readOnlyHint, which is not necessary but costs no harm. The structure also uses French labels in a natural way for front-loaded clarity.

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 single-parameter, read-only getter, the description is complete: it gives the call context (after search), the ID source, the error scenario, and the return type. No output schema exists, so the description's statement of 'JSON de l'entité' fills that gap. There is nothing an agent needs to know about correct invocation that is 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?

The schema already documents the id parameter fully (pattern, type, description at 100% coverage). The description elevates this with contextual semantics: the ID is not merely any fee but comes from boond_positionings_search, and the tool refuses name-based lookups. This adds actionable knowledge beyond the schema fields.

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 states a clear verb (Récupère), a specific resource (la fiche complète d'un positionnement), and the attribute ID (par son ID numérique). It differentiates itself from its sibling search tool by explicitly noting it provides attributes not in the list summary, making it unambiguous against boond_positionings_search, create, update, and delete.

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?

It explicitly describes when to use the tool: after a boond_positionings_search when full attributes are needed. It names the alternative (`boond_positionings_search`) and states the condition for choosing that alternative (if the ID is not known). It also warns that this tool does not accept a name, giving clear selection guidance.

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

boond_positionings_updateModifier un positionnementA
Idempotent

Met à jour un positionnement existant dans BoondManager (PUT /positionings/{id}). Seuls les champs fournis sont modifiés ; stateReasonTypeOf / stateReasonDetail sont repliés en stateReason: { typeOf, detail }.

Quand : pour faire avancer l'état d'un positionnement (proposé → retenu → refusé). Plutôt que : boond_positionings_create si le positionnement n'existe pas encore.

Returns: Données mises à jour du positionnement.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du positionnement à modifier
stateNoÉtat du positionnement : ID numérique de `boond://dictionary/states/positionings`
endDateNoDate de fin (YYYY-MM-DD, ou chaîne vide pour effacer)
startDateNoDate de début (YYYY-MM-DD, ou chaîne vide pour effacer)
stateReasonDetailNoMotif d'état : détail libre (stateReason.detail)
stateReasonTypeOfNoMotif d'état : ID numérique du type de motif (stateReason.typeOf)
informationCommentsNoCommentaires (max 250 caractères)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description adds valuable behavioral details: partial-update semantics ('Seuls les champs fournis sont modifiés') and the flattening of stateReasonTypeOf/stateReasonDetail into a nested stateReason object. It doesn't contradict the annotations and meaningfully expands on what the structured data alone would convey.

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 four sentences, each earning its place: main action, partial-update behavior, when/alternative usage, and return value. While it's slightly more verbose than strictly necessary, the structure is front-loaded and scannable, with no filler or redundancy.

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 a 7-parameter update tool with an output schema and annotations, the description covers the endpoint, when to use it, the alternative, the partial-update behavior, and the return value. It doesn't mention error conditions or idempotency implications, but these are secondary given the schema and annotations already present.

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 100% schema description coverage, the baseline is 3. The description adds cross-parameter semantics by explicitly explaining how stateReasonTypeOf and stateReasonDetail combine into a single nested stateReason object, and it reinforces that only provided fields are modified, which clarifies how optional parameters behave in an update context.

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 ('Met à jour un positionnement existant') and includes the exact endpoint, making the tool's purpose unambiguous. It further distinguishes itself from the sibling boond_positionings_create by explicitly naming the alternative, so an agent can tell them apart without inspecting schemas.

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 provides clear 'Quand' conditions (advancing a positioning's state through proposed → retained → refused) and explicit 'Plutôt que' guidance to use boond_positionings_create when the positioning doesn't exist yet. This gives both when-to-use and when-not-to-use instructions, which is ideal.

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

boond_products_createCréer un(e) produitA

Crée un(e) produit dans BoondManager.

Quand : pour ajouter un(e) produit inexistant(e). Plutôt que : boond_products_update pour modifier un enregistrement existant, et boond_products_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNom du produit
noteNoDescription du produit
stateNoÉtat du produit
taxRateNoTaux de TVA (%)
referenceNoRéférence du produit
unitPriceNoPrix unitaire HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already communicate readOnlyHint=false and idempotentHint=false, but the description adds real behavioral value by warning that two identical calls create two records because the API does not deduplicate. It also discloses that relationship/state IDs must be pre-resolved to numeric BoondManager IDs, which is useful operational context beyond the annotations.

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 compact, front-loaded with purpose, and uses clear structural markers ('Quand', 'Plutôt que', bullets, 'Returns'). Every sentence serves a distinct purpose: usage routing, non-idempotence warning, ID-resolution guidance, and return-value chaining. There is 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?

For a create tool with an output schema and 100% parameter schema coverage, the description covers all critical context: what it creates, when to call it, what to call instead, side effects, parameter ID semantics, and how to use the returned ID for chaining. Nothing essential for correct invocation is 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?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful extra semantics by explaining that states/types are numeric BoondManager IDs to be resolved beforehand via entity searches or boond://dictionary/*. This clarifies how to correctly populate the state parameter beyond the schema's simple 'État du produit' label.

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 un(e) produit dans BoondManager.' It also explicitly contrasts itself with boond_products_update and boond_products_search, so an agent can immediately tell this tool creates a new product rather than modifying or finding one.

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 clearly states when to use it ('pour ajouter un(e) produit inexistant(e)') and provides explicit exclusions: use boond_products_update for existing records and boond_products_search first to verify the product does not already exist. This is concrete routing guidance with no ambiguity.

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

boond_products_deleteSupprimer un(e) produitA
Destructive

Supprime définitivement un(e) produit de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_products_get. Plutôt que : boond_products_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that deletion is irreversible with no API-side trash, that a confirmation may be elicited depending on client capability, and that a user refusal returns deleted: false with a reason. This adds substantial behavioral context beyond the destructiveHint annotation.

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 structured with clear sections and bullets, front-loads the core purpose, and every sentence adds operational value. It is longer than average but justified by the destructive nature and confirmation flow.

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 destructive single-parameter tool, the description covers when to use it, how to verify the ID, how to avoid 403s, irreversibility, confirmation behavior, and the exact return shape. Nothing an agent needs to invoke 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?

The schema already fully documents the single id parameter with type, pattern, required status, and a description. The tool description adds no additional parameter-level semantics, but none are needed given 100% schema coverage.

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: 'Supprime définitivement un(e) produit de BoondManager.' It clearly distinguishes deletion from the sibling update tool by emphasizing 'définitivement' and by naming boond_products_update as the non-destructive alternative.

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 'Quand' section explicitly limits use to explicit user requests after verifying the ID with boond_products_get. The 'Plutôt que' section names boond_products_update as the preferred alternative for deactivation, and boond_rights_get is recommended as a prerequisite check. This is explicit when/when-not guidance.

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

boond_products_getDétails d'un(e) produitA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) produit par son ID numérique.

Quand : après un boond_products_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_products_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_products_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint false), the description discloses that omitting tab returns only the base fiche, not a union of tabs, and that an unknown ID surfaces the raw BoondManager error. It also explicitly states 'Lecture seule', consistent with the annotations.

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 well structured with a core one-liner, labeled 'Quand' and 'Plutôt que' sections, bullets for parameter behavior, and a short Returns note. Every sentence adds value, and the most important routing information is front-loaded.

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 get-by-id tool with no output schema, it covers what the tool returns (entity JSON with attributes and relations), how to obtain a valid id, what happens on unknown ids, and the optional tab behavior. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds meaningful semantics on top: tab selects a specific tab with examples and a default-behavior caveat, and id is constrained to IDs obtained from search rather than guessed. This materially helps an agent pass correct values.

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: 'Récupère la fiche complète d'un produit par son ID numérique.' It clearly differentiates this get-detail tool from boond_products_search by noting it fetches attributes absent from the list summary and only accepts an ID, not a name.

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?

It explicitly states when to use the tool ('après un boond_products_search') and when not to ('Plutôt que : boond_products_search si l'ID n'est pas connu'), naming the alternative and the condition that selects it. The tab guidance also clarifies optional usage.

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

boond_products_updateModifier un(e) produitA
Idempotent

Met à jour un(e) produit existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_products_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du produit à modifier
nameNoNom du produit
noteNoDescription
stateNoÉtat
taxRateNoTaux de TVA (%)
referenceNoRéférence
unitPriceNoPrix unitaire HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses partial-update semantics, array-field replacement behavior, and a rights-check strategy using boond_rights_get to avoid 403s. It also states the return value. Nothing contradicts the readOnlyHint=false, destructiveHint=false, or idempotentHint=true annotations.

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 compact and well-structured: purpose, usage context, behavioral caveats, and return value each get a short, scannable block. Every sentence adds operational value without 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?

For an update tool with 7 parameters and an output schema, the description covers everything needed to call it correctly: identification by ID, when to choose it, partial-update caveats, a permission pre-check suggestion, and the response shape. The output schema supplies the detailed response structure, so no additional return documentation is needed.

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?

The input schema already documents all 7 parameters, so the baseline is 3. The description adds useful cross-cutting parameter behavior: only supplied fields are written, and array-type fields are replaced rather than merged, which goes beyond the schema's per-field 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 specific verb-object statement, 'Met à jour un(e) produit existant(e), identifié(e) par son ID', making the resource and action unmistakable. It also distinguishes itself from boond_products_create by explicitly saying that create is for records that do not exist yet.

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 provides an explicit 'Quand' condition ('modifier quelques champs d'un enregistrement déjà en base') and an explicit alternative ('Plutôt que boond_products_create si l'enregistrement n'existe pas encore'). This gives an agent clear when-to-use and when-not-to-use guidance.

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

boond_projects_actionsActions liées à un projetA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Liste des actions rattachées au projet. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the note 'Lecture seule' (redundant with annotations) and mentions the return type ('Liste des actions rattachées au projet'), but provides no further behavioral details such as pagination or error handling. Given the annotations carry the main burden, this is an adequate but minimal addition.

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 compact, with three short sections (purpose, when, returns) that front-load the primary action and then provide routing guidance. There is no fluff, and every sentence earns its place, making it easy for an agent to parse quickly.

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 simple retrieval tool with a single parameter and no output schema, the description covers everything needed: what it returns, when to use it, and how it differs from siblings. The annotations already handle safety, so no critical information is missing for correct invocation.

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?

The schema fully documents the single required parameter 'id' with a clear description ('Identifiant unique de l'entité BoondManager (numérique)') and a pattern. The description only repeats 'par son ID' without adding any deeper meaning, so it stays at the baseline 3 for 100% schema coverage.

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 clearly states the verb 'Récupère' (retrieves), the resource 'actions (appels, emails, RDV, notes) d'un(e) projet', and the scope 'par son ID'. It explicitly differentiates from sibling tools by naming boond_projects_get and boond_projects_search as alternatives with different roles, making the purpose unambiguous.

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 includes a 'Quand' clause specifying the exact scenario ('pour ne charger que cette section, sans le reste de la fiche') and a 'Plutôt que' clause naming two alternative tools with conditions for their use. This gives clear when-to-use and when-not-to-use guidance, leaving nothing to inference.

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

boond_projects_createCréer un(e) projetA

Crée un(e) projet dans BoondManager.

Quand : pour ajouter un(e) projet inexistant(e). Plutôt que : boond_projects_update pour modifier un enregistrement existant, et boond_projects_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNom du projet / mission
noteNoNotes / description du projet
stateNoÉtat du projet (0=en cours, 1=terminé, 2=archivé...)
typeOfNoType de projet (ID du dictionnaire setting.typeOf.project)
endDateNoDate de fin (YYYY-MM-DD)
companyIdNoID de la société cliente
contactIdNoID du contact associé
startDateNoDate de début (YYYY-MM-DD)
opportunityIdNoID de l'opportunité liée

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (idempotentHint=false), the description explicitly states 'Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).' It also discloses that relation IDs and states/types are numeric BoondManager IDs requiring resolution, and mentions the return confirmation and reusable structuredContent.id. These add significant behavioral context not present in the annotations.

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 concise and well-structured with a clear lead sentence, a 'Quand' section, a 'Plutôt que' section, bullet points for key behaviors, and a return note. It is front-loaded with the core purpose and contains no redundant information.

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 9-parameter creation tool, the description covers the essential context: when to use it, alternatives, non-idempotency, ID resolution requirements, and what the response contains. Since an output schema exists, the description appropriately references structuredContent.id rather than detailing the full return shape. No critical information for correct invocation is 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?

Schema coverage is 100% (all 9 parameters have descriptions). The description adds a critical note that 'Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable,' which applies to parameters like state, typeOf, companyId, contactId, and opportunityId. This clarifies the nature of these values beyond the schema. It doesn't detail each parameter, but the schema already does, so a 4 is appropriate.

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 clearly states 'Crée un(e) projet dans BoondManager' — a specific verb and resource. It distinguishes itself from siblings by explicitly naming boond_projects_update and boond_projects_search as alternatives, making the purpose unambiguous.

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 provides explicit when-to-use guidance: 'Quand : pour ajouter un(e) projet inexistant(e)' and when-not-to: 'Plutôt que : boond_projects_update pour modifier un enregistrement existant, et boond_projects_search d'abord pour vérifier qu'il n'existe pas déjà.' This fully addresses the decision of when to call this tool versus alternatives.

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

boond_projects_deleteSupprimer un(e) projetA
Destructive

Supprime définitivement un(e) projet de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_projects_get. Plutôt que : boond_projects_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses irreversibility ('Irréversible, sans corbeille côté API'), the conditional confirmation behavior based on the MCP client's elicitation capability, and the exact return contract ({ id, deleted, reason? }). This goes well beyond the annotations (destructiveHint=true) by explaining the user-refusal path and the deleted:false outcome.

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 well-structured with clear sections (Quand, Plutôt que, pre-check, warning, return contract). Every sentence earns its place, and the most critical information (irreversibility, confirmation behavior) is front-loaded.

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 destructive single-parameter tool, the description covers all necessary context: when to use, what to check first, how to avoid 403s, what the confirmation flow is, and what the return value means. The output schema exists, so return values are already structured, and the description adds the semantic meaning of deleted:false.

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?

The schema already covers the single parameter (id) with a pattern and description, so the baseline is 3. The description adds value by specifying that the ID must be verified beforehand via boond_projects_get, which gives the agent a concrete pre-condition for using the parameter 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 states a specific verb ('Supprime définitivement') and resource ('un(e) projet de BoondManager'), making the action unambiguous. It also distinguishes itself from boond_projects_update, which is the key sibling alternative.

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 says when to use it ('uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_projects_get') and when not to ('Plutôt que : boond_projects_update pour désactiver ou changer l'état'). It also references boond_rights_get as a pre-check to avoid 403 errors.

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

boond_projects_deliveries_groupmentsLivraisons et groupements d'un projetA
Read-onlyIdempotent

Récupère les livraisons et leurs groupements (lignes de mission facturables du projet) d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Liste des livraisons du projet. Les ID de livraison qui s'y trouvent sont ceux qu'exige une ligne de note de frais. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context by noting the returned delivery IDs are those required for an expense report line, and explicitly states 'Lecture seule'. It doesn't contradict annotations.

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 concise and well-structured, with the core purpose front-loaded, followed by usage guidance and return value context. Every sentence adds value without redundancy.

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 a simple read-only tool with one parameter and full schema coverage, the description is nearly complete. It explains the return value's purpose (delivery IDs for expense report lines) and the read-only nature. Minor gap: it doesn't describe the exact structure of the returned groupings, but this is acceptable given no output schema and the tool's simplicity.

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 coverage is 100%, so the single 'id' parameter is already fully documented in the schema. The description adds that the ID is the project's ID, which is helpful but not essential beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool retrieves deliveries and their groupings for a project by ID, with a specific verb and resource. It also distinguishes itself from sibling tools by naming boond_projects_get and boond_projects_search as alternatives, making its purpose unambiguous.

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 says when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and contrasts it with boond_projects_get for the base record and boond_projects_search when the ID is unknown. This provides clear usage guidance and alternatives.

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

boond_projects_getDétails d'un(e) projetA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) projet par son ID numérique.

Quand : après un boond_projects_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_projects_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_projects_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A5/5.0
Behavior5/5

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

Annotations already signal readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description goes beyond these by disclosing the `tab` default behavior (base record only, not a union of tabs), the raw BoondManager error on unknown IDs, and the return shape (JSON attributes + relations). It also restates 'Lecture seule' consistently with the annotations.

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 well-structured with a front-loaded purpose sentence, labeled 'Quand' and 'Plutôt que' sections, bullet points for key behavioral caveats, and a brief Returns line. Every sentence adds operational value without redundancy.

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 there is no output schema, the description adequately covers return format, error behavior, the meaning of the optional `tab` parameter, and the required source of the ID. Combined with the annotations, nothing essential is missing for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description still adds real meaning: `id` must come from `boond_projects_search` and never be guessed, and `tab` targets a precise tab with concrete examples, while omitting it returns only the base record. These are semantics the schema alone does not convey.

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: 'Récupère la fiche complète d'un(e) projet par son ID numérique.' It clearly identifies the operation as a get-by-ID for a project and distinguishes itself from search/list lookups by noting it cannot accept a name.

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 gives explicit when-to-use guidance: after a `boond_projects_search`, when you need attributes absent from the list summary. It also names alternatives explicitly: `boond_projects_search` if the ID is unknown and `boond_find` for resolving a name/email to an ID. This is exemplary routing guidance.

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

boond_projects_informationInformations générales d'un projetA
Read-onlyIdempotent

Récupère les informations générales (client, dates, état, description, responsable) d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Fiche du projet. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it returns the project sheet and is read-only, but otherwise does not disclose additional behavioral details beyond the annotations and the schema.

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 short, well-structured, and front-loaded: it states the action first, then gives usage context, alternatives, and return information in labeled sections. Every sentence earns its place with no redundancy.

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 single-parameter, read-only retrieval tool with annotations covering safety and idempotency, the description is complete. It states what fields are returned, when to use it, what alternatives exist, and that it is read-only. No output schema exists, but the description gives sufficient return context.

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 the baseline is 3. The schema already documents the 'id' parameter, its type, pattern, and meaning. The description's reference to 'par son ID' adds no parameter semantics beyond what the schema provides.

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 clearly identifies a specific verb ('Récupère'), resource ('informations générales d'un projet'), and input ('par son ID'), and lists the fields returned. It also explicitly distinguishes itself from sibling tools like boond_projects_get and boond_projects_search.

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 states when to use the tool ('pour ne charger que cette section') and when to prefer alternatives ('boond_projects_get' for the full record, 'boond_projects_search' if the ID is unknown). This gives an agent clear routing guidance.

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

boond_projects_ordersBons de commande d'un projetA
Read-onlyIdempotent

Récupère les bons de commande d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Liste des bons de commande adossés au projet. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds a statement that it returns a list of purchase orders and explicitly says 'Lecture seule', which repeats the annotation but provides minimal extra context. No contradictory behavior is disclosed.

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 concise, front-loaded with the main purpose, and organized into clear sections (Quand, Plutôt que, Returns). Every sentence earns its place; there is no fluff or redundancy.

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?

Given the simple one-parameter interface, no output schema, and complete annotations, the description covers the essential context: what it does, when to use it, alternatives, and the return type. It omits pagination/limit details but that is minor for a straightforward list retrieval.

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 coverage is 100%: the id parameter is fully described with its pattern and meaning. The description only repeats 'par son ID' without adding any new detail about format, usage, or constraints, so it adds no value beyond the schema.

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 states a specific verb ('Récupère' = retrieves), a precise resource ('bons de commande d'un projet'), and the lookup key (project ID). It clearly distinguishes from siblings by naming boond_projects_get and boond_projects_search as alternatives, and the resource is distinct from generic boond_orders tools.

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 'Quand' section explicitly states the condition for use (load only this section without the rest of the record). The 'Plutôt que' section names the two logical alternatives (boond_projects_get for the base record, boond_projects_search if the ID is unknown), giving an agent unambiguous routing guidance.

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

boond_projects_productivityProductivité d'un projetA
Read-onlyIdempotent

Récupère les données de productivité (temps passé, jours consommés) d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Consommé du projet — du réalisé, contrairement à boond_projects_simulation. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to restate those. It adds useful behavioral context by clarifying that the returned values are 'Consommé du projet' (actuals) rather than simulated data, which is a meaningful semantic distinction beyond the structured metadata.

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 compact and organized with clear keywords ('Quand', 'Plutôt que', 'Returns'). Every sentence contributes actionable guidance — what it returns, when to use it, which sibling to prefer.

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?

The tool has one parameter, is fully covered by the schema, and has meaningful annotations. The description provides the purpose, the usage conditions, and the nature of the returned data (`temps passé`, `jours consommés`, actuals vs. simulation), making it complete enough for an agent to call correctly without an output schema.

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?

The input schema documents the single `id` parameter fully with type, pattern, and description. The description's 'par son ID' adds no new parameter meaning; it merely restates what the schema already says. With 100% schema description coverage, a baseline score of 3 is appropriate.

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 action ('Récupère les données de productivité'), a precise resource ('d'un projet'), and the fields involved ('temps passé, jours consommés'). It also differentiates the tool from siblings by stating it loads only the productivity section, unlike `boond_projects_get` or `boond_projects_search`.

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 says when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and names alternatives with the exact condition for choosing them: `boond_projects_get` for the base record, `boond_projects_search` when the ID is unknown. It also distinguishes from `boond_projects_simulation`, leaving little ambiguity.

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

boond_projects_purchasesAchats d'un projetA
Read-onlyIdempotent

Récupère les achats et la sous-traitance d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Liste des achats imputés au projet. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by stating it returns a list of purchases charged to the project and explicitly notes 'Lecture seule', which reinforces the read-only nature.

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 compact and well-structured with labeled sections: the core action, when to use it, alternatives, and the return type. Every sentence adds value and the key scoping information is front-loaded.

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 a simple one-parameter read-only fetch with no output schema, the description provides the essential context: what it returns, when to use it, and how it differs from siblings. It does not describe pagination or response field formatting, but these are minor gaps given the tool's simplicity.

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 coverage is 100%, so the single parameter is already fully documented as a numeric BoondManager entity ID. The description only repeats 'par son ID' without adding new semantic detail, matching the baseline for high schema coverage.

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 verb and resource: 'Récupère les achats et la sous-traitance d'un(e) projet, par son ID.' It also explicitly names sibling alternatives and states what this tool does not do, making it easily distinguishable from boond_projects_get and boond_projects_search.

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?

'Quand : pour ne charger que cette section, sans le reste de la fiche' directly states when to use it. It also names the alternatives: boond_projects_get for the base record and boond_projects_search when the ID is unknown, giving the agent explicit routing guidance.

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

boond_projects_simulationSimulation financière d'un projetA
Read-onlyIdempotent

Récupère la simulation financière (marge, CA, coûts, rentabilité) d'un(e) projet, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_projects_get pour la fiche de base, ou boond_projects_search si l'ID est inconnu.

Returns : Chiffrage du projet. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds that it returns only the 'chiffrage' (financial estimation) but no additional behavioral details like pagination or auth. It does not contradict annotations, but adds minimal value beyond them; it restates 'Lecture seule' which is redundant.

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 brief, front-loaded with purpose, and uses tagged labels (Quand, Plutôt que, Returns) to structure guidance. No extraneous information.

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 simple get-by-ID tool with full schema coverage, safety annotations, and no output schema, the description is complete: it states the resource, the condition for use, and the return content. Nothing 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?

The schema fully documents the single 'id' parameter with a clear description and pattern. The description adds no additional parameter semantics beyond what the schema provides, which meets the baseline for 100% coverage.

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 specifically that it retrieves financial simulation (margin, revenue, costs, profitability) for a project by ID, and explicitly distinguishes it from boond_projects_get and boond_projects_search, making sibling differentiation clear.

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?

Provides explicit when-to-use (to load only the financial section without the rest of the project record) and contrasts with alternatives: boond_projects_get for the full base record and boond_projects_search when the ID is unknown. This gives clear routing.

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

boond_projects_updateModifier un(e) projetA
Idempotent

Met à jour un(e) projet existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_projects_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du projet à modifier
nameNoNom du projet
noteNoNotes
stateNoÉtat du projet
typeOfNoType de projet (ID du dictionnaire setting.typeOf.project)
endDateNoDate de fin (YYYY-MM-DD)
startDateNoDate de début (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already convey readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds valuable context beyond this: partial-update semantics (only provided fields are written), a warning that array fields are replaced rather than merged, and a suggestion to check rights before updating to avoid a 403.

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 well-structured and front-loaded: purpose first, then 'Quand/Plutôt que', followed by concise bullets and a Returns line. Every sentence provides useful information with no filler or redundancy.

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 mutation tool with 7 parameters, an output schema, and annotations, the description covers when to use it, alternatives, partial-update mechanics, permission pre-checking, and what is returned. The only minor gap is that the array warning doesn't match the provided schema, but the tool remains fully callable with the information given.

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?

The input schema has 100% description coverage, so the baseline is 3. The description adds meaningful partial-update behavior that applies to all parameters, which goes beyond the schema. However, the array-replacement warning references fields that do not exist in this scalar-only schema, slightly diluting its relevance.

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 'Met à jour un(e) projet existant(e), identifié(e) par son ID', giving a specific verb (update), resource (project), and scope (by ID). It also explicitly contrasts itself with boond_projects_create and boond_find, making sibling differentiation clear without needing to inspect schemas.

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?

It provides an explicit 'Quand' section (modify a few fields of an existing record) and a 'Plutôt que' section (use create for new records, use find to resolve names/emails to IDs). It also recommends boond_rights_get as a pre-flight permission check, giving the agent actionable decision-making guidance.

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

boond_provider_invoices_createCréer une facture fournisseurA

Crée une facture fournisseur (facture reçue d'un prestataire).

Quand : pour enregistrer la facture émise par un sous-traitant. Plutôt que : boond_invoices_create pour une facture de vente adressée à un client — les deux sens ne partagent pas d'endpoint.

  • resource, providerCompany et providerContact sont attendus sous forme d'ID numériques.

  • Écriture non idempotente.

Returns : confirmation et fiche de la facture fournisseur créée, avec son ID dans structuredContent.id.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoÉtat de la facture fournisseur : ID de `boond://dictionary/states/provider-invoices`
endDateYesDate de fin de période (YYYY-MM-DD)
currencyNoDevise Boond
companyIdNoID de la société fournisseur, mappé vers providerCompany
contactIdNoID du contact fournisseur, mappé vers providerContact
referenceYesRéférence de la facture fournisseur
startDateYesDate de début de période (YYYY-MM-DD)
resourceIdYesID de la ressource portée par la facture fournisseur
invoiceDateNoDate de facture (YYYY-MM-DD)
exchangeRateNoTaux de change
currencyAgencyNoDevise agence
amountExcludingTaxNoMontant HT
amountIncludingTaxNoMontant TTC
exchangeRateAgencyNoTaux de change agence

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.4/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it specifies that the operation is non-idempotent (though `idempotentHint=false` already indicates this), and it details the expected format of `resource`, `providerCompany`, and `providerContact` as numeric IDs. It also describes the return value, including where the new invoice's ID appears in `structuredContent.id`. This adds value beyond the annotations.

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 concise and well-structured, with a clear purpose statement, a 'Quand' section for usage, a 'Plutôt que' section for alternatives, a bullet point for parameter format, and a 'Returns' section. Every sentence adds value, and the most important information is front-loaded.

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?

The tool has 14 parameters (4 required) but the schema covers all of them, and an output schema exists. The description provides the necessary context about when to use it, how it differs from siblings, and what the response contains. It is sufficiently complete for an agent to call this tool correctly without missing critical information.

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?

The input schema has 100% description coverage, so the baseline is 3. The description adds some semantic context by noting that `resource`, `providerCompany`, and `providerContact` should be numeric IDs, but this is already implied by the schema's pattern constraints on `resourceId`, `companyId`, and `contactId`. The description does not provide additional meaning beyond what the schema already conveys, so a 3 is appropriate.

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 clearly states the tool's purpose: 'Crée une facture fournisseur' (creates a provider invoice) and explicitly distinguishes it from the sibling tool `boond_invoices_create` for sales invoices. It is specific and unambiguous.

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 provides explicit guidance on when to use this tool ('pour enregistrer la facture émise par un sous-traitant') and when not to, naming the alternative `boond_invoices_create` and explaining that the two endpoints are distinct. This is complete usage guidance.

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

boond_provider_invoices_deleteSupprimer une facture fournisseurA
Destructive

Supprime définitivement un(e) facture fournisseur de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_provider_invoices_get. Plutôt que : boond_provider_invoices_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond annotations: states irreversibility, no recycle bin, conditional confirmation behavior based on elicitation capability, and return semantics with deleted:false on refusal. DestructiveHint=true annotations are reinforced with concrete consequences.

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?

Every sentence earns its place: purpose, trigger conditions, alternative, prerequisite check, danger warning, confirmation behavior, and return format. The bulleted structure makes the key safety points scannable without padding.

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 single-parameter delete tool, the description covers all necessary context: when to call, what to check before, what the consequences are, how the confirmation flow works, and what the response contains. Nothing an agent needs to invoke it safely 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 covers the id parameter 100% with type, pattern and description. The description adds the procedural note to verify the ID with a get call, but that's usage guidance rather than parameter semantics. Baseline 3 is appropriate since schema already fully documents the parameter.

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 'Supprime définitivement un(e) facture fournisseur de BoondManager', which is a specific verb+resource+scope. It clearly distinguishes the tool from the update sibling by explicitly naming boond_provider_invoices_update as the alternative for non-destructive state changes.

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?

Provides explicit when-to-use guidance: only on explicit user request and after verifying the ID with boond_provider_invoices_get. It also names the preferred alternative (update) with rationale, and references boond_rights_get for authorization checks. This fully routes the agent.

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

boond_provider_invoices_getDétails d'une facture fournisseurA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) facture fournisseur par son ID numérique.

Quand : après un boond_provider_invoices_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_provider_invoices_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_provider_invoices_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond that: unknown IDs surface the BoondManager error as-is, and the response is the full JSON entity with attributes and relations. The final 'Lecture seule' is redundant with annotations but not harmful.

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 well-structured and front-loaded, with a clear main sentence followed by usage guidance, error behavior, and return format. It is slightly redundant with the annotations in its 'Lecture seule' note, but otherwise every part earns its place.

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 the single parameter, existing annotations, and absence of an output schema, the description sufficiently covers purpose, when to use it, what it returns, and error behavior. There are no critical gaps for an agent to invoke 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% and the id parameter is already described with type and pattern. The description adds semantic guidance by specifying that the ID must be a numeric ID obtained from boond_provider_invoices_search, not a guessed value, which goes beyond the schema.

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 clearly states the tool fetches the complete provider invoice record by numeric ID, using a specific verb and resource. It also differentiates itself from boond_provider_invoices_search, so an agent can identify the right sibling tool.

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?

Explicitly says to use it after boond_provider_invoices_search to get attributes missing from the list summary, and to use search instead when the ID is unknown. It also warns that the ID must come from search, never guessed.

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

boond_provider_invoices_updateModifier une facture fournisseurA
Idempotent

Met à jour un(e) facture fournisseur existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_provider_invoices_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la facture fournisseur à modifier
stateNoÉtat de la facture fournisseur : ID de `boond://dictionary/states/provider-invoices`
dueDateNoDate d'échéance (YYYY-MM-DD)
endDateNoDate de fin de période (YYYY-MM-DD)
paidDateNoDate de règlement (YYYY-MM-DD) — marquer la facture payée
referenceNoRéférence de la facture fournisseur
startDateNoDate de début de période (YYYY-MM-DD)
invoiceDateNoDate de facture (YYYY-MM-DD)
amountExcludingTaxNoMontant HT
amountIncludingTaxNoMontant TTC

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

The description clearly discloses partial-update semantics: only provided fields are written and others are left unchanged. It also warns that array fields are replaced, not merged, and mentions the rights-check step before attempting the operation. These behaviors go beyond what the annotations alone convey.

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 well-structured with clear sections ('Quand', 'Plutôt que', bullet points for behavior, 'Returns'). It is front-loaded with the core purpose and every sentence adds useful guidance without unnecessary padding.

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 mutation tool with 10 parameters, the description covers when to use it, what it does, partial-update behavior, array-field caveats, rights checking, and the return value. The schema documents each parameter, and an output schema exists, so no critical information is 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?

The input schema has 100% description coverage, so the baseline is 3. The description adds valuable parameter-level semantics by stating that only provided fields are written, which clarifies how optional parameters behave. It also warns about array replacement behavior, though no array fields appear in the schema.

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 uses a specific verb ('Met à jour') and resource ('facture fournisseur existant(e)') and identifies the record by ID. It clearly distinguishes itself from the sibling `boond_provider_invoices_create` by stating it is for existing records.

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 states when to use the tool ('pour modifier quelques champs d'un enregistrement déjà en base') and points to the alternative create tool when the record does not exist. It also advises checking `boond_rights_get` to avoid a 403, which gives the agent actionable guidance.

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

boond_purchases_createCréer un achat/sous-traitanceA

Crée un achat ou une ligne de sous-traitance.

Quand : pour engager une dépense fournisseur, généralement rattachée à un projet. Plutôt que : boond_provider_invoices_create pour la facture reçue du fournisseur — l'achat est l'engagement, la facture fournisseur en est le règlement attendu.

  • Écriture non idempotente.

  • Les ID de société, contact et projet sont des ID numériques BoondManager, à résoudre au préalable via les recherches correspondantes.

Returns : confirmation et fiche de l'achat créé, avec son ID dans structuredContent.id.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires
stateNoÉtat de l'achat : ID de `boond://dictionary/states/purchases`
titleNoTitre de l'achat/sous-traitance
endDateNoDate de fin (YYYY-MM-DD)
companyIdNoID de la société fournisseur
contactIdNoID du contact fournisseur
projectIdNoID du projet associé
startDateNoDate de début (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=false, readOnlyHint=false, and destructiveHint=false. The description reinforces non-idempotence and adds the requirement to resolve company, contact, and project IDs beforehand, which is beyond the schema. It also states the return includes the created purchase record with its ID. No contradictions with annotations. It adds context about the semantic difference from provider invoices, but doesn't delve into authorization or side effects beyond creation—acceptable given annotation coverage.

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 compact and well-structured: purpose first, then when-to-use, then caveats, then return information. No redundant sentences. It is front-loaded with the core action and distinguishes from the key sibling. Every line earns its place.

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?

The tool has 8 optional parameters, no required fields, and an output schema (indicated by context). The description covers the primary use case, prerequisites, and return structure (ID in structuredContent.id). It doesn't explain state dictionary or other parameter details, but those are covered by the schema. For a create operation, the description provides enough context for correct invocation, though it could mention the state dictionary reference.

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 100%, so all parameters are described in the schema. The description adds value by clarifying that company, contact, and project IDs are BoondManager numeric IDs and must be resolved via searches first, which supplements the schema's basic descriptions. It does not elaborate on other parameters like state, but that is adequately documented in the schema. This is more than the baseline 3.

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 clearly states the action: 'Crée un achat ou une ligne de sous-traitance' (creates a purchase/subcontracting line), and specifies the context (engaging a supplier expense, usually attached to a project). It also explicitly differentiates from the sibling tool boond_provider_invoices_create, explaining the semantic difference (purchase is the commitment, provider invoice is the settlement). This gives a precise and distinguishing purpose.

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 provides explicit usage guidance: 'Quand : pour engager une dépense fournisseur' (when to use) and 'Plutôt que : boond_provider_invoices_create' (alternative and why). It also notes prerequisites (IDs must be resolved via searches) and the non-idempotent nature. This fully covers when to use this tool vs alternatives.

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

boond_purchases_deleteSupprimer un achat/sous-traitanceA
Destructive

Supprime définitivement un achat / sous-traitance de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_purchases_get. Plutôt que : boond_purchases_update pour corriger un montant, une période ou un état — vérifier avec boond_payments_search (purchaseId) qu'aucun règlement n'y est adossé avant de détruire.

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses irreversibility (no trash on the API side), the confirmation flow when elicitation is available, the possibility of refusal returning deleted:false, and the need to check the deleted field. This adds substantial value beyond annotations.

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 well-organized with clear sections (Quand, Plutôt que, warning, Returns) and front-loaded purpose. It is slightly longer than the minimum but each section earns its place by covering safety, alternatives, and return-value checking without excessive verbosity.

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 destructive tool with an output schema and annotations, the description is remarkably complete. It covers when to call it, prerequisites, alternatives, irreversibility, user-confirmation behavior, return-value interpretation, and the payment-check guard. No critical information for correct invocation 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?

The input schema already provides 100% coverage for the single 'id' parameter, including its numeric pattern and description. The description only adds advice to verify the ID via boond_purchases_get, which is more usage guidance than parameter semantics. Baseline 3 is appropriate since the schema fully documents the parameter.

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: 'Supprime définitivement un achat / sous-traitance de BoondManager'. It clearly identifies the object and the destructive nature, and it is easily distinguishable from siblings like boond_purchases_update or boond_purchases_get.

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 states when to use it (only on explicit user request after verifying the ID with boond_purchases_get), when not to use it (prefer boond_purchases_update for corrections), and requires a prerequisite check with boond_payments_search to ensure no payments are attached. This is exemplary routing guidance.

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

boond_purchases_getDétails d'un achat/sous-traitanceA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) achat par son ID numérique.

Quand : après un boond_purchases_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_purchases_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_purchases_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint or absent. The description adds important behavior on top: an unknown ID propagates the raw BoondManager error, and the ID must come from a search, never from guesswork. This goes 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.

Conciseness5/5

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

The description is concise and well structured. The main verb is the first sentence, followed by explicit 'Quand' and 'Plutôt que' sections. The warning about invalid IDs is an important constraint, and the return type is stated at the end. Every sentence earns its place.

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 simple ID-based fetch operation with one parameter and no output schema, the description covers all relevant aspects: what to do next, what has to be avoided, the error behavior for an unknown ID, and the return shape (JSON of the entity with attributes and relations). It also explicitly states the operation is read-only, reinforcing the annotation. No important information an agent needs is 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?

The schema already documents the 'id' parameter with a pattern and description, and 100% coverage means the schema is sufficient. The description adds further meaning by stating the ID is numeric, must come from 'boond_purchases_search', and that the tool rejects names. This is a clear semantic extension of the schema merely declaring a string ID.

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 begins with a clear statement: 'Récupère la fiche complète d'un(e) achat par son ID numérique.' It identifies the resource (achat), the operation (récupère), and the input key (ID). It also distinguishes itself from the search sibling by stating it returns attributes that do not appear in the list summary.

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 gives explicit 'Quand' guidance: use it after boond_purchases_search. It also gives a direct alternative and condition: rather than using it when the ID is unknown, because this tool does not accept a name. This is concrete, actionable guidance with a clear fallback.

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

boond_purchases_informationInformations complètes d'un achat/sous-traitanceA
Read-onlyIdempotent

Récupère les informations complètes (période, quantité, montants, taux de TVA, conditions de paiement, ressource, projet et prestation liés) d'un(e) achat, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_purchases_get pour la fiche de base, ou boond_purchases_search si l'ID est inconnu.

Returns : Fiche complète de l'achat (relations ressource, agence, projet, prestation incluses). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description adds behavioral context by specifying the return content ('Fiche complète' with relations ressource, agence, projet, prestation) and explicitly states 'Lecture seule', reinforcing the read-only nature. It doesn't contradict annotations and adds useful information 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.

Conciseness5/5

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

The description is compact and well-structured: a purpose sentence, a 'Quand'/'Plutôt que' block, and a 'Returns' note. It front-loads the core purpose and uses bullet-like formatting for readability. No filler or redundant wording.

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 a single-ID read operation with no output schema, the description adequately covers what is returned (full purchase record with relations) and when to use it. It omits potential error handling or auth requirements, but these are not critical for a simple read tool. Given the annotations and schema, the information provided is sufficient for correct invocation.

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?

The input schema has 100% coverage: the only parameter 'id' is described as 'Identifiant unique de l'entité BoondManager (numérique)' with a pattern. The description does not add further meaning about the parameter, such as how to obtain it or format nuances. Baseline 3 applies because the schema fully documents the parameter.

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 states a specific verb ('Récupère') and resource ('achat') with a clear scope: complete information for a single purchase by ID. It enumerates the included fields (période, quantité, montants, TVA, conditions de paiement, ressource, projet, prestation) and explicitly names sibling tools (boond_purchases_get, boond_purchases_search) to differentiate itself.

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?

Provides explicit 'Quand' (when to use) and 'Plutôt que' (rather than) guidance. It tells the agent to use this tool to load only the purchase section without the rest of the record, and directs to boond_purchases_get for the base record or boond_purchases_search when the ID is unknown. This clearly routes between alternatives.

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

boond_purchases_updateModifier un achat/sous-traitanceA
Idempotent

Met à jour un(e) achat existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_purchases_create si l'enregistrement n'existe pas encore.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de l'achat à modifier
noteNoNotes / commentaires (`informationComments`)
stateNoÉtat de l'achat : ID de `boond://dictionary/states/purchases`
titleNoTitre de l'achat/sous-traitance
typeOfNoType d'achat : ID de `boond://dictionary/typeOf/purchases`
endDateNoDate de fin (YYYY-MM-DD)
taxRateNoTaux de TVA (%) — `boond://dictionary/taxRates`
quantityNoQuantité
companyIdNoID de la société fournisseur
contactIdNoID du contact fournisseur
projectIdNoID du projet associé
startDateNoDate de début (YYYY-MM-DD)
paymentTermNoCondition de paiement : ID de `boond://dictionary/paymentTerms`
paymentMethodNoMode de paiement : ID de `boond://dictionary/paymentMethods`
amountExcludingTaxNoMontant unitaire HT

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds important behavioral context: partial update semantics (only provided fields are written), table fields are replaced not merged, and the use of rights check to avoid 403. It doesn't cover edge cases like what happens if the ID doesn't exist, but given the annotations, this is a minor gap. No contradiction with annotations.

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 well-structured with sections for 'Quand', 'Plutôt que', key behavioral notes, and a returns statement. It is front-loaded with the purpose. A minor inefficiency: the section on table fields could be more concise (e.g., 'array fields are replaced, not merged'), but overall it's clear and to the point.

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?

Given the tool's complexity (15 parameters, partial update semantics) and the presence of an output schema, the description covers the essential aspects: partial update, array replacement, and rights check. It does not mention whether all fields are optional beyond 'id' (implied by partial update), or what happens on invalid input, but the tool is a standard update operation and the output schema handles return format. A 4 is appropriate.

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 parameters are well-documented in the schema. The description adds a general note about partial update (only provided fields are written) which is helpful for all parameters, and specifically warns about array fields being replaced. However, it doesn't detail each parameter beyond what the schema provides, so it meets the baseline of 3.

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 clearly states it updates an existing purchase identified by ID, with a specific verb and resource. It distinguishes from sibling `boond_purchases_create` by explicitly saying 'Plutôt que' and specifying the condition (if the record doesn't exist yet). It also mentions partial update and table fields behavior, making the tool's functionality unmistakable.

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?

It provides a clear 'Quand' (when to use) and 'Plutôt que' (instead of) section, explicitly naming the alternative `boond_purchases_create` and the condition for choosing it. It also advises checking `boond_rights_get` to avoid a 403, which is additional usage guidance. This is exemplary.

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

boond_reporting_companiesReporting sociétésA
Read-onlyIdempotent

Reporting des sociétés (CA, marge, activité...).

Quand : pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période. Plutôt que : boond_companies_search pour la liste des enregistrements eux-mêmes : ce reporting renvoie des totaux calculés, pas les lignes qui les composent.

Filtres clés : périmètre (perimeterDynamic / perimeterManagers / perimeterAgencies…), période (period, periodDynamic), companiesStates, companies, maxCompanies, showPercentage.

  • ⚠️ startDate + endDate (YYYY-MM-DD) sont REQUIS : l'API répond 422 sans eux.

  • Sans filtre de périmètre, l'agrégation porte sur tout le périmètre autorisé du compte — un total « entreprise » là où l'utilisateur attendait souvent son équipe.

  • Les états et types sont des ID entiers du dictionnaire (boond_application_dictionary), pas des libellés.

  • Une agrégation large peut durer plusieurs dizaines de secondes ; l'avancement est signalé via notifications/progress quand le client fournit un progressToken.

Returns : tableau d'indicateurs agrégés, rendu en texte. Lecture seule.

  • Pagination : pageSize 1–500 (défaut 30), page 1–100 — au-delà : refus, affiner les filtres.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNuméro de page (défaut: 1, max: 100)
endDateYesDate de fin (YYYY-MM-DD). Requis par l'API.
keywordsNoMots-clés.
pageSizeNoNombre de résultats par page (max: 500, défaut: 30)
useCacheNoCache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).
companiesNoFiltrer sur ces IDs de sociétés.
startDateYesDate de début (YYYY-MM-DD). Requis par l'API.
scorecardsNoIDs des scorecards (indicateurs) à retourner.
maxCompaniesNoNombre de sociétés par page (1-10, défaut 1). Le nombre de résultats = sociétés × indicateurs.
periodDynamicNoPériode dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.
perimeterPolesNoIDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.
showPercentageNoAfficher les valeurs en pourcentage plutôt qu'en valeur réelle.
companiesStatesNoIDs d'états de sociétés (dictionnaire setting.state.company).
narrowPerimeterNoSi true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).
perimeterDynamicNoPérimètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.
perimeterAgenciesNoIDs d'agences. Conserve les entités dont le responsable appartient à ces agences.
perimeterManagersNoIDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.
perimeterBusinessUnitsNoIDs de business units. Conserve les entités dont le responsable appartient à ces BU.
periodDynamicParametersNoParamètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description's 'Lecture seule' is consistent with them — no contradiction. Beyond annotations, the description discloses critical runtime behavior: the 422 response without startDate/endDate, the default whole-account aggregation trap, integer dictionary IDs instead of labels, multi-second latency with progressToken signaling, and pagination refusal beyond page 100/pageSize 500. This is exactly the operational context annotations cannot provide.

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 well-structured with scannable sections ('Quand', 'Plutôt que', 'Filtres clés') and bullet-pointed warnings. For a 19-parameter reporting tool with subtle default behaviors, the length is justified — every section carries distinct value, and the critical warnings are front-loaded before pagination details.

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 19 parameters and no output schema, the description is remarkably complete: it covers required parameters and their failure mode, default scope behavior, dictionary ID semantics, expected latency and progress signaling, return format ('tableau d'indicateurs agrégés, rendu en texte'), and pagination bounds. The only minor omission is where scorecard IDs originate, but the schema's field description and the dictionary reference cover the common case.

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 — the schema already documents all 19 parameters. The description adds meaningful operational semantics on top: the 422 failure without startDate/endDate, the default whole-perimeter scope trap, and the note that companiesStates values are dictionary integer IDs, not labels. Relative to baseline it elevates understanding of the most error-prone parameters without restating the schema.

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 'Reporting des sociétés (CA, marge, activité...)' naming a specific verb (reporting), resource (companies), and metric types (revenue, margin, activity). It explicitly differentiates from the sibling `boond_companies_search`, stating this tool returns 'totaux calculés, pas les lignes qui les composent' — so an agent cannot confuse aggregate totals with record lists.

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 'Quand' section states precisely when to use it — 'pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période'. The 'Plutôt que' section names `boond_companies_search` as the alternative for record lists and spells out the exclusion condition. This is explicit when/when-not guidance with a named sibling.

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

boond_reporting_production_plansReporting plans de productionA
Read-onlyIdempotent

Reporting des plans de production (disponibilités, positionnements...).

Quand : pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période. Plutôt que : boond_positionings_search pour la liste des enregistrements eux-mêmes : ce reporting renvoie des totaux calculés, pas les lignes qui les composent.

Filtres clés : périmètre (perimeterDynamic / perimeterManagers / perimeterAgencies…), période (period, periodDynamic), resourceTypes, resourceStates, positioningStates, positioningPeriod, showContracts, projects/contacts/companies.

  • ⚠️ startDate + endDate (YYYY-MM-DD) sont REQUIS : l'API répond 422 sans eux.

  • Sans filtre de périmètre, l'agrégation porte sur tout le périmètre autorisé du compte — un total « entreprise » là où l'utilisateur attendait souvent son équipe.

  • Les états et types sont des ID entiers du dictionnaire (boond_application_dictionary), pas des libellés.

  • Une agrégation large peut durer plusieurs dizaines de secondes ; l'avancement est signalé via notifications/progress quand le client fournit un progressToken.

Returns : tableau d'indicateurs agrégés, rendu en texte. Lecture seule.

  • Pagination : pageSize 1–500 (défaut 30), page 1–100 — au-delà : refus, affiner les filtres.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNuméro de page (défaut: 1, max: 100)
endDateYesDate de fin (YYYY-MM-DD). Requis par l'API.
contactsNoFiltrer sur ces IDs de contacts.
keywordsNoMots-clés.
pageSizeNoNombre de résultats par page (max: 500, défaut: 30)
projectsNoFiltrer sur ces IDs de projets.
useCacheNoCache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).
companiesNoFiltrer sur ces IDs de sociétés.
startDateYesDate de début (YYYY-MM-DD). Requis par l'API.
scorecardsNoIDs des scorecards (indicateurs) à retourner.
periodDynamicNoPériode dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.
resourceTypesNoIDs de types de ressources (dictionnaire setting.typeOf.resource).
showContractsNoAfficher les contrats associés.
perimeterPolesNoIDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.
resourceStatesNoIDs d'états de ressources (dictionnaire setting.state.resource).
narrowPerimeterNoSi true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).
perimeterDynamicNoPérimètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.
perimeterAgenciesNoIDs d'agences. Conserve les entités dont le responsable appartient à ces agences.
perimeterManagersNoIDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.
positioningPeriodNo'created' (positionnements créés entre les dates, défaut) ou 'running' (en cours sur la période).
positioningStatesNoIDs d'états de positionnement (dictionnaire setting.state.positioning).
perimeterBusinessUnitsNoIDs de business units. Conserve les entités dont le responsable appartient à ces BU.
periodDynamicParametersNoParamètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already signal read-only and non-destructive behavior. The description goes well beyond that: it warns that missing startDate/endDate triggers a 422, that omitting perimeter filters aggregates over the entire account, that states/types are dictionary integer IDs, and that large aggregations can take tens of seconds with progress signaled via notifications/progress. These are rich behavioral disclosures not present in the annotations.

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 long but tightly organized: purpose, when/alternative, key filters, then bullet-pointed caveats and return/pagination details. Every sentence adds a distinct piece of information, and the critical warnings (required dates, perimeter default) are front-loaded. There is no filler.

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 a tool with 23 parameters and no output schema, this description covers nearly everything an agent needs: purpose, usage, required params, default perimeter behavior, dictionary IDs, performance, progress, return type, and pagination. It falls short slightly because the return value is described only vaguely as 'tableau d'indicateurs agrégés, rendu en texte', and the phantom 'period' reference introduces ambiguity about which parameter is actually used.

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 100%, so the baseline is 3. The description adds real meaning on top: the critical 'no perimeter = whole account' semantic, the dictionary-ID requirement for state/type parameters, and pagination limits. It loses a point because it references a 'period' parameter that does not exist in the schema, potentially leading an agent to send an unknown property.

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 states a specific verb and resource: it reports production plans and returns aggregates (CA, marge, taux, volumes) for a perimeter and period. It also distinguishes itself from boond_positionings_search by explicitly noting this tool returns calculated totals, not the underlying lines, which separates it from the most likely sibling confusion.

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 'Quand' clause clearly defines when to use this tool (for aggregates) and the 'Plutôt que' clause explicitly names the alternative boond_positionings_search and the condition that selects it (wanting the records themselves vs. totals). This is direct, actionable guidance with no inference required.

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

boond_reporting_projectsReporting projetsA
Read-onlyIdempotent

Reporting des projets (CA, marge, rentabilité...).

Quand : pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période. Plutôt que : boond_projects_search pour la liste des enregistrements eux-mêmes : ce reporting renvoie des totaux calculés, pas les lignes qui les composent.

Filtres clés : périmètre (perimeterDynamic / perimeterManagers / perimeterAgencies…), période (period, periodDynamic), projectTypes, projectStates, resources, projects, contacts, companies, maxProjects.

  • Sans filtre de périmètre, l'agrégation porte sur tout le périmètre autorisé du compte — un total « entreprise » là où l'utilisateur attendait souvent son équipe.

  • Les états et types sont des ID entiers du dictionnaire (boond_application_dictionary), pas des libellés.

  • Une agrégation large peut durer plusieurs dizaines de secondes ; l'avancement est signalé via notifications/progress quand le client fournit un progressToken.

Returns : tableau d'indicateurs agrégés, rendu en texte. Lecture seule.

  • Pagination : pageSize 1–500 (défaut 30), page 1–100 — au-delà : refus, affiner les filtres.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNuméro de page (défaut: 1, max: 100)
endDateNoDate de fin (YYYY-MM-DD).
contactsNoFiltrer sur ces IDs de contacts.
keywordsNoMots-clés.
pageSizeNoNombre de résultats par page (max: 500, défaut: 30)
projectsNoFiltrer sur ces IDs de projets.
useCacheNoCache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).
companiesNoFiltrer sur ces IDs de sociétés.
resourcesNoFiltrer sur ces IDs de ressources.
startDateNoDate de début (YYYY-MM-DD).
scorecardsNoIDs des scorecards (indicateurs) à retourner.
maxProjectsNoNombre de projets par page (1-10, défaut 1). Le nombre de résultats = projets × indicateurs.
projectTypesNoIDs de types de projets (dictionnaire setting.typeOf.project).
periodDynamicNoPériode dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.
projectStatesNoIDs d'états de projets (dictionnaire setting.state.project).
perimeterPolesNoIDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.
narrowPerimeterNoSi true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).
perimeterDynamicNoPérimètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.
perimeterAgenciesNoIDs d'agences. Conserve les entités dont le responsable appartient à ces agences.
perimeterManagersNoIDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.
perimeterBusinessUnitsNoIDs de business units. Conserve les entités dont le responsable appartient à ces BU.
periodDynamicParametersNoParamètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the default perimeter is the entire authorized account scope, aggregation can take tens of seconds with progress signaled via notifications/progress, and pagination limits are enforced (pageSize 1-500, page 1-100). It also notes the return is rendered as text. This is strong supplementary behavioral disclosure.

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 well-structured with clear sections (Quand, Plutôt que, Filtres clés, Returns, Pagination) and front-loads the core purpose. It is longer than average, but the length is justified given 22 parameters and the need to explain perimeter semantics, dictionary IDs, and performance characteristics. Every section earns its place; no filler.

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 a complex reporting tool with 22 parameters, no required params, and no output schema, the description covers the essential behavioral aspects: what it returns, how to filter, the default scope trap, performance expectations, and pagination constraints. It doesn't detail the exact structure of the returned indicators, but since there is no output schema and the description says 'tableau d'indicateurs agrégés, rendu en texte', an agent has enough to call it correctly. The reference to boond_application_dictionary for IDs is a useful pointer.

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 100%, so the baseline is 3. The description adds meaningful semantic context beyond the schema: it groups filters into perimeter vs period vs project filters, explains that perimeterDynamic is a shortcut for the current user, clarifies that projectTypes/projectStates are dictionary IDs (not labels), and explains the maxProjects multiplication effect ('projets × indicateurs'). It also warns about the default perimeter behavior, which is critical for correct use. This exceeds the baseline.

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: 'Reporting des projets (CA, marge, rentabilité...)' and explicitly contrasts itself with boond_projects_search, which returns raw records. It names the resource (projects), the operation (aggregated reporting), and the key metrics (CA, marge, taux, volumes). This distinguishes it from sibling reporting tools like boond_reporting_companies and boond_reporting_resources by the resource being aggregated.

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 states when to use it ('Quand : pour obtenir des agrégats...') and when not to ('Plutôt que : boond_projects_search pour la liste des enregistrements eux-mêmes'). It also provides key filter guidance, warns about the default perimeter behavior, and explains the dictionary ID requirement for states/types. This is comprehensive routing guidance.

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

boond_reporting_resourcesReporting ressourcesA
Read-onlyIdempotent

Reporting des ressources (taux d'occupation, CA, productivité...).

Quand : pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période. Plutôt que : boond_resources_search pour la liste des enregistrements eux-mêmes : ce reporting renvoie des totaux calculés, pas les lignes qui les composent.

Filtres clés : périmètre (perimeterDynamic / perimeterManagers / perimeterAgencies…), période (period, periodDynamic), reportingCategory, resourceTypes, resourceStates, period, resources/projects/contacts/companies, maxResources.

  • Sans filtre de périmètre, l'agrégation porte sur tout le périmètre autorisé du compte — un total « entreprise » là où l'utilisateur attendait souvent son équipe.

  • Les états et types sont des ID entiers du dictionnaire (boond_application_dictionary), pas des libellés.

  • Une agrégation large peut durer plusieurs dizaines de secondes ; l'avancement est signalé via notifications/progress quand le client fournit un progressToken.

Returns : tableau d'indicateurs agrégés, rendu en texte. Lecture seule.

  • Pagination : pageSize 1–500 (défaut 30), page 1–100 — au-delà : refus, affiner les filtres.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNuméro de page (défaut: 1, max: 100)
periodNoDécoupage temporel : 'onePeriod' (unique, entre startDate/endDate), 'dynamicPeriod' (selon periodDynamic), 'monthly' (6 mois depuis startDate), 'quarterly', 'semiAnnual', 'annual'. La synthèse accepte aussi 'weekly'.
endDateNoDate de fin (YYYY-MM-DD).
contactsNoFiltrer sur ces IDs de contacts.
keywordsNoMots-clés.
pageSizeNoNombre de résultats par page (max: 500, défaut: 30)
projectsNoFiltrer sur ces IDs de projets.
useCacheNoCache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).
companiesNoFiltrer sur ces IDs de sociétés.
resourcesNoFiltrer sur ces IDs de ressources.
startDateNoDate de début (YYYY-MM-DD).
scorecardsNoIDs des scorecards (indicateurs) à retourner.
maxResourcesNoNombre de ressources par page (1-10, défaut 1). Le nombre de résultats = ressources × indicateurs.
periodDynamicNoPériode dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.
resourceTypesNoIDs de types de ressources (dictionnaire setting.typeOf.resource).
perimeterPolesNoIDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.
resourceStatesNoIDs d'états de ressources (dictionnaire setting.state.resource).
narrowPerimeterNoSi true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).
perimeterDynamicNoPérimètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.
perimeterAgenciesNoIDs d'agences. Conserve les entités dont le responsable appartient à ces agences.
perimeterManagersNoIDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.
reportingCategoryNoVue : 'showByResources' (défaut, sans returnedPeriod) ou 'showByPeriods' (returnedPeriod requis).
perimeterBusinessUnitsNoIDs de business units. Conserve les entités dont le responsable appartient à ces BU.
periodDynamicParametersNoParamètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).

TDQS

A4.9/5.0
Behavior5/5

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

Even with annotations indicating readOnlyHint, idempotentHint, and non-destructive, the description adds critical behavioral context: it clarifies that the aggregation spans the entire authorized perimeter if no filter is given (a common pitfall), warns about potentially long execution times, mentions progress notifications via progressToken, and notes that response is text-rendered. This goes beyond the annotations to set correct expectations.

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 well-structured with clear sections: purpose, when to use, key filters, warnings, returns, and pagination. It is front-loaded with the most critical information (purpose and distinction) and each sentence serves a purpose. No fluff, and it remains readable despite its length.

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 24 parameters and no output schema, the description covers all essential aspects: purpose, usage, behavioral caveats, parameter hints, and output format (returned as text). It also mentions progress tracking and pagination constraints, which are critical for an agent to know. The description is complete enough for an agent to select and invoke it correctly without further context.

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?

The input schema already covers 100% of parameters with descriptions, so the baseline is 3. The description adds value by highlighting key filters like perimeter and period in a consolidated list, and clarifies that states/types are integer IDs from the dictionary (boond_application_dictionary), not labels. It also notes pagination limits and constraints (pageSize 1-500, page 1-100). This provides additional semantic meaning beyond the schema.

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 clearly states the tool's purpose: it provides aggregated reporting metrics (occupancy rate, revenue, productivity) over a perimeter and period. It uses a specific verb ('Reporting') and resource ('ressources') and explicitly distinguishes itself from boond_resources_search for raw list retrieval. This makes it easy for an agent to understand what it does and how it differs from a similar sibling.

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 provides explicit usage guidance: 'Quand' (when to use), 'Plutôt que' (rather than), and key filters. It clearly states that if you need the actual records, use boond_resources_search instead, and it warns about the default perimeter ('tout' the authorized account) and performance implications. This is comprehensive and actionable.

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

boond_reporting_synthesisReporting synthèseA
Read-onlyIdempotent

Reporting de synthèse globale (commercial, RH, recrutement, facturation...).

Quand : pour obtenir des agrégats (CA, marge, taux, volumes) sur un périmètre et une période. Plutôt que : un boond_reporting_* plus ciblé (sociétés, projets, ressources) pour la liste des enregistrements eux-mêmes : ce reporting renvoie des totaux calculés, pas les lignes qui les composent.

Filtres clés : périmètre (perimeterDynamic / perimeterManagers / perimeterAgencies…), période (period, periodDynamic), reportingType, reportingCategory, period, resources/projects/contacts/companies, compareIndicators.

  • ⚠️ startDate + endDate (YYYY-MM-DD) sont REQUIS : l'API répond 422 sans eux.

  • Sans filtre de périmètre, l'agrégation porte sur tout le périmètre autorisé du compte — un total « entreprise » là où l'utilisateur attendait souvent son équipe.

  • Les états et types sont des ID entiers du dictionnaire (boond_application_dictionary), pas des libellés.

  • Une agrégation large peut durer plusieurs dizaines de secondes ; l'avancement est signalé via notifications/progress quand le client fournit un progressToken.

Returns : tableau d'indicateurs agrégés, rendu en texte. Lecture seule.

  • Pagination : pageSize 1–500 (défaut 30), page 1–100 — au-delà : refus, affiner les filtres.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNuméro de page (défaut: 1, max: 100)
periodNoDécoupage temporel : 'onePeriod' (unique, entre startDate/endDate), 'dynamicPeriod' (selon periodDynamic), 'monthly' (6 mois depuis startDate), 'quarterly', 'semiAnnual', 'annual'. La synthèse accepte aussi 'weekly'.
endDateNoDate de fin (YYYY-MM-DD).
contactsNoFiltrer sur ces IDs de contacts.
keywordsNoMots-clés.
pageSizeNoNombre de résultats par page (max: 500, défaut: 30)
projectsNoFiltrer sur ces IDs de projets.
useCacheNoCache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).
companiesNoFiltrer sur ces IDs de sociétés.
resourcesNoFiltrer sur ces IDs de ressources.
startDateYesDate de début (YYYY-MM-DD). Requis par l'API.
scorecardsNoIDs des scorecards (indicateurs) à retourner.
periodDynamicNoPériode dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.
reportingTypeNoType de données : 'realData' (défaut, réel) ou 'targetsData' (objectifs).
perimeterPolesNoIDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.
narrowPerimeterNoSi true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).
perimeterDynamicNoPérimètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.
compareIndicatorsNoIndicateurs à comparer entre deux périodes.
perimeterAgenciesNoIDs d'agences. Conserve les entités dont le responsable appartient à ces agences.
perimeterManagersNoIDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.
reportingCategoryNoCatégorie de synthèse (défaut 'commercialSynthesis') : commercial, RH, recrutement, activité & frais, facturation, ou globale. `resources` n'est pas disponible hors d'une vue par ressources.
perimeterBusinessUnitsNoIDs de business units. Conserve les entités dont le responsable appartient à ces BU.
compareIndicatorsPeriodNoPériode de comparaison des indicateurs (défaut 'period').
periodDynamicParametersNoParamètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).

TDQS

A4.8/5.0
Behavior5/5

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

Even though annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, the description adds substantial behavioral context: the API returns 422 without startDate/endDate, no perimeter filter means the whole authorized account scope, states/types are dictionary IDs, large aggregations can take tens of seconds, and pagination over limits is refused. This goes well 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 dense, front-loaded, and well-structured with bullets and warnings. The only notable flaw is a small redundancy: 'period' appears twice in the key-filters list.

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 complex 24-parameter tool with no output schema, the description covers purpose, return shape, scope defaults, required inputs, pagination, performance, and progress signaling. An agent has essentially everything needed to invoke 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 description coverage is 100%, so the baseline is 3. The description adds valuable cross-parameter semantics: required date combination, default perimeter behavior, dictionary-ID requirement, and hard pagination limits. It doesn't enumerate every parameter, but the schema already covers those individually.

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 clearly states it produces global synthesis aggregates (CA, marge, taux, volumes) over a scope and period, and explicitly contrasts itself with the more targeted `boond_reporting_*` tools that return raw record lists. An agent can distinguish this tool from its reporting siblings without opening the 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?

The 'Quand' and 'Plutôt que' sections explicitly state when to use this tool and when to prefer a targeted `boond_reporting_*` alternative for the underlying records. It also orients the agent toward the key filters, leaving little ambiguity about selection.

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

boond_resources_absences_reportsDemandes d'absences d'une ressourceA
Read-onlyIdempotent

Récupère les demandes d'absences (congés, RTT, maladie) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des demandes d'absences de la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by explicitly stating 'Lecture seule' and clarifying the return payload is a list of absence requests. It doesn't add details like pagination or ordering, but for a simple read tool the annotations plus the return-type note are sufficient.

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 compact and well-structured: a one-sentence purpose, a 'Quand' usage line, a 'Plutôt que' alternative line, and a short returns/read-only note. Every sentence earns its place and the key scoping information is front-loaded.

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 a single-parameter read-only tool with full schema coverage and no output schema, the description covers the essential context: what it returns, when to use it, and how it differs from siblings. It could mention whether the returned list is paginated or ordered, but that is a minor gap given the tool's simplicity.

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 the single 'id' parameter is already fully documented in the schema. The description confirms the ID identifies the resource whose absences are fetched, but adds no new format or constraint information beyond the schema. Baseline 3 is appropriate.

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 states a specific verb ('Récupère'), a precise resource ('demandes d'absences d'un(e) ressource'), and the lookup key (ID). It also enumerates the absence types (congés, RTT, maladie), which disambiguates it from sibling tools like boond_resources_times_reports or boond_resources_expenses_reports.

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 says when to use this tool ('pour ne charger que cette section, sans le reste de la fiche') and names the alternatives with their conditions: boond_resources_get for the base record, boond_resources_search if the ID is unknown. This is clear routing guidance.

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

boond_resources_actionsActions liées à une ressourceA
Read-onlyIdempotent

Récupère les actions (appels, emails, RDV, notes) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des actions rattachées à la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds that the result is a "Liste des actions rattachées" and confirms "Lecture seule," which is consistent with annotations, but it does not disclose behaviors like pagination, ordering, or any limits, so it contributes useful but not rich context.

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 compact and well-organized: a one-line purpose followed by labeled Quand, Plutôt que, and Retourne sections that are easily parsed. Nearly every sentence earns its place; the only minor waste is "Lecture seule," which repeats the readOnlyHint annotation already present.

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 a single-parameter, read-only list tool with a fully described schema field and solid annotations, the description covers when to use it, what it returns, and what it is not. It is slightly light on return-format details (pagination, ordering) since there is no output schema, but nothing would block an agent from calling it correctly.

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 coverage is 100% and the schema already describes id as a numeric entity identifier with a digit pattern. The description only says "par son ID," restating the schema without adding format, example, or resolution details. Baseline 3 applies because the schema carries the semantic weight.

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 names a specific verb and resource: "Récupère les actions (appels, emails, RDV, notes) d'une ressource, par son ID." It enumerates the content (calls, emails, meetings, notes) and explicitly contrasts itself with boond_resources_get and boond_resources_search, so an agent can distinguish it from the many similar resource-scoped siblings without opening schemas.

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 has explicit guidance: "Quand: pour ne charger que cette section, sans le reste de la fiche" states when to call it, and "Plutôt que:" names boond_resources_get for the base record and boond_resources_search when the ID is unknown. This is concrete, actionable selection guidance rather than vague preference.

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

boond_resources_administrativeDonnées administratives d'une ressourceA
Read-onlyIdempotent

Récupère les données administratives et RH (salaire, TJM, coût journalier, contrat) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Bloc administratif de la ressource — données salariales, à manier avec prudence. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is covered. The description adds a caution about handling salary data with prudence, which is useful context beyond the annotations. It does not mention that no output schema is provided, but that is not a behavioral trait.

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 concise, around three short sections, with the main purpose front-loaded. Every line adds value: the data listing, usage conditions, and a safety note. No wasted words.

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?

This is a simple single-parameter read-only tool. The description, combined with annotations and schema, provides everything an agent needs: what data it returns, when to use it, and a caution. No output schema means return specifics are less critical, but the description mentions the administrative block, which is sufficient.

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 the 'id' parameter is already described clearly. The description does not add additional semantic details about the 'id' beyond the schema, but since coverage is high, baseline of 3 is appropriate.

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 clearly states the tool fetches administrative and HR data for a resource by ID, listing specific data types (salary, daily rate, cost, contract). It distinguishes itself from sibling tools by specifying it loads only this section, not the full profile.

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 provides explicit 'Quand' (when to use) and 'Plutôt que' (rather than) sections, naming alternatives like boond_resources_get and boond_resources_search with conditions for their use. This gives clear guidance for selection among sibling tools.

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

boond_resources_advantagesAvantages d'une ressourceA
Read-onlyIdempotent

Récupère les avantages (tickets restaurant, mutuelle, véhicule, primes) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des avantages de la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false; the description's 'Lecture seule' largely repeats that rather than adding new behavioral context such as authorization needs or response quirks. There is no contradiction, but little additional transparency beyond the structured hints.

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 uses three short labeled segments—purpose, when/alternatives, and returns—front-loading the key verb and resource. Every sentence earns its place and there is no redundant boilerplate.

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 one-parameter read-only endpoint, the definition includes purpose, usage conditions, alternative tools, and return type. With no output schema, stating that it returns a list of advantages plus example categories is sufficient for an agent to call it correctly.

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?

There is only one parameter (id), schema coverage is 100%, and the schema already describes it as a numeric BoondManager identifier. The description adds 'par son ID' and example advantage categories, but no extra format or constraints, so the baseline score 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?

The description opens with a specific verb and object: 'Récupère les avantages ... d'une ressource, par son ID.' It names concrete benefit types and contrasts with boond_resources_get/search, making it easy for an agent to distinguish it from the many resource and advantage tools.

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 'Quand' and 'Plutôt que' lines explicitly state the intended use (load only this section) and name alternatives: boond_resources_get for the full record and boond_resources_search when the ID is unknown. This is direct, actionable routing guidance.

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

boond_resources_contractsContrats d'une ressourceA
Read-onlyIdempotent

Liste les contrats de travail d'une ressource (type, dates, période d'essai, motif de fin), par son ID.

Quand : pour connaître le contrat en cours, l'historique contractuel ou la fin de période d'essai d'un collaborateur. Plutôt que : boond_contracts_search pour balayer un périmètre entier (fins de contrat du mois…), boond_contracts_get pour la fiche complète d'un contrat.

  • Lit /resources/{id}/administrative et en extrait les contrats inclus — il n'existe pas d'onglet contracts côté API.

Returns : une ligne par contrat, du plus récent au plus ancien tel que BoondManager les renvoie, avec les IDs pour boond_contracts_get. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it reads from /resources/{id}/administrative and extracts contracts because no contracts tab exists, and specifies the return order (most recent to oldest) and that IDs are provided for boond_contracts_get. This goes beyond the annotations.

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 structured with headers and a bullet, front-loading the purpose and using each sentence to add value (scenarios, alternatives, API detail, return format). It is slightly longer than minimal but not wasteful.

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 no output schema, the description explains the return format (one line per contract, ordering, IDs), the data source and its limitation (no contracts tab), and usage alternatives. This fully equips an agent to call it correctly.

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?

The single parameter id is fully described in the schema (pattern and description), and the description only says 'par son ID' without adding new semantic information, so 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?

The description states a specific verb 'Liste' with a precise resource 'les contrats de travail d'une ressource' and details (type, dates, période d'essai, motif de fin), and explicitly contrasts with sibling tools boond_contracts_search and boond_contracts_get, so an agent can distinguish it.

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 'Quand' section gives explicit scenarios (current contract, history, trial end), and 'Plutôt que' names the alternatives with conditions, leaving no ambiguity about when to use this tool.

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

boond_resources_createCréer un(e) ressourceA

Crée un(e) ressource dans BoondManager.

Quand : pour ajouter un(e) ressource inexistant(e). Plutôt que : boond_resources_update pour modifier un enregistrement existant, et boond_resources_search d'abord pour vérifier qu'il n'existe pas déjà.

  • Écriture réelle et non idempotente : deux appels identiques créent deux enregistrements (l'API ne déduplique pas).

  • Les ID de relations et les états/types sont des ID numériques BoondManager, à résoudre au préalable (recherches d'entités, boond://dictionary/*).

Returns : confirmation, ID créé, et la fiche complète. structuredContent.id est réutilisable directement pour chaîner un appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoVille
noteNoNotes
stateNoÉtat de la ressource
titleNoTitre / poste
email1NoEmail principal
phone1NoTéléphone
countryNoPays
lastNameYesNom de famille
firstNameYesPrénom de la ressource/collaborateur

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already signal readOnly=false and idempotentHint=false; the description adds useful context by explaining that two identical calls will create two records and that relation/state/type IDs must be resolved beforehand via dictionary lookups. It could go further on permissions or other side effects, but the key behavioral caution is explicit.

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 well structured: a one-line purpose, then compact sections for when/alternatives, behavioral cautions, and return usage. No sentence is redundant with schema content, and the most important routing information is front-loaded.

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 create operation with two required fields, full schema descriptions, an output schema, and relevant sibling operations, this description covers when to use it, alternatives, duplicate behavior, ID resolution, and how to chain the result. Nothing necessary for correct invocation appears 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?

Schema coverage is 100% with each field described, so the baseline is 3. The description adds extra value beyond labels by telling the agent that relation/state/type values are numeric BoondManager IDs to resolve beforehand, which matters for correctly populating fields like state.

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 'Crée un(e) ressource dans BoondManager', a specific verb+resource statement, then adds 'pour ajouter un(e) ressource inexistant(e)'. It clearly distinguishes itself from update and search operations among the resource siblings.

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?

It provides an explicit 'Quand' (when to use) and 'Plutôt que' (instead of) section, naming boond_resources_update for modifications and instructing to run boond_resources_search first to avoid duplicates. This gives an agent concrete routing guidance and preconditions.

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

boond_resources_deleteSupprimer un(e) ressourceA
Destructive

Supprime définitivement un(e) ressource de BoondManager.

Quand : uniquement sur demande explicite de l'utilisateur, et après avoir vérifié l'ID avec boond_resources_get. Plutôt que : boond_resources_update pour désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

  • ⚠️ Irréversible, sans corbeille côté API.

  • Si le client MCP annonce la capacité elicitation, une confirmation est demandée à l'utilisateur final et un refus annule l'appel (structuredContent.deleted: false + reason) ; sinon la suppression part directement.

Returns : { id, deleted, reason? } — vérifier deleted, qui vaut false en cas de refus utilisateur.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
reasonNoPrésent quand la suppression n'a pas eu lieu (ex: refus utilisateur)
deletedYes

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already signal destructiveHint=true, but the description goes further by disclosing irreversibility, absence of API-side trash, the elicitation capability flow, and the structuredContent.deleted:false refusal behavior. This is meaningful context beyond the annotations and fully aligns with them.

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 well-structured with clear sections ('Quand', 'Plutôt que', bullet points) and every sentence serves a purpose: guiding invocation, preventing misuse, disclosing side effects, and explaining the return contract. It is detailed without being bloated.

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 destructive single-parameter tool, the description is fully complete: it defines when to call, what to check first, what to prefer instead, what happens on refusal or direct execution, and what the return shape means. No critical information an agent needs to invoke correctly is 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?

Schema coverage is 100% and the single parameter id is already well documented as a numeric identifier. The description adds useful operational meaning by instructing the agent to verify the ID with boond_resources_get before calling, which goes beyond the schema's static description.

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 uses a specific verb and resource: 'Supprime définitivement un(e) ressource de BoondManager', making the destructive scope explicit. It clearly distinguishes itself from sibling tools by naming boond_resources_update as the alternative for non-destructive state changes.

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?

Provides explicit when-to-use guidance: only on explicit user request and after verifying the ID with boond_resources_get. It also gives the when-not-to-use alternative (boond_resources_update for deactivation) and recommends checking rights with boond_rights_get before attempting deletion.

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

boond_resources_expenses_reportsNotes de frais d'une ressourceA
Read-onlyIdempotent

Récupère les notes de frais d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des notes de frais mensuelles de la ressource. Le détail des lignes est dans boond_expenses_get. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the core safety profile is covered. The description adds that the result is a monthly list and that line details are accessible via boond_expenses_get, which is useful context. It does not add much beyond those points, so the description meets but does not strongly exceed the annotation baseline.

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 compact and well structured: purpose first, then 'Quand', 'Plutôt que', and 'Returns'. It uses headings to make the information scannable and contains no filler or irrelevant details. Every sentence earns its place.

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?

The tool is low complexity with a single required parameter, full schema coverage, and informative annotations. The description covers the purpose, when to use it, how to distinguish it from related tools, the return summary, and where to get line-level details. There are no significant gaps for an agent to invoke it correctly.

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?

The single 'id' parameter is fully documented in the JSON schema with a description, type, and pattern. Schema coverage is 100%, so the description is not required to carry this burden. The phrase 'par son ID' simply restates what the schema already communicates. This matches the baseline for full schema coverage.

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 leads with a specific verb and object: 'Récupère les notes de frais d'un(e) ressource, par son ID.' It clearly differentiates the tool from siblings by naming boond_resources_get, boond_resources_search, and boond_expenses_get. This leaves no ambiguity about which resource data is fetched.

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 'Quand' section explicitly states when to use this tool ('pour ne charger que cette section, sans le reste de la fiche'). The 'Plutôt que' section names the alternative tools and the condition that makes them appropriate, such as boond_resources_search when the ID is unknown. This is explicit, actionable routing guidance.

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

boond_resources_getDétails d'un(e) ressourceA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) ressource par son ID numérique.

Quand : après un boond_resources_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_resources_search si l'ID n'est pas connu (cet outil n'accepte pas de nom), ou boond_find pour résoudre un nom / un e-mail en ID.

  • tab cible un onglet précis (information, technical-data, administrative, actions…) ; sans tab, seule la fiche de base est renvoyée, pas la réunion des onglets.

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_resources_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité (numérique)
tabNoOnglet spécifique à récupérer (information, technical, financial, actions, contracts, documents)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the operation as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context: without 'tab', only the base record is returned rather than a union of tabs; unknown IDs propagate the raw BoondManager error; and IDs must come from search, never guessed.

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 well structured: a one-line purpose, a usage/alternative section, bullet points for key behaviors, and a return-value note. Every sentence earns its place, and the most important scoping information is front-loaded.

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 two-parameter read-only getter, the description covers what the tool returns, when to use it, how 'tab' changes the response, error behavior, and the source of valid IDs. The annotations cover the safety profile, and no output schema is needed because the return type is described as the API's JSON entity.

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. The description adds value beyond the schema by explaining the behavioral difference between providing 'tab' and omitting it, and by stressing that 'id' must originate from boond_resources_search. This is useful but not exhaustive since the full set of valid tab values is left open-ended.

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: 'Récupère la fiche complète d'un(e) ressource par son ID numérique.' It clearly distinguishes the tool from boond_resources_search (which returns list summaries) and boond_find (which resolves names/emails to IDs).

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 'Quand' section explicitly states when to use this tool: after boond_resources_search, to get attributes not in the list summary. The 'Plutôt que' section names alternatives and the conditions that select them, including boond_resources_search when the ID is unknown and boond_find for name/email resolution.

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

boond_resources_informationInformations générales d'une ressourceA
Read-onlyIdempotent

Récupère les informations générales (coordonnées, adresse, état civil, photo, tags, manager) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Bloc identité et rattachement hiérarchique de la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it specifies the return payload ('Bloc identité et rattachement hiérarchique de la ressource') and explicitly states 'Lecture seule', reinforcing the read-only nature. It doesn't disclose rate limits or pagination, but for a single-ID read operation with full annotation coverage, this is strong.

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 compact and front-loaded: the first sentence states the action and payload, the second gives usage context, the third names alternatives, and the final line summarizes the return and read-only nature. Every sentence earns its place with no filler or repetition of schema details.

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 single-parameter, read-only, idempotent tool with full schema coverage and no output schema, the description is complete. It tells the agent what the tool returns, when to use it, and which siblings to prefer in other cases. There is no missing information an agent would need to invoke 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 description coverage is 100%, so the schema already documents the single 'id' parameter. The description adds value by clarifying that the ID identifies a 'ressource' and that the tool returns only the general information section, not the full record. It doesn't add format details beyond the schema, but with 100% coverage and one simple parameter, the baseline is 3 and the description's contextual framing earns a 4.

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 states a specific verb ('Récupère'), a specific resource ('informations générales d'un(e) ressource'), and enumerates the exact fields returned (coordonnées, adresse, état civil, photo, tags, manager). It also explicitly distinguishes itself from sibling tools by naming boond_resources_get and boond_resources_search, making its purpose unambiguous.

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 provides explicit usage guidance: 'Quand : pour ne charger que cette section, sans le reste de la fiche.' It also names alternatives and the condition for choosing them ('Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu'). This is exactly the kind of when-to-use vs. when-not-to-use guidance an agent needs.

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

boond_resources_positioningsPositionnements d'une ressourceA
Read-onlyIdempotent

Récupère les positionnements (placements de la ressource sur des opportunités ou des projets) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des positionnements de la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal read-only, idempotent, and non-destructive behavior; the description reinforces this with 'Lecture seule' and adds useful context: it returns a list, it scopes to placements on opportunities or projects, and it loads only this section. Pagination and error behavior are not covered, but the annotations lower the burden for this simple read tool.

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 compact, front-loaded with the main action, and organized with 'Quand', 'Plutôt que', and 'Returns' labels. There is slight redundancy between 'Récupère les positionnements' and 'Returns: Liste des positionnements', but no meaningful filler.

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 a one-parameter, read-only list endpoint with no output schema, the description covers the purpose, invocation trigger, alternatives, and return kind. It could specify the fields of a positioning item or pagination behavior, but it provides enough context to select and invoke the tool correctly.

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?

The schema covers 100% of the single parameter, including type, pattern, and description. The tool description only reinforces that lookup is by resource ID and suggests boond_resources_search if the ID is unknown, which is helpful but does not add necessary semantics beyond the schema.

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 states a specific action and object: it retrieves the positionings of a resource by ID, and parenthetically clarifies what positionings are (placements on opportunities/projects). It also positions itself against boond_resources_get and boond_resources_search, helping an agent distinguish it from relevant siblings.

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 says when to use it ('only this section, without the rest of the record') and which alternatives to prefer: boond_resources_get for the base record, or boond_resources_search when the ID is unknown. This is clear and actionable guidance.

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

boond_resources_projectsProjets d'une ressourceA
Read-onlyIdempotent

Récupère les projets (missions en cours et passées auxquelles la ressource participe) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des projets de la ressource. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by specifying the subset of projects included (current and past missions) and stating that the return value is a list. It does not describe pagination or ordering, but the annotations lower the burden for this simple read-only call.

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 well-structured with labeled sections (Quand, Plutôt que, Returns) and front-loads the primary purpose. It is compact and scannable, with only minor redundancy in 'Lecture seule', which repeats the readOnlyHint annotation.

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 single-parameter read-only subresource tool with rich annotations, the description is complete: it states what the tool returns, when to use it, and which alternatives to prefer. No output schema exists, but the description sufficiently identifies the return type as a list of projects.

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 coverage is 100%: the 'id' parameter is documented with a description and regex pattern. The description simply refers to 'son ID' and adds no extra semantic detail beyond what the schema already provides. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

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 uses a specific verb and resource: 'Récupère les projets ... d'un(e) ressource, par son ID.' It further clarifies the scope (missions en cours et passées) and explicitly distinguishes itself from boond_resources_get and boond_resources_search, so an agent can tell it apart from siblings without opening schemas.

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 'Quand' section states the intended use case: loading only this section without the rest of the resource record. The 'Plutôt que' section names concrete alternatives and when they apply, providing clear routing guidance for the agent.

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

boond_resources_reference_createCréer une référence (expérience pro) sur une ressourceA

Crée une expérience professionnelle (référence) rattachée au DT d'une ressource.

Plutôt que : boond_resources_technical_data_update pour les autres blocs du dossier technique (compétences, formations, langues), que cet outil ne touche pas.

⚠️ Les références sont des sous-objets embarqués dans le DT, pas une entité REST autonome. L'outil fait read-modify-write : lit la liste actuelle via /resources/{id}/technical-data, ajoute la nouvelle référence et republie la liste complète.

Champs requis : resourceId, title, company, description. Dates : startMonth/endMonth en int 1..12 (ou string '1'..'12' sans leading zero) ; startYear/endYear en int 4 chiffres. ⚠️ "05" avec leading zero est rejeté par l'API.

Pour compléter une référence existante, utiliser boond_resources_reference_update pour ne pas dupliquer.

Returns : confirmation, nombre total de références et ID de celle créée (l'API ne le renvoie pas systématiquement).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesIntitulé du poste.
skillsNoCompétences mobilisées (texte libre, séparées par virgule).
companyYesSociété / employeur.
endYearNoAnnée (ex: 2024). Accepte int ou string '2024'.
endMonthNoMois (1-12). Accepte int ou string ('5'). ⚠️ '05' avec leading zero est rejeté par l'API Boond.
locationNoLieu (ville).
startYearNoAnnée (ex: 2024). Accepte int ou string '2024'.
resourceIdYesID de la ressource à laquelle rattacher la référence.
startMonthNoMois (1-12). Accepte int ou string ('5'). ⚠️ '05' avec leading zero est rejeté par l'API Boond.
descriptionYesDescription / missions / réalisations. ⚠️ Requis côté API Boond (1017 sans).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only signal readOnlyHint false, openWorldHint false, idempotentHint false, destructiveHint false – so the agent knows it's a mutation but not the specifics. The description discloses the read-modify-write pattern, the embedded sub-object nature, the leading-zero rejection, and that the API may not return an ID. This adds substantial behavioral context beyond the structured annotations.

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 well-structured and every sentence earns its place. It opens with purpose, then alternatives, behavior, field/date requirements, and return expectations. It uses bullet-like separators and warnings effectively. It is long but not wasteful, with each detail relevant to correct invocation.

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 10 parameters and no output schema, the description covers required fields, date constraints, the read-modify-write mechanism, and what it returns (confirmation, count, and ID with a caveat). It also alerts about API quirks (leading-zero rejection). Nothing critical seems missing for an agent 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 described. The description adds extra meaning by clarifying date formats (accepts int or string, no leading zero) and explicitly stating required fields, which reinforces the schema. While not every parameter gets new info, the date constraint note is valuable and beyond the schema's type declarations, so a 4 is appropriate.

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 object: 'Crée une expérience professionnelle (référence) rattachée au DT d'une ressource.' It clearly differentiates from sibling tools by explicitly naming boond_resources_technical_data_update for other technical-data blocks and boond_resources_reference_update for completing existing references. An agent can immediately understand what this tool does and how it differs.

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?

It states when to use this tool versus alternatives: 'Plutôt que boond_resources_technical_data_update pour les autres blocs du dossier technique...' and 'Pour compléter une référence existante, utiliser boond_resources_reference_update pour ne pas dupliquer.' This gives explicit routing, including a condition to avoid duplication, satisfying the guideline requirements.

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

boond_resources_reference_deleteSupprimer une référence (expérience pro)A
Destructive

Supprime une référence (expérience professionnelle) du DT d'une ressource. Read-modify-write : lit la liste actuelle, en retire la référence ciblée, republie le reste. ⚠️ Action irréversible — vérifier l'ID au préalable.

Quand : pour retirer une expérience saisie par erreur, sur demande explicite de l'utilisateur. Plutôt que : boond_resources_reference_update pour corriger une référence plutôt que la détruire.

Returns : confirmation et nombre de références restantes. Un referenceId introuvable renvoie isError: true avec la liste des ID présents.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesID de la ressource portant la référence (les references sont embarquées dans le DT).
referenceIdYesID de la référence à supprimer.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations' destructiveHint=true, the description adds valuable behavioral context: the read-modify-write process, the irreversible nature of the action, the warning to verify the ID, and the exact error behavior when `referenceId` is not found (`isError: true` plus the list of present IDs). No contradiction with annotations exists.

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?

Every sentence earns its place: core action, read-modify-write mechanism, irreversibility warning, usage guidance, alternative routing, and return/error behavior. The structure is front-loaded and contains no filler or redundant restatement of the title.

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 destructive, non-idempotent operation with no output schema, the description covers the action, scope, when to use it, the alternative, irreversibility, and both success and failure return signals. Nothing an agent needs to decide whether and how to call this tool 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%, with both `resourceId` and `referenceId` already well documented. The description reinforces the need to verify the ID but does not materially expand parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.

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: 'Supprime une référence (expérience professionnelle) du DT d'une ressource.' It also explicitly differentiates from the sibling `boond_resources_reference_update` by stating that the update tool corrects a reference rather than destroying it.

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 'Quand' clause gives the exact scenario: removing an experience entered by mistake or on explicit user request. It also names the alternative tool (`boond_resources_reference_update`) and the condition that selects it, leaving no ambiguity about when to use this delete operation.

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

boond_resources_reference_updateModifier une référence (expérience pro)A
Idempotent

Met à jour une référence existante. Read-modify-write sur /resources/{id}/technical-data — seuls les champs explicitement fournis remplacent ceux de la référence ciblée, les autres champs et toutes les autres références restent intacts.

Quand : pour corriger une expérience professionnelle existante. Plutôt que : boond_resources_reference_create pour en ajouter une nouvelle.

Cas d'usage type : compléter startMonth/startYear/endMonth/endYear sur une référence sans toucher au titre, à la société ou à la description.

Returns : confirmation et dossier technique republié. Un referenceId introuvable renvoie isError: true avec la liste des ID présents.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoIntitulé du poste.
skillsNoCompétences mobilisées.
companyNoSociété / employeur.
endYearNoAnnée (ex: 2024). Accepte int ou string '2024'.
endMonthNoMois (1-12). Accepte int ou string ('5'). ⚠️ '05' avec leading zero est rejeté par l'API Boond.
locationNoLieu (ville).
startYearNoAnnée (ex: 2024). Accepte int ou string '2024'.
resourceIdYesID de la ressource portant la référence (les references sont embarquées dans le DT).
startMonthNoMois (1-12). Accepte int ou string ('5'). ⚠️ '05' avec leading zero est rejeté par l'API Boond.
descriptionNoDescription / missions / réalisations.
referenceIdYesID de la référence à modifier.

TDQS

A4.6/5.0
Behavior5/5

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

With annotations already providing readOnlyHint=false, idempotentHint=true, and destructiveHint=false, the description adds substantial beyond-annotation context: the read-modify-write mechanism, that only explicitly provided fields replace values while others remain intact, the return behavior (confirmation + republished technical dossier), and the error case for an unknown referenceId. No contradiction with annotations.

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 compact and well-labeled with clear sections (purpose, when, rather-than, use case, returns). Each sentence earns its place, though it is slightly long for a 10% weight dimension; the structure compensates by making it scannable.

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 having no output schema, the description explains what is returned (confirmation and republished technical dossier) and the error format (isError: true with list of present IDs). Combined with the annotations (idempotency, non-destructive), all information an agent needs to invoke this mutation tool correctly is present.

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 the schema fully documents all 11 parameters including edge-case warnings (leading-zero months rejected). The description adds modest value by name-dropping startMonth/startYear/endMonth/endYear as typical fields to complete, but the schema already carries the semantic load. Baseline 3 is appropriate.

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 specific verb and resource ('Met à jour une référence existante' via read-modify-write on /resources/{id}/technical-data) and explicitly differentiates from the sibling boond_resources_reference_create. The partial-update semantics clarify exactly what the tool does versus alternative operations.

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 'Quand' section states when to use (correcting an existing work experience), a 'Plutôt que' section names the sibling create tool as the alternative, and a concrete typical use case (completing date fields without touching title/company/description) tells the agent exactly when this tool is the right choice.

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

boond_resources_technical_dataCompétences techniques d'une ressourceA
Read-onlyIdempotent

Récupère le profil technique (compétences, expériences, formations, certifications, langues, CV) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Profil technique de la ressource. Modifiable via boond_resources_technical_data_update. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description confirms 'Lecture seule' (redundant with annotations) and adds a useful pointer that the data is modifiable via boond_resources_technical_data_update. It does not disclose details like authentication requirements, response shape, or CV format, but the read-only behavior is well covered.

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 compact, front-loads the purpose, and organizes guidance into clear 'Quand' and 'Plutôt que' sections. Every sentence adds value; no fluff.

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 single-parameter read-only list/retrieval tool, the description covers what it returns, when to use it, what not to use instead, and how to modify the data. The annotations cover the read-only safety profile. Nothing an agent needs to decide or call 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 coverage is 100% – the only parameter 'id' is fully described as 'Identifiant unique de l'entité BoondManager (numérique)'. The description adds no extra semantics beyond confirming the resource is identified by ID. Baseline 3 is appropriate since the schema carries the meaning.

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 states a specific verb ('Récupère'), a precise resource ('le profil technique ... d'une ressource'), and the exact contents (compétences, expériences, formations, certifications, langues, CV). It also distinguishes itself from boond_resources_get (basic record) and boond_resources_search (unknown ID), making the tool's scope unmistakable.

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 'Quand' (when) section gives a concrete use case: load only this section without the rest of the record. The 'Plutôt que' section explicitly names sibling tools and the conditions for choosing them (boond_resources_get for base record, boond_resources_search when the ID is unknown). This is excellent routing guidance.

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

boond_resources_technical_data_updateMettre à jour le dossier technique d'une ressourceA
Idempotent

Met à jour le dossier technique (DT) d'une ressource : compétences, outils, langues, expertises, formations, diplômes, expérience.

Quand : pour mettre à jour le dossier technique d'une ressource (compétences, formations, langues…). Plutôt que : boond_resources_reference_create / _update / _delete pour les seules expériences professionnelles : elles vivent dans le même bloc, mais ces outils évitent d'avoir à republier le tableau entier.

Mode 'merge' (défaut, recommandé pour automation) — enrichit sans rien écraser : • skills (CSV) : concatène les compétences absentes • tools / languages : ajoute les entrées dont la clé (slug outil / langue) est nouvelle, conserve le niveau existant pour les autres • expertiseAreas, activityAreas, diplomas : ajoute les items absents • title, summary, training, experience : remplis UNIQUEMENT si actuellement vides

Mode 'replace' — remplace intégralement chaque champ fourni par la valeur passée. Les champs non passés ne sont pas touchés.

Seuls les champs explicitement fournis dans l'appel sont envoyés à l'API — un champ omis ne sera jamais réinitialisé à vide.

Les expériences professionnelles (références) ne sont PAS gérées ici : utiliser boond_resources_reference_{create|update|delete}.

Returns : confirmation et dossier technique mis à jour. Réponse inchangée si aucun champ n'était à écrire dans le mode demandé.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la ressource dont le dossier technique est mis à jour.
modeNo'merge' (défaut) enrichit le DT sans rien écraser. 'replace' remplace intégralement chaque champ fourni.merge
titleNoTitre / poste actuel.
toolsNoOutils maîtrisés avec niveau (1-4).
skillsNoCompétences libres, séparées par virgule (ex: 'Python, AWS, GCP').
summaryNoRésumé / synthèse du parcours.
diplomasNoDiplômes (texte libre, ex: 'DUT Informatique - IUT Bordeaux (2016)').
trainingNoFormations / parcours académique.
languagesNoLangues parlées avec niveau.
experienceNoAnnées d'expérience.
activityAreasNoSecteurs d'activité.
expertiseAreasNoDomaines d'expertise (texte libre, ex: 'Banque').

TDQS

A5/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining the default merge mode, per-field merge behavior, the replace mode, and that omitted fields are never reset to empty. It also states what the API returns and notes that the response is unchanged if nothing was written, making the update semantics highly transparent.

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 structured with clear headers and bullets, front-loads the core purpose, and then adds usage guidance, mode semantics, exclusions, and return behavior. Each section earns its place and no meaningful information is repeated or wasted.

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 complex tool with 12 parameters, two behavioral modes, sibling overlap, and no output schema, the description covers everything needed: purpose, when to use, alternatives, field-level merge/replace semantics, safety caveats, and return value. No critical operational aspect is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema description coverage is 100%, the description adds crucial behavioral meaning to parameters: it explains how skills, tools, languages, expertiseAreas, activityAreas, diplomas, title, summary, training, and experience behave differently in merge vs replace mode. This is exactly the kind of semantic depth an agent needs beyond the schema.

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 action verb and object: 'Met à jour le dossier technique (DT) d'une ressource', and immediately lists the affected fields (compétences, outils, langues, expertises, formations, diplômes, expérience). It also explicitly excludes professional experiences and routes those to sibling tools, distinguishing itself from boond_resources_reference_create/update/delete.

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 has a dedicated 'Quand' section stating when to use the tool and a 'Plutôt que' section naming the alternative tools for professional experiences. It also explains why the alternatives are preferable in that specific case, giving an agent actionable routing guidance.

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

boond_resources_timesheetsFeuilles de temps d'une ressourceA
Read-onlyIdempotent

Récupère les feuilles de temps (times reports) d'une ressource par son ID, avec filtre optionnel par mois/année (défaut : mois courant).

Quand : pour lister les CRA d'une ressource sur un mois donné, sans connaître leurs ID. Plutôt que : boond_timesheets_get pour le détail d'un CRA précis, boond_timesheets_search pour couvrir plusieurs ressources d'un coup.

Returns: Liste des feuilles de temps de la ressource avec jours/heures et statut.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoAnnée (ex: 2025). Si omis, année courante.
monthNoMois (1-12). Si omis, mois courant.
resourceIdYesID de la ressource

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), lowering the bar for the description. The description adds useful behavioral context beyond those annotations: the default month/year behavior ('défaut : mois courant') and the return content ('Liste des feuilles de temps ... avec jours/heures et statut'). This exceeds what the annotations provide, although it does not mention pagination or error handling, which are minor for a read-only list operation.

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 compact and front-loaded: the first sentence states the core action and the optional filter; the second sentence provides when-to-use guidance with explicit alternatives; the third sentence describes the return value. Every sentence contributes distinct information, with no redundancy or 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?

For a tool with 3 parameters, one required, no output schema, and read-only semantics, the description is complete. It covers the purpose, the exact use case, how it differs from analogous tools, the default behavior, and the shape of the returned data. Nothing an agent needs to invoke this tool 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%: all three parameters (resourceId, year, month) have descriptive entries in the schema, including the default behavior for omitted month/year. The description repeats the defaults but does not add any additional semantics beyond the schema. Per the calibration baseline, when schema coverage is high and the description adds no new parameter meaning, a score of 3 is appropriate.

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 states a specific verb ('Récupère'), a resource ('feuilles de temps d'une ressource'), and the input ('par son ID'), with optional month/year filter. It also explicitly names the sibling alternatives it is not (boond_timesheets_get, boond_timesheets_search), allowing an agent to select this tool without opening schemas. This is a clear, differentiated purpose.

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 states when to use this tool ('pour lister les CRA d'une ressource sur un mois donné, sans connaître leurs ID') and when to prefer alternatives ('Plutôt que : ... boond_timesheets_get ... boond_timesheets_search ...'). It leaves no ambiguity about the conditions that select this tool versus its siblings.

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

boond_resources_times_reportsFeuilles de temps d'une ressourceA
Read-onlyIdempotent

Récupère les feuilles de temps (CRA) d'un(e) ressource, par son ID.

Quand : pour ne charger que cette section, sans le reste de la fiche. Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu.

Returns : Liste des CRA de la ressource. Pour le détail jour par jour d'un mois, utiliser boond_timesheets_get. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns a list of CRA for the resource, is read-only, and clarifies the granularity boundary (day-by-day detail belongs to boond_timesheets_get). It doesn't describe pagination or response shape, but with annotations covering safety, this is solid.

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 compact and front-loaded: the core action is stated first, followed by usage guidance and alternatives. Every sentence earns its place, and the read-only note is a useful final flag. No filler or repetition.

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 a single-parameter, read-only list tool with full schema coverage and safety annotations, the description is nearly complete. It explains what is returned, when to use it, and which sibling to use instead. The only minor gap is the lack of detail about the response structure or pagination, but no output schema exists and the description still gives enough for correct invocation.

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 the single 'id' parameter is already fully documented in the schema. The description reinforces that the ID identifies the resource whose timesheets are fetched, but adds no new format or syntax details beyond the schema. Baseline 3 is appropriate.

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 states a specific verb ('Récupère'), a precise resource ('les feuilles de temps (CRA) d'un(e) ressource'), and the lookup key ('par son ID'). It clearly distinguishes itself from sibling tools like boond_resources_get and boond_resources_search, and even from boond_timesheets_get for day-by-day detail.

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 says when to use this tool ('Quand : pour ne charger que cette section, sans le reste de la fiche') and names alternatives with the condition that selects them ('Plutôt que : boond_resources_get pour la fiche de base, ou boond_resources_search si l'ID est inconnu'). It also routes to boond_timesheets_get for month-level day-by-day detail.

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

boond_resources_updateModifier un(e) ressourceA
Idempotent

Met à jour un(e) ressource existant(e), identifié(e) par son ID.

Quand : pour modifier quelques champs d'un enregistrement déjà en base. Plutôt que : boond_resources_create si l'enregistrement n'existe pas encore, ou boond_find pour résoudre un nom / un e-mail en ID.

  • Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place.

  • Attention aux champs de type tableau, qui sont remplacés et non fusionnés.

  • boond_rights_get dit si l'utilisateur a ce droit sur l'enregistrement avant d'essayer (un 403 évité).

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la ressource à modifier
cityNoVille
noteNoNotes
stateNoÉtat
titleNoTitre / poste
email1NoEmail principal
phone1NoTéléphone
countryNoPays
lastNameNoNom
firstNameNoPrénom

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.9/5.0
Behavior5/5

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

Adds valuable behavioral details beyond annotations: partial update semantics (only provided fields are written), array fields are replaced not merged, and a rights-check suggestion to avoid 403s. Annotations already carry idempotentHint and destructiveHint, but the description enriches operational understanding.

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?

Well-structured and economical: one-sentence purpose, clear usage guidance, targeted bullet points for behavior, and a returns note. No filler; every sentence carries operational information.

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?

Complete for an update tool: covers update target, when to use, partial update behavior, array caveat, rights check, and return value. With an output schema present, return details are not needed. An agent has everything necessary to invoke the tool 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?

The input schema already has 100% description coverage with field labels (e.g., 'Ville', 'État'). The description adds general parameter behavior—partial update and array replacement—which influences how fields are used, though it does not elaborate on individual field meanings beyond the schema.

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 explicitly that it updates an existing resource identified by its ID, and names boond_resources_create and boond_find as alternatives, distinguishing this update endpoint from creation and ID resolution. Clear verb+resource with sibling 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?

Provides an explicit 'Quand' section and 'Plutôt que' alternatives, directing to create when the record doesn't exist and to find for name/email resolution. Also recommends checking rights via boond_rights_get before attempting, giving concrete preconditions.

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

boond_rights_getDroits de l'utilisateur sur un enregistrementA
Read-onlyIdempotent

Renvoie les droits de l'utilisateur authentifié sur un enregistrement précis (lecture, écriture, suppression, actions du workflow…), tels que BoondManager les publie sur GET /{entité}/{id}/rights.

Quand : avant un *_update ou un *_delete dont l'issue est incertaine (fiche d'une autre agence, document validé, facture clôturée) — un 403 évité coûte moins qu'un 403 expliqué. Plutôt que : boond://application/current-user/rights pour les droits globaux par entité (création, périmètre) ; cet outil est le droit sur un enregistrement.

  • Lecture seule ; le payload est rendu tel quel — les clés varient selon l'entité (canWrite, canDelete, canValidate…) et n'ont pas été normalisées, la RAML ne les documente pas.

  • Les entités proposées suivent la politique d'accès du serveur.

Returns : JSON des droits sur l'enregistrement.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID numérique de l'enregistrement.
entityYesType de l'enregistrement.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds valuable context: the payload is returned as-is, keys vary by entity and are not normalized, and the RAML doesn't document them. This goes beyond annotations by setting expectations about output variability.

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 well-structured with clear sections (Quand, Plutôt que, bullets, Returns), front-loads the core purpose, and uses no redundant words. Every sentence contributes to understanding when and how to use the tool.

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 simple 2-parameter read-only tool with no output schema, the description covers the purpose, usage context, alternative, behavioral caveats, and return format. It even addresses potential variability in the response, making it fully complete for an agent 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 description coverage is 100% for both parameters, so the baseline is 3. The description adds a useful note that the available entities follow the server's access policy, which gives extra meaning about the entity parameter beyond its enum listing. This small addition justifies a 4.

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 clearly states the tool returns the authenticated user's rights on a specific record, listing example rights (read, write, delete, workflow actions) and the exact endpoint. It explicitly distinguishes itself from the global-rights tool, making its purpose unambiguous and differentiating it from siblings.

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 provides explicit when-to-use guidance (before uncertain *_update or *_delete calls) and when-not-to-use (instead of global rights via boond://application/current-user/rights), naming the alternative tool. This is exactly the kind of routing guidance that helps an agent select the correct tool.

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

boond_roles_getDétails d'un(e) rôleA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) rôle par son ID numérique.

Quand : après un boond_roles_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_roles_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_roles_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive, so the bar for added transparency is lower. The description still adds meaningful context beyond annotations: the API returns the full entity JSON as-is, the tool is read-only, and unknown IDs propagate the raw BoondManager error. This is useful behavioral disclosure beyond the structured hints.

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 compact and well-structured: a one-sentence purpose, a 'Quand' / 'Plutôt que' usage pair, a single warning bullet, and a return-type note. Every sentence earns its place, and the key scoping information is front-loaded.

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 single-parameter read tool with no output schema, the description is complete: it identifies the input, explains where the ID comes from, describes the error behavior, and states the return type ('JSON de l'entité (attributs + relations) tel que renvoyé par l'API'). No critical information needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description substantially enriches the meaning of the id parameter: it is explicitly numeric, the tool does not accept a name, and the ID must originate from boond_roles_search rather than being guessed. This goes beyond the schema's 'Identifiant unique' and gives the agent practical selection guidance.

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: 'Récupère la fiche complète d'un(e) rôle par son ID numérique.' It clearly distinguishes this tool from boond_roles_search by explaining that it returns the full record rather than a list summary, and by stating that it accepts only a numeric ID, not a name.

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 says when to use it ('après un boond_roles_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste') and when not to ('Plutôt que : boond_roles_search si l'ID n'est pas connu'). It also warns that unknown IDs surface the raw BoondManager error and that the ID must come from boond_roles_search, never a guess.

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

boond_tasks_getTâches d'un enregistrementA
Read-onlyIdempotent

Liste les tâches (todolist instanciée) d'un candidat, d'une ressource, d'un contact, d'une société, d'une opportunité, d'un projet, d'une commande, d'un produit, d'un achat, d'un positionnement, d'une facture, d'un contrat, d'une prestation ou d'un paiement.

Quand : pour voir où en est la checklist d'une fiche (tâches faites / à faire, validées par qui). Plutôt que : boond_actions_search pour les rappels datés — une tâche est un item de checklist, une action un événement daté. Aucune route de création de tâche n'est documentée par l'API.

Returns : les tâches (description, state, row, validatedAt, validatedBy, sous-tâches). Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID numérique de l'enregistrement.
entityYesType de l'enregistrement.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's 'Lecture seule' is redundant but not harmful. The description adds value beyond annotations by specifying returned fields (`description`, `state`, `row`, `validatedAt`, `validatedBy`, sub-tasks) and clarifying the 'todolist instanciée' concept and the API limitation on task creation.

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 well-structured with labeled 'Quand', 'Plutôt que', and 'Returns' sections, and the core purpose is front-loaded. The opening enumeration of entity types is long but relevant. Minor redundancy from repeating 'Lecture seule' and the schema's entity enum keeps it from a 5.

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?

With no output schema, the description compensates by listing the key returned fields and clarifying the task-versus-action distinction. It covers the main scenario, alternatives, and API limitations. It omits pagination, ordering, or response envelope details, but those are less critical for a small read-only checklist operation.

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%, with both `id` and `entity` already documented in the input schema. The description restates the entity types in prose, which is helpful for discovery, but it adds no new parameter-level meaning beyond what the enum and field descriptions provide. Baseline 3 is appropriate.

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: 'Liste les tâches ... d'un candidat, d'une ressource, ...' and enumerates the full set of applicable record types. It explicitly distinguishes tasks from `boond_actions_search`, so an agent can tell this tool apart from a close sibling.

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 'Quand' section states the precise use case: checking the state of a record's checklist (done/to-do, validated by whom). The 'Plutôt que' section names `boond_actions_search` as the alternative and explains the semantic difference (checklist item vs dated event), also noting that no task creation route exists.

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

boond_threads_getDétails d'un(e) fil de discussionA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) fil de discussion par son ID numérique.

Quand : après un boond_threads_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_threads_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_threads_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context: unknown IDs return the BoondManager error as-is, the ID must come from a prior search rather than guesswork, and the tool is read-only. It could give slightly more detail on error shape, but it goes well beyond just repeating annotations.

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 compact, well-structured with 'Quand', 'Plutôt que', and 'Returns' sections, and front-loads the core purpose. Every sentence earns its place: purpose, usage timing, alternative, error caveat, and return format.

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 single-parameter read-only getter with rich annotations, the description covers everything needed: what it returns (JSON entity with attributes and relations), when to call it, how to obtain the ID, and the error behavior. No output schema exists, but the return format is stated clearly enough.

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 coverage is 100%, with the id parameter already described as a numeric unique identifier. The description reinforces that it is numeric and must be sourced from boond_threads_search, which is helpful usage context, but it does not add substantial new meaning beyond what the schema already provides. Baseline 3 is appropriate.

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 states a specific action ('Récupère la fiche complète d'un(e) fil de discussion') on a clear resource by numeric ID. It also distinguishes this tool from boond_threads_search by noting it retrieves attributes not present in the list summary, so an agent can immediately tell it apart from its sibling.

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 when-to-use guidance is given: use after boond_threads_search to fetch attributes missing from the list. It also explicitly says not to use it when the ID is unknown and names the alternative, boond_threads_search, including the reason that this tool does not accept a name.

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

boond_timesheets_createCréer une feuille de tempsA

Crée la feuille de temps (CRA) d'un mois pour une ressource, avec ses lignes jour par jour.

Quand : pour ouvrir le CRA d'un couple (ressource, mois) qui n'existe pas encore, après boond_timesheets_default. Plutôt que : boond_timesheets_search (startMonth/endMonth + resourceId) d'abord : l'API ne déduplique pas, deux CRA peuvent coexister sur le même mois ; boond_timesheets_update si le CRA existe déjà.

  • Un CRA est un conteneur mensuel (term + resource) ; les lignes vont dans regularTimes[] (production et absences) et exceptionalTimes[] — chaque ligne = un jour, une durée, un type d'unité d'œuvre, et pour la production un couple projectId / deliveryId imputable.

  • state n'est pas un champ d'écriture : il est piloté par le workflow de validation (boond_validations_search).

  • Écriture non idempotente. Modèle d'écriture établi en lecture depuis l'API (forme des CRA existants et de /times-reports/default), pas encore éprouvé en écriture sur un tenant de test — voir CLAUDE.md.

Returns : confirmation, ID créé (structuredContent.id) et fiche du CRA.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMois du CRA (YYYY-MM). Un CRA = un mois × une ressource ; l'API ne déduplique pas.
agencyIdNoID de l'agence — voir `boond_timesheets_default`. Déduite de la ressource si omise.
resourceIdYesID de la ressource (le collaborateur dont c'est le CRA).
regularTimesNoLignes d'activité normale (production et absences). Omettre pour créer un CRA vide.
exceptionalTimesNoLignes d'activité exceptionnelle (interventions, astreintes) — types `exceptionalTime` / `exceptionalCalendar`.
informationCommentsNoCommentaires du CRA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds valuable behavioral context: 'Écriture non idempotente', the fact that 'state' is not a writable field and is controlled by the validation workflow, and the caveat that the write model is established from reading the API but not yet proven on a test tenant. This goes beyond what annotations provide, though it could have mentioned error behavior or side effects in more detail.

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 well-structured with clear sections: a one-sentence summary, a 'Quand' paragraph for usage, a 'Plutôt que' paragraph for alternatives, bullet points for key behavioral facts, and a 'Returns' line. Every sentence earns its place; no filler or repetition of schema details.

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 the tool's complexity (6 parameters, two line-item arrays, non-idempotent writes, workflow interactions), the description covers all essential aspects: when to use, what to avoid, how lines are structured, what state means, and what the return value is. The output schema exists, so return values don't need further explanation. The only minor gap is the lack of explicit error scenarios, but that's not required for correct invocation.

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 100%, so the schema already documents all parameters thoroughly. The description adds meaning by explaining the container concept ('Un CRA est un conteneur mensuel (term + resource)'), the distinction between regularTimes and exceptionalTimes, and the relationship to boond_timesheets_default for allowed project/delivery pairs and work unit types. It also clarifies that state is not a writable field, which is not obvious from the schema alone.

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 states a specific verb ('Crée'), a precise resource ('feuille de temps (CRA) d'un mois pour une ressource'), and the granularity ('avec ses lignes jour par jour'). It clearly distinguishes this from sibling tools by naming boond_timesheets_default, boond_timesheets_search, and boond_timesheets_update and explaining the exact role of each.

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 says when to use this tool ('pour ouvrir le CRA d'un couple (ressource, mois) qui n'existe pas encore, après boond_timesheets_default'), and when not to ('Plutôt que : boond_timesheets_search ... d'abord' and 'boond_timesheets_update si le CRA existe déjà'). It also warns about the API's non-deduplication behavior, which is critical for correct tool selection.

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

boond_timesheets_defaultRéférentiels de saisie d'un CRAA
Read-onlyIdempotent

Renvoie ce qu'il faut savoir avant d'écrire le CRA d'une ressource sur un mois : types d'unité d'œuvre autorisés, couples projet/prestation imputables, planning prévu et absences déjà posées.

Quand : AVANT boond_timesheets_create / boond_timesheets_update — les codes workUnitTypeReference ne sont publiés nulle part ailleurs (ni dans boond_application_dictionary, ni sur boond_agencies_get). Plutôt que : aucun autre outil ne donne ces codes ; boond_timesheets_get pour relire un CRA existant.

  • Lecture seule (GET /times-reports/default). La réponse brute est réduite : les types viennent de la ressource incluse (workUnitTypesAllowed), les imputations des projets inclus, le planning de plannedTimes.

  • Une ressource sans imputation ce mois-là ne peut saisir que des absences.

Returns : texte : agence, types d'unité d'œuvre (reference | libellé | activityType), imputations projectId / deliveryId (et batchId), planning prévu agrégé par imputation, absences déjà posées.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMois du CRA (YYYY-MM)
agencyIdNoID de l'agence, si la ressource en a plusieurs
resourceIdYesID de la ressource

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already carry readOnlyHint, idempotentHint, and destructiveHint. The description adds useful behavioral context beyond that: the exact GET endpoint, that the response is reduced and sourced from included resources (workUnitTypesAllowed, included projects, plannedTimes), and that a resource with no imputation for the month can only enter absences. This exceeds the baseline with no contradiction.

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 typical, but it is effectively structured with labelled sections ('Quand', 'Plutôt que', 'Lecture seule', 'Returns') and front-loads the main purpose. Each section carries distinct, useful information; only minor redundancy exists between the opening list and the Returns list.

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 a read-only reference tool with no output schema, it covers the essential ground: purpose, timing, alternative tools, response sources, and a key edge case (resource without imputation). It could be more precise about the exact response structure beyond 'texte', but the returned fields are enumerated, making it sufficiently complete.

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?

Input schema coverage is 100% and already describes term, agencyId, and resourceId with types, patterns, and explanations. The description does not add parameter-specific nuance beyond what is already in the schema, so the baseline score of 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?

The description opens with a specific verb and resource: it returns what is needed before writing a resource's CRA for a month (authorized unit-of-work types, chargeable project/service pairs, planned schedule, existing absences). It also distinguishes itself from the sibling create/update/get tools by name, so an agent can tell it apart without opening schemas.

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?

It explicitly states when to call it ('AVANT boond_timesheets_create / boond_timesheets_update'), why (workUnitTypeReference codes are published nowhere else), and what alternative to prefer for existing timesheets (boond_timesheets_get). This is full when/when-not/alternative guidance.

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

boond_timesheets_getDétails d'une feuille de tempsA
Read-onlyIdempotent

Récupère les informations détaillées d'une feuille de temps (CRA mensuel) par son ID.

Quand : après une recherche, pour le détail jour par jour d'un CRA identifié. Plutôt que : boond_resources_timesheets pour lister les CRA d'une ressource sans connaître leurs ID.

Returns: Données JSON complètes de la feuille de temps (jours, heures, statut, détails).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it returns day-by-day details and full JSON data, which is useful but not extensive. No contradiction with annotations.

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 compact, front-loaded with the core purpose, and every sentence earns its place: what it does, when to use it, what to use instead, and what it returns. No fluff.

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 a simple read-by-ID tool with one parameter, full schema coverage, and strong annotations, the description is nearly complete. It could mention that the ID must come from a prior search, but that is already implied by the usage guidance. The return value is described at a high level, which is sufficient given no output schema.

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% and the single parameter 'id' is already described as the unique numeric identifier. The description adds that the ID identifies a timesheet, but does not add significant new meaning beyond the schema. Baseline 3 is appropriate.

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 states a specific verb ('Récupère') and resource ('les informations détaillées d'une feuille de temps (CRA mensuel) par son ID'), clearly distinguishing it from listing tools. It also names the sibling alternative, boond_resources_timesheets, which helps an agent differentiate.

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 says when to use it ('après une recherche, pour le détail jour par jour d'un CRA identifié') and what to use instead ('Plutôt que : boond_resources_timesheets pour lister les CRA d'une ressource sans connaître leurs ID'). This is clear routing guidance.

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

boond_timesheets_updateModifier une feuille de tempsA
Idempotent

Met à jour un CRA existant : commentaires, clôture, ou remplacement complet de ses lignes.

Quand : pour compléter ou corriger le CRA d'un mois déjà ouvert (trouvé via boond_timesheets_search). Plutôt que : boond_timesheets_create si aucun CRA n'existe encore pour ce couple (ressource, mois).

  • Mise à jour partielle sur les champs simples, MAIS regularTimes / exceptionalTimes remplacent le tableau entier : relire le CRA (boond_timesheets_get), fusionner, renvoyer la liste complète — envoyer une seule ligne efface le mois.

  • state n'est pas un champ d'écriture (workflow de validation).

Returns : confirmation et fiche du CRA mis à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du CRA à modifier
closedNoClôturer le CRA
regularTimesNo⚠️ Remplace TOUTES les lignes d'activité normale — envoyer la liste complète (relire le CRA avec `boond_timesheets_get` et fusionner), pas seulement les ajouts.
exceptionalTimesNo⚠️ Remplace TOUTES les lignes d'activité exceptionnelle — même règle que `regularTimes`.
informationCommentsNoCommentaires

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description warns about the array-replacement semantics for regularTimes/exceptionalTimes (sending a single line erases the month) and clarifies that 'state' is not writable. This is critical behavioral context not covered by annotations or schema.

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 well-structured with a clear purpose statement, a 'when' section, an alternative reference, and bulleted critical notes. It is concise, front-loaded with the most important warnings, and every sentence earns its place.

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 write operation with complex array semantics, the description covers when to use, how to use (including the destructive replacement warning), what not to do (state), and the return value. With an output schema present, nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-parameter descriptions, but the description adds essential meaning: it explains the full-replacement rule for the arrays and notes the non-writable 'state' field. This goes beyond the schema, providing operational context that an agent needs to call the tool 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 clearly states the verb 'update', the resource 'existing CRA', and what it does (comments, closure, or complete line replacement). It distinguishes from create via explicit alternative, making the tool's purpose unambiguous.

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?

Explicitly states when to use (for an already open month found via search) and when not to (use create if no CRA exists). Names the alternative tool (boond_timesheets_create) and the condition that selects it, leaving no room for inference.

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

boond_todolists_createCréer une todolistA

Crée une todolist (modèle de tâches) avec ses tâches ordonnées, applicable à un type de fiche.

Quand : pour définir une checklist réutilisable (onboarding consultant, préparation de facturation…). Plutôt que : boond_todolists_search d'abord : l'API ne déduplique pas les titres.

  • Corps déduit de models.todolist (title, profile, profileTypesOf, profileStates, tasks[], relation agencies) — non éprouvé sur un tenant de test.

  • Les tâches d'une fiche (boond_tasks_get) ne se créent pas ici : aucune route de création de tâche n'est documentée.

Returns : confirmation et ID de la todolist (structuredContent.id).

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYesTâches de la liste, dans l'ordre.
titleYesTitre de la todolist.
profileNoFiche sur laquelle la liste s'applique (ex. candidate, resource, opportunity…).
agencyIdsNoAgences concernées (IDs).
profileStatesNoÉtats de fiche concernés (IDs de dictionnaire).
profileTypesOfNoTypes de fiche concernés (IDs de dictionnaire).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIdentifiant de l'entité créée/modifiée
typeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only say the call is not read-only, not idempotent, and not destructive; the description adds meaningful behavior: the API does not deduplicate titles, the request body is inferred from models.todolist and is not proven on a test tenant, and record tasks cannot be created here. It also discloses the return shape (confirmation and structuredContent.id). No contradiction with annotations.

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 compact, uses short sections and bullets, and fronts the core purpose before the when/alternative guidance and caveats. No sentence is redundant: every line contributes purpose, timing, risk, scope boundary, or return information.

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 a 100%-documented schema and an output schema present, the description still provides critical context that is not in structured fields: when to use it, that titles are not deduplicated, that the body is unverified on a real tenant, and that record-level task creation is not available. The description fully equips an agent to call the tool correctly.

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 the schema already explains title, tasks, profile, profileTypesOf, profileStates, and agencyIds. The description reinforces that tasks are ordered and mentions the models.todolist source, but does not add per-parameter meaning; the note about an 'agencies' relation does little to clarify the actual agencyIds parameter.

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 ('Crée') and precise object ('todolist (modèle de tâches) avec ses tâches ordonnées, applicable à un type de fiche'). It also distinguishes itself from related endpoints by clarifying that record-level tasks are not created here and by naming boond_todolists_search in the alternative guidance. This prevents confusion with boond_todolists_get, boond_todolists_search, and boond_tasks_get.

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?

It provides explicit when-to-use scenarios ('définir une checklist réutilisable') with concrete examples (onboarding consultant, préparation de facturation). It also gives a when-not-to and alternative: it warns not to rely on boond_todolists_search first because the API does not deduplicate titles, and clarifies this endpoint is not for creating record-level tasks (boond_tasks_get).

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

boond_todolists_getDétails d'un(e) todolistA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) todolist par son ID numérique.

Quand : après un boond_todolists_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_todolists_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_todolists_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond that: invalid IDs cause the raw BoondManager error, IDs must come from boond_todolists_search rather than guesses, and the return is the entity JSON with attributes and relations. No contradiction with annotations.

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 compact, front-loads the core action, and uses short labelled sections ('Quand', 'Plutôt que', 'Returns') plus a bullet for error handling. Every sentence adds distinct information with no filler or redundancy.

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 simple get-by-id tool with one parameter and no output schema, the description is complete: it covers the ID source, error behavior, and return shape, and the call sequence with boond_todolists_search. Nothing essential for correct invocation 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?

The schema covers the single id parameter at 100%, including the numeric pattern and description, so the baseline is 3. The description mainly restates that the ID is numeric and adds provenance guidance ('l'ID doit venir de boond_todolists_search'), but it does not add significant format or meaning beyond what the schema already provides.

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 ('Récupère la fiche complète d'un(e) todolist par son ID numérique') and contrasts the full entity with the list summary, distinguishing it from boond_todolists_search. An agent can tell what this tool does and how it differs from its closest sibling.

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?

It explicitly states when to use the tool (after a search, to obtain attributes missing from the list summary) and when not to ('Plutôt que : boond_todolists_search si l'ID n'est pas connu'). It also names the alternative tool and clarifies that this tool accepts an ID, not a name.

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

boond_validations_getDétails d'une validationA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) validation par son ID numérique.

Quand : après un boond_validations_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_validations_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_validations_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is already known. The description adds valuable behavioral context beyond that: unknown IDs pass through the raw BoondManager error, and the output shape is a JSON entity with attributes and relations. This meaningfully supplements the annotations without contradicting them.

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 well-structured with a purpose sentence, explicit 'Quand'/'Plutôt que' sections, a bullet point, and a Returns line. Every sentence earns its place, and the most important scoping information is front-loaded. There is no fluff or repetition of the title.

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 single-parameter get tool with full schema coverage and strong annotations, this description is complete. It explains when to call it, how to source the ID, what happens on an unknown ID, and what the response contains, which is especially important because there is no output schema. Nothing needed for correct invocation is 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?

Schema coverage is 100%, so the schema already documents the id parameter as a numeric identifier. The description adds semantic constraint beyond the schema by stating the ID must come from boond_validations_search and must never be guessed, and it warns that invalid IDs produce raw errors. This is genuinely useful value beyond the structured field definition.

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 explicitly states the tool fetches the complete record of a validation by numeric ID, naming the resource and the operation. It also distinguishes it from the sibling search tool by noting it retrieves attributes absent from list summaries. This is a clear verb+resource+scope statement that differentiates it from boond_validations_search.

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 provides explicit when-to-use guidance: after boond_validations_search, to get attributes not in the list summary. It also states when not to use it (if the ID is unknown) and explicitly directs the agent to the alternative, boond_validations_search, including the key limitation that this tool doesn't accept a name.

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

boond_validations_updateValider ou refuser un CRA / une note de frais / une absenceA
Idempotent

Approuve (validate) ou refuse (reject) une validation en attente : CRA, note de frais ou demande d'absence.

Quand : après boond_validations_search (validationStates: ["waitingForValidation"]) et l'examen du document (boond_timesheets_get, boond_expenses_get, boond_absences_get). Plutôt que : boond_validations_get pour relire la validation avant de décider ; il n'existe pas d'autre chemin d'écriture sur le workflow de validation (state n'est pas un champ des CRA / notes / absences).

  • PUT /validations/{id} avec state: validated | rejected (le vocabulaire de validationStates) et reason. Route déduite du modèle validation et non éprouvée sur un tenant de test : un 404 / 405 doit être remonté tel quel.

  • Un refus demande une confirmation à l'utilisateur final si le client MCP déclare la capacité elicitation (désactivable par BOOND_MCP_CONFIRM_REJECT=0) ; un refus de confirmer renvoie decided: false sans appel API.

  • Idempotent : rejouer la même décision renvoie le même état.

Returns : { id, decided, state, documentType, documentId, reason? } et la fiche de la validation mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la validation (ligne de `boond_validations_search`), pas celui du CRA / de la note / de l'absence.
reasonNoMotif, recommandé sur un refus — transmis dans `reason`.
decisionYesvalidate → `validated` ; reject → `rejected` (confirmation demandée à l'utilisateur si le client la supporte).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
stateNoÉtat demandé (`validated` / `rejected`)
reasonNo
decidedYesfalse quand l'utilisateur a refusé la confirmation (aucun appel API)
documentIdNo
documentTypeNoType du document validé (timesreport / absencesreport / expensesreport)

TDQS

A4.9/5.0
Behavior5/5

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

It goes well beyond the annotations: rejection requires user confirmation when elicitation is supported and is disabled by BOOND_MCP_CONFIRM_REJECT=0, declined confirmation returns decided:false without an API call, the operation is idempotent, and the inferred PUT route may return 404/405 that should be surfaced as-is. This is rich, non-obvious behavioral context that annotations alone do not provide.

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?

Dense and front-loaded: purpose in the first sentence, followed by when, alternatives, route risk, confirmation behavior, idempotence, and return shape. Every sentence contributes essential information; no filler or repetition of the schema.

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 mutation tool with an output schema and annotations, the description fully covers what an agent needs: decision semantics, prerequisites, route caveats, confirmation flow, idempotence, and return value shape. Nothing critical is 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real value: it maps decision values (validate → validated, reject → rejected), explains that id is the validation id and not the document id, and notes that reason is recommended for refusals. This clarifies usage beyond the raw schema.

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 states exactly what the tool does: 'Approuve ou refuse une validation en attente : CRA, note de frais ou demande d'absence' with the specific verbs validate/reject and the resource (validation). It also distinguishes itself from siblings like boond_validations_search and boond_validations_get, and clarifies there is no other write path in the workflow.

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 says when to use it: after boond_validations_search and document review via boond_timesheets_get, boond_expenses_get, boond_absences_get. It also tells the agent what NOT to use instead (boond_validations_get for re-reading) and that no alternative write path exists on the validation workflow.

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

boond_webhooks_getDétails d'un(e) webhookA
Read-onlyIdempotent

Récupère la fiche complète d'un(e) webhook par son ID numérique.

Quand : après un boond_webhooks_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_webhooks_search si l'ID n'est pas connu (cet outil n'accepte pas de nom).

  • Un ID inconnu remonte l'erreur BoondManager telle quelle — l'ID doit venir de boond_webhooks_search, jamais d'une supposition.

Returns : JSON de l'entité (attributs + relations) tel que renvoyé par l'API. Lecture seule.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de l'entité BoondManager (numérique)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark readOnlyHint, idempotentHint, and destructiveHint, and the description adds meaningful behavior beyond that: unknown IDs return the raw BoondManager error, and the ID must come from boond_webhooks_search, never from guessing. It also clarifies the return payload is the entity JSON with attributes and relations.

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 well-structured and front-loaded: purpose, usage conditions, an exclusion rule, an error caveat, and return type. Each section earns its place and there is 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?

For a single-parameter read-only getter with no output schema, this description covers the essential context: when to use it, when not to, how the ID must be obtained, what errors look like, and what the return value contains. Nothing needed for correct invocation is 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?

Schema coverage is 100% and already describes 'id' as the unique numeric identifier. The description adds valuable parameter guidance by emphasizing that the ID must come from boond_webhooks_search and that the tool does not accept a name, which prevents a common misuse.

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: 'Récupère la fiche complète d'un(e) webhook par son ID numérique.' It clearly distinguishes itself from the search sibling by stating that this tool retrieves full attributes missing from the list summary.

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 'Quand' and 'Plutôt que' sections explicitly say to use this tool after boond_webhooks_search and to prefer search when the ID is not known. It also states that this tool does not accept a name, giving an agent concrete routing rules.

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

boond_workflow_absences_a_validerDemandes d'absence à validerA
Read-onlyIdempotent

Liste les demandes d'absence en attente de validation sur une équipe, les recoupe avec les absences déjà posées sur la période, et prépare la décision (validation ou refus motivé) pour chacune.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP absences_a_valider si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
moisNoMois des absences : `YYYY-MM`, « ce mois », « mois dernier », « avril 2026 »… Défaut : le mois en cours.
manager_idNoManager pour restreindre à son équipe (les demandes de ses N-1). Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds critical behavior beyond them: 'N'appelle aucune API BoondManager et ne lit aucune donnée' and 'rien n'est fait par cet appel'. This makes clear the tool is a server-side runbook generator, not an actual data reader or validator.

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 well-structured with Quand, Plutôt que, and Returns sections, and it front-loads the essential no-API behavior. Some redundancy exists between 'N'appelle aucune API...' and 'rien n'est fait par cet appel', and the text is moderately long, but each section earns its place.

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 a two-parameter, no-API, runbook-returning tool, the description is nearly complete: it explains the output type, that the model must execute the generated calls, and which alternative to prefer. With no output schema, it could be slightly more explicit about the runbook's format and edge cases, but it covers all essential invocation information.

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?

The input schema has 100% description coverage and already thoroughly documents both `mois` and `manager_id`, including formats, automatic resolution via `boond_resources_search`, and the default 'mon équipe' scope. The description itself adds no additional parameter-level semantics, so the baseline score of 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 specific verb and resource: lists absence requests pending validation for a team, cross-references them with already-recorded absences, and prepares a validation or motivated refusal decision. It also clearly distinguishes itself from the MCP prompt variant and from data-reading tools by stating it returns a runbook and makes no API call.

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 'Quand' section explicitly says to use it for this multi-step scenario without having to discover the tool chain and filter names manually. The 'Plutôt que' section names the MCP prompt `absences_a_valider` as the preferred alternative when supported, giving explicit routing guidance.

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

boond_workflow_alertes_contratsFins de contrat et périodes d'essai à venirA
Read-onlyIdempotent

Liste les contrats de travail qui se terminent et les périodes d'essai qui expirent dans les prochains jours sur un périmètre, pour anticiper renouvellements, ruptures et entretiens de fin de PE.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP alertes_contrats si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour restreindre à son équipe. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
horizon_joursNoNombre de jours à anticiper — entier (défaut: 45). Ex: '30' pour les échéances les plus proches.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds critical context beyond annotations: it makes no BoondManager API call, reads no data, generates the response server-side, and leaves execution of the returned runbook to the model. This fully clarifies the tool's side-effect profile.

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 well-structured with labeled sections for purpose, when to use, alternatives, behavior, and return value. It is somewhat verbose and repeats the idea that nothing is executed by the call, but the key information is front-loaded and scannable.

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?

With no output schema, the description appropriately explains the return value: a text runbook with ordered Boond calls and exact filters, and that the model must execute them. It also covers the no-side-effect behavior. It lacks examples or error-handling notes, but for this workflow tool the essential context is present.

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 the schema already documents both parameters in detail, including defaults and the manager resolution behavior. The description mentions 'périmètre' and 'filtres exacts' but adds no meaningful parameter semantics beyond what the schema provides.

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 description opens with a specific purpose: listing upcoming contract endings and expiring trial periods to anticipate renewals, ruptures, and end-of-trial interviews. It also clarifies that the output is a runbook of Boond calls, distinguishing it from direct data tools. However, the first sentence could be misread as actually querying data, while later text says no data is read, creating slight ambiguity.

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 'Quand' section explicitly states when to use the tool: to run a multi-step scenario without having to find the right tool sequence and filter names. The 'Plutôt que' section names the alternative MCP prompt `alertes_contrats` and gives the condition for preferring it, which is clear and actionable.

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

boond_workflow_attention_du_jourQu'est-ce qui demande mon attention aujourd'hui ?A
Read-onlyIdempotent

Lit les indicateurs d'alerte configurés sur le tableau de bord (fins de contrat, périodes d'essai, CRA / notes / absences non validés, actions à venir…), exécute la recherche correspondante avec les seuils configurés, et classe ce qui en sort par urgence.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP attention_du_jour si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already mark it readOnly and idempotent; the description adds that it makes no BoondManager API calls, reads no data, and generates the response server-side. However, the first sentence says it reads alert indicators and executes searches, directly contradicting the later clarification. This internal contradiction muddies the behavioral expectations despite the additional disclosure.

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 description is structured into 'Quand', 'Plutôt que', and 'Returns' sections, which aids readability. However, it is somewhat verbose, and the misleading opening sentence adds noise. The clarification that no API is called appears twice, which could be tightened.

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 a tool with no parameters and no output schema, the description explains the return format (a text runbook with ordered calls and exact filters), the fact that the model must execute the calls, and the absence of API calls or data reads. This is sufficient for an agent to call the tool correctly and know what to do with the result.

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?

The input schema has zero parameters and schema coverage is 100% trivially. With no parameters, the description does not need to explain parameter meaning, and it appropriately doesn't. The baseline for zero parameters is 4, and the description provides no conflicting guidance.

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 description states that the tool returns a text runbook listing the ordered Boond calls to execute, with exact filters, for the 'attention due today' scenario. The opening sentence describes a sequence of reading indicators and executing searches, but the Returns section clarifies that the tool actually generates instructions rather than performing those actions. It does not explicitly compare to sibling workflow tools, but the scenario is distinct enough.

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 'Quand' section explicitly says to use it to execute a multi-step scenario without having to find the right tool chain and filter names. The 'Plutôt que' section names an alternative MCP prompt and specifies when to prefer this tool (when prompts/get is poorly handled, e.g., claude.ai). It also states that no API is called and that the model must execute the returned runbook, defining the expected usage pattern.

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

boond_workflow_candidats_pour_opportuniteCandidats correspondant à une opportunitéA
Read-onlyIdempotent

À partir d'une opportunité (ses outils, expertise, mobilité), trouve les candidats actifs qui matchent.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP candidats_pour_opportunite si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
opportunity_idYesOpportunité à pourvoir. Accepte soit l'ID numérique, soit l'intitulé de l'opportunité (résolution auto via `boond_opportunities_search`).

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description explicitly states that this tool makes no BoondManager API call, reads no data, and is generated server-side by the MCP. It also clarifies that it returns only a runbook and that nothing is executed by the call itself. This fully discloses the non-executing side-effect-free behavior and does not contradict the read-only/idempotent annotations.

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 front-loaded with the main behavior and uses clear labels (Quand, Plutôt que, Returns) that make it scannable. It is slightly longer than strictly necessary and repeats the no-API/no-action point at the end, but every section contributes useful guidance. This earns a 4 rather than a 5.

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 workflow tool with no output schema, the description explains what is returned (an ordered runbook with exact filters), what the model is expected to do afterward, and why no data is read. It also covers when to prefer this tool over the equivalent prompt and how the input opportunity_id is resolved. No essential information 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?

The schema already covers the single parameter fully, stating that it accepts a numeric ID or an opportunity title and auto-resolves via `boond_opportunities_search`. The description adds contextual framing about tools, expertise, and mobility but no new parameter-level semantics. With 100% schema coverage, the baseline of 3 is appropriate.

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 description opens with a specific behavior: from an opportunity's tools, expertise, and mobility, it identifies matching active candidates. It then clarifies that the actual deliverable is a runbook text, which distinguishes it from a direct search tool. However, it does not explicitly differentiate from sibling workflow or search tools, so it falls short of a 5.

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 'Quand' section states precisely when to use this tool: to run the multi-step scenario without having to determine the correct tool sequence and filter names. The 'Plutôt que' section explicitly names the alternative MCP prompt `candidats_pour_opportunite`, explains it is identical content, and states when this tool variant is preferable (clients that mishandle prompts/get, e.g. claude.ai). This is clear when/when-not guidance.

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

boond_workflow_cartographie_competencesCartographie des compétences d'un périmètreA
Read-onlyIdempotent

Produit une cartographie des compétences techniques d'un périmètre (équipe, agence, …) : top compétences, compétences rares (risque bus-factor) et compétences manquantes vs opportunités ouvertes.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP cartographie_competences si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoNombre de compétences à mettre en avant dans le top — entier (défaut: 20).
agency_idNoAgence pour cartographier toute une agence (alternatif à `manager_id`). Accepte soit l'ID numérique, soit le nom de l'agence (résolution auto via `boond_agencies_search`).
manager_idNoManager pour cibler son équipe. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses the crucial non-obvious behavior: 'N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP' and clarifies it returns only a runbook — 'rien n'est fait par cet appel'. This prevents an agent from assuming the tool returns real data. No contradiction with annotations; the disclosure is consistent and additive.

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 average but well-structured with clear sections (Quand, Plutôt que, the no-API note, Returns). The purpose is front-loaded and every section earns its place, especially the behavioral clarifications that are genuinely load-bearing. Slightly verbose in the 'Plutôt que' explanation, but not padded.

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?

Covers the purpose, output format (runbook en texte), behavior (server-side, no execution), and alternatives. It's complete for an agent to call this tool correctly. The only gap is not contrasting with sibling workflow tools such as boond_workflow_recherche_profil_competences, which would help disambiguation, but nothing an agent needs to invoke it 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% and each parameter (top_n, agency_id, manager_id) is richly documented in the schema, including default values, mutual exclusivity (alternatif à manager_id), and auto-resolution behaviors. The description adds no parameter detail, but per the rubric the baseline of 3 applies when the schema carries the full burden, which it does here.

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 description states a clear verb and resource: 'Produit une cartographie des compétences techniques d'un périmètre (équipe, agence, …)' with a specific deliverable (top compétences, rares, manquantes). This distinguishes it from the many boond_ API tools, but it does not explicitly contrast with the sibling workflow boond_workflow_recherche_profil_competences (searching for a profile by skills), so differentiation among workflow siblings is only implicit.

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?

Provides explicit guidance with a 'Quand' section (run the multi-step scenario without reconstructing the tool sequence yourself) and a 'Plutôt que' section naming the prompt alternative `cartographie_competences`, including the trade-off (identical content, no tool call consumed, for clients that handle prompts/get poorly). It doesn't address when to choose this over other workflow tools, but the when-to-use and when-not-to guidance is solid.

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

boond_workflow_cvs_a_mettre_a_jourAudit fraîcheur des CV / dossiers techniquesA
Read-onlyIdempotent

Identifie les ressources dont le CV ou le dossier technique est obsolète, incomplet, ou manquant. Priorise celles bientôt sur le marché (en intercontrat ou disponibles à court terme).

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP cvs_a_mettre_a_jour si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour cibler son équipe. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
seuil_moisNoUn dossier technique non touché depuis plus de N mois est considéré obsolète — entier (défaut: 12).

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint), the description reveals a crucial behavioral trait: 'N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.' It also specifies the exact output behavior: 'Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer ... rien n'est fait par cet appel.' This goes well beyond what the annotations convey and prevents the agent from expecting side effects or data reading.

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 average but well-structured with clear labels ('Quand', 'Plutôt que', 'Returns') and front-loaded with the core purpose. Each section earns its place; the 'Plutôt que' detour is slightly verbose for a generic description but still highly relevant for tool selection. It is efficient enough for an agent to parse quickly.

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 workflow tool with no output schema and no required parameters, the description fully explains what the agent will receive ('un runbook en texte'), that no API calls or data reads happen, and that the model must execute the returned steps afterwards. This is complete and leaves no ambiguity about how to handle the tool's result.

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% since both manager_id and seuil_mois have descriptive text. The tool description does not add any additional parameter semantics — it merely repeats the workflow context. As a result, the baseline score of 3 is appropriate: the schema does the heavy lifting and the description neither improves nor detracts from it.

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: 'Identifie les ressources dont le CV ou le dossier technique est obsolète, incomplet, ou manquant' and adds a prioritization criterion ('Priorise celles bientôt sur le marché'). This clearly distinguishes it from the many sibling CRUD/search tools and even from other workflow_* tools by stating it produces a runbook rather than performing operations.

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?

Explicitly provides 'Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres' and gives an explicit alternative with conditions: 'Plutôt que : le prompt MCP `cvs_a_mettre_a_jour` si le client l'expose'. This tells the agent when to use the tool and when to prefer a cheaper alternative, which is exactly what an agent needs.

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

boond_workflow_factures_a_relancerFactures impayées à relancerA
Read-onlyIdempotent

Liste les factures impayées avec date d'échéance dépassée, regroupées par société. Optionnellement filtrable sur une société spécifique.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP factures_a_relancer si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
society_idNoSociété ciblée pour la relance. Accepte soit l'ID numérique, soit le nom de la société (résolution auto via `boond_companies_search`).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive. The description adds valuable context: it does not call any BoondManager API and does not read any data, with the response generated server-side. It also clarifies that nothing is executed by this call—only a runbook is returned. This goes well beyond the annotations and gives the agent a precise understanding of side effects and security.

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 structured with clear sections (purpose, when to use, alternative, behavior, returns). It is somewhat lengthy but each part adds value, and the most important purpose is front-loaded. The only slight inefficiency is the repetitive mention of the runbook concept, but overall it's well-organized.

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 workflow tool with a single optional parameter and no output schema, the description fully explains the output (a runbook with exact filters), the internal behavior (no API calls), and the usage context. It also provides an alternative path. An agent has everything needed to decide whether to call it and what to expect.

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% for the single parameter. The description adds meaning: society_id accepts either a numeric ID or a comany name, with automatic resolution via `boond_companies_search`. This clarifies the input format and resolution behavior, which is helpful for correct invocation, exceeding the baseline.

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 description states the tool lists unpaid invoices with past due date, grouped by company, and optionally filtered by company. However, the initial sentence 'Liste les factures impayées' could be misread as returning actual data, while later it clarifies the tool returns a runbook (ordered instructions) rather than the data itself. This nuance is eventually clear but initially slightly ambiguous. It is distinct from sibling workflow tools because of its specific scenario.

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?

Explicitly states when to use it ('pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres') and directly names an alternative (the MCP prompt `factures_a_relancer`), explaining the trade-off (avoids an API call but only for clients that handle prompts/get poorly). This leaves no doubt about selection.

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

boond_workflow_fiche_consultantFiche complète d'un collaborateurA
Read-onlyIdempotent

Vue 360° d'une ressource : info, profil technique, positionnements, absences, CRA récents.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP fiche_consultant si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_idYesRessource ciblée. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds genuinely useful context beyond that: it reveals the tool makes no BoondManager API calls, reads no data, and returns an instruction runbook that the model must execute itself ('rien n'est fait par cet appel'). This is critical behavioral disclosure consistent with the annotations.

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 purpose is front-loaded and the usage guidance is tight and precise. There is minor redundancy: the point that the tool performs no API call and no side effect is stated twice ('N'appelle aucune API... ne lit aucune donnée' and 'rien n'est fait par cet appel'), which could be trimmed without losing meaning.

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 a single-parameter workflow tool with strong annotation coverage (readOnly, idempotent, non-destructive), the description covers the essential ground: purpose, when to use, the alternative to prefer, behavioral reality (no API call), and return format (ordered runbook with exact filters). The agent knows what it receives and that it must execute the listed calls itself. Remaining gaps are minor.

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 coverage is 100% and the resource_id parameter description in the schema is already rich — it documents both accepted formats (numeric ID or 'Prénom Nom') and the automatic resolution via boond_resources_search. Since the schema carries the full parameter documentation, the description itself adds nothing beyond it, 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?

The opening line 'Vue 360° d'une ressource : info, profil technique, positionnements, absences, CRA récents' states a specific deliverable for a specific resource, and the Returns section clarifies it generates a runbook of calls rather than data. This clearly distinguishes it from the many direct-data siblings like boond_resources_get, boond_resources_information, and the other boond_workflow_* scenario tools, each with its own focused purpose.

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 'Quand' section states the exact trigger (running the multi-step scenario without figuring out the tool sequence), and 'Plutôt que' names the precise alternative (the `fiche_consultant` MCP prompt) along with the condition for choosing this variant (clients that handle prompts/get poorly, e.g. claude.ai). This is model-level routing guidance that leaves nothing to inference.

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

boond_workflow_fin_de_missionAnticipation des fins de missionA
Read-onlyIdempotent

Liste les ressources dont la mission se termine dans les prochains jours, pour anticiper le repositionnement. Met en évidence les fins imminentes sans relais identifié.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP fin_de_mission si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour restreindre à son équipe. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
horizon_joursNoNombre de jours à anticiper — entier (défaut: 60). Ex: '30' pour ne voir que les fins très proches.

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses a key behavioral trait beyond annotations: it 'n'appelle aucune API BoondManager et ne lit aucune donnée' and the response is generated server-side. This is not implied by readOnlyHint or idempotentHint; it adds critical insight into what the tool actually does (produces a runbook) without performing real data operations. No contradiction with annotations.

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 organized into clear blocks: summary, 'Quand', 'Plutôt que', no-API note, and 'Returns'. It is reasonably concise, but the 'Quand' section partially repeats the purpose and could be tightened. Still, every sentence contributes useful context, and it is front-loaded.

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?

The description explains the output is a text runbook with ordered calls and exact filters, which is sufficient for an agent to know how to use the result. Given the tool has no output schema and is a workflow orchestration helper, this is adequate. It also mentions the alternative prompt for context, making the definition complete enough for correct usage.

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 coverage is 100% and both parameters (manager_id and horizon_jours) are already well-documented with types, defaults, and resolution behavior. The description does not add extra semantic value beyond naming the horizon implicitly in the first sentence. Per the rubric, baseline 3 is appropriate because the schema carries the full burden.

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 states a specific action: 'Liste les ressources dont la mission se termine dans les prochains jours' and adds the nuance of highlighting imminent ends without identified relay. It clearly distinguishes this workflow tool from the many sibling workflow tools by naming the specific scenario, so an agent can select it appropriately.

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 provides 'Quand' and 'Plutôt que' sections, naming the alternative MCP prompt and the condition for choosing this tool instead (clients that mishandle prompts/get). It also clarifies that no API call is made, implying this is for generating steps rather than direct data access. This is clear, actionable guidance.

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

boond_workflow_ingest_communicationIngérer un e-mail ou un compte rendu dans le CRMA
Read-onlyIdempotent

À partir d'un e-mail, d'un compte rendu d'appel ou d'une note de réunion collés dans la conversation : extrait les entités (contact, société, engagements), déduplique contre BoondManager, présente le plan d'écriture, puis crée ou rattache contact / société / action après validation explicite. Aucun Sampling : c'est le modèle qui extrait.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP ingest_communication si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
contenuNoLe texte brut (e-mail, CR d'appel, note). Absent → prendre ce qui a été collé dans la conversation.
type_actionNoNature de l'action à tracer : appel, email, rendez-vous, note… Défaut : déduite du texte.
opportunite_idNoOpportunité à laquelle rattacher l'action. Accepte soit l'ID numérique, soit l'intitulé de l'opportunité (résolution auto via `boond_opportunities_search`).

TDQS

A4.6/5.0
Behavior5/5

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

The description clearly discloses that the tool makes no BoondManager API calls, reads no data, and performs no action itself — it only generates a runbook server-side. This adds crucial context beyond the annotations (readOnlyHint, idempotentHint, destructiveHint) and clarifies that the 'creates or attaches' wording refers to future model-executed steps, not this call. No contradiction with annotations.

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 well-structured with clear sections (process, Quand, Plutôt que, bullet, Returns) and front-loaded with the core behavior. It is somewhat long (~180 words) for a tool description, but nearly every sentence earns its place by clarifying usage, behavior, or return format.

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 complex workflow tool, the description covers the entire agent-visible lifecycle: input source, extraction logic, deduplication, write-plan generation, the explicit distinction that this call does nothing, and the expected return format (ordered list of Boond calls with filters). An agent knows exactly what to do after invoking it.

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?

Input schema coverage is 100%, so the schema already fully documents all three parameters. The description reinforces that `contenu` can be omitted (pasted content), but adds no new semantic detail about `type_action` or `opportunite_id` beyond what the schema provides. Baseline 3 is appropriate.

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 states a specific verb (ingérer) and resource (e-mail/compte rendu/note), and outlines the full process: extraction, deduplication, write plan, and creation/attachment after validation. It also distinguishes itself from the MCP prompt alternative (`ingest_communication`) and from the many sibling workflow tools by naming the exact scenario it covers.

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 'Quand' section explicitly says when to use it (multi-step scenario without needing to find the tool chain/filters), and the 'Plutôt que' section names the alternative (the MCP prompt `ingest_communication`) and when to prefer this tool (clients that handle `prompts/get` poorly, e.g., claude.ai). This is direct, specific guidance.

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

boond_workflow_marge_projetMarge d'un projet : simulé vs réaliséA
Read-onlyIdempotent

Compare le chiffre d'affaires, les coûts et la marge simulés d'un projet à son réalisé (productivité, reporting), prestation par prestation, et explique l'écart.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP marge_projet si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodeNoFenêtre du reporting : `YYYY-MM-DD..YYYY-MM-DD`, « ce mois », « 2026 »… Défaut : toute la vie du projet.
project_idYesProjet à analyser. Accepte soit l'ID numérique, soit le libellé du projet (résolution auto via `boond_projects_search`).

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses that it 'N'appelle aucune API BoondManager et ne lit aucune donnée' and that the response is generated server-side as a runbook. It also states that the model must execute the calls afterward, which is a non-obvious behavioral trait an agent needs to set expectations correctly.

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 well-structured and front-loaded: outcome first, then when to use, alternative, behavior, and return value. It is economical, though there is minor redundancy between 'N'appelle aucune API...' and 'rien n'est fait par cet appel', which prevents a 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?

With no output schema, the description fully covers the return value: a textual runbook with the ordered Boond calls and exact filters, and the explicit instruction that the model must execute them. Combined with full schema parameter documentation and clear annotations, the agent has everything needed to invoke it correctly.

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%, and the schema already documents both parameters well, including the date-range format and `project_id` auto-resolution via `boond_projects_search`. The description adds no parameter-specific detail beyond framing the project comparison scenario, so the baseline of 3 is appropriate.

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 states a concrete scenario ('Compare le chiffre d'affaires, les coûts et la marge simulés d'un projet à son réalisé... prestation par prestation') and immediately clarifies the actual deliverable is a runbook rather than a live data call. It also distinguishes itself from sibling data tools by explicitly saying it calls no API and reads no data.

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 'Quand' block explicitly tells an agent when to use this tool: to run a multi-step scenario without figuring out the tool sequence and filter names. The 'Plutôt que' block names the preferred alternative (the MCP prompt `marge_projet`) and the condition for choosing this variant, so the agent has clear routing guidance.

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

boond_workflow_pipeline_commercialPipeline commercial sur une périodeA
Read-onlyIdempotent

Analyse les opportunités commerciales avec closing prévu dans la période donnée : répartition par état, CA pondéré, top opportunités.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP pipeline_commercial si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_finYesFin de période (YYYY-MM-DD).
date_debutYesDébut de période (YYYY-MM-DD).
manager_idNoCommercial ciblé. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = équipe de l'utilisateur courant via `perimeterDynamic: ['data']`.

TDQS

A4.3/5.0
Behavior4/5

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

The description explicitly discloses that the tool makes no API calls and reads no data, with the response generated server-side. This is valuable behavioral context beyond the annotations (readOnlyHint, idempotentHint, destructiveHint). It also clarifies the return type (a runbook text) and that the model must execute the listed calls afterward. Minor gap: no mention of error cases or what happens if the period is invalid, but the core non-execution behavior is well disclosed.

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 well-structured with clear sections (Quand, Plutôt que, Returns) and front-loads the core purpose. It's slightly verbose with the explanation about prompts/get handling, but every sentence serves a purpose in guiding tool selection and expectations. The formatting aids readability for an agent.

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 a tool that returns a runbook rather than data, the description adequately covers what the agent needs: the purpose, the alternative, the non-execution behavior, and the return format. The absence of an output schema is compensated by the explicit 'Returns : un runbook en texte' statement. Minor gap: no example of the runbook format or the exact filter names, but the description states the runbook will contain them, which is sufficient for selection.

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 the schema already documents all three parameters. The description adds context for `manager_id` by explaining the resolution via `boond_resources_search` and the default scope, but this is already in the schema description. The description doesn't add much beyond the schema, so baseline 3 is appropriate.

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 clearly states the tool's function: analyzing commercial opportunities with closing in a given period, providing distribution by state, weighted revenue, and top opportunities. It distinguishes itself from the sibling `pipeline_commercial` prompt and other workflow tools by explicitly stating it's a multi-step scenario runner that returns a runbook rather than performing data operations.

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 states when to use this tool ('pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils'), and provides a clear alternative ('Plutôt que : le prompt MCP `pipeline_commercial` si le client l'expose'). It also explains the fallback rationale for clients that handle prompts/get poorly, giving an agent clear routing logic.

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

boond_workflow_preparation_entretienPréparer un entretien candidatA
Read-onlyIdempotent

Rassemble en une fiche tout ce que BoondManager sait d'un candidat (parcours, compétences, CV, positionnements, historique des échanges) et, si une opportunité est visée, confronte le profil au besoin pour lister les points à creuser.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP preparation_entretien si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idYesCandidat reçu en entretien. Accepte soit l'ID numérique, soit « Prénom Nom » du candidat (résolution auto via `boond_candidates_search`).
opportunity_idNoOpportunité visée, pour comparer profil et besoin. Accepte soit l'ID numérique, soit l'intitulé de l'opportunité (résolution auto via `boond_opportunities_search`).

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description explicitly states 'N'appelle aucune API BoondManager et ne lit aucune donnée', that the response is generated server-side, and that 'rien n'est fait par cet appel.' This fully discloses the no-side-effect, no-data-fetch behavior and sets accurate expectations that the model must execute the returned runbook afterward.

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 well-structured with front-loaded purpose and clear labeled sections ('Quand', 'Plutôt que', 'Returns'), making it scannable for an agent. It is somewhat redundant around the no-API/no-data-read behavior, repeated in three different phrasings, which keeps it from earning a 5.

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 workflow tool with no output schema, the description fully covers what the agent needs: when to use it, what it returns ('un runbook en texte — la liste ordonnée des appels Boond'), that nothing is executed, and how the parameters relate to the scenario. The schema already documents the parameter types and resolution behavior, so no essential choice or invocation details are 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?

The input schema already provides 100% coverage with detailed descriptions for both parameters, including auto-resolution through `boond_candidates_search` and `boond_opportunities_search`. The tool description adds little beyond reinforcing that opportunity_id is used when an opportunity is targeted, so it does not meaningfully increase parameter understanding beyond the schema baseline.

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 description names the target resource (candidate, optional opportunity) and the workflow action ('Rassemble en une fiche... confronte le profil au besoin'), and it clarifies that the output is a runbook of API calls rather than executed work. It is distinguishable from sibling tools by its 'préparer entretien' focus and multi-step orchestration. However, the first sentence slightly conflicts with the later claim that the tool reads no data, since 'rassemble... tout ce que BoondManager sait' can be read as actually consolidating data rather than generating a plan.

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 has an explicit 'Quand' section explaining to use it when the agent needs a multi-step scenario without rediscovering the tool chain and filter names. It also provides a direct alternative ('Plutôt que : le prompt MCP `preparation_entretien`') with the condition of when that prompt should be preferred, including the compatibility caveat for clients that handle `prompts/get` poorly.

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

boond_workflow_preparation_facturationPréparation de la facturation mensuelleA
Read-onlyIdempotent

Pour un mois : CRA validés, prestations en cours et commandes concernées, reste à facturer par commande, factures déjà émises — et la liste de ce qui bloque (CRA manquants ou non validés).

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP preparation_facturation si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
moisNoMois à facturer : `YYYY-MM`, « ce mois », « mois dernier », « avril 2026 »… Défaut : le mois en cours.
manager_idNoManager pour restreindre à son équipe (les projets de ses N-1). Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description specifies that the tool makes no BoondManager API call, reads no data, and generates its answer server-side. It also clarifies the exact division of labor: this call only produces the runbook and the model executes the calls afterward.

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 structured with labeled sections ('Quand', 'Plutôt que', 'Returns') and front-loads the output content. It is slightly redundant: the last line repeats the 'rien n'est fait' point already made in the bullet above, but overall every section earns its place.

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 no output schema, the description compensates by specifying the return type (text runbook), its content (ordered calls, exact filters, blockers), and its intended follow-up (model executes). Combined with the stated when-to-use and no-side-effect behavior, an agent has everything needed to invoke it correctly.

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 coverage is 100% and both `mois` and `manager_id` are fully documented in the input schema, so the description carries no additional parameter-level semantics. The first line 'Pour un mois' loosely relates to `mois` but adds no format or default details over the schema.

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 definition states a concrete deliverable: a text runbook listing the ordered Boond calls with exact filters for monthly invoicing. It differentiates from the `preparation_facturation` MCP prompt as an alternative, and its 'calls no Boond API and reads no data' clause separates it from all data-access sibling tools.

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?

A dedicated 'Quand' section tells the agent to use it for multi-step invoicing scenarios when it needs the correct tool sequence and filter names. A 'Plutôt que' section explicitly names the MCP prompt `preparation_facturation` as the preferred choice when the client supports `prompts/get`, and explains this variant is for clients like claude.ai that handle prompts/get poorly.

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

boond_workflow_preparation_rdv_clientPréparer un rendez-vous clientA
Read-onlyIdempotent

Brief de rendez-vous pour une société cliente : contacts, opportunités en cours, projets et prestations, factures impayées, derniers échanges — et les sujets à aborder.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP preparation_rdv_client si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
society_idYesSociété cliente. Accepte soit l'ID numérique, soit le nom de la société (résolution auto via `boond_companies_search`).
horizon_joursNoProfondeur de l'historique des échanges en jours — entier (défaut: 90).

TDQS

A4.6/5.0
Behavior5/5

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

The annotations indicate read-only and idempotent behavior, but the description goes further: it explicitly says no Boond API is called, no data is read, the response is generated server-side, and the returned runbook is only for the model to execute afterward. This prevents an agent from expecting live data or side effects.

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 front-loaded with purpose and uses compact, well-labeled sections for when to use it, what to prefer instead, and what it returns. Minor redundancy between 'N'appelle aucune API BoondManager et ne lit aucune donnée' and 'rien n'est fait par cet appel' keeps it from a 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?

Despite having no output schema, the description defines the return value as a text runbook containing ordered Boond calls with exact filters, clarifies that nothing is executed by the call itself, and explains the alternative prompt path. Together with the schema-covered parameters, an agent has everything needed to select and invoke this tool correctly.

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?

The input schema already describes both parameters fully: society_id accepts an ID or name with auto-resolution via boond_companies_search, and horizon_jours has a default of 90. The description adds no parameter-level meaning beyond the schema, so with 100% schema coverage the baseline 3 is appropriate.

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 concrete deliverable ('brief de rendez-vous') and enumerates its contents: contacts, current opportunities, projects and services, unpaid invoices, recent exchanges, and topics to cover. It then positions the tool as a runbook generator that makes no Boond API calls, clearly distinguishing it from the many direct data-retrieval sibling tools.

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 'Quand' paragraph states the intended trigger: running a multi-step scenario without the model having to rediscover the tool chain and exact filter names. The 'Plutôt que' paragraph names the MCP prompt alternative and the exact condition for choosing this tool instead (clients that handle prompts/get poorly).

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

boond_workflow_purge_rgpd_candidatsPurge RGPD des candidats inactifsA
Read-onlyIdempotent

Identifie les candidats sans mise à jour ni positionnement actif depuis N mois, présente la liste à confirmer, puis supprime candidat par candidat avec confirmation — jamais en lot silencieux.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP purge_rgpd_candidats si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour restreindre à son équipe (les candidats suivis par ses N-1). Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
mois_inactiviteNoAncienneté minimale de la dernière mise à jour, en mois — entier (défaut: 24).

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive; the description goes further by stating it calls no BoondManager API, reads no data, and generates the response server-side. The line 'rien n'est fait par cet appel' and 'jamais en lot silencieux' add important behavioral context beyond the annotations.

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 well-organized with 'Quand', 'Plutôt que', and 'Returns' sections, and each sentence contributes either usage guidance or behavioral clarity. It is a bit long and the opening scenario sentence could be tightened to avoid the false impression of direct deletion, but the structure compensates.

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 a workflow runbook with no output schema, the description explains the return value (ordered list of Boond calls with exact filters) and that the model must execute them. It also covers the no-API, no-data-read behavior and the prompt alternative, so an agent has enough to decide and invoke correctly. The only remaining gap is clarifying that the 'confirmation list' is part of the runbook, not an interactive UI.

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 coverage is 100% and both parameters have descriptive help text, so the description need not repeat them. The description indirectly references the N-month inactivity concept but adds no extra detail about manager_id or mois_inactivite beyond the schema. Baseline 3 is appropriate.

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 description names a concrete workflow: identify inactive candidates, propose a confirmation list, and delete individually, while the Returns line clarifies the tool actually produces a runbook rather than executing the deletion. It distinguishes itself from the MCP prompt variant and from direct mutation tools by stating no API is called. The opening sentence still reads as if the tool performs deletions, creating mild ambiguity.

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 'Quand' states it is for running a multi-step scenario without finding the tool chain and filter names manually. 'Plutôt que' names the exact alternative (prompt purge_rgpd_candidats) and the condition for choosing this tool (clients that mishandle prompts/get). This is strong route-selection guidance.

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

boond_workflow_recap_hebdoRécap hebdomadaire (moi + mon équipe)A
Read-onlyIdempotent

Compile en une vue ce qui s'est passé / va se passer cette semaine pour moi et mon équipe : opportunités, projets, absences, CRA.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP recap_hebdo si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
semaineNoSemaine ciblée (ex: 'cette semaine', 'semaine dernière', 'semaine prochaine', '2026-W14'). Défaut: cette semaine. Résolue en dates ISO côté serveur.

TDQS

A4.1/5.0
Behavior5/5

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

The description goes beyond the readOnly/idempotent annotations by clearly stating it calls no BoondManager API, reads no data, and generates the response server-side. It also discloses that nothing is executed by this call and that the model must run the returned runbook afterward. This is excellent behavioral transparency with no contradiction.

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 organized with clear sections ('Quand', 'Plutôt que', 'Returns') and front-loads the core purpose. It is somewhat longer than necessary, with slight redundancy between 'N'appelle aucune API... ne lit aucune donnée' and 'rien n'est fait par cet appel', but each section earns its place.

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 no output schema, the description fully explains what the tool returns: a text runbook with ordered Boond calls and exact filters. It also clarifies the execution model, the no-side-effect nature, and the alternative prompt path. An agent has enough context to invoke this tool correctly and interpret its result.

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?

The input schema already covers the single parameter `semaine` with a clear description and example values, so the schema carries the semantic burden. The tool description does not add any additional parameter-level meaning. Baseline 3 is appropriate given 100% schema description coverage.

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 description states a specific purpose: compile a weekly recap runbook for the user and their team covering opportunities, projects, absences, and CRA. It clearly distinguishes this from direct data tools by explaining it returns an ordered list of Boond calls rather than data. However, it does not explicitly differentiate itself from similar workflow siblings like boond_workflow_synthese_equipe.

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 explicitly provides 'Quand' guidance: use it to run a multi-step scenario without figuring out the tool chain and filter names yourself. It also names the alternative MCP prompt `recap_hebdo` and explains when this tool variant is preferable, which is strong usage guidance. It does not, however, discuss when not to use it relative to other workflow tools.

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

boond_workflow_recherche_profil_competencesRecherche multi-source d'un profil par compétencesA
Read-onlyIdempotent

Recherche un profil correspondant à un mix de compétences libres, en croisant ressources internes et candidats. Sortie classée par adéquation. Utile en amont d'un staffing ou d'une opportunité non encore qualifiée.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP recherche_profil_competences si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour restreindre le scope ressources internes. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Sinon scope ouvert (toute l'organisation accessible).
competencesYesCompétences recherchées en texte libre (ex: 'Java Spring AWS Kubernetes', '.NET Azure DevOps').
dispo_avantNoDisponibilité requise au plus tard à cette date (YYYY-MM-DD). Si fourni, applique `period: 'available'` + `endDate`.
experience_minNoNiveau d'expérience minimum en texte libre (ex: '5 ans', 'senior'). Le modèle le mappera vers `experiences` via le dictionnaire.
inclure_candidatsNo'oui' (défaut) pour inclure aussi les candidats actifs ; 'non' pour ne chercher que dans les ressources internes.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds crucial behavior: it explicitly states 'N'appelle aucune API BoondManager et ne lit aucune donnée' and that the response is generated server-side. This goes beyond the read-only hint by explaining that no external data is touched at all—important for a tool that only produces instructions. No contradictions with annotations.

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 well-structured with a clear first-line summary, then a 'Quand' section, a 'Plutôt que' section, and a 'Returns' section. Every sentence adds value: it explains the multi-step nature, the alternative, the no-API behavior, and the output format. No fluff or repetition; front-loaded with the core purpose.

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 workflow tool that returns a runbook, the description covers all necessary context: what it does, when to use it, what it returns (a text runbook), and that it does not execute anything. It also explains the reasoning for its existence (prompts/get compatibility). Given no output schema, it explicitly describes the return format. Nothing an agent needs to decide whether to invoke it 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%: each parameter already has a detailed description (e.g., manager_id accepts ID or 'Prénom Nom', dispo_avant applies period/endDate). The tool description does not add significant meaning beyond that; it mentions 'mix de compétences libres' and that filters will be exact, but these are not parameter-specific. Baseline of 3 applies because the schema carries the semantic weight.

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 clearly states the tool's purpose: it searches for a profile matching a mix of free-form skills, crossing internal resources and candidates, and outputs results ranked by fit. It also frames the use case ('en amont d'un staffing ou d'une opportunité non encore qualifiée') and distinguishes it from sibling direct-search tools by clarifying it returns a runbook rather than executing queries. This is a specific verb+resource with a well-defined scope.

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 says when to use it ('Quand : pour dérouler ce scénario multi-étapes') and names a concrete alternative ('Plutôt que le prompt MCP recherche_profil_competences'), even explaining why this variant exists (for clients that handle prompts/get poorly). This gives the agent clear routing logic and no ambiguity about when to choose it over siblings.

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

boond_workflow_relance_craRelance des CRA du moisA
Read-onlyIdempotent

Pour un mois et une équipe : qui n'a pas saisi son CRA, qui l'a saisi sans le soumettre, et quels CRA attendent la validation du manager — avec la liste à relancer et les validations à traiter.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP relance_cra si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
moisNoMois du CRA : `YYYY-MM`, « ce mois », « mois dernier », « avril 2026 »… Défaut : le mois en cours.
manager_idNoManager pour restreindre à son équipe (les CRA de ses N-1). Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description goes further: 'N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.' It also clarifies the return behavior: 'Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.' This fully discloses that the tool does not execute anything, which is beyond what annotations alone convey. No contradiction.

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 well-structured with clear sections (Quand, Plutôt que, N'appelle aucune API, Returns) and every sentence adds value. It front-loads the purpose, then gives usage context, then clarifies limitations and return type. There is no filler or repetition. The length is justified by the richness of information needed for a workflow tool.

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 workflow tool with no output schema, the description fully specifies the return format ('un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts') and clarifies that it does not itself execute the calls. Both parameters are fully documented in the schema. The description also covers when to use and when not to use, making it complete for an agent to decide to call and interpret the result. Nothing critical 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%: both `mois` and `manager_id` have detailed descriptions covering defaults, accepted formats, and resolution behavior. The description does not add parameter-specific information beyond what the schema already provides, but it does reinforce the scope ('Pour un mois et une équipe') and mentions the alternative to avoid an API call. Since the schema carries the full load, a baseline 3 is appropriate.

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 precise statement of what the tool does: 'Pour un mois et une équipe : qui n'a pas saisi son CRA, qui l'a saisi sans le soumettre, et quels CRA attendent la validation du manager — avec la liste à relancer et les validations à traiter.' It names the specific resource (CRA) and the exact outputs (list to follow up, validations to process). It also distinguishes itself from the alternative prompt `relance_cra` and from sibling workflow tools by its unique focus on CRA follow-up. No ambiguity.

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 states when to use it: 'Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres.' It also names the alternative: 'Plutôt que : le prompt MCP `relance_cra` si le client l'expose — contenu identique, sans consommer un appel d'outil.' This tells the agent exactly when to prefer this tool over the prompt, fulfilling the highest bar for usage guidance.

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

boond_workflow_relance_devisDevis et propositions à relancerA
Read-onlyIdempotent

Trouve les opportunités en phase de proposition envoyée / négociation sans action depuis N jours sur un périmètre, et prépare les relances.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP relance_devis si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager pour restreindre à son équipe (les opportunités de ses N-1). Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
jours_sans_actionNoSilence minimal en jours pour relancer — entier (défaut: 15).

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the readOnly/idempotent annotations by disclosing that the tool calls no BoondManager API, reads no data, and generates its response server-side. It also states the output is an ordered text runbook that the model must execute, preventing the agent from assuming side effects or real data retrieval. No contradiction with annotations.

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 compact and front-loaded, with clear separation between purpose, usage conditions, alternative, and return contract. The critical 'no API/no data' caveat is a standalone bullet, and every sentence earns its place.

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 having no output schema, the description fully specifies the return value: a text runbook with ordered Boond calls and exact filters. It also explains the division of labor, default scoping, and why this variant exists, leaving no critical gap for an agent to call it correctly.

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 coverage is 100% and both parameters are already richly documented in the input schema: manager_id covers formats, resolution via boond_resources_search, and default perimeter; jours_sans_action covers the default of 15. The tool description itself adds no additional parameter-level semantics, so the high-coverage baseline of 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?

The description opens with a specific verb and resource: it finds opportunities in 'proposition envoyée / négociation' phase with no action for N days and prepares follow-ups. It clearly frames the tool as a multi-step workflow runbook, and the French title distinguishes it from sibling workflows such as relance_cra or factures_a_relancer.

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 gives an explicit 'Quand' section and an explicit 'Plutôt que' alternative: use this tool to run the multi-step scenario without looking up the correct tool chain and filter names, and prefer the `relance_devis` prompt when exposed because it is identical and avoids a tool call. This provides a clear decision rule for the agent.

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

boond_workflow_saisir_craSaisir ou compléter un CRAA
Read-onlyIdempotent

Saisit la feuille de temps (CRA) d'un collaborateur pour un mois : référentiels de saisie, planning prévu, vérification d'un CRA existant, récapitulatif validé par l'utilisateur, puis création ou mise à jour.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP saisir_cra si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
termNoMois du CRA (YYYY-MM). Défaut : mois en cours.
consignesNoPrécisions libres (ex: « 2 jours de RTT les 12 et 13 », « demi-journée le 20 sur le projet X »).
resource_idNoCollaborateur concerné. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, `boond_application_current_user` est appelé pour le récupérer.

TDQS

A4.6/5.0
Behavior5/5

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

Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds significant behavioral detail: it calls no BoondManager API, reads no data, is generated server-side, and returns a runbook for the model to execute. This prevents an agent from assuming the tool creates or updates a CRA directly despite its name and title.

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 well-structured with clear sections for purpose, when to use, alternative, behavioral note, and return value. It is slightly repetitive in stating that no API is called and that the output is a runbook, but overall every sentence earns its place.

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 no output schema, the description thoroughly explains the return value (a text runbook with ordered Boond calls and exact filters) and the model's responsibility to execute them. Combined with annotations that cover safety, the definition is complete for an agent to invoke correctly.

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 all three parameters are already well documented with defaults, formats, and resolution rules. The description adds no extra parameter-level semantics; it is reasonable to rely on the schema here.

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 first states the user goal (enter or complete a CRA) and then precisely defines the tool's action: generating an ordered runbook of Boond calls rather than performing them directly. It distinguishes itself from the `saisir_cra` MCP prompt and from sibling workflow tools by clarifying its server-side, instruction-only role.

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 'Quand' section explicitly gives the use case: running a multi-step CRA scenario without manually chaining tools and filter names. The 'Plutôt que' section names the exact alternative (`saisir_cra` prompt) and the condition for choosing this tool over it (clients that handle `prompts/get` poorly), which is concrete and actionable.

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

boond_workflow_staffing_disponibleConsultants disponibles pour un staffingA
Read-onlyIdempotent

Identifie les ressources internes disponibles pour un staffing sur une fenêtre donnée, avec filtres optionnels par compétences (texte libre) et périmètre. Trie par date de disponibilité croissante et propose les profils prioritaires à activer.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP staffing_disponible si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesFin de fenêtre de staffing (YYYY-MM-DD).
manager_idNoManager pour restreindre à son équipe. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`.
start_dateYesDébut de fenêtre de staffing (YYYY-MM-DD).
competencesNoCompétences recherchées en texte libre (ex: 'Java Spring AWS'). Le modèle les mappera vers `tools` via le dictionnaire.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description discloses a critical behavioral trait: it calls no BoondManager API and reads no data, with the response generated server-side. It also states that nothing is executed by the call and that the model must run the returned runbook, which is essential for an agent to predict side effects and next steps.

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 well organized with labeled sections ('Quand', 'Plutôt que', the bullet, and 'Returns'), and the core function is near the front. It is slightly longer than necessary and repeats the no-side-effect point, and the opening 'Identifie' claim is less precise than the later 'Returns a runbook' statement. Still, every section earns its place.

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 no output schema, the description clearly defines the return as a text runbook listing ordered Boond calls with exact filters, and states that the model must execute them. It also covers the no-data/no-API behavior and the conditions that trigger use of this variant. An agent has enough information to call this tool correctly.

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 the baseline applies. The description mentions optional filters by competences and perimeter and notes free-text competences, but it does not add detail beyond the schema's own parameter descriptions. The manager_id resolution and default scope are already documented in the schema.

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 description opens with a concrete action ('Identifie les ressources internes disponibles pour un staffing'), names the window and optional filters, and mentions sorting and priority profiles. It also distinguishes this tool from the equivalent MCP prompt. However, the first sentence is slightly misleading because the tool actually returns a runbook of calls to make rather than directly identifying resources; the 'Returns' paragraph corrects this, but only later.

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 'Quand' paragraph explicitly states when to use the tool: to run a multi-step staffing scenario without manually chaining tools and filter names. The 'Plutôt que' paragraph names the alternative MCP prompt `staffing_disponible` and gives the precise condition for choosing this variant, namely clients that handle `prompts/get` poorly. This is explicit, actionable usage guidance.

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

boond_workflow_synthese_equipeSynthèse d'une équipeA
Read-onlyIdempotent

Produit un état d'équipe : qui est sur quoi, qui est absent, qui est disponible. Si manager_id est omis, utilise l'utilisateur courant comme manager.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP synthese_equipe si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodeNoPériode d'analyse (ex: 'cette semaine', 'mois dernier', '2026-04', 'avril 2026', '2026-W14'). Défaut: mois en cours. Résolue en dates ISO côté serveur.
manager_idNoManager ciblé. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, l'outil `boond_application_current_user` est appelé pour le récupérer.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, but the description adds crucial context beyond that: 'N'appelle aucune API BoondManager et ne lit aucune donnée' — clarifying the tool is a server-side runbook generator that doesn't touch the API. This prevents a model from expecting actual data retrieval. No contradiction with annotations.

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?

Well-structured with labeled sections (Quand, Plutôt que, Returns) and front-loaded purpose. Each sentence earns its place, though there is minor redundancy with schema content regarding parameter behavior.

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 a complex workflow tool with no output schema, the description explains the return value (a text runbook with ordered calls and exact filters), when to use it, and what it doesn't do. Both parameters are covered at 100% schema coverage, making this quite complete for an agent to call correctly.

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 coverage is 100%, so both parameters are already well documented in the schema, including the server-side resolution of periode to ISO dates and manager_id via boond_resources_search. The description restates the manager_id omission fallback (uses current user), which is also in the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

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 outcome: 'Produit un état d'équipe : qui est sur quoi, qui est absent, qui est disponible.' It clearly states what the tool produces (a team status overview) and immediately clarifies it generates a runbook rather than executing anything, distinguishing it from the many data-reading sibling tools.

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?

Provides explicit 'Quand' (when to use: to run a multi-step scenario without figuring out tool chains and filter names) and 'Plutôt que' (prefer the MCP prompt `synthese_equipe` if available) guidance, naming the alternative and the condition that selects it. Nothing is left to inference.

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

boond_workflow_traiter_note_de_fraisTraiter un justificatif en note de fraisA
Read-onlyIdempotent

À partir d'une photo ou d'un PDF de justificatif joint à la conversation, extrait les données de la dépense et crée la ligne de frais correspondante dans BoondManager, après récapitulatif et validation explicite. Aucun montant n'est inventé : un champ illisible est demandé à l'utilisateur.

Quand : pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils et les bons noms de filtres. Plutôt que : le prompt MCP traiter_note_de_frais si le client l'expose — contenu identique, sans consommer un appel d'outil. Cette variante existe pour les clients qui traitent mal prompts/get (claude.ai notamment).

  • N'appelle aucune API BoondManager et ne lit aucune donnée : la réponse est générée côté serveur MCP.

Returns : un runbook en texte — la liste ordonnée des appels Boond à effectuer, avec les filtres exacts. C'est ensuite au modèle de les exécuter ; rien n'est fait par cet appel.

ParametersJSON Schema
NameRequiredDescriptionDefault
termNoMois de la note de frais (YYYY-MM). Défaut : mois de la date du justificatif.
contexteNoPrécision libre sur la dépense (ex: « déjeuner client Dupont », « A/R Nancy en voiture »).
project_idNoProjet à imputer / refacturer. Accepte soit l'ID numérique, soit le libellé du projet (résolution auto via `boond_projects_search`).
resource_idNoCollaborateur concerné. Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`). Si absent, `boond_application_current_user` est appelé pour le récupérer.

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnly/idempotent annotations, the description discloses that no Boond API is called, no data is read, the response is generated server-side, and the tool returns a textual runbook for the model to execute. It also adds the no-invented-amount and user-request-for-illegible-field behaviors; only the earlier 'crée la ligne' phrasing slightly muddles this otherwise transparent picture.

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 text is organized into clear sections (Quand, Plutôt que, Returns) with the key constraints front-loaded and no filler. It is a bit long and repeats the no-API idea, but each section earns its place.

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?

The description covers when to use it, the alternative to prefer, side-effect guarantees, the return format, validation, and how illegible fields are handled—especially valuable given there is no output schema. A short example or a less contradictory opening sentence would make it fully complete.

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?

Input-schema description coverage is 100%, so the schema already explains all four parameters, including the auto-resolution behavior for project_id and resource_id. The tool description adds no parameter-level detail beyond that, so it stays at the schema-covered baseline.

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 description names a concrete scenario and outcome—extract data from a receipt and create an expense line in BoondManager after explicit validation—and states a clear invariant (no invented amounts). It is not a tautology and is specific enough to distinguish from most siblings, but the first sentence says the tool itself creates the line while the Returns section says it only emits a runbook, which leaves the tool's immediate effect slightly ambiguous.

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 'Quand' block explicitly says this tool is for running a multi-step workflow without manually chaining tools and filters. The 'Plutôt que' block names a specific alternative (the MCP prompt `traiter_note_de_frais`) and gives the condition under which each should be chosen, so an agent needs no inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 113 tool updatesv2.17.0
    • Changedboond_absences_create5 fields changed
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "État de la demande (0=en attente, 1=validé, 2=refusé...)",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • changedInput schema / properties / typeOf / description
        Previous value: -"Libellé de l'absence (congé payé, RTT, maladie, sans solde...)"New value: +"Libellé de l'absence (congé payé, RTT, maladie, sans solde...) — porté par `title` ; le type effectif est `workUnitTypeReference`."
      • changedInput schema / properties / workUnitTypeReference / description
        Previous value: -"Référence du type d'unité d'absence, défaut 1"New value: +"Code `reference` du type d'absence, publié par `boond_absences_default` (`workUnitTypesAllowed` de la ressource : RTT, maladie, congés payés…) — nulle part ailleurs. Défaut 1 (à confirmer avec le default)."
    • Addedboond_absences_default
    • Changedboond_absences_search19 fields changed
      • changedInput schema / properties / endMonth / description
        Previous value: -"Mois de fin de période (YYYY-MM)"New value: +"Mois de fin de période (YYYY-MM) — obligatoire pour l'API"
      • addedInput schema / properties / endMonth / pattern
        Added value: +"^\\d{4}-\\d{2}$"
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"Filtrer par ID ressource (référence keywords COMP<id>)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / resourceTypes
        Added value: +{
        +  "description": "IDs de types de ressource — `boond://dictionary/typeOf/resources`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startMonth / description
        Previous value: -"Mois de début de période (YYYY-MM)"New value: +"Mois de début de période (YYYY-MM) — obligatoire pour l'API"
      • addedInput schema / properties / startMonth / pattern
        Added value: +"^\\d{4}-\\d{2}$"
      • addedInput schema / properties / validationStates
        Added value: +{
        +  "description": "États du workflow de validation : waitingForValidation (à valider), validated, rejected.",
        +  "items": {
        +    "enum": [
        +      "waitingForValidation",
        +      "validated",
        +      "rejected"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "startMonth",
        +  "endMonth"
        +]
    • Changedboond_absences_update3 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "État de la demande",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
    • Changedboond_actions_create7 fields changed
      • addedInput schema / properties / candidateId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / opportunityId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / positioningId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_actions_search28 fields changed
      • addedInput schema / properties / actionTypes
        Added value: +{
        +  "description": "IDs de types d'action — `boond://dictionary/actions/<entité>` (les types sont déclarés par entité de rattachement).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / candidateId / description
        Previous value: -"Filtrer par ID candidat"New value: +"Filtrer par ID candidat (référence keywords CAND<id>)"
      • addedInput schema / properties / candidateId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / contactId / description
        Previous value: -"Filtrer par ID contact"New value: +"Filtrer par ID contact (référence keywords CCON<id>)"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "Date de fin (YYYY-MM-DD), à utiliser avec `period`.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / flags
        Added value: +{
        +  "description": "IDs de drapeaux (flags) — `boond_flags_search`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceId
        Added value: +{
        +  "description": "Filtrer par ID facture (référence keywords FACT<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / opportunityId
        Added value: +{
        +  "description": "Filtrer par ID opportunité (référence keywords AO<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / orderId
        Added value: +{
        +  "description": "Filtrer par ID bon de commande (référence keywords BDC<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Champ de date borné par `startDate` / `endDate` : started (date de l'action), created, updated.",
        +  "enum": [
        +    "started",
        +    "created",
        +    "updated"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Fenêtre relative appliquée à `period` (à la place de `startDate` / `endDate`) : today, thisWeek, thisMonth, lastMonth, thisYear, untilToday…",
        +  "enum": [
        +    "today",
        +    "yesterday",
        +    "tomorrow",
        +    "thisWeek",
        +    "lastWeek",
        +    "nextWeek",
        +    "thisMonth",
        +    "lastMonth",
        +    "nextMonth",
        +    "thisTrimester",
        +    "lastTrimester",
        +    "nextTrimester",
        +    "thisSemester",
        +    "lastSemester",
        +    "nextSemester",
        +    "thisYear",
        +    "lastYear",
        +    "nextYear",
        +    "thisFiscalYear",
        +    "lastFiscalYear",
        +    "nextFiscalYear",
        +    "untilToday"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / projectId
        Added value: +{
        +  "description": "Filtrer par ID projet (référence keywords PRJ<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"Filtrer par ID ressource (référence keywords COMP<id>)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "Date de début (YYYY-MM-DD), à utiliser avec `period`.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
    • Changedboond_actions_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Addedboond_advantages_create
    • Addedboond_advantages_default
    • Changedboond_advantages_search7 fields changed
      • addedInput schema / properties / advantageTypes
        Added value: +{
        +  "description": "Types d'avantage à conserver, au format `<reference>_<agencyId>` (référence du type + ID d'agence, ex: '2_1').",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / keywords
        Removed value: -{
        -  "description": "Mots-clés de recherche",
        -  "type": "string"
        -}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"ID de la ressource dont on liste les avantages (route /resources/{id}/advantages)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / required
        Added value: +[
        +  "resourceId"
        +]
    • Addedboond_alerts_search
    • Changedboond_application_dictionary1 field changed
      • changedInput schema / properties / dictionaryType / description
        Previous value: -"Type de dictionnaire (ex: typeOf/actions, typeOf/absences, states/candidates, states/resources, states/opportunities, states/projects, states/invoices, countries, currencies, languages...)"New value: +"Chemin dotté relatif à `data` de /application/dictionary (ex: setting.state.resource, setting.typeOf.project, setting.action.candidate, setting.tool, country, languages). La forme « states/resources » (slash) n'est pas valide."
    • Changedboond_candidates_search1 field changed
      • changedInput schema / properties / shields / description
        Previous value: -"Niveau de complétude."New value: +"Niveau de complétude des champs conditionnels."
    • Changedboond_candidates_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_search1 field changed
      • changedInput schema / properties / shields / description
        Previous value: -"Niveau de complétude."New value: +"Niveau de complétude des champs conditionnels."
    • Changedboond_companies_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_create1 field changed
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_search1 field changed
      • changedInput schema / properties / shields / description
        Previous value: -"Niveau de complétude."New value: +"Niveau de complétude des champs conditionnels."
    • Changedboond_contacts_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contracts_create7 fields changed
      • changedInput schema / properties / note / description
        Previous value: -"Notes / commentaires"New value: +"Notes / commentaires (`informationComments`)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / typeOf / description
        Previous value: -"Type de contrat (CDI, CDD, freelance...)"New value: +"Type de contrat : ID entier du dictionnaire `setting.typeOf.contract` (CDI, CDD, freelance…), via `boond_application_dictionary`"
      • addedInput schema / properties / typeOf / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / typeOf / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / typeOf / type
        Previous value: -"string"New value: +"integer"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_contracts_search
    • Addedboond_contracts_update
    • Changedboond_deliveries_create12 fields changed
      • changedInput schema / properties / averageDailyCost / description
        Previous value: -"Cout journalier moyen"New value: +"Coût journalier moyen"
      • changedInput schema / properties / note / description
        Previous value: -"Notes, mappees vers informationComments"New value: +"Notes, mappées vers informationComments"
      • removedInput schema / properties / projectId / minLength
        Removed value: -1
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / quantity / description
        Previous value: -"Nombre de jours / quantite"New value: +"Nombre de jours / quantité"
      • changedInput schema / properties / resourceId / description
        Previous value: -"ID de la ressource portee par la prestation"New value: +"ID de la ressource portée par la prestation"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de debut (YYYY-MM-DD)"New value: +"Date de début (YYYY-MM-DD)"
      • changedInput schema / properties / state / description
        Previous value: -"Etat"New value: +"État de la prestation : ID de `boond://dictionary/states/deliveries`"
      • changedInput schema / properties / typeOf / description
        Previous value: -"Type de prestation"New value: +"Type de prestation : ID de `boond://dictionary/typeOf/deliveries`"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_deliveries_delete
    • Changedboond_deliveries_search30 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "IDs de sociétés (filtre API natif, équivalent de `companyId` pour plusieurs sociétés).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / deliveryStates
        Added value: +{
        +  "description": "IDs d'états de prestation — `boond://dictionary/states/deliveries`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin (YYYY-MM-DD)"New value: +"Date de fin (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / expertiseAreas
        Added value: +{
        +  "description": "Domaines d'expertise — `boond://dictionary/expertiseAreas`.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / flags
        Added value: +{
        +  "description": "IDs de drapeaux (flags) — `boond_flags_search`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / opportunityId
        Added value: +{
        +  "description": "Filtrer par ID opportunité (référence keywords AO<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Champ de date borné par `startDate` / `endDate` : started, stopped, updated, running (prestations en cours sur la fenêtre), projectRunning (projet en cours).",
        +  "enum": [
        +    "started",
        +    "updated",
        +    "stopped",
        +    "projectRunning",
        +    "running",
        +    "hasAdditionalDataOrPurchase"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Fenêtre relative appliquée à `period` (à la place de `startDate` / `endDate`) : today, thisWeek, thisMonth, lastMonth, thisYear, untilToday…",
        +  "enum": [
        +    "today",
        +    "yesterday",
        +    "tomorrow",
        +    "thisWeek",
        +    "lastWeek",
        +    "nextWeek",
        +    "thisMonth",
        +    "lastMonth",
        +    "nextMonth",
        +    "thisTrimester",
        +    "lastTrimester",
        +    "nextTrimester",
        +    "thisSemester",
        +    "lastSemester",
        +    "nextSemester",
        +    "thisYear",
        +    "lastYear",
        +    "nextYear",
        +    "thisFiscalYear",
        +    "lastFiscalYear",
        +    "nextFiscalYear",
        +    "untilToday"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectStates
        Added value: +{
        +  "description": "IDs d'états de projet — `boond://dictionary/states/projects`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / projectTypes
        Added value: +{
        +  "description": "IDs de types de projet — `boond://dictionary/typeOf/projects`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceId
        Added value: +{
        +  "description": "Filtrer par ID ressource (référence keywords COMP<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début (YYYY-MM-DD)"New value: +"Date de début (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / startDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / transferType
        Added value: +{
        +  "description": "Filtre sur les transferts de prestation (master / slave / none / notSlave / notMaster / missing).",
        +  "enum": [
        +    "master",
        +    "slave",
        +    "none",
        +    "notSlave",
        +    "notMaster",
        +    "missing"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedboond_deliveries_update
    • Changedboond_documents_get1 field changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "text",
        +  "description": "text (défaut) : PDF et DOCX renvoyés en texte extrait côté serveur, images en contenu `image` ; raw : le fichier tel quel en ressource embarquée (base64).",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedboond_expenses_create8 fields changed
      • addedInput schema / properties / actualExpenses / items / properties / batchId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / actualExpenses / items / properties / deliveryId / minLength
        Removed value: -1
      • addedInput schema / properties / actualExpenses / items / properties / deliveryId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / actualExpenses / items / properties / projectId / minLength
        Removed value: -1
      • addedInput schema / properties / actualExpenses / items / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / agencyId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_expenses_default3 fields changed
      • addedInput schema / properties / agencyId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_expenses_search6 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"Filtrer par ID ressource (référence keywords COMP<id>)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_expenses_update7 fields changed
      • addedInput schema / properties / actualExpenses / items / properties / batchId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / actualExpenses / items / properties / deliveryId / minLength
        Removed value: -1
      • addedInput schema / properties / actualExpenses / items / properties / deliveryId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / actualExpenses / items / properties / projectId / minLength
        Removed value: -1
      • addedInput schema / properties / actualExpenses / items / properties / projectId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Addedboond_find
    • Addedboond_flags_attach
    • Addedboond_flags_attached
    • Addedboond_flags_create
    • Addedboond_flags_detach
    • Addedboond_forms_create
    • Addedboond_forms_default
    • Addedboond_forms_get
    • Addedboond_groupments_create
    • Addedboond_groupments_default
    • Addedboond_groupments_get
    • Addedboond_groupments_update
    • Addedboond_inactivities_create
    • Addedboond_inactivities_default
    • Addedboond_inactivities_get
    • Addedboond_invoices_actions
    • Changedboond_invoices_create2 fields changed
      • addedInput schema / properties / orderId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État de la facture"New value: +"État de la facture : ID de `boond://dictionary/states/invoices` (ex: 0 = Création, 1 = Transmis au client)"
    • Addedboond_invoices_information
    • Changedboond_invoices_search30 fields changed
      • addedInput schema / properties / closed
        Added value: +{
        +  "description": "true = factures / avoirs clôturés uniquement, false = non clôturés uniquement.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "IDs de sociétés (filtre API natif, équivalent de `companyId` pour plusieurs sociétés).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "Filtrer par ID contact (référence keywords CCON<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / creditNote
        Added value: +{
        +  "description": "true = avoirs uniquement, false = factures uniquement.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin de période (YYYY-MM-DD)"New value: +"Date de fin (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / flags
        Added value: +{
        +  "description": "IDs de drapeaux (flags) — `boond_flags_search`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / orderId
        Added value: +{
        +  "description": "Filtrer par ID bon de commande (référence keywords BDC<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / paymentMethods
        Added value: +{
        +  "description": "IDs de modes de paiement — `boond://dictionary/paymentMethods`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / period / description
        Previous value: -"Type de période (created, updated, expectedPayment, performedPayment, period)"New value: +"Champ de date borné par `startDate` / `endDate` : created, updated, expectedPayment (échéance), performedPayment (règlement), period (période facturée, défaut)."
      • addedInput schema / properties / period / enum
        Added value: +[
        +  "created",
        +  "updated",
        +  "expectedPayment",
        +  "performedPayment",
        +  "period"
        +]
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Fenêtre relative appliquée à `period` (à la place de `startDate` / `endDate`) : today, thisWeek, thisMonth, lastMonth, thisYear, untilToday…",
        +  "enum": [
        +    "today",
        +    "yesterday",
        +    "tomorrow",
        +    "thisWeek",
        +    "lastWeek",
        +    "nextWeek",
        +    "thisMonth",
        +    "lastMonth",
        +    "nextMonth",
        +    "thisTrimester",
        +    "lastTrimester",
        +    "nextTrimester",
        +    "thisSemester",
        +    "lastSemester",
        +    "nextSemester",
        +    "thisYear",
        +    "lastYear",
        +    "nextYear",
        +    "thisFiscalYear",
        +    "lastFiscalYear",
        +    "nextFiscalYear",
        +    "untilToday"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectTypes
        Added value: +{
        +  "description": "IDs de types de projet — `boond://dictionary/typeOf/projects`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début de période (YYYY-MM-DD)"New value: +"Date de début (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / startDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / states
        Added value: +{
        +  "description": "IDs d'états de facture — `boond://dictionary/states/invoices` (ex. impayées = tous les états sauf « payée »).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
    • Changedboond_invoices_update3 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État de la facture"New value: +"État de la facture : ID de `boond://dictionary/states/invoices` (ex: 0 = Création, 1 = Transmis au client)"
    • Changedboond_notifications_search1 field changed
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
    • Changedboond_opportunities_create6 fields changed
      • addedInput schema / properties / agencyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / hrManagerId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / mainManagerId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / poleId / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_search2 fields changed
      • changedInput schema / properties / perimeterManagersType / description
        Previous value: -"Type de responsable visé par `perimeterManagers` (main/hr)."New value: +"Type de responsable visé par `perimeterManagers`: 'main' (Main Manager) ou 'hr' (HR Manager)."
      • changedInput schema / properties / shields / description
        Previous value: -"Niveau de complétude."New value: +"Niveau de complétude des champs conditionnels."
    • Changedboond_opportunities_update8 fields changed
      • addedInput schema / properties / agencyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / hrManagerId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / mainManagerId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / poleId / pattern
        Added value: +"^\\d+$"
    • Addedboond_orders_actions
    • Changedboond_orders_create3 fields changed
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État du bon de commande"New value: +"État du bon de commande : ID de `boond://dictionary/states/orders`"
    • Addedboond_orders_information
    • Addedboond_orders_invoices
    • Changedboond_orders_search26 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "IDs de sociétés (filtre API natif, équivalent de `companyId` pour plusieurs sociétés).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "Filtrer par ID contact (référence keywords CCON<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / customerAgreement
        Added value: +{
        +  "description": "true = accord client reçu uniquement, false = sans accord.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "Date de fin (YYYY-MM-DD), à utiliser avec `period`.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / exceededOrderedTurnover
        Added value: +{
        +  "description": "true = commandes dont le facturé dépasse le montant commandé.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / flags
        Added value: +{
        +  "description": "IDs de drapeaux (flags) — `boond_flags_search`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / paymentMethods
        Added value: +{
        +  "description": "IDs de modes de paiement — `boond://dictionary/paymentMethods`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Champ de date borné par `startDate` / `endDate` : created, updated, period (période couverte).",
        +  "enum": [
        +    "created",
        +    "updated",
        +    "period"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Fenêtre relative appliquée à `period` (à la place de `startDate` / `endDate`) : today, thisWeek, thisMonth, lastMonth, thisYear, untilToday…",
        +  "enum": [
        +    "today",
        +    "yesterday",
        +    "tomorrow",
        +    "thisWeek",
        +    "lastWeek",
        +    "nextWeek",
        +    "thisMonth",
        +    "lastMonth",
        +    "nextMonth",
        +    "thisTrimester",
        +    "lastTrimester",
        +    "nextTrimester",
        +    "thisSemester",
        +    "lastSemester",
        +    "nextSemester",
        +    "thisYear",
        +    "lastYear",
        +    "nextYear",
        +    "thisFiscalYear",
        +    "lastFiscalYear",
        +    "nextFiscalYear",
        +    "untilToday"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectTypes
        Added value: +{
        +  "description": "IDs de types de projet — `boond://dictionary/typeOf/projects`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "Date de début (YYYY-MM-DD), à utiliser avec `period`.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / states
        Added value: +{
        +  "description": "IDs d'états de bon de commande — `boond://dictionary/states/orders`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
    • Changedboond_orders_update3 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État"New value: +"État du bon de commande : ID de `boond://dictionary/states/orders`"
    • Changedboond_payments_create11 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"Montant HT du paiement, mappe vers amountExcludingTax"New value: +"Montant HT du paiement, mappé vers amountExcludingTax"
      • changedInput schema / properties / note / description
        Previous value: -"Note interne, mappee vers informationComments"New value: +"Note interne, mappée vers informationComments"
      • changedInput schema / properties / paymentDate / description
        Previous value: -"Date du paiement (YYYY-MM-DD), mappee vers date"New value: +"Date du paiement (YYYY-MM-DD), mappée vers date"
      • changedInput schema / properties / paymentMethod / description
        Previous value: -"Methode de paiement"New value: +"Mode de paiement : ID de `boond://dictionary/paymentMethods`"
      • changedInput schema / properties / purchaseId / description
        Previous value: -"ID de l'achat regle"New value: +"ID de l'achat réglé"
      • removedInput schema / properties / purchaseId / minLength
        Removed value: -1
      • addedInput schema / properties / purchaseId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / reference / description
        Previous value: -"Reference bancaire ou reglement"New value: +"Référence bancaire ou règlement"
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de debut couverte (YYYY-MM-DD)"New value: +"Date de début couverte (YYYY-MM-DD)"
      • changedInput schema / properties / state / description
        Previous value: -"Etat du paiement / achat"New value: +"État du paiement : ID de `boond://dictionary/states/payments`"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_payments_delete
    • Changedboond_payments_search34 fields changed
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "Filtrer par ID contact (référence keywords CCON<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / deliveryPurchases
        Added value: +{
        +  "description": "true = paiements des achats liés à une prestation uniquement.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin (YYYY-MM-DD)"New value: +"Date de fin (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / excludeProviderInvoice
        Added value: +{
        +  "description": "true = exclure les paiements adossés à une facture fournisseur.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / flags
        Added value: +{
        +  "description": "IDs de drapeaux (flags) — `boond_flags_search`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / invoiceId
        Removed value: -{
        -  "description": "Filtrer par ID facture",
        -  "type": "string"
        -}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / paymentMethods
        Added value: +{
        +  "description": "IDs de modes de paiement — `boond://dictionary/paymentMethods`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / paymentStates
        Added value: +{
        +  "description": "IDs d'états de paiement — `boond://dictionary/states/payments`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Champ de date borné par `startDate` / `endDate` : expected (échéance), performed (règlement effectif), created, updated, createdPurchase, subscription, billing.",
        +  "enum": [
        +    "created",
        +    "updated",
        +    "createdPurchase",
        +    "subscription",
        +    "expected",
        +    "performed",
        +    "billing"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Fenêtre relative appliquée à `period` (à la place de `startDate` / `endDate`) : today, thisWeek, thisMonth, lastMonth, thisYear, untilToday…",
        +  "enum": [
        +    "today",
        +    "yesterday",
        +    "tomorrow",
        +    "thisWeek",
        +    "lastWeek",
        +    "nextWeek",
        +    "thisMonth",
        +    "lastMonth",
        +    "nextMonth",
        +    "thisTrimester",
        +    "lastTrimester",
        +    "nextTrimester",
        +    "thisSemester",
        +    "lastSemester",
        +    "nextSemester",
        +    "thisYear",
        +    "lastYear",
        +    "nextYear",
        +    "thisFiscalYear",
        +    "lastFiscalYear",
        +    "nextFiscalYear",
        +    "untilToday"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / purchaseId / description
        Previous value: -"Filtrer par ID achat"New value: +"Filtrer par ID achat (référence keywords ACH<id>)"
      • addedInput schema / properties / purchaseId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / purchaseTypes
        Added value: +{
        +  "description": "IDs de types d'achat — `boond://dictionary/typeOf/purchases`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"Filtrer par ID ressource (référence keywords COMP<id>)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début (YYYY-MM-DD)"New value: +"Date de début (YYYY-MM-DD), à utiliser avec `period`."
      • addedInput schema / properties / startDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / subscriptionTypes
        Added value: +{
        +  "description": "IDs de types d'abonnement (`setting.typeOf.subscription` via `boond_application_dictionary`).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedboond_payments_update
    • Changedboond_positionings_create5 fields changed
      • addedInput schema / properties / candidateId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / opportunityId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État du positionnement"New value: +"État du positionnement : ID de `boond://dictionary/states/positionings` (`won` rattache le positionnement à un projet)"
    • Changedboond_positionings_search8 fields changed
      • addedInput schema / properties / candidateId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / opportunityId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • addedInput schema / properties / productId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_positionings_update4 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État du positionnement : ID numérique du dictionnaire setting.state.positioning"New value: +"État du positionnement : ID numérique de `boond://dictionary/states/positionings`"
      • changedInput schema / properties / state / minimum
        Previous value: -0New value: +-9007199254740991
    • Changedboond_products_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_create3 fields changed
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / opportunityId / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_provider_invoices_create12 fields changed
      • changedInput schema / properties / companyId / description
        Previous value: -"ID de la societe fournisseur, mappe vers providerCompany"New value: +"ID de la société fournisseur, mappé vers providerCompany"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / contactId / description
        Previous value: -"ID du contact fournisseur, mappe vers providerContact"New value: +"ID du contact fournisseur, mappé vers providerContact"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin de periode (YYYY-MM-DD)"New value: +"Date de fin de période (YYYY-MM-DD)"
      • changedInput schema / properties / reference / description
        Previous value: -"Reference de la facture fournisseur"New value: +"Référence de la facture fournisseur"
      • changedInput schema / properties / resourceId / description
        Previous value: -"ID de la ressource portee par la facture fournisseur"New value: +"ID de la ressource portée par la facture fournisseur"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de debut de periode (YYYY-MM-DD)"New value: +"Date de début de période (YYYY-MM-DD)"
      • changedInput schema / properties / state / description
        Previous value: -"Etat de la facture fournisseur"New value: +"État de la facture fournisseur : ID de `boond://dictionary/states/provider-invoices`"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_provider_invoices_delete
    • Changedboond_provider_invoices_search8 fields changed
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID societe fournisseur"New value: +"Filtrer par ID société fournisseur (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / keywords / description
        Previous value: -"Mots-cles de recherche"New value: +"Mots-clés de recherche"
      • changedInput schema / properties / page / description
        Previous value: -"Numero de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Resultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource via mot-cle COMP<id>"New value: +"Filtrer par ID ressource (référence keywords COMP<id>)"
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedboond_provider_invoices_update
    • Changedboond_purchases_create5 fields changed
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / contactId / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / state / description
        Previous value: -"État de l'achat"New value: +"État de l'achat : ID de `boond://dictionary/states/purchases`"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_purchases_information
    • Changedboond_purchases_search7 fields changed
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société"New value: +"Filtrer par ID société (référence keywords CSOC<id>)"
      • addedInput schema / properties / companyId / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Nombre de résultats par page (max: 500, défaut: 30)"
      • changedInput schema / properties / projectId / description
        Previous value: -"Filtrer par ID projet"New value: +"Filtrer par ID projet (référence keywords PRJ<id>)"
      • addedInput schema / properties / projectId / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedboond_purchases_update
    • Addedboond_resources_contracts
    • Changedboond_resources_reference_create2 fields changed
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_reference_delete4 fields changed
      • removedInput schema / properties / referenceId / minLength
        Removed value: -1
      • addedInput schema / properties / referenceId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_reference_update4 fields changed
      • removedInput schema / properties / referenceId / minLength
        Removed value: -1
      • addedInput schema / properties / referenceId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_technical_data_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_timesheets2 fields changed
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_update2 fields changed
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Addedboond_rights_get
    • Addedboond_tasks_get
    • Changedboond_timesheets_create16 fields changed
      • addedInput schema / properties / agencyId
        Added value: +{
        +  "description": "ID de l'agence — voir `boond_timesheets_default`. Déduite de la ressource si omise.",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • removedInput schema / properties / endDate
        Removed value: -{
        -  "description": "Date de fin (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • addedInput schema / properties / exceptionalTimes
        Added value: +{
        +  "description": "Lignes d'activité exceptionnelle (interventions, astreintes) — types `exceptionalTime` / `exceptionalCalendar`.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "batchId": {
        +        "description": "ID du lot. Absent = aucun lot.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "deliveryId": {
        +        "description": "ID de la prestation (delivery) imputée. Requis avec `projectId` pour la production — voir `boond_timesheets_default`.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "duration": {
        +        "default": 1,
        +        "description": "Durée en unités d'œuvre (jour par défaut : 1 = journée, 0.5 = demi-journée).",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "projectId": {
        +        "description": "ID du projet imputé. Requis pour une activité de production ; absent pour une absence. Couples autorisés : `boond_timesheets_default`.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "startDate": {
        +        "description": "Jour saisi (YYYY-MM-DD). Doit tomber dans le mois `term` du CRA.",
        +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +        "type": "string"
        +      },
        +      "workUnitTypeReference": {
        +        "default": 1,
        +        "description": "Code `reference` du type d'unité d'œuvre — voir `boond_timesheets_default` (`workUnitTypesAllowed` de la ressource). 1 = « Normale » (production) sur les tenants observés ; les absences (congés, RTT, maladie…) ont leurs propres codes.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "startDate"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / informationComments
        Added value: +{
        +  "description": "Commentaires du CRA.",
        +  "type": "string"
        +}
      • removedInput schema / properties / note
        Removed value: -{
        -  "description": "Notes",
        -  "type": "string"
        -}
      • removedInput schema / properties / projectId
        Removed value: -{
        -  "description": "ID du projet",
        -  "type": "string"
        -}
      • addedInput schema / properties / regularTimes
        Added value: +{
        +  "description": "Lignes d'activité normale (production et absences). Omettre pour créer un CRA vide.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "batchId": {
        +        "description": "ID du lot. Absent = aucun lot.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "deliveryId": {
        +        "description": "ID de la prestation (delivery) imputée. Requis avec `projectId` pour la production — voir `boond_timesheets_default`.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "duration": {
        +        "default": 1,
        +        "description": "Durée en unités d'œuvre (jour par défaut : 1 = journée, 0.5 = demi-journée).",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "projectId": {
        +        "description": "ID du projet imputé. Requis pour une activité de production ; absent pour une absence. Couples autorisés : `boond_timesheets_default`.",
        +        "pattern": "^\\d+$",
        +        "type": "string"
        +      },
        +      "startDate": {
        +        "description": "Jour saisi (YYYY-MM-DD). Doit tomber dans le mois `term` du CRA.",
        +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +        "type": "string"
        +      },
        +      "workUnitTypeReference": {
        +        "default": 1,
        +        "description": "Code `reference` du type d'unité d'œuvre — voir `boond_timesheets_default` (`workUnitTypesAllowed` de la ressource). 1 = « Normale » (production) sur les tenants observés ; les absences (congés, RTT, maladie…) ont leurs propres codes.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "startDate"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / resourceId / description
        Previous value: -"ID de la ressource"New value: +"ID de la ressource (le collaborateur dont c'est le CRA)."
      • removedInput schema / properties / resourceId / minLength
        Removed value: -1
      • addedInput schema / properties / resourceId / pattern
        Added value: +"^\\d+$"
      • removedInput schema / properties / startDate
        Removed value: -{
        -  "description": "Date de début (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "État de la feuille de temps",
        -  "type": "string"
        -}
      • changedInput schema / properties / term / description
        Previous value: -"Mois au format YYYY-MM"New value: +"Mois du CRA (YYYY-MM). Un CRA = un mois × une ressource ; l'API ne déduplique pas."
      • removedInput schema / properties / totalDays
        Removed value: -{
        -  "description": "Total jours",
        -  "type": "number"
        -}
      • removedInput schema / properties / totalHours
        Removed value: -{
        -  "description": "Total heures",
        -  "type": "number"
        -}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "description": "Identifiant de l'entité créée/modifiée",
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedboond_timesheets_default
    • Changedboond_timesheets_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de la feuille de temps"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_timesheets_search15 fields changed
      • addedInput schema / properties / closed
        Added value: +{
        +  "description": "true = CRA clôturés uniquement, false = non clôturés.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Ordre de tri (asc/desc)",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceId
        Added value: +{
        +  "description": "Filtrer par ID ressource (référence keywords COMP<id>)",
        +  "pattern": "^\\d+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / resourceTypes
        Added value: +{
        +  "description": "IDs de types de ressource — `boond://dictionary/typeOf/resources`.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Champ de tri (ex: lastName, firstName, updateDate)",
        +  "type": "string"
        +}
      • addedInput schema / properties / validationStates
        Added value: +{
        +  "description": "États du workflow de validation : waitingForValidation (à valider), validated, rejected.",
        +  "items": {
        +    "enum": [
        +      "waitingForValidation",
        +      "validated",
        +      "rejected"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedboond_timesheets_update
    • Addedboond_todolists_create
    • Changedboond_validations_search1 field changed
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
    • Addedboond_validations_update
    • Addedboond_workflow_absences_a_valider
    • Addedboond_workflow_alertes_contrats
    • Addedboond_workflow_attention_du_jour
    • Changedboond_workflow_cartographie_competences1 field changed
      • changedInput schema / properties / top_n / description
        Previous value: -"Nombre de compétences à mettre en avant dans le top (défaut: 20)."New value: +"Nombre de compétences à mettre en avant dans le top — entier (défaut: 20)."
    • Changedboond_workflow_cvs_a_mettre_a_jour1 field changed
      • changedInput schema / properties / seuil_mois / description
        Previous value: -"Un dossier technique non touché depuis plus de N mois est considéré obsolète (défaut: 12)."New value: +"Un dossier technique non touché depuis plus de N mois est considéré obsolète — entier (défaut: 12)."
    • Changedboond_workflow_fin_de_mission1 field changed
      • changedInput schema / properties / horizon_jours / description
        Previous value: -"Nombre de jours à anticiper (défaut: 60). Ex: '30' pour ne voir que les fins très proches."New value: +"Nombre de jours à anticiper — entier (défaut: 60). Ex: '30' pour ne voir que les fins très proches."
    • Addedboond_workflow_ingest_communication
    • Addedboond_workflow_marge_projet
    • Addedboond_workflow_preparation_entretien
    • Addedboond_workflow_preparation_facturation
    • Addedboond_workflow_preparation_rdv_client
    • Addedboond_workflow_purge_rgpd_candidats
    • Changedboond_workflow_recap_hebdo1 field changed
      • changedInput schema / properties / semaine / description
        Previous value: -"Semaine ciblée (ex: 'cette semaine', 'la semaine prochaine'). Défaut: cette semaine."New value: +"Semaine ciblée (ex: 'cette semaine', 'semaine dernière', 'semaine prochaine', '2026-W14'). Défaut: cette semaine. Résolue en dates ISO côté serveur."
    • Addedboond_workflow_relance_cra
    • Addedboond_workflow_relance_devis
    • Addedboond_workflow_saisir_cra
    • Changedboond_workflow_synthese_equipe1 field changed
      • changedInput schema / properties / periode / description
        Previous value: -"Période d'analyse libre (ex: 'cette semaine', 'avril 2026'). Défaut: mois en cours."New value: +"Période d'analyse (ex: 'cette semaine', 'mois dernier', '2026-04', 'avril 2026', '2026-W14'). Défaut: mois en cours. Résolue en dates ISO côté serveur."
  2. 8 tool updatesv2.15.0
    • Changedboond_candidates_create1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_candidates_update1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_companies_create1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_companies_update1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_contacts_create1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_contacts_update1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_resources_create1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedboond_resources_update1 field changed
      • changedInput schema / properties / email1 / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
  3. 4 tool updatesv2.14.0
    • Changedboond_expenses_create19 fields changed
      • 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"
        +]
    • Addedboond_expenses_default
    • Changedboond_expenses_update10 fields changed
      • addedInput schema / properties / actualExpenses
        Added value: +{
        +  "description": "⚠️ REMPLACE l'intégralité des lignes existantes. Pour ajouter une ligne, relire la note via `boond_expenses_get` et renvoyer l'ensemble des lignes. Omettre pour ne toucher qu'aux autres champs.",
        +  "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"
        +}
      • removedInput schema / properties / amount
        Removed value: -{
        -  "description": "Montant",
        -  "type": "number"
        -}
      • addedInput schema / properties / closed
        Added value: +{
        +  "description": "Clôturer la note de frais",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / currencyAgency
        Added value: +{
        +  "description": "ID de devise de l'agence",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / informationComments
        Added value: +{
        +  "description": "Commentaires",
        +  "type": "string"
        +}
      • removedInput schema / properties / note
        Removed value: -{
        -  "description": "Description",
        -  "type": "string"
        -}
      • addedInput schema / properties / ratePerKilometerTypeReference
        Added value: +{
        +  "description": "Code du barème kilométrique",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "État",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / term
        Removed value: -{
        -  "description": "Période de la note de frais (YYYY-MM)",
        -  "type": "string"
        -}
    • Addedboond_workflow_traiter_note_de_frais
  4. 180 tool updatesv2.12.2
    • Changedboond_absences_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_absences_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_absences_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_absences_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_absences_update1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_accounts_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_accounts_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_actions_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_actions_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_actions_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_actions_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_actions_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_advantages_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_advantages_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_agencies_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_agencies_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_application_current_user1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_application_dictionary1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_business_units_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_business_units_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_calendars_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_calendars_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_administrative1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_positionings1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_technical_data1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_candidates_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_contacts1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_invoices1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_opportunities1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_orders1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_projects1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_provider_invoices1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_purchases1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_companies_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_invoices1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_opportunities1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_orders1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_projects1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contacts_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contracts_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_contracts_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_deliveries_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_deliveries_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_deliveries_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_documents_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_documents_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_documents_get3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager (numérique)"New value: +"Identifiant du document, tel qu'exposé par les relations d'entités (ex. 123_resume)"
      • changedInput schema / properties / id / pattern
        Previous value: -"^\\d+$"New value: +"^\\d+(_[A-Za-z]+)?$"
    • Changedboond_expenses_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_expenses_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_expenses_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_expenses_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_expenses_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_flags_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_flags_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_invoices_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_invoices_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_invoices_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_invoices_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_invoices_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_logs_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_logs_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_notifications_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_notifications_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_positionings1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_projects1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_simulation1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_opportunities_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_orders_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_orders_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_orders_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_orders_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_orders_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_payments_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_payments_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_payments_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_planning_absences_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_poles_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_poles_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_positionings_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_positionings_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_positionings_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_positionings_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_positionings_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_products_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_products_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_products_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_products_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_products_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_deliveries_groupments1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_orders1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_productivity1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_purchases1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_simulation1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_projects_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_provider_invoices_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_provider_invoices_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_provider_invoices_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_purchases_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_purchases_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_purchases_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_purchases_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_reporting_companies1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_reporting_production_plans1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_reporting_projects1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_reporting_resources1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_reporting_synthesis1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_absences_reports1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_actions1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_administrative1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_advantages1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_delete2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_expenses_reports1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_information1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_positionings1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_projects1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_reference_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_reference_delete1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_reference_update1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_technical_data1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_technical_data_update1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_times_reports1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_timesheets1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_resources_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_roles_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_roles_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_threads_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_threads_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_timesheets_create1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_timesheets_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_timesheets_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_todolists_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_todolists_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_validations_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_validations_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_webhooks_get1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_webhooks_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_candidats_pour_opportunite1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_cartographie_competences1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_cvs_a_mettre_a_jour1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_factures_a_relancer1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_fiche_consultant1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_fin_de_mission1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_pipeline_commercial1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_recap_hebdo1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_recherche_profil_competences1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_staffing_disponible1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedboond_workflow_synthese_equipe1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
  5. 32 tool updatesv2.9.0
    • Changedboond_absences_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_accounts_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_actions_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_advantages_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_agencies_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_business_units_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_calendars_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_candidates_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_companies_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_contacts_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_deliveries_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_expenses_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_flags_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_invoices_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_logs_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_notifications_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_opportunities_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_orders_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_payments_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_planning_absences_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_poles_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_positionings_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_products_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_projects_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_provider_invoices_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_purchases_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_resources_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés."New value: +"Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés."
    • Changedboond_roles_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_threads_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_todolists_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_validations_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedboond_webhooks_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection : attributs à afficher par résultat (ex: ['title','updateDate']). Absent = résumé standard. Noms inconnus ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  6. 17 tool updatesv2.8.0
    • Changedboond_absences_create4 fields changed
      • addedInput schema / properties / absencesPeriods
        Added value: +{
        +  "description": "Périodes d'absence Boond brutes",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / duration
        Added value: +{
        +  "description": "Durée en jours ; calculée automatiquement si absente",
        +  "type": "number"
        +}
      • changedInput schema / properties / typeOf / description
        Previous value: -"Type d'absence (congé payé, RTT, maladie, sans solde...)"New value: +"Libellé de l'absence (congé payé, RTT, maladie, sans solde...)"
      • addedInput schema / properties / workUnitTypeReference
        Added value: +{
        +  "description": "Référence du type d'unité d'absence, défaut 1",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedboond_absences_search4 fields changed
      • removedInput schema / properties / endDate
        Removed value: -{
        -  "description": "Date de fin de période (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • addedInput schema / properties / endMonth
        Added value: +{
        +  "description": "Mois de fin de période (YYYY-MM)",
        +  "type": "string"
        +}
      • removedInput schema / properties / startDate
        Removed value: -{
        -  "description": "Date de début de période (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • addedInput schema / properties / startMonth
        Added value: +{
        +  "description": "Mois de début de période (YYYY-MM)",
        +  "type": "string"
        +}
    • Addedboond_deliveries_create
    • Changedboond_expenses_create2 fields changed
      • 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"
        +}
    • Changedboond_expenses_update2 fields changed
      • 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"
        +}
    • Changedboond_invoices_create7 fields changed
      • removedInput schema / properties / companyId
        Removed value: -{
        -  "description": "ID de la société facturée",
        -  "type": "string"
        -}
      • removedInput schema / properties / dueDate
        Removed value: -{
        -  "description": "Date d'échéance (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • addedInput schema / properties / expectedPaymentDate
        Added value: +{
        +  "description": "Date d'échéance/paiement attendu (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / invoicePayments
        Added value: +{
        +  "description": "Paiements client de la facture",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceRecords
        Added value: +{
        +  "description": "Lignes de facture Boond",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / orderId
        Added value: +{
        +  "description": "ID du bon de commande associé",
        +  "type": "string"
        +}
      • removedInput schema / properties / projectId
        Removed value: -{
        -  "description": "ID du projet associé",
        -  "type": "string"
        -}
    • Changedboond_invoices_update4 fields changed
      • removedInput schema / properties / dueDate
        Removed value: -{
        -  "description": "Date d'échéance (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • addedInput schema / properties / expectedPaymentDate
        Added value: +{
        +  "description": "Date d'échéance/paiement attendu (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / invoicePayments
        Added value: +{
        +  "description": "Paiements client de la facture",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceRecords
        Added value: +{
        +  "description": "Lignes de facture Boond",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedboond_orders_create4 fields changed
      • addedInput schema / properties / customerAgreement
        Added value: +{
        +  "description": "Accord client reçu",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "Date de fin couverte (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / schedules
        Added value: +{
        +  "description": "Lignes/échéances de commande",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "Date de début couverte (YYYY-MM-DD)",
        +  "type": "string"
        +}
    • Changedboond_orders_update4 fields changed
      • addedInput schema / properties / customerAgreement
        Added value: +{
        +  "description": "Accord client reçu",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "Date de fin couverte (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / schedules
        Added value: +{
        +  "description": "Lignes/échéances de commande",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "Date de début couverte (YYYY-MM-DD)",
        +  "type": "string"
        +}
    • Addedboond_payments_create
    • Changedboond_payments_search3 fields changed
      • addedInput schema / properties / projectId
        Added value: +{
        +  "description": "Filtrer par ID projet",
        +  "type": "string"
        +}
      • addedInput schema / properties / purchaseId
        Added value: +{
        +  "description": "Filtrer par ID achat",
        +  "type": "string"
        +}
      • addedInput schema / properties / resourceId
        Added value: +{
        +  "description": "Filtrer par ID ressource",
        +  "type": "string"
        +}
    • Changedboond_projects_create1 field changed
      • addedInput schema / properties / typeOf
        Added value: +{
        +  "description": "Type de projet (ID du dictionnaire setting.typeOf.project)",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Changedboond_projects_update1 field changed
      • addedInput schema / properties / typeOf
        Added value: +{
        +  "description": "Type de projet (ID du dictionnaire setting.typeOf.project)",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Addedboond_provider_invoices_create
    • Changedboond_provider_invoices_search5 fields changed
      • changedInput schema / properties / companyId / description
        Previous value: -"Filtrer par ID société fournisseur"New value: +"Filtrer par ID societe fournisseur"
      • changedInput schema / properties / keywords / description
        Previous value: -"Mots-clés de recherche"New value: +"Mots-cles de recherche"
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numero de page (max: 100)"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Résultats par page"New value: +"Resultats par page"
      • addedInput schema / properties / resourceId
        Added value: +{
        +  "description": "Filtrer par ID ressource via mot-cle COMP<id>",
        +  "type": "string"
        +}
    • Changedboond_purchases_create2 fields changed
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "ID du contact fournisseur",
        +  "type": "string"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "Titre de l'achat/sous-traitance",
        +  "type": "string"
        +}
    • Addedboond_timesheets_create
  7. 141 tool updatesv2.7.0
    • Changedboond_absences_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_absences_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_accounts_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_accounts_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_actions_create9 fields changed
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([+-]\\d{2}:?\\d{2}|Z)?$"
      • addedInput schema / properties / positioningId
        Added value: +{
        +  "description": "ID du positionnement à lier à l'action (relation positioning). Requis par l'API pour les types d'action liés aux positionnements (ex. RQ) — sans lui, erreur 422 « 1002 - Wrong or missing attribute (/data/relationships/positioning) ».",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début au format ISO avec timezone (ex: 2026-06-05T10:00:00+0200)"New value: +"Date de début au format ISO 8601 avec timezone (ex: 2026-06-05T10:00:00+0200)"
      • addedInput schema / properties / startDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([+-]\\d{2}:?\\d{2}|Z)?$"
      • addedInput schema / properties / typeOf / anyOf
        Added value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / typeOf / description
        Previous value: -"Type d'action : ID numérique du dictionnaire BoondManager (setting.action.*, via boond_application_dictionary)"New value: +"Type d'action : ID numérique du dictionnaire (setting.action.*, via boond_application_dictionary) ou libellé personnalisé si BOOND_DICTIONARY_OVERRIDES est configuré"
      • removedInput schema / properties / typeOf / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / typeOf / minimum
        Removed value: -0
      • removedInput schema / properties / typeOf / type
        Removed value: -"integer"
    • Changedboond_actions_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_actions_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Addedboond_actions_update
    • Changedboond_advantages_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_agencies_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_agencies_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_business_units_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_business_units_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_calendars_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_calendars_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_candidates_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_candidates_administrative3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_candidates_create1 field changed
      • 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"
        +}
    • Changedboond_candidates_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_candidates_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_candidates_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_candidates_positionings3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_candidates_search3 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / tools / description
        Previous value: -"IDs d'outils/technos. Logique OU par défaut. Pour ET, ajouter '#AND#' en 1er élément."New value: +"IDs d'outils/technos (dictionnaire setting.tool). Logique OU par défaut. Pour ET, ajouter '#AND#' en 1er élément: tools=['#AND#','12','34']."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_candidates_technical_data3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_candidates_update1 field changed
      • 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"
        +}
    • Changedboond_companies_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_contacts3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_create1 field changed
      • 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"
        +}
    • Changedboond_companies_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_companies_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_companies_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_invoices3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_opportunities3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_orders3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_projects3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_provider_invoices3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_purchases3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_companies_search2 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_companies_update1 field changed
      • 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"
        +}
    • Changedboond_contacts_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_create1 field changed
      • 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"
        +}
    • Changedboond_contacts_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_contacts_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_contacts_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_invoices3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_opportunities3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_orders3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_projects3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_contacts_search3 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / tools / description
        Previous value: -"IDs d'outils. Logique OU par défaut, '#AND#' en 1er pour ET."New value: +"IDs d'outils/technos (dictionnaire setting.tool). Logique OU par défaut. Pour ET, ajouter '#AND#' en 1er élément: tools=['#AND#','12','34']."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_contacts_update1 field changed
      • 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"
        +}
    • Changedboond_contracts_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_deliveries_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Addedboond_documents_create
    • Addedboond_documents_delete
    • Addedboond_documents_get
    • Changedboond_expenses_create1 field changed
      • 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"
        +}
    • Changedboond_expenses_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_expenses_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_expenses_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_expenses_update1 field changed
      • 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"
        +}
    • Changedboond_flags_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_flags_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_invoices_create1 field changed
      • 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"
        +}
    • Changedboond_invoices_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_invoices_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_invoices_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_invoices_update1 field changed
      • 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"
        +}
    • Changedboond_logs_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_logs_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_notifications_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_create14 fields changed
      • addedInput schema / properties / agencyId
        Added value: +{
        +  "description": "ID de l'agence (relation agency)",
        +  "type": "string"
        +}
      • changedInput schema / properties / companyId / description
        Previous value: -"ID de la société cliente"New value: +"ID de la société cliente (relation company)"
      • changedInput schema / properties / contactId / description
        Previous value: -"ID du contact associé"New value: +"ID du contact associé (relation contact)"
      • addedInput schema / properties / criteria
        Added value: +{
        +  "description": "Critères / compétences recherchées (texte libre). Alimente le matching de boond_workflow_candidats_pour_opportunite.",
        +  "maxLength": 5000,
        +  "type": "string"
        +}
      • addedInput schema / properties / expertiseArea
        Added value: +{
        +  "description": "Domaine d'expertise : ID du dictionnaire setting.expertiseArea (via boond_application_dictionary)",
        +  "type": "string"
        +}
      • addedInput schema / properties / hrManagerId
        Added value: +{
        +  "description": "ID de la ressource responsable RH (relation hrManager)",
        +  "type": "string"
        +}
      • addedInput schema / properties / mainManagerId
        Added value: +{
        +  "description": "ID de la ressource responsable principal / commercial (relation mainManager)",
        +  "type": "string"
        +}
      • changedInput schema / properties / note / description
        Previous value: -"Notes / description"New value: +"Description de l'opportunité (mappée sur /data/attributes/description)"
      • addedInput schema / properties / note / maxLength
        Added value: +65000
      • addedInput schema / properties / poleId
        Added value: +{
        +  "description": "ID du pôle (relation pole)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début prévue (YYYY-MM-DD)"New value: +"Date de début prévue (YYYY-MM-DD ou 'immediate')"
      • addedInput schema / properties / turnoverEstimatedExcludingTax
        Added value: +{
        +  "description": "Chiffre d'affaires estimé HT (montant)",
        +  "type": "number"
        +}
      • addedInput schema / properties / typeOf
        Added value: +{
        +  "description": "Type d'opportunité : ID numérique du dictionnaire setting.typeOf.project (ex: 1, 3), via boond_application_dictionary",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • 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"
        +}
    • Changedboond_opportunities_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_opportunities_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_opportunities_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_positionings3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_projects3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_search3 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / tools / description
        Previous value: -"IDs d'outils."New value: +"IDs d'outils/technos (dictionnaire setting.tool). Logique OU par défaut. Pour ET, ajouter '#AND#' en 1er élément: tools=['#AND#','12','34']."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_opportunities_simulation3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_opportunities_update16 fields changed
      • addedInput schema / properties / agencyId
        Added value: +{
        +  "description": "ID de l'agence (relation agency)",
        +  "type": "string"
        +}
      • addedInput schema / properties / companyId
        Added value: +{
        +  "description": "ID de la société cliente (relation company)",
        +  "type": "string"
        +}
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "ID du contact associé (relation contact)",
        +  "type": "string"
        +}
      • addedInput schema / properties / criteria
        Added value: +{
        +  "description": "Critères / compétences recherchées (texte libre). Alimente le matching de boond_workflow_candidats_pour_opportunite.",
        +  "maxLength": 5000,
        +  "type": "string"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin (YYYY-MM-DD)"New value: +"Date de fin prévue (YYYY-MM-DD)"
      • addedInput schema / properties / expertiseArea
        Added value: +{
        +  "description": "Domaine d'expertise : ID du dictionnaire setting.expertiseArea (via boond_application_dictionary)",
        +  "type": "string"
        +}
      • addedInput schema / properties / hrManagerId
        Added value: +{
        +  "description": "ID de la ressource responsable RH (relation hrManager)",
        +  "type": "string"
        +}
      • addedInput schema / properties / mainManagerId
        Added value: +{
        +  "description": "ID de la ressource responsable principal / commercial (relation mainManager)",
        +  "type": "string"
        +}
      • changedInput schema / properties / note / description
        Previous value: -"Notes"New value: +"Description de l'opportunité (mappée sur /data/attributes/description)"
      • addedInput schema / properties / note / maxLength
        Added value: +65000
      • addedInput schema / properties / poleId
        Added value: +{
        +  "description": "ID du pôle (relation pole)",
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début (YYYY-MM-DD)"New value: +"Date de début prévue (YYYY-MM-DD ou 'immediate')"
      • changedInput schema / properties / state / description
        Previous value: -"État"New value: +"État de l'opportunité"
      • addedInput schema / properties / turnoverEstimatedExcludingTax
        Added value: +{
        +  "description": "Chiffre d'affaires estimé HT (montant)",
        +  "type": "number"
        +}
      • addedInput schema / properties / typeOf
        Added value: +{
        +  "description": "Type d'opportunité : ID numérique du dictionnaire setting.typeOf.project (ex: 1, 3), via boond_application_dictionary",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • 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"
        +}
    • Changedboond_orders_create1 field changed
      • 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"
        +}
    • Changedboond_orders_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_orders_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_orders_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_orders_update1 field changed
      • 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"
        +}
    • Changedboond_payments_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_poles_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_poles_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_positionings_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_positionings_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_positionings_search8 fields changed
      • changedInput schema / properties / candidateId / description
        Previous value: -"Filtrer par ID candidat"New value: +"Filtrer par ID candidat (envoyé à l'API comme référence keywords CAND<id>)"
      • addedInput schema / properties / companyId
        Added value: +{
        +  "description": "Filtrer par ID société (envoyé à l'API comme référence keywords CSOC<id>)",
        +  "type": "string"
        +}
      • addedInput schema / properties / contactId
        Added value: +{
        +  "description": "Filtrer par ID contact (envoyé à l'API comme référence keywords CCON<id>)",
        +  "type": "string"
        +}
      • changedInput schema / properties / keywords / description
        Previous value: -"Mots-clés de recherche"New value: +"Mots-clés de recherche. L'API y accepte aussi des références d'entités (AO<id>, CAND<id>, COMP<id>...) — les filtres *Id ci-dessous sont convertis automatiquement en de telles références."
      • changedInput schema / properties / opportunityId / description
        Previous value: -"Filtrer par ID opportunité"New value: +"Filtrer par ID opportunité (envoyé à l'API comme référence keywords AO<id>)"
      • addedInput schema / properties / productId
        Added value: +{
        +  "description": "Filtrer par ID produit (envoyé à l'API comme référence keywords PROD<id>)",
        +  "type": "string"
        +}
      • removedInput schema / properties / projectId
        Removed value: -{
        -  "description": "Filtrer par ID projet",
        -  "type": "string"
        -}
      • changedInput schema / properties / resourceId / description
        Previous value: -"Filtrer par ID ressource"New value: +"Filtrer par ID ressource (envoyé à l'API comme référence keywords COMP<id>)"
    • Addedboond_positionings_update
    • Changedboond_products_create1 field changed
      • 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"
        +}
    • Changedboond_products_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_products_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_products_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_products_update1 field changed
      • 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"
        +}
    • Changedboond_projects_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_create1 field changed
      • 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"
        +}
    • Changedboond_projects_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_projects_deliveries_groupments3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_projects_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_orders3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_productivity3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_purchases3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_search2 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_projects_simulation3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_projects_update1 field changed
      • 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"
        +}
    • Changedboond_provider_invoices_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_purchases_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_purchases_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_reporting_companies17 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "Filtrer sur ces IDs de sociétés.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / companiesStates
        Added value: +{
        +  "description": "IDs d'états de sociétés (dictionnaire setting.state.company).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin YYYY-MM-DD. Requis."New value: +"Date de fin (YYYY-MM-DD). Requis par l'API."
      • addedInput schema / properties / maxCompanies
        Added value: +{
        +  "description": "Nombre de sociétés par page (1-10, défaut 1). Le nombre de résultats = sociétés × indicateurs.",
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Période dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamicParameters
        Added value: +{
        +  "description": "Paramètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).",
        +  "type": "string"
        +}
      • addedInput schema / properties / scorecards
        Added value: +{
        +  "description": "IDs des scorecards (indicateurs) à retourner.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / showPercentage
        Added value: +{
        +  "description": "Afficher les valeurs en pourcentage plutôt qu'en valeur réelle.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début YYYY-MM-DD. Requis."New value: +"Date de début (YYYY-MM-DD). Requis par l'API."
      • addedInput schema / properties / useCache
        Added value: +{
        +  "description": "Cache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).",
        +  "enum": [
        +    "withCache",
        +    "withoutCache"
        +  ],
        +  "type": "string"
        +}
    • Changedboond_reporting_production_plans21 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "Filtrer sur ces IDs de sociétés.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / contacts
        Added value: +{
        +  "description": "Filtrer sur ces IDs de contacts.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin YYYY-MM-DD. Requis."New value: +"Date de fin (YYYY-MM-DD). Requis par l'API."
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Période dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamicParameters
        Added value: +{
        +  "description": "Paramètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).",
        +  "type": "string"
        +}
      • addedInput schema / properties / positioningPeriod
        Added value: +{
        +  "description": "'created' (positionnements créés entre les dates, défaut) ou 'running' (en cours sur la période).",
        +  "enum": [
        +    "created",
        +    "running"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / positioningStates
        Added value: +{
        +  "description": "IDs d'états de positionnement (dictionnaire setting.state.positioning).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / projects
        Added value: +{
        +  "description": "Filtrer sur ces IDs de projets.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceStates
        Added value: +{
        +  "description": "IDs d'états de ressources (dictionnaire setting.state.resource).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceTypes
        Added value: +{
        +  "description": "IDs de types de ressources (dictionnaire setting.typeOf.resource).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / scorecards
        Added value: +{
        +  "description": "IDs des scorecards (indicateurs) à retourner.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / showContracts
        Added value: +{
        +  "description": "Afficher les contrats associés.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début YYYY-MM-DD. Requis."New value: +"Date de début (YYYY-MM-DD). Requis par l'API."
      • addedInput schema / properties / useCache
        Added value: +{
        +  "description": "Cache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).",
        +  "enum": [
        +    "withCache",
        +    "withoutCache"
        +  ],
        +  "type": "string"
        +}
    • Changedboond_reporting_projects20 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "Filtrer sur ces IDs de sociétés.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / contacts
        Added value: +{
        +  "description": "Filtrer sur ces IDs de contacts.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin YYYY-MM-DD."New value: +"Date de fin (YYYY-MM-DD)."
      • addedInput schema / properties / maxProjects
        Added value: +{
        +  "description": "Nombre de projets par page (1-10, défaut 1). Le nombre de résultats = projets × indicateurs.",
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Période dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamicParameters
        Added value: +{
        +  "description": "Paramètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).",
        +  "type": "string"
        +}
      • addedInput schema / properties / projectStates
        Added value: +{
        +  "description": "IDs d'états de projets (dictionnaire setting.state.project).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / projectTypes
        Added value: +{
        +  "description": "IDs de types de projets (dictionnaire setting.typeOf.project).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / projects
        Added value: +{
        +  "description": "Filtrer sur ces IDs de projets.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resources
        Added value: +{
        +  "description": "Filtrer sur ces IDs de ressources.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / scorecards
        Added value: +{
        +  "description": "IDs des scorecards (indicateurs) à retourner.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début YYYY-MM-DD."New value: +"Date de début (YYYY-MM-DD)."
      • addedInput schema / properties / useCache
        Added value: +{
        +  "description": "Cache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).",
        +  "enum": [
        +    "withCache",
        +    "withoutCache"
        +  ],
        +  "type": "string"
        +}
    • Changedboond_reporting_resources23 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "Filtrer sur ces IDs de sociétés.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / contacts
        Added value: +{
        +  "description": "Filtrer sur ces IDs de contacts.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin YYYY-MM-DD. Requis."New value: +"Date de fin (YYYY-MM-DD)."
      • addedInput schema / properties / maxResources
        Added value: +{
        +  "description": "Nombre de ressources par page (1-10, défaut 1). Le nombre de résultats = ressources × indicateurs.",
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Découpage temporel : 'onePeriod' (unique, entre startDate/endDate), 'dynamicPeriod' (selon periodDynamic), 'monthly' (6 mois depuis startDate), 'quarterly', 'semiAnnual', 'annual'. La synthèse accepte aussi 'weekly'.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Période dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamicParameters
        Added value: +{
        +  "description": "Paramètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).",
        +  "type": "string"
        +}
      • addedInput schema / properties / projects
        Added value: +{
        +  "description": "Filtrer sur ces IDs de projets.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / reportingCategory
        Added value: +{
        +  "description": "Vue : 'showByResources' (défaut, sans returnedPeriod) ou 'showByPeriods' (returnedPeriod requis).",
        +  "enum": [
        +    "showByResources",
        +    "showByPeriods"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resourceStates
        Added value: +{
        +  "description": "IDs d'états de ressources (dictionnaire setting.state.resource).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceTypes
        Added value: +{
        +  "description": "IDs de types de ressources (dictionnaire setting.typeOf.resource).",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resources
        Added value: +{
        +  "description": "Filtrer sur ces IDs de ressources.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / scorecards
        Added value: +{
        +  "description": "IDs des scorecards (indicateurs) à retourner.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début YYYY-MM-DD. Requis."New value: +"Date de début (YYYY-MM-DD)."
      • addedInput schema / properties / useCache
        Added value: +{
        +  "description": "Cache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).",
        +  "enum": [
        +    "withCache",
        +    "withoutCache"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "startDate",
        -  "endDate"
        -]
    • Changedboond_reporting_synthesis23 fields changed
      • addedInput schema / properties / companies
        Added value: +{
        +  "description": "Filtrer sur ces IDs de sociétés.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / compareIndicators
        Added value: +{
        +  "description": "Indicateurs à comparer entre deux périodes.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / compareIndicatorsPeriod
        Added value: +{
        +  "description": "Période de comparaison des indicateurs (défaut 'period').",
        +  "type": "string"
        +}
      • addedInput schema / properties / contacts
        Added value: +{
        +  "description": "Filtrer sur ces IDs de contacts.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin YYYY-MM-DD. Requis."New value: +"Date de fin (YYYY-MM-DD)."
      • addedInput schema / properties / narrowPerimeter
        Added value: +{
        +  "description": "Si true, jointure ET entre les filtres `perimeter*` (au lieu de OU par défaut).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Numéro de page (max: 100)"New value: +"Numéro de page (défaut: 1, max: 100)"
      • addedInput schema / properties / perimeterAgencies
        Added value: +{
        +  "description": "IDs d'agences. Conserve les entités dont le responsable appartient à ces agences.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterBusinessUnits
        Added value: +{
        +  "description": "IDs de business units. Conserve les entités dont le responsable appartient à ces BU.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterDynamic
        Added value: +{
        +  "description": "Périmètre dynamique relatif à l'utilisateur courant (raccourci sans avoir à connaître son propre ID). Valeurs : 'data' (mes propres données), 'managers' (mon équipe / mes N-1), 'agencies' (mes agences), 'poles' (mes pôles), 'businessUnits' (mes BU). Combinable.",
        +  "items": {
        +    "enum": [
        +      "data",
        +      "agencies",
        +      "poles",
        +      "businessUnits",
        +      "managers"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterManagers
        Added value: +{
        +  "description": "IDs des managers (ressources). Conserve les entités dont le responsable est l'un de ces managers. Pour 'mon équipe / N-1 d'une personne X', passer [X_id]. Obtenir son propre ID via boond_application_current_user.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / perimeterPoles
        Added value: +{
        +  "description": "IDs de pôles. Conserve les entités dont le responsable appartient à ces pôles.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "description": "Découpage temporel : 'onePeriod' (unique, entre startDate/endDate), 'dynamicPeriod' (selon periodDynamic), 'monthly' (6 mois depuis startDate), 'quarterly', 'semiAnnual', 'annual'. La synthèse accepte aussi 'weekly'.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamic
        Added value: +{
        +  "description": "Période dynamique relative à aujourd'hui (avec period='dynamicPeriod') : today, thisWeek, thisMonth, thisTrimester, thisSemester, thisYear, thisFiscalYear, yesterday, lastWeek, lastMonth, lastTrimester, lastSemester, lastYear, lastFiscalYear, tomorrow, nextWeek, nextMonth, nextTrimester, nextSemester, nextYear, nextFiscalYear, lastCustomPeriod, nextCustomPeriod.",
        +  "type": "string"
        +}
      • addedInput schema / properties / periodDynamicParameters
        Added value: +{
        +  "description": "Paramètres de la période personnalisée (utilisé avec periodDynamic=lastCustomPeriod/nextCustomPeriod).",
        +  "type": "string"
        +}
      • addedInput schema / properties / projects
        Added value: +{
        +  "description": "Filtrer sur ces IDs de projets.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / reportingCategory
        Added value: +{
        +  "description": "Catégorie de synthèse (défaut 'commercialSynthesis') : commercial, RH, recrutement, activité & frais, facturation, ou globale. `resources` n'est pas disponible hors d'une vue par ressources.",
        +  "enum": [
        +    "commercialSynthesis",
        +    "humanResourcesSynthesis",
        +    "recruitmentSynthesis",
        +    "activityExpensesSynthesis",
        +    "billingSynthesis",
        +    "globalSynthesis"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / reportingType
        Added value: +{
        +  "description": "Type de données : 'realData' (défaut, réel) ou 'targetsData' (objectifs).",
        +  "enum": [
        +    "realData",
        +    "targetsData"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resources
        Added value: +{
        +  "description": "Filtrer sur ces IDs de ressources.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / scorecards
        Added value: +{
        +  "description": "IDs des scorecards (indicateurs) à retourner.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début YYYY-MM-DD. Requis."New value: +"Date de début (YYYY-MM-DD). Requis par l'API."
      • addedInput schema / properties / useCache
        Added value: +{
        +  "description": "Cache de reporting : 'withCache' (valeurs mises en cache) ou 'withoutCache' (recalcul, défaut).",
        +  "enum": [
        +    "withCache",
        +    "withoutCache"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "startDate",
        -  "endDate"
        -]New value: +[
        +  "startDate"
        +]
    • Changedboond_resources_absences_reports3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_actions3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_administrative3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_advantages3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_create1 field changed
      • 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"
        +}
    • Changedboond_resources_delete4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Présent quand la suppression n'a pas eu lieu (ex: refus utilisateur)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_resources_expenses_reports3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_get4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité"New value: +"Identifiant unique de l'entité (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
      • addedInput schema / properties / tab / pattern
        Added value: +"^[a-zA-Z][a-zA-Z-]*$"
    • Changedboond_resources_information3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_positionings3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_projects3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_search2 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Projection côté client : liste d'attributs JSON:API à afficher pour chaque résultat (ex: ['title', 'updateDate', 'numberOfActiveProjects']). Réduit fortement la taille de la réponse. Absent = résumé standard (nom, email, ville, statut...). Les noms inconnus sont ignorés.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_resources_technical_data3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_times_reports3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_resources_update1 field changed
      • 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"
        +}
    • Changedboond_roles_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_roles_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_threads_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_threads_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_todolists_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_todolists_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedboond_validations_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_webhooks_get3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Identifiant unique de l'entité BoondManager"New value: +"Identifiant unique de l'entité BoondManager (numérique)"
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • addedInput schema / properties / id / pattern
        Added value: +"^\\d+$"
    • Changedboond_webhooks_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Nombre d'éléments retournés sur cette page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attributes": {
        +            "additionalProperties": {},
        +            "description": "Attributs projetés (présent si `fields` est fourni)",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Résumé standard (absent si `fields` est fourni)",
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Nombre total de résultats côté BoondManager",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "items"
        +  ],
        +  "type": "object"
        +}
  8. 2 tool updatesv2.2.0
    • Changedboond_actions_create17 fields changed
      • changedInput schema / properties / candidateId / description
        Previous value: -"ID du candidat associé"New value: +"ID du candidat auquel rattacher l'action (dependsOn)"
      • changedInput schema / properties / companyId / description
        Previous value: -"ID de la société associée"New value: +"ID de la société associée (uniquement en complément d'un contactId)"
      • changedInput schema / properties / contactId / description
        Previous value: -"ID du contact associé"New value: +"ID du contact auquel rattacher l'action (dependsOn)"
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Contenu / description",
        -  "type": "string"
        -}
      • changedInput schema / properties / endDate / description
        Previous value: -"Date de fin"New value: +"Date de fin (même format que startDate)"
      • addedInput schema / properties / opportunityId
        Added value: +{
        +  "description": "ID de l'opportunité à laquelle rattacher l'action (dependsOn)",
        +  "type": "string"
        +}
      • addedInput schema / properties / projectId
        Added value: +{
        +  "description": "ID du projet auquel rattacher l'action (dependsOn)",
        +  "type": "string"
        +}
      • changedInput schema / properties / resourceId / description
        Previous value: -"ID de la ressource associée"New value: +"ID de la ressource à laquelle rattacher l'action (dependsOn)"
      • changedInput schema / properties / startDate / description
        Previous value: -"Date de début (YYYY-MM-DD ou ISO)"New value: +"Date de début au format ISO avec timezone (ex: 2026-06-05T10:00:00+0200)"
      • removedInput schema / properties / subject
        Removed value: -{
        -  "description": "Sujet de l'action",
        -  "type": "string"
        -}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Contenu / notes de l'action",
        +  "type": "string"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "Titre de l'action",
        +  "type": "string"
        +}
      • changedInput schema / properties / typeOf / description
        Previous value: -"Type d'action (ex: call, email, meeting, note)"New value: +"Type d'action : ID numérique du dictionnaire BoondManager (setting.action.*, via boond_application_dictionary)"
      • addedInput schema / properties / typeOf / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / typeOf / minLength
        Removed value: -1
      • addedInput schema / properties / typeOf / minimum
        Added value: +0
      • changedInput schema / properties / typeOf / type
        Previous value: -"string"New value: +"integer"
    • Addedboond_reporting_projects
  9. 170 tool updatesv2.1.0
    • First observedboond_absences_create
    • First observedboond_absences_delete
    • First observedboond_absences_get
    • First observedboond_absences_search
    • First observedboond_absences_update
    • First observedboond_accounts_get
    • First observedboond_accounts_search
    • First observedboond_actions_create
    • First observedboond_actions_delete
    • First observedboond_actions_get
    • First observedboond_actions_search
    • First observedboond_advantages_get
    • First observedboond_advantages_search
    • First observedboond_agencies_get
    • First observedboond_agencies_search
    • First observedboond_application_current_user
    • First observedboond_application_dictionary
    • First observedboond_business_units_get
    • First observedboond_business_units_search
    • First observedboond_calendars_get
    • First observedboond_calendars_search
    • First observedboond_candidates_actions
    • First observedboond_candidates_administrative
    • First observedboond_candidates_create
    • First observedboond_candidates_delete
    • First observedboond_candidates_get
    • First observedboond_candidates_information
    • First observedboond_candidates_positionings
    • First observedboond_candidates_search
    • First observedboond_candidates_technical_data
    • First observedboond_candidates_update
    • First observedboond_companies_actions
    • First observedboond_companies_contacts
    • First observedboond_companies_create
    • First observedboond_companies_delete
    • First observedboond_companies_get
    • First observedboond_companies_information
    • First observedboond_companies_invoices
    • First observedboond_companies_opportunities
    • First observedboond_companies_orders
    • First observedboond_companies_projects
    • First observedboond_companies_provider_invoices
    • First observedboond_companies_purchases
    • First observedboond_companies_search
    • First observedboond_companies_update
    • First observedboond_contacts_actions
    • First observedboond_contacts_create
    • First observedboond_contacts_delete
    • First observedboond_contacts_get
    • First observedboond_contacts_information
    • First observedboond_contacts_invoices
    • First observedboond_contacts_opportunities
    • First observedboond_contacts_orders
    • First observedboond_contacts_projects
    • First observedboond_contacts_search
    • First observedboond_contacts_update
    • First observedboond_contracts_create
    • First observedboond_contracts_get
    • First observedboond_deliveries_get
    • First observedboond_deliveries_search
    • First observedboond_expenses_create
    • First observedboond_expenses_delete
    • First observedboond_expenses_get
    • First observedboond_expenses_search
    • First observedboond_expenses_update
    • First observedboond_flags_get
    • First observedboond_flags_search
    • First observedboond_invoices_create
    • First observedboond_invoices_delete
    • First observedboond_invoices_get
    • First observedboond_invoices_search
    • First observedboond_invoices_update
    • First observedboond_logs_get
    • First observedboond_logs_search
    • First observedboond_notifications_get
    • First observedboond_notifications_search
    • First observedboond_opportunities_actions
    • First observedboond_opportunities_create
    • First observedboond_opportunities_delete
    • First observedboond_opportunities_get
    • First observedboond_opportunities_information
    • First observedboond_opportunities_positionings
    • First observedboond_opportunities_projects
    • First observedboond_opportunities_search
    • First observedboond_opportunities_simulation
    • First observedboond_opportunities_update
    • First observedboond_orders_create
    • First observedboond_orders_delete
    • First observedboond_orders_get
    • First observedboond_orders_search
    • First observedboond_orders_update
    • First observedboond_payments_get
    • First observedboond_payments_search
    • First observedboond_planning_absences_search
    • First observedboond_poles_get
    • First observedboond_poles_search
    • First observedboond_positionings_create
    • First observedboond_positionings_delete
    • First observedboond_positionings_get
    • First observedboond_positionings_search
    • First observedboond_products_create
    • First observedboond_products_delete
    • First observedboond_products_get
    • First observedboond_products_search
    • First observedboond_products_update
    • First observedboond_projects_actions
    • First observedboond_projects_create
    • First observedboond_projects_delete
    • First observedboond_projects_deliveries_groupments
    • First observedboond_projects_get
    • First observedboond_projects_information
    • First observedboond_projects_orders
    • First observedboond_projects_productivity
    • First observedboond_projects_purchases
    • First observedboond_projects_search
    • First observedboond_projects_simulation
    • First observedboond_projects_update
    • First observedboond_provider_invoices_get
    • First observedboond_provider_invoices_search
    • First observedboond_purchases_create
    • First observedboond_purchases_delete
    • First observedboond_purchases_get
    • First observedboond_purchases_search
    • First observedboond_reporting_companies
    • First observedboond_reporting_production_plans
    • First observedboond_reporting_resources
    • First observedboond_reporting_synthesis
    • First observedboond_resources_absences_reports
    • First observedboond_resources_actions
    • First observedboond_resources_administrative
    • First observedboond_resources_advantages
    • First observedboond_resources_create
    • First observedboond_resources_delete
    • First observedboond_resources_expenses_reports
    • First observedboond_resources_get
    • First observedboond_resources_information
    • First observedboond_resources_positionings
    • First observedboond_resources_projects
    • First observedboond_resources_reference_create
    • First observedboond_resources_reference_delete
    • First observedboond_resources_reference_update
    • First observedboond_resources_search
    • First observedboond_resources_technical_data
    • First observedboond_resources_technical_data_update
    • First observedboond_resources_times_reports
    • First observedboond_resources_timesheets
    • First observedboond_resources_update
    • First observedboond_roles_get
    • First observedboond_roles_search
    • First observedboond_threads_get
    • First observedboond_threads_search
    • First observedboond_timesheets_get
    • First observedboond_timesheets_search
    • First observedboond_todolists_get
    • First observedboond_todolists_search
    • First observedboond_validations_get
    • First observedboond_validations_search
    • First observedboond_webhooks_get
    • First observedboond_webhooks_search
    • First observedboond_workflow_candidats_pour_opportunite
    • First observedboond_workflow_cartographie_competences
    • First observedboond_workflow_cvs_a_mettre_a_jour
    • First observedboond_workflow_factures_a_relancer
    • First observedboond_workflow_fiche_consultant
    • First observedboond_workflow_fin_de_mission
    • First observedboond_workflow_pipeline_commercial
    • First observedboond_workflow_recap_hebdo
    • First observedboond_workflow_recherche_profil_competences
    • First observedboond_workflow_staffing_disponible
    • First observedboond_workflow_synthese_equipe

TDQS

A3.9/5.0

Scored across 182 tools

Disambiguation3/5

The consistent pattern boond_<entity>_<action> and explicit 'Plutôt que' cross-references usually make each tool identifiable, but the set is so large that overlapping access paths exist (e.g. boond_resources_timesheets vs boond_timesheets_search vs boond_resources_times_reports, entity actions tabs vs boond_actions_search, and workflow runbooks vs real data tools). An agent browsing 182 tools will struggle to pick the most direct one despite the helpful descriptions.

Naming Consistency4/5

Almost all tools follow a predictable boond_<domain>_<operation> snake_case convention, with search/get/create/update/delete repeated consistently across entities. Minor deviations exist: French workflow_* names, times_reports vs timesheets, absences_reports vs absences_search, and custom operations like expenses_default, which prevent a perfect score.

Tool Count1/5

182 tools is an extreme surface for a single MCP server, far beyond the 25+ threshold and into the 50+ mismatch category. The same CRUD boilerplate is repeated across more than twenty entities plus dozens of tab-readers and workflow runbooks, creating an enormous selection burden that would be better split into several domain-scoped servers.

Completeness3/5

The server covers most core BoondManager entities with full CRUD (candidates, resources, companies, opportunities, projects, invoices, orders, actions, absences, expenses, positionings). However several entities are partial: contracts have only get/create (no search/update/delete), timesheets/deliveries/payments/provider invoices lack update/delete, and many reference tables are read-only, leaving noticeable lifecycle dead ends.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server with 206+ tools across 16 integrations that gives Claude access to real accounts (LinkedIn, Twitter, Slack, Gmail, WhatsApp, etc.) by extracting auth tokens straight from your browser, no API keys or OAuth needed.
    11 npm
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server to connect Claude with Odoo 18, enabling CRUD operations on Odoo models via natural language.
    2
    -
  • F
    license
    C
    quality
    D
    maintenance
    An MCP server integrating with the BoondManager API to enable AI assistants to search, retrieve, create, and update records across 94 tools in 8 business domains.
    95
    -