Skip to main content
Glama
fauguste

boondmanager-mcp-server

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.

182 outils couvrant 38 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, absences

boond://dictionary/typeOf/{entity}

Types par entite : resources, candidates, contacts, projects, actions, absences

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 fauguste/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/fauguste/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/fauguste/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.

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"

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.

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.

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/fauguste/boondmanager-mcp-server

github.com/fauguste/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/fauguste/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

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 Frédéric Auguste

Voir LICENSE et NOTICE pour les détails.

Available Tools

182 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.

  • state est soumis au workflow de validation BoondManager : la demande part dans son état initial, elle n'est pas validée par cet appel.

  • É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
stateNoÉtat de la demande (0=en attente, 1=validé, 2=refusé...)
typeOfYesLibellé de l'absence (congé payé, RTT, maladie, sans solde...)
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
workUnitTypeReferenceNoRéférence du type d'unité d'absence, défaut 1

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 meaningful behavioral traits: the state parameter is subject to BoondManager's validation workflow and the request starts in its initial state, and the write is explicitly non-idempotent with no deduplication. This is valuable 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?

The description is well-structured with clear 'Quand', 'Plutôt que', bullet points, and a Returns line. Every section earns its place, and the most decision-relevant 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 9-parameter creation tool without an output schema, the description adequately covers the key behaviors, parameter subtleties, non-idempotence, workflow implications, and return value. The schema documents the remaining parameter details, so no critical context 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 meaning beyond the schema: absencesPeriods can be omitted and a single period is inferred from startDate/endDate, and state is not directly applied but submitted to workflow. This raises the score 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 a specific verb and resource: 'Crée une demande d'absence' for a resource, and lists absence types. It also explicitly contrasts this with boond_absences_update, making the tool's purpose and scope immediately distinguishable 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?

The 'Quand' section states exactly when to use the tool: to submit an absence for a resource identified by ID. The 'Plutôt que' section explicitly names boond_absences_update as the alternative for modifying an existing request, 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_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.

  • ⚠️ 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?

Although destructiveHint is already true, the description adds meaningful behavioral nuance: deletion is irreversible with no trashbin on the API side, an elicitation-capable MCP client will request user confirmation and can return deleted:false with a reason, and otherwise the deletion proceeds immediately. This enriches the annotations rather than merely repeating 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 front-loaded, starting with a clear one-sentence purpose, then using bullets for usage conditions, alternatives, safety warnings, and return semantics. Every section contributes necessary information with no filler or 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 destructive delete tool with annotations and an output schema, this description is complete: it defines the trigger condition, the safer alternative, the irreversible behavior, the confirmation mechanism, and the meaning of the response field. Nothing an agent needs to call it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 input schema with a numeric pattern and description, giving 100% coverage. The description does not add much parameter-specific meaning beyond advising ID verification with boond_absences_get, which is operational context but not new syntax or constraints.

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) demande d'absence de BoondManager.' It then explicitly contrasts this tool with boond_absences_update, making it easy for an agent to distinguish destructive deletion from 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?

The 'Quand' section states that the tool should only be used when the user explicitly asks to delete and after the ID has been verified via boond_absences_get. The 'Plutôt que' section names boond_absences_update as the preferred alternative when only disabling or modifying an absence is desired, so the when-not-to-use guidance is explicit.

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
stateNoÉtat de la demande
endDateNoDate de fin (YYYY-MM-DD)
startDateNoDate de début (YYYY-MM-DD)

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses beyond the annotations: it states partial-update semantics and the `absencesPeriods` exception where the provided array replaces existing periods. It also states the return, which is useful because there is no output schema. The only limiting factor is that it does not address permissions, validation, or rate limits, but the annotations already cover idempotency and non-read-only, so this is a strong-but-not-complete 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 and well-structured: purpose, when to use, what not to use, partial-update behavior, notable exception, and return value. Every sentence earns its place, and the structure front-loads the most relevant information.

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?

For a 5-parameter update tool with no output schema, the description explains purpose, usage, return value, partial update, and the replacement exception. It is not fully complete because `absencesPeriods` is described as a replaceable field but is absent from the input schema, and the `state` parameter receives no meaningful operational detail. These gaps make the definition serviceable but not fully reliable.

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?

Since schema description coverage is 100%, the baseline is 3. The description does add some value by mapping the update use case to dates, comment, and reason, and by clarifying partial update behavior. However, it does not explain the `state` parameter's possible values, and it mentions `absencesPeriods` although that field is not present in the input schema, which can confuse an agent.

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 names a specific verb and resource: 'Met à jour une demande d'absence existante, identifiée par son ID.' It also differentiates the tool from the sibling `boond_absences_create` by explicitly pointing to create as the 'Plutôt que' alternative. An agent can immediately tell what this tool updates and how it differs from creating an absence.

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 the tool to correct dates, the reason, or the comment of an already-submitted request. It also says 'Plutôt que : boond_absences_create si la demande n'existe pas encore,' which is a concrete alternative and exclusion. This is model usage clarity 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_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.

Args:

  • typeOf (number, requis): ID numérique du type d'action (dictionnaire setting.action.*, via boond_application_dictionary)

  • title, text (string, optional): Titre et contenu de l'action

  • startDate, endDate (string, optional): Dates ISO avec timezone (ex: 2026-06-05T10:00:00+0200)

  • contactId | candidateId | resourceId | opportunityId | projectId (string, un requis): Entité de rattachement

  • companyId (string, optional): Société, uniquement en complément d'un contactId

  • positioningId (string, optional): Positionnement à lier — requis 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.5/5.0
Behavior4/5

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

Le description comporte des informations comportementales au-delà des annotations : « Returns: L'action créée avec son ID» expose le retour ; la contrainte « positioningId requis par l'API pour les types d'action liés aux positionnements (ex. RQ)» et l'erreur associée apportent un contexte de négociation. Les annotations indiquent déjà readOnlyHint=false, idempotentHint=false et destructiveHint=false, ce qui est cohérent avec une opération de création. La description n'ajoute toutefois pas plus de détails sur les effets (par exemple, elle n'insiste pas sur le fait que l'opération n'est pas idempotente, la création de doublon possible, mais cela est déjà suggérée par la comparaison à update).

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?

Description assez longue mais bien structurée : une première phrase qui énonce l'objectif, puis une phrase de guidance (« Plutôt que... »), puis une liste `Args:` en bullets. Chaque ligne apporte une information (format de date, contrainte relationnelle, compléments commerciaux). Il y a une certaine redondance avec le schéma (chaque paramètre y est listé), mais la description est utilisable seule et front-load les informations clés. Un cran de plus serait possible si elle omises les list d'Args pour pointer vers le schéma, mais la taille reste raisonnable pour un outil avec 12 paramètres.

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?

Avec 12 paramètres, un output en sortie non spécifié et une opération de création, la description fournit presque tout ce qu'un agent seek : les types d'actions, la nécessité d'une entité de rattachement, le format dates, l'exigence de `typeOf` via la dictionnELIN, la contrainte de `companyId`, et le retour avec id. Manque peut être un exemple d'appel complet, mais ce n'est pas indispensable puisque le schéma a déjà une couverture à 100%. Il serait possible d'ajouter les prérequis d'authentification ou de politique, mais ces informations ne sont pas plus attendues pour un tool d'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?

Le schéma de l'objet couvre 100% des paramètres avec des descriptions, donc la baseline est à 3. La description dépasse ce baseline en ajoutant des sémantiques transversales : elle regroupe les cinq identifiants de messagerie potentiels et précise « un requis » (contrainte qui the net est pas exprimée dans le schéma formulé, car seule `typeOf` est requise). Elle explique aussi la relation `dependsOn` obligatoire et l'incompatibilité de `companyId` sauf en complément d'un `contactId`. Ce sont des informations nécessaires pour appeler l'outil correctement, non visibles dans le schéma seul.

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 un verbe d'action précis (« Crée une nouvelle action »), précise les types d'actions (appel, email, RDV, note), l'univers BoondManager et les entités de rattachement (contact, candidat, ressource, opportunité, projet). Elle différencie explicitement de sa sœur boond_actions_update (« Plutôt que : `boond_actions_update` »), ce qui permet à un agent de sélectionner correctement l'outil dès la lecture.

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 description indique explicitement dans quels cas ne pas utiliser : « Plutôt que : `boond_actions_update` pour compléter une action déjà enregistrée plutôt que d'en créer un doublon ». Elle précise aussi une condition d'usage importante : une entité de rattachement doit être fournie (« relation dependsOn, obligatoire », « contactId | candidateId | ... (string, requis) »). Ceci guide l'agent vers le bon choix entre création et modification, et impose une contrainte critique pour réussir l'appel.

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.

  • ⚠️ 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.4/5.0
Behavior4/5

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

Au-delà des annotations (destructiveHint=true), la description ajoute l'information cruciale de l'irréversibilité ('sans corbeille côté API') et du flux conditionnel de confirmation selon la capacité `elicitation` du client. Elle décrit précisément le comportement en cas de refus (deleted: false + reason), dupliquant ainsi l'annonce de destructivité par une mise en garde concrète. Légère marge (pas de mention des effets annexes), d'où 4.

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?

Structure exemplaire avec en-têtes ('Quand :', 'Plutôt que :'), listes à puces et ligne 'Returns' explicite. L'avertissement ⚠️ est placé en tête des risques. Chaque phrase apporte de l'information, sans redondance. Légèrement plus long que nécessaire dans l'énoncé du flux elicitation, d'où 4 plutôt que 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?

Le schéma de sortie existe, donc la description n'a pas à détailler le retour, mais elle le fait quand même ({ id, deleted, reason? }) pour clarifier le cas de refus. Elle couvre tous les aspects nécessaires à un appel correct : condition d'usage, pré-vérification, destructivité, flux de confirmation conditionnel, et interprétation du retour. Rien d'essentiel ne manque pour une opération destructive complexe.

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?

La couverture du schéma est de 100% avec un seul paramètre (id) déjà bien décrit ('Identifiant unique... numérique', motif ^\d+$). La description n'ajoute pas de sémantique supplémentaire sur le paramètre, mais référence l'étape de vérification de l'ID via boond_actions_get, ce qui contextualise son usage. Le niveau de base 3 est approprié.

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 énonce une action précise — 'Supprime définitivement un(e) action de BoondManager' — avec un verbe, un objet et une sémantique (permanente) nettement définis. Elle se distingue explicitement de boond_actions_update et boond_actions_get, ce qui permet à un agent de choisir sans ambiguïté.

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?

Le 'Quand :' précise l'unique condition d'usage (demande explicite de l'utilisateur + vérification préalable de l'ID via boond_actions_get) et le 'Plutôt que :' donne l'alternative exacte (boond_actions_update pour désactiver sans détruire) en indiquant qu'elle est 'presque toujours l'intention réelle'. Guidage explicite et actionnable.

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.

Args:

  • id (string, requis): ID de l'action à modifier

  • typeOf (number, optional): Nouveau type (ID numérique du dictionnaire setting.action.*)

  • title (string, optional): Nouveau titre

  • text (string, optional): Nouveau contenu / notes (remplace l'existant, pas d'ajout)

  • startDate, endDate (string, optional): Dates ISO avec timezone (ex: 2026-06-05T10:00:00+0200)

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.8/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 adds substantial behavioral detail: it's a partial PUT ('PUT partiel, seuls les champs fournis sont modifiés'), it does not send relations and preserves dependsOn/positioning/calendar sync, and it warns that text replaces existing content rather than appending. This gives the agent crucial insight into side effects. 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 somewhat lengthy but well-structured: it starts with the core purpose, then usage guidance, a behavioral warning, and an args list. Every sentence contributes meaning; there is no fluff. The front-loading of the primary action and the sibling distinction makes it easy to scan 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 an update tool with a rich schema and annotations, the description is complete. It covers the operation type, idempotent partial update behavior, preservation of relationships, and parameter semantics. The 'Returns: L'action mise à jour' line, combined with the stated output schema, ensures the agent knows what to expect. 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% (all six parameters have descriptions), so the baseline is 3. The description adds value by clarifying that 'text' replaces existing content (not adds), specifying the date format with a concrete example (2026-06-05T10:00:00+0200), and noting typeOf uses the dictionary setting.action.*. These details go beyond the schema's basic 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 clearly states the tool's purpose: 'Met à jour une action existante dans BoondManager' (updates an existing action). It explicitly differentiates from the sibling boond_actions_create by noting 'Plutôt que : boond_actions_create si l'action n'existe pas encore' (rather than create if the action doesn't exist yet). This leaves no ambiguity about the action's 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 provides direct guidance on when to use this tool versus alternatives. It names boond_actions_create as the correct choice when the action doesn't exist, and contrasts with delete+recreate, explaining why update is preferable for preserving calendar sync. This is explicit and actionable.

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é.

Args:

  • dictionaryType (string): Chemin dans la réponse (relatif à data). Exemples :

    • "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
dictionaryTypeYesType de dictionnaire (ex: typeOf/actions, typeOf/absences, states/candidates, states/resources, states/opportunities, states/projects, states/invoices, countries, currencies, languages...)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already communicate read-only, idempotent, non-destructive behavior. The description adds meaningful context beyond that: one endpoint returning everything, server-side caching with a configurable TTL, dotted-path subtree extraction, the invalid legacy slash form, and the isError response for unknown paths. It does not discuss auth or rate limits, but those are not central for this read-only dictionary 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 description is long but clearly structured with Quand/Plutôt que/endpoint/Args/Returns sections, and the extensive path examples are reference material rather than fluff. It could be slightly condensed, but no sentence 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 single-parameter read-only lookup with no output schema, the description is complete: it explains when to use it, what the parameter means, what the response looks like, the error behavior, and important constraints. 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.

Parameters5/5

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

One parameter with 100% schema coverage, but the description adds the crucial semantics: dictionaryType is a path relative to data, with many concrete examples and an explicit correction that the schema-style slash form ('states/resources') is invalid in favor of dotted form ('setting.state.resource'). This goes well beyond the schema and prevents a common mistake.

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 object ('Récupère un dictionnaire de référence BoondManager') and enumerates the dictionary contents (états, types, pays, devises...). It also distinguishes itself from reading the same data via the boond://dictionary/* resources, so an agent can tell this tool apart from the read-resource 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 gives an explicit trigger: translate a BoondManager state or type ID to its label before filtering a search. The 'Plutôt que' section names the alternative (resources/read on boond://dictionary/*) and states the condition for still using this tool (tables not published as resources).

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.

  • ⚠️ 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 goes beyond them by warning that deletion is irreversible, has no trash/recycle bin on the API side, and can be bypassed or canceled depending on the MCP client's 'elicitation' capability. It also explains refusal behavior via 'structuredContent.deleted: false' and 'reason'. These are significant behavioral details the annotations do not 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 main delete action, followed by compact 'Quand' and 'Plutôt que' lines. The important warnings and return behavior are placed in short bullet phrases. Every sentence contributes distinct operational value, and there is no fluff or tautological 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 destructive, single-parameter tool, the description covers all key context: when deletion is appropriate, which sibling to use instead, the irreversibility risk, the possible user confirmation flow, and the output combination for a refusal. Nothing relevant for an agent 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?

There is only one parameter, 'id', and the input schema already describes it as the unique numeric BoondManager entity ID with a regex pattern. Since schema coverage is 100%, the baseline is 3; the description adds no extra parameter details beyond the advice to verify the ID first, which is more operational guidance than parameter semantic. This does not substantially raise the 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 states the exact action with a specific verb and resource: 'Supprime définitivement un(e) candidat de BoondManager.' It also distinguishes the tool from siblings by explicitly pointing to boond_candidates_update for non-destructive state changes and boond_candidates_get for verifying the ID, so an agent can clearly recognize this tool's unique destructive 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 gives explicit 'Quand' guidance: only on explicit user request and after verifying the ID with boond_candidates_get. It also tells the agent to prefer boond_candidates_update when the real intention is to disable or change state without destroying, making both when to use and when not to use this delete tool unambiguous.

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).

  • 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.3/5.0
Behavior5/5

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

While the annotations already declare readOnlyHint and idempotentHint, the description adds valuable behavioral details not present in annotations: without `tab` only the base fiche is returned rather than a merge of tabs, unknown IDs surface the raw BoondManager error, and returned data is the JSON entity as provided by the API. The 'Lecture seule' note is consistent with the readOnlyHint annotation, and no contradiction appears.

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: it opens with the main action, then organizes usage context, alternatives, parameter behavior, and return value in short labeled sections. Every sentence adds useful information without repetition or padding.

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 get operation with two parameters and no output schema, the description covers the essentials: input provenance, tab behavior, error behavior, and return format. The main completeness gap is the lack of clarification about when to use this tool's `tab` parameter versus the dedicated tab-specific sibling tools, which are present in the sibling list and semantically overlap.

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 both `id` and `tab`. The description adds useful meaning by stating that `id` must come from `boond_candidates_search` and never from guesswork, and by explaining the effect of omitting `tab`. However, there is a notable inconsistency: the schema lists `technical` while the description uses `technical-data`, which could mislead an agent about valid `tab` values.

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 clearly states the operation: 'Récupère la fiche complète d'un(e) candidat par son ID numérique', with a specific verb and resource. It also differentiates from `boond_candidates_search` by noting that this tool requires a numeric ID and returns list-attributs beyond the summary. However, it does not clarify its relationship to the sibling tab-specific tools such as `boond_candidates_information`, `boond_candidates_technical_data`, or `boond_candidates_administrative`, despite the `tab` parameter overlapping with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage context: 'Quand : après un `boond_candidates_search`, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste.' It also tells the agent when not to use it: 'Plutôt que : `boond_candidates_search` si l'ID n'est pas connu.' It lacks explicit exclusions or routing guidance for the dedicated tab-specific sibling tools, so the when-to-use guidance is clear but incomplete.

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.

  • 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 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.9/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: the update is partial, only provided fields are written, and absent fields are left untouched. It also warns that array fields are replaced rather than merged, and states the return payload: confirmation and the updated candidate record. These details are not contained 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 compact and well structured: core behavior first, then a clear 'Quand' section, an alternative-tool note, and a short bullet list. Every line provides actionable information, and the return value is included without unnecessary elaboration.

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 high schema coverage, the presence of an output schema, and the annotations, this description is complete enough for correct invocation. It covers the update scenario, partial-update behavior, the create alternative, and the response, so an agent can decide when to call it and how to interpret 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?

Schema description coverage is 100%, so each parameter is already documented in the schema. The description adds valuable cross-parameter semantics by clarifying that omitted optional fields are not cleared, and that provided fields are written as part of the partial update. This goes slightly beyond the baseline but does not deeply explain individual parameter formats.

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 the exact operation: update an existing candidate identified by its ID. It explicitly distinguishes the tool from the sibling creation tool by saying 'Plutôt que : boond_candidates_create si l'enregistrement n'existe pas encore.' This removes ambiguity about whether to use update or 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' clause clearly indicates this is for modifying specific fields of an existing record. The 'Plutôt que' clause names the alternative tool and its condition of use: if the record does not exist yet, use boond_candidates_create. This gives the agent a clear decision rule.

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.

  • ⚠️ 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?

Les annotations déclarent déjà destructiveHint=true, mais la description ajoute des précisions essentielles : irréversibilité sans corbeille côté API, comportement conditionnel selon la capacité elicitation du client MCP, et structure de retour avec deleted=false et reason en cas de refus utilisateur. Aucune contradiction avec les annotations n'est présente.

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?

Le texte est structuré en sections courtes et front-loaded : action, conditions d'usage, alternative, avertissement, comportement de confirmation, retour. Chaque phrase apporte une information nécessaire pour un outil destructif, sans répétition inutile.

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?

La description couvre tous les aspects critiques pour un outil de suppression : déclenchement légitime, vérification préalable, alternative non destructive, irréversibilité, gestion de la confirmation utilisateur et format de retour. Rien d'essentiel ne manque.

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% de l'unique paramètre id avec type, pattern et description en français. La description n'ajoute pas de sémantique supplémentaire sur le paramètre lui-même ; la recommandation de vérifier l'ID relève de l'usage, pas de la définition du paramètre.

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 'Supprime définitivement un(e) société de BoondManager', un verbe d'action précis avec une ressource claire. Le suffixe _delete et le titre 'Supprimer un(e) société' distinguent l'outil des autres opérations sur les sociétés.

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 que la suppression ne doit avoir lieu que sur demande explicite de l'utilisateur et après vérification de l'ID avec boond_companies_get. La section 'Plutôt que' nomme explicitement boond_companies_update comme alternative pour une désactivation, ce qui guide le choix de l'agent.

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).

  • 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.5/5.0
Behavior4/5

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

The description discloses that without a `tab`, only the base record is returned, not a merge of all tabs, and that an unknown ID yields a raw BoondManager error. It also states it is read-onlyais, which is already in annotations. It adds some value beyond annotations, though it doesn't cover authentication or rate limits.

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, well-organized with bullet points for when/where to use and return behavior. Every sentence adds value; no fluff. Ideal length and structure for an agent-facing description.

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 read-only nature, the tool is fully described: when to use, when not to, tab behavior, error on unknown ID, and response format (JSON). The annotation already covers read-only. There is no 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 description adds context for the `tab` parameter (specific tabs like information, technical-data) and notes that without it you get the base record. However, the input schema already describes parameters well, so the description only slightly enhances. The unknown-ID error is about parameter id, which is useful but not deeply detailed.

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 crisp statement of purpose: 'Récupère la fiche complète d'une société par son ID.' It is obvious what the tool does and how it differs from the list-level search 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 positions the tool as a follow-up to `boond_companies_search`, tells the agent when NOT to use it (unknown ID, use search instead), and even warns that the ID must be a real one, never guessed. This is ideal routing information.

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.

  • 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 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.4/5.0
Behavior4/5

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

The description discloses partial update behavior ('seuls les champs fournis sont écrits, les autres sont laissés en place') and warns that array fields are replaced, not merged. This adds meaningful behavioral context beyond the annotations, which only state idempotentHint=true and destructiveHint=false. The description doesn't contradict annotations; it complements them. A small deduction because it doesn't mention permissions or response details, but the core behavioral traits are 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 and well-structured: a one-line purpose, a 'Quand' section, a 'Plutôt que' section, and two bullet points for key behaviors. Every sentence earns its place, and the most important routing information is front-loaded. No fluff or repetition of schema details.

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 partial-update tool with 10 parameters, the description covers the essential context: when to use it, what it does, and the critical partial-update and array-replacement behaviors. The output schema exists, so return values don't need explanation. It could mention idempotency or error cases, but the combination of annotations, schema, and description is sufficient for an agent to call this 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 10 parameters. The description adds the key semantic that only provided fields are written (partial update), which is important for parameter usage. However, it doesn't add per-parameter 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 clearly states the tool updates an existing company identified by its ID, with a specific verb ('Met à jour') and resource ('société'). It distinguishes itself from the sibling `boond_companies_create` by explicitly saying to use this when the record already exists, and to use create when it doesn't. This is a clear, specific purpose that an agent can act on.

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 modifier quelques champs d'un enregistrement déjà en base' and 'Plutôt que : boond_companies_create si l'enregistrement n'existe pas encore.' This directly tells the agent when to use this tool versus the create alternative, which is exactly what the dimension asks for.

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
Behavior5/5

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

The description discloses that the operation is a real write and non-idempotent, which is crucial despite annotations indicating not read-only and not idempotent. It also warns about non-deduplication and the need to resolve IDs via dictionary lookups, adding significant 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?

The description is compact, front-loaded with the core purpose, then provides usage context naturally. Each sentence earns its place: the 'Quand' block, the 'Plutôt que' block, and behavioral notes. 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?

The description covers prerequisites (checking existence, resolving IDs), the non-idempotent nature, and explains the return value and how to use 'structuredContent.id' for chaining. Given the output schema exists, the return format is complete. 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?

The schema covers 100% of parameters with descriptions in French, so the schema already provides semantic meaning. The description adds context about the 'companyId' and relationship IDs being BoondManager numeric IDs that need prior resolution, but doesn't re-explain individual parameters, which is acceptable given high 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 explicitly states 'Crée un(e) contact dans BoondManager' with a clear verb and resource. It also distinguishes from siblings by explicitly naming 'boond_contacts_update' and 'boond_contacts_search' as alternatives, making its 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?

It provides explicit 'Quand' with the condition 'pour ajouter un(e) contact inexistant(e)' and 'Plutôt que' naming alternatives, including a precondition to search first to avoid duplicates. This is a 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_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.

  • ⚠️ 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=true annotation, the description discloses irreversibility with no API-side trash, the conditional elicitation-required confirmation flow, refusal behavior returning deleted:false with a reason, and instruction to check the returned deleted field. This goes well 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 overview is front-loaded with the purpose, then organized into clear labeled sections and a bulleted warning. Each sentence and section carries necessary information (safety condition, alternative, irreversibility, elicitation flow, return value), with no wordy 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 one-parameter destructive delete, the description covers the permanent effect, the safety prerequisite, the alternative tool, confirmation/refusal behavior, and the return contract. An agent has all the context needed to invoke it correctly and safely.

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, and description (100% coverage). The description adds only a workflow warning to verify the ID via boond_contacts_get, which is useful but not genuinely new 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 states a specific verb, resource, and effect: 'Supprime définitivement un(e) contact de BoondManager.' It conveys permanent deletion and is clearly distinguished from sibling alternatives, especially 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 contains explicit 'Quand' and 'Plutôt que' sections. It instructs the agent to use this tool only on explicit user request and after verifying the ID with boond_contacts_get, and directs non-destructive situations to boond_contacts_update instead.

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).

  • 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?

Les annotations couvrent déjà readOnlyHint et idempotentHint, mais la description ajoute des comportements utiles : sans `tab`, seule la fiche de base est renvoyée, un ID inconnu remonte l'erreur API telle quelle, et l'ID doit provenir d'une recherche. Cela va au-delà des annotations sans les contredire.

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 structurée avec des sections « Quand », « Plutôt que », des puces et une ligne « Returns ». Chaque phrase apporte une information nécessaire, sans redondance ni remplissage.

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 lecture avec annotations riches et deux paramètres, la description couvre l'usage, le comportement de `tab`, la gestion des erreurs, la provenance de l'ID et le format de retour. Rien d'essentiel ne manque pour que l'agent appelle l'outil correctement.

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?

Le schéma documente déjà les deux paramètres, donc le niveau de référence est 3. La description enrichit surtout `tab` en expliquant son effet et le comportement par défaut quand il est absent, ce qui justifie un score supérieur à la 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?

La description commence par un verbe précis et la ressource ciblée : « Récupère la fiche complète d'un(e) contact par son ID numérique ». Elle distingue clairement l'outil de boond_contacts_search, ce qui évite toute ambiguïté entre les 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 explicitement d'utiliser cet outil après un boond_contacts_search, et la section « Plutôt que » indique de ne pas l'utiliser quand l'ID est inconnu. Le rôle du paramètre `tab` est également expliqué avec des exemples concrets.

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.

  • 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 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.3/5.0
Behavior4/5

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

Annotations already include idempotentHint=true and destructiveHint=false. The description goes beyond annotations by clarifying partial update behavior (only provided fields are written) and the critical replacement of array fields. No contradiction with hints. Could have mentioned authorization or response format, but what's there is useful.

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 bullet points and front-loaded with the tool's purpose. It is concise but includes necessary warnings. Slight redundancy in restating 'Quand' and 'Plutôt que' but still earns high marks.

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 moderate complexity update tool with a required ID and optional field updates, the description reasonably covers key aspects: identification by ID, partial update, array replacement, and indicates a return confirmation. Output schema exists, so no need to detail return values. Could have mentioned validation or field constraints beyond schema, but it is complete 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 places a 'ID du contact à modifier' description for 'id' and provides French descriptions for all other fields (Ville, Notes, etc.). The description adds no additional semantic beyond the schema—doesn't specify format or relationship between fields (e.g., lastName and firstName). With full schema coverage, a score of 3 is appropriate as the schema already 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 clearly states the tool updates an existing contact identified by ID IA, fixing scope and partial update semantics. It distinguishes from create by referencing the sibling boond_contacts_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?

Explicitly states when to use (modify fields of existing record) and when not to (use create if record doesn't exist). Names the alternative tool directly. Also warns about table fields being replaced, adding crucial usage nuance.

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_contracts_search 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.

  • Le type de contrat est un ID entier du dictionnaire (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
typeOfNoType de contrat (CDI, CDD, freelance...)
endDateNoDate de fin (YYYY-MM-DD)
startDateNoDate de début (YYYY-MM-DD)
resourceIdNoID de la ressource associée

TDQS

A4.6/5.0
Behavior4/5

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

The description explicitly discloses non-idempotency ('deux appels identiques créent deux contrats'), which aligns with and adds context beyond the idempotentHint=false annotation. It also adds practical behavioral details about the typeOf dictionary ID requirement and the location of the created contract's ID in structuredContent.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 well-structured and economical: a one-line purpose, clear 'when' and 'alternative' sections, two focused bullets, and a returns note. Every sentence adds actionable information 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?

With no output schema, the description usefully explains the return value and where to find the new ID. It covers the main usage context, the key non-idempotency warning, and the dictionary type pitfall. A small gap is that required parameters are not explicitly clarified, but the schema lists 0 required and the description otherwise gives sufficient context 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 baseline is 3. The description adds important semantic value by clarifying that typeOf is an integer dictionary ID from boond://dictionary/typeOf/contracts, not a label, which is a key disambiguation beyond the schema's generic 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 opens with a specific verb and resource: 'Crée un contrat de travail rattaché à une ressource.' It clearly identifies the action and its object, and distinguishes itself from the sibling tools boond_contracts_search and boond_contracts_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 'Quand' section explicitly states when to use the tool: to register a new contract (embauche, avenant, renouvellement). The 'Plutôt que' section names an exact alternative, boond_contracts_search, and instructs the agent to check for overlapping contracts first, providing clear decision guidance.

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(e) contrat par son ID numérique.

Quand : après un boond_contracts_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste. Plutôt que : boond_contracts_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_contracts_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?

Adds concrete behavioral details beyond the readOnlyHint annotation: unknown IDs return BoondManager's raw error, the tool does not accept a name, and the response shape (attributes + relations) is disclosed. The 'lecture seule' statement is consistent with annotations. Loses one point only because the read-only nature is already in the annotations and something like pagination/field-level detail is not 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?

Front-loaded with the core action, then structured into clear 'Quand', 'Plutôt que', and 'Returns' segments. Compact, scannable, and every sentence adds information. 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 tool, nothing is missing: what it returns ('JSON de l'entité... attributs + relations'), when to use it, when not to, error behavior for unknown IDs, and read-only status. The description fully covers the agent's decision and invocation needs.

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 fully describes the `id` parameter (required, numeric pattern) but the description adds meaningful usage semantics: the ID must come from boond_contracts_search, must not be guessed, and the tool rejects names. This goes beyond the schema's type/pattern constraints.

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 la fiche complète') and resource ('un contrat'), explicitly distinguishing itself from boond_contracts_search (which is for finding contracts) and clarifying that it fetches the full record. The title and description align and 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?

Provides explicit when-to-use guidance ('Quand: après un boond_contracts_search'), when-not-to-use guidance ('Plutôt que: boond_contracts_search si l'ID n'est pas connu'), and a hard rule that the ID must come from search, never a guess. This fully equips the agent to choose between the get and search tools.

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

boond_deliveries_createCreer 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes, mappees vers informationComments
stateNoEtat
titleNoTitre de la prestation/livraison
typeOfNoType de prestation
endDateNoDate de fin (YYYY-MM-DD)
quantityNoNombre de jours / quantite
projectIdYesID du projet
startDateNoDate de debut (YYYY-MM-DD)
unitPriceNoPrix journalier HT
resourceIdYesID de la ressource portee par la prestation
averageDailyCostNoCout journalier moyen
forceAverageDailyPriceExcludingTaxNoForcer le prix journalier HT

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, idempotentHint=false, destructiveHint=false. The description adds valuable behavioral context: 'Écriture non idempotente' (non-idempotent write), which is important for an agent to know. It also states the returned ID is required by expense lines (boond_expenses_create), providing downstream context. 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 compact and well-structured: a one-line definition, a 'Quand' section for usage, a 'Plutôt que' section for alternatives, bullet points for key constraints, and a return 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.

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 12 parameters and no output schema, the description covers the essential context: when to use it, what it returns, non-idempotency, and the downstream consumer of the returned ID. It doesn't explain all 12 parameters, but the schema already covers those. The only minor gap is not describing the full return structure, but the description says it returns confirmation and the created prestation record.

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 12 parameters. The description adds that project and resource are mandatory and expect numeric IDs, which is useful but partially redundant with the schema's required list. It 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 creates a prestation (delivery) attached to a project and resource, with a specific purpose: opening the mission line that makes the resource billable on the project. It distinguishes itself from the sibling boond_projects_deliveries_groupments by explicitly saying 'Plutôt que' (rather than) for listing existing prestations.

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 ('Quand : pour ouvrir la ligne de mission qui rendra la ressource facturable sur ce projet') and provides an alternative ('Plutôt que : boond_projects_deliveries_groupments pour lister les prestations déjà en place sur le projet'). This is clear usage guidance with an explicit exclusion.

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

boond_deliveries_getDetails 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.9/5.0
Behavior5/5

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

Annotations already mark it read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond that: unknown IDs raise the raw BoondManager error, the tool does not accept a name, and the response is the full JSON entity 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, well-structured, and front-loaded with the core purpose. The sections 'Quand', 'Plutôt que', and 'Returns' make the guidance scannable, and every sentence carries functional 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?

This is a simple one-parameter getter with no output schema. The description covers what the tool returns, when to use it, how to obtain a valid ID, and what happens on an unknown ID. 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 value by tying the 'id' parameter to the output of boond_deliveries_search and emphasizing that it must be numeric and never guessed, which is useful semantic guidance beyond the schema's parameter 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 states a specific verb and resource: 'Récupère la fiche complète d'un(e) livraison (CRA) par son ID numérique.' It clearly distinguishes itself from the search sibling by explicitly framing itself as the post-search detail retrieval 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?

It gives explicit when-to-use guidance ('après un boond_deliveries_search, pour obtenir les attributs qui n'apparaissent pas dans le résumé de liste') and explicit when-not-to-use guidance ('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.

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 le contenu d'un document BoondManager (CV de candidat/ressource, justificatif, contrat, facture...) par son ID.

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.

Le contenu est retourné en ressource MCP embarquée (base64 pour les binaires type PDF/DOCX, texte brut pour les fichiers texte). Taille max: 5 Mo — à n'utiliser que lorsque le contenu du fichier est réellement nécessaire (un CV en base64 occupe beaucoup de contexte).

Returns : le fichier en ressource MCP embarquée — blob base64 pour un binaire, text pour un mime texte. 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)

TDQS

A4.8/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 covered. The description adds substantial behavioral context beyond that: the return format (embedded MCP resource, base64 blob for binaries, text for text mimes), the 5 Mo size limit, the exact-ID requirement with suffix, and the notable edge case that an unknown ID is explicitly rejected rather than receiving the BoondManager home page served as HTTP 200. This is rich, non-obvious behavior that 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.

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', 'Où trouver les IDs', 'Returns') and front-loads the core purpose. It is somewhat long, but every sentence earns its place: the ID-suffix warning is repeated deliberately because it is the most common failure mode, and the size/context warning is operationally important. A minor deduction for slight redundancy between the 'Plutôt que' and 'Où trouver les IDs' sections.

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 covers what the tool does, when to use it, where to find the ID, the exact ID format, the return format, the size limit, and the error behavior. The annotations cover the safety profile (read-only, idempotent, non-destructive). Nothing an agent needs 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.

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 'id' parameter with a pattern and example. The description adds meaningful value beyond the schema by explaining the critical semantic trap: the ID must be taken exactly as exposed by entity relations, including the suffix (e.g., '123_resume'), and a truncated numeric ID designates a different document. This is exactly the kind of parameter nuance that prevents real invocation errors.

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 le contenu'), a precise resource ('document BoondManager'), and enumerates the document types (CV, justificatif, contrat, facture). It also names the sibling tools it is not (boond_candidates_information / boond_candidates_administrative) and explains the distinction, so an agent can tell it apart from the many sibling 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 explicitly says when to use it ('pour récupérer le contenu d'un CV ou d'un justificatif dont l'ID a été relevé dans un onglet d'entité'), when not to use it (not for finding IDs), and names the alternatives (boond_candidates_information / boond_candidates_administrative) for the ID-finding step. It also warns about the 5 Mo size limit and advises using it only when the file content is truly needed.

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

A4.8/5.0
Behavior5/5

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

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

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

Conciseness4/5

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

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

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

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

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

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

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

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

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

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

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

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.

Args:

  • resourceId (string): ID de la ressource

  • term (string): Mois ciblé (YYYY-MM)

  • agencyId (string, optional): Forcer l'agence

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.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and the description adds valuable behavior: expense types are defined per agency, projectId/deliveryId are mandatory on each line, and the API rejects couples not imputable for the selected month. It also clarifies what is returned and that no other tool provides this data, which goes 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 front-loaded with the return content, then organized into clearly labeled 'Quand', 'Plutôt que', and 'À appeler AVANT' sections. Every sentence carries distinct information about when, why, and what to use it for, and the Args/Returns sections are compact 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?

Despite the lack of an output schema, the description lists all returned referential categories and the consuming context (boond_expenses_create), which is enough for tool selection and invocation. It could be more explicit about the exact response structure or error conditions, but it covers the central prerequisites and constraints for correct use.

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 Args section in the description essentially mirrors the schema, with only a minor nuance ('Forcer l'agence') that repeats the schema's 'déduit de la ressource'; no additional parameter semantics are 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 begins with a specific verb ('Retourne') and a precise resource: the referentials needed to enter an expense report for a given resource and month, enumerating agency, currency, expense types, mileage scales, and imputable project/delivery pairs. It distinguishes itself from sibling tools by naming boond_expenses_create as the consumer and boond_application_dictionary as a non-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 states exactly when to call the tool: systematically before boond_expenses_create, because it is the only source of expense-type codes and imputable project/delivery pairs. It also explicitly rejects alternatives: boond_application_dictionary has no expense-type table and /agencies/{id} returns only a name, concluding 'Il n'existe pas de chemin alternatif.'

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.

  • ⚠️ 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 annotation destructiveHint=true already signals deletion, and the description builds on it with concrete behaviors: the operation is irreversible with no API-side trash, it may require end-user confirmation when the client supports elicitation, and a refusal returns deleted:false with a reason. It also clarifies that without elicitation the deletion proceeds directly.

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 destructive purpose, then uses short labeled sections (Quand, Plutôt que, warning, elicitation, Returns). Every sentence carries operational value 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 an irreversible destructive operation, the description covers when to use it, the safer alternative, irreversibility, the confirmation mechanism, and the return contract including deleted:false on refusal. With the output schema also present, 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.

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, and description (100% coverage). The description's pointer to verify the ID with boond_expenses_get adds usage context rather than new parameter semantics, 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?

Description opens with a specific verb and resource: 'Supprime définitivement un(e) note de frais de BoondManager.' It explicitly distinguishes the tool from boond_expenses_update, which is for deactivating or changing state, so an agent can tell this is the permanent-deletion operation.

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?

States exactly when to invoke: only on explicit user request and after verifying the ID with boond_expenses_get. It names the preferred alternative, boond_expenses_update, and explains that non-destructive state changes are almost always the real intent.

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.

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.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds crucial behavioral context: partial update (only provided fields are written), array fields are replaced not merged, and the return includes confirmation and the updated record. This goes beyond 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 front-loads the purpose, then provides usage guidance, then key behavioral notes. Each sentence earns its place 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?

The description is complete for an update tool: it explains partial update semantics, warns about array replacement, refers to related tools (`boond_expenses_get`, `boond_expenses_default`, `boond_documents_create`) for necessary prerequisites, and mentions the output. Given the output schema is present and the schema documents parameters thoroughly, 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?

The schema has 100% coverage of parameters with detailed descriptions, so the description itself doesn't add much beyond what the schema already says. The description highlights the array replacement behavior for `actualExpenses`, which is valuable additional semantics not fully captured in the schema. However, most parameter meaning is already in the schema, so the added value is moderate.

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 expense report identified by its ID, distinguishing it from `boond_expenses_create`. It specifies the resource (note de frais) and the action (met à jour), which 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 (to modify a few fields of an already existing record) and when not to (use `boond_expenses_create` if the record doesn't exist yet). It also clarifies partial update semantics and warns about array replacement, which is essential for correct usage.

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_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
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 indicate non-read-only (readOnlyHint: false), non-idempotent (idempotentHint: false). The description adds value by explicitly stating the tool is 'Écriture réelle et non idempotente' with a concrete example of duplicate creation, and explains that relation IDs must be resolved beforehand. It also mentions the return format, providing 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.

Conciseness4/5

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

The description is concise, with key information front-loaded: the purpose, usage conditions, and exclusions are in the first few lines. It uses bullet points for behaviors and clear structure, but includes a bit of redundancy (e.g., 'Returns' section) that could be tightened. Overall efficient and 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?

Given the tool has 10 parameters (all optional), no required fields, and an output schema present, the description covers essential context: when to use, what not to use, non-idempotence, ID resolution necessity, and return value details including the usable structuredContent.id. This is complete for an agent to correctly invoke the 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?

The schema provides 100% coverage with descriptions for each parameter, so the baseline is 3. However, the description adds critical guidance about parameters: it notes that relation IDs and state/type fields are numeric BoondManager IDs requiring prior resolution via searches or dictionary endpoints. This is valuable semantics that helps the agent understand how to populate fields like 'invoiceRecords' and '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 clearly states the tool creates an invoice in BoondManager, with a specific verb 'Crée' and a specific resource 'facture'. It distinguishes from update and search tools by naming them, 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 states 'Quand' (when to use) for adding a non-existent invoice, and 'Plutôt que' (instead of) pointing to update and search, including instructions to search first to avoid duplicates. This gives clear guidance on when to use vs alternatives.

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.

  • ⚠️ 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 mark destructiveHint=true, but the description adds critical context: irreversibility with no trash, and the elicitation capability behavior (confirmation request and refusal handling). It also explains the return structure in case of refusal. This exceeds what annotations provide, earning a top score.

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 (when, rather than, warnings, returns) and uses bullet points for scanning. It is slightly long but every sentence earns its place, covering essential usage and behavior. No fluff, but the multiple sections could be tightened; still very good.

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 annotations covering destructive intent, the description fills all necessary gaps: when to use, what to verify, how to handle refusal, and the return contract. It is complete for a delegation-focused tool with a single parameter, leaving nothing critical unexplained.

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 well-documented as a numeric string. The description doesn't add detail about the parameter beyond the schema, which is fine since the schema is complete. The reference to verifying with boond_invoices_get implies how to obtain the id, slightly adding value, but 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 tool permanently deletes an invoice from BoondManager, with a specific verb and resource. It distinguishes itself from sibling tools like boond_invoices_update by explicitly saying it is for deletion, not deactivation or state changes. The title and name align, and the description goes beyond the name to specify the irreversible nature.

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 guidance: use only on explicit user request, verify the ID with boond_invoices_get first, and prefer boond_invoices_update for non-destructive changes. This directly addresses when to use this tool and when not to, referencing the alternative sibling, which is exactly what the dimension asks for.

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_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.

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID de la facture à modifier
noteNoNotes
stateNoÉtat de la facture
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.7/5.0
Behavior4/5

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

Annotations already cover read-only, destructive, and idempotent hints. The description adds valuable behavioral context beyond those: partial update semantics, the warning that array fields are replaced rather than merged, and the return payload. This is strong supplementary disclosure for an update 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 front-loaded with the core action, followed by a compact 'Quand / Plutôt que' usage block and two focused bullet points. Every sentence earns its place; there is no filler or 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?

Given the output schema exists, the description does not need to document return structure in depth. It covers purpose, usage boundaries, partial-update behavior, array-replacement risks, and the return confirmation, making it complete enough for an agent 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.

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 goes further by clarifying that only provided fields are written and that array parameters like invoiceRecords and invoicePayments are replaced, not merged. This adds meaningful semantics 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 specific verb and resource: 'Met à jour un(e) facture existant(e), identifié(e) par son ID.' This clearly distinguishes the tool as an update operation for existing invoices, and the explicit contrast with boond_invoices_create helps an agent identify it among the many CRUD 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 states both when to use this tool ('pour modifier quelques champs d'un enregistrement déjà en base') and when not to, explicitly routing the agent to boond_invoices_create if the record does not yet exist. This is direct, unambiguous usage guidance.

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?

While annotations already set idempotentHint=false, the description adds valuable behavioral context by stating it is a real, non-idempotent write and that two identical calls create two records because the API does not deduplicate. It also warns that relation/state/type IDs must be resolved beforehand, which goes 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 front-loaded with the core action, followed by labeled sections for when to use, alternatives, behavioral warnings, and return value. Every sentence 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 create operation with 15 parameters, the description covers when to use it, which sibling tools to prefer instead, non-idempotence implications, ID resolution requirements, and the shape of the response including a directly reusable ID. Combined with the full input schema and output schema, this gives an agent the context needed 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.

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 extra semantic guidance beyond the schema by explaining that relation IDs and state/type values are numeric BoondManager IDs to be resolved in advance via entity searches and boond://dictionary/*, which clarifies a whole class of parameters. It also notes that structuredContent.id can be reused for chaining, adding practical value.

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: 'Crée un(e) opportunité dans BoondManager.' It further distinguishes itself from siblings by naming boond_opportunities_update for modifications and boond_opportunities_search for pre-existence checks, so an agent can easily tell when this create tool is the right choice.

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 usage guidance is provided: use it to add a non-existent opportunity ('Quand : pour ajouter un(e) opportunité inexistant(e)'), and explicitly route to update for existing records and search first to verify non-existence. This is strong when-to-use vs. alternative guidance.

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.

  • ⚠️ 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 declare destructiveHint:true, but description adds irreversibility ('Irréversible, sans corbeille côté API'), the elicitation confirmation flow (with structuredContent.deleted:false on refusal), and the return value interpretation. These go well beyond annotations and are crucial for an agent to handle the tool safely.

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 points for key warnings, and a 'Returns' section. Front-loaded with the main action and purpose, no wasted sentences. 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?

The description covers the essential behavior for a delete tool: when to use, irreversibility, the elicitation path, and how to interpret the result (deleted:false on refusal). The output schema is also referenced, so the agent knows what to expect. Nothing missing for safe and 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 describes 'id' as the unique numeric identifier. The description adds the instruction to verify the ID with get, which is a usage guideline rather than parameter semantics. With full schema coverage, baseline 3 is appropriate; no extra parameter meaning is 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?

States a specific verb ('Supprime définitivement') and resource (opportunité de BoondManager). Clearly distinguishes from update by saying 'Plutôt que: boond_opportunities_update' for non-destructive changes. Unambiguous and differentiated.

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 defines when to use: only on explicit user request, after verifying ID with boond_opportunities_get. Provides a clear alternative (update) and explains the elicitation conditional behavior. No ambiguity 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_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).

  • 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.8/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 meaningful behavior: the tab parameter targets a specific tab, omitting it returns only the base fiche rather than a union of tabs, and an unknown ID propagates the raw BoondManager error. This is exactly the kind of behavioral context 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 well-structured: purpose first, then when/alternative, then bulleted behavioral caveats, then the return contract. Every sentence adds useful information and there is 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.

Completeness4/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 no output schema, the description covers the main usage flow, tab behavior, error propagation, and return format. The only gap is that the valid tab values are not fully pinned down and the description's examples diverge slightly from the schema's examples, leaving minor ambiguity for an agent picking a tab value.

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 both parameters are already documented. The description adds value by explaining the effect of omitting tab, that tab selects one precise tab, and that id must come from a previous search rather than being guessed. The tab examples are slightly inconsistent with the schema's example values, which keeps this from being a 5.

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) opportunité par son ID numérique.' It also distinguishes the tool from boond_opportunities_search by emphasizing lookup by numeric ID rather than by name or search criteria.

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 context: after boond_opportunities_search, when the list summary lacks certain attributes. It also names the alternative explicitly: use boond_opportunities_search if the ID is unknown, because 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_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.

  • 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 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?

La description va au-delà des annotations en décrivant la sémantique de mise à jour partielle ('Mise à jour partielle : seuls les champs fournis sont écrits, les autres sont laissés en place') et le comportement particulier des champs de type tableau ('remplacés et non fusionnés'). Elle signale aussi la réponse ('confirmation et fiche mise à jour'). Les annotations restent cohérentes, pas de 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?

La description est structurée en sections : 'Quand', 'Plutôt que', 'Mise à jour partielle', 'Attention', 'Returns'. Chaque fragment apporte une information utile, le contenu est dense et lisible. Il n'y a pas de remplissage inutile, et le point clé de la mise à jour partielle est mis en avant tôt.

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 avec 16 paramètres, annotations et output schema, la description est suffisante : elle couvre le cas d'usage, l'alternative, le comportement précis (partiel, remplacement des tableaux), et le retour attendu. Les dimensions de validation (format, relations) sont déjà détaillées dans les descriptions du schéma. Le contexte apporté par la description est `perdu` aucun vide flagrant.

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?

Les 16 paramètres sont tous documentés dans le schéma (couverture 100 %), ce qui abaisse le besoin de description. La description ajoute une sous-couche importante : le principe de mise à jour partielle explique comment se comportent les paramètres non fournis (ils ne sont pas réinitialisés), et l'avertissement sur les tableaux complète les informations du schéma. Elle apporte donc une réelle plus-value sémantique pour tous les paramètres.

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 une action claire et spécifique : 'Met à jour un(e) opportunité existant(e), identifié(e) par son ID'. Elle nomme explicitement la ressource (opportunité) et le comportement (update, pas création). Elle différencie l'outil du sibling `boond_opportunities_create`, ce qui lève toute ambiguïté.

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 :' indique précisément dans quel contexte utiliser l'outil : 'pour modifier quelques champs d'un enregistrement déjà en base'. La section 'Plutôt que :' indique l'alternative appropriée : `boond_opportunities_create` si l'enregistrement n'existe pas encore. C'est un exemple parfait de guidage explicite.

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
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.9/5.0
Behavior5/5

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

Annotations already mark the tool as non-idempotent, but the description explicitly states in natural language that two identical calls create two records and the API does not deduplicate. It also notes that relation/state IDs must be resolved beforehand, which materially affects payload construction. This is a strong behavioral warning beyond what 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?

Justification goes here

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?

Justification goes here

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 11 parameters)Skip loop? No, I need to produce just one JSON. Let me finalize with the values I decided: 5,5,5,4,5,5. Hmm any way to argue 5 for parameter semantics? The description adds a global note that all relation/state IDs must be numeric and pre-resolved, which applies across parameters. That's useful beyond schema. But schema covers individual params. I think 4 is fair (schema does heavy lifting; description adds cross-cutting guidance but no per-param additions). Good, 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 starts with a specific verb+resource: 'Crée un(e) bon de commande dans BoondManager.' It clearly distinguishes itself from sibling tools, including boond_orders_update and boond_orders_search, by stating when it should be used — making the agent able to pick it correctly among a large sibling set.

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 ('pour ajouter un bon de commande inexistant') and when not to (modification → update, verification first → search). This gives an agent direct selection criteria relative to its siblings.

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.

  • ⚠️ 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?

Beyond the annotations, the description discloses that deletion is irreversible with no trash on the API side, that confirmation behavior depends on the MCP client's `elicitation` capability, and that a user refusal returns `deleted: false` with a `reason`. This is rich behavioral context that annotations alone do not fully capture.

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 action, when to use, alternative, irreversibility warning, confirmation behavior, and return contract. The structure is scannable with clear sections 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?

With one simple parameter, destructive annotations, and an output schema already present, the description covers everything needed to invoke and interpret the result correctly, including refusal semantics and the recommended pre-check. 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 documents the single `id` parameter with full coverage, so the baseline is 3. The description adds practical meaning by instructing that the ID must be verified via `boond_orders_get` before calling this tool, which clarifies the expected source and validity 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 opens with a specific verb and resource: 'Supprime définitivement un(e) bon de commande de BoondManager.' It clearly distinguishes itself from the sibling update tool by naming it, so an agent can tell exactly what this tool does and what it 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 gives explicit usage conditions: only on explicit user request and after verifying the ID with `boond_orders_get`. It also names the preferred alternative, `boond_orders_update`, when the intent is to deactivate or change status instead of destroying the record.

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_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.

Returns : confirmation et fiche mise à jour.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du bon de commande à modifier
noteNoNotes
stateNoÉtat
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?

Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description discloses partial-update semantics: 'seuls les champs fournis sont écrits, les autres sont laissés en place' and specifically warns that array fields are replaced, not merged: 'Attention aux champs de type tableau, qui sont **remplacés** et non fusionnés.' This is genuinely additional behavioral context 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 compact and well-structured: a one-sentence purpose, a short 'when/rather-than' pair, two bulleted behavioral caveats, and a one-line return note. Every sentence carries unique information with zero 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?

The tool has 10 parameters and an output schema; the description covers the essential usage context (partial updates, array replacement), identifies the correct alternative, and states the return value. There is no missing guidance for an agent to correctly issue partial updates on this resource.

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 semantic meaning for how parameters are applied: only the provided fields are written, and arrays are replaced wholesale. This goes beyond the schema's plain labels, though it doesn't elaborate each individual field's semantic beyond what schemas already 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 a specific verb and resource: 'Met à jour un(e) bon de commande existant(e), identifié(e) par son ID.' It explicitly distinguishes from the sibling create tool by stating 'Plutôt que : `boond_orders_create` si l'enregistrement n'existe pas encore.' No ambiguity remains.

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 defines the precise use case (modifying a few fields of an existing record), and the 'Plutôt que' line names the exactly alternative behavior with the sibling tool. This dual guidance leaves no doubt about when to invoke it.

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

boond_payments_createCreer 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éé.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNote interne, mappee vers informationComments
stateNoEtat du paiement / achat
amountNoMontant HT du paiement, mappe vers amountExcludingTax
endDateNoDate de fin couverte (YYYY-MM-DD)
taxRatesNoTaux de taxes Boond
referenceNoReference bancaire ou reglement
startDateNoDate de debut couverte (YYYY-MM-DD)
purchaseIdYesID de l'achat regle
paymentDateNoDate du paiement (YYYY-MM-DD), mappee vers date
expectedDateNoDate de paiement attendu (YYYY-MM-DD)
paymentMethodNoMethode de paiement
performedDateNoDate de paiement effectif (YYYY-MM-DD)
amountExcludingTaxNoMontant HT du paiement

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate non-idempotent, non-readOnly, destructive=false. The description adds critical behavioral details: the API requires a `purchase` relation (without it, call is refused) and that writes are not idempotent (two identical calls create two payments). This goes beyond annotations by explaining the side effects and constraints. It could mention more about potential side effects but 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 concise and well-structured, with a clear intro, a 'Quand' section, a 'Plutôt que' section, bullet points for API requirements and idempotency, and a brief note on returns. Each sentence adds value, no redundancy. It's efficiently front-loaded with the purpose and immediately covers usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (13 params, 1 required) and that there is no output schema, the description provides essential context: the necessity of `purchaseId`, non-idempotency, and a brief return mention. It doesn't detail all parameter behaviors (e.g., required fields for amount), but the schema covers those descriptions. The description is adequate for an experienced agent, though a note about minimum required fields could improve it.

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 baseline is 3. The description adds extra context: it explains that `amount` maps to `amountExcludingTax`, `paymentDate` maps to `date`, and `note` maps to `informationComments`. It also highlights the critical requirement for `purchaseId` to link to an existing purchase, which is vital for correct use. This goes beyond the schema by clarifying mapping and the mandatory relationship.

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 ('Enregistre') and resource ('un paiement / règlement fournisseur adossé à un achat'), which is clear. It distinguishes itself from sibling `boond_purchases_create` by explicitly noting it is for payments attached to existing purchases, not for creating purchases themselves. However, it doesn't explicitly compare to `boond_payments_search` or `boond_payments_get`, but the primary 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?

Provides explicit 'Quand' (when to use) and 'Plutôt que' (instead of) guidance, naming the alternative `boond_purchases_create` and the condition for choosing it. This helps the agent select the correct tool. It also clearly states that a payment cannot be orphaned, preventing misuse.

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

boond_payments_getDetails d'un 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 and idempotentHint, and the description adds useful behavioral details: unknown IDs surface the BoondManager error as-is, and the return is the full JSON entity with attributes and relations. While some info (Lecture seule) mirrors annotations, the error handling and output format are extra value, so a 4 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 well-structured with clear 'Quand' and 'Plutôt que' sections, plus a bullet for error behavior. It is concise, every sentence earns its place, and the purpose is front-loaded. 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 simple get-by-ID tool with one parameter and annotations covering safety, the description is complete: it explains when to use, what it returns, error behavior, and source of the ID. 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.

Parameters4/5

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

The schema already describes the id parameter fully (numeric, pattern). The description adds the critical constraint that the ID must come from `boond_payments_search`, not guessed, which is an important semantic clarification for correct use. With 100% schema coverage, this extra guidance elevates it 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 clearly states the tool fetches the full payment record by numeric ID, and distinguishes it from the search tool by noting it returns attributes not present in the list summary. This lets an agent understand exactly what the 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?

It explicitly says to use this after `boond_payments_search` and to prefer search if the ID is unknown (since this tool doesn't accept names). It also instructs that the ID must come from search, never guessed, providing 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_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
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.7/5.0
Behavior4/5

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

Annotations already indicate this is a non-read-only, non-idempotent write. The description adds meaningful context beyond annotations: explicitly warns about non-idempotence (duplicate positionings possible), clarifies the state field is a dictionary integer ID not a label, and states the return value. 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 and front-loaded: purpose first, then usage context with alternatives, then key behavioral warnings as bullets, then return value. Every sentence earns its place; 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 create tool with 8 optional parameters and no output schema, the description covers the essential context: what the action does, when to use it, how it differs from the update sibling, the non-idempotent behavior, the state format, and the return payload. The one-of-pair parameter relationship is also conveyed, so an agent has sufficient guidance 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 baseline is 3. The description adds relational meaning beyond the schema by clarifying that candidateId/resourceId and opportunityId/projectId are alternatives ('un candidat ou une ressource sur une opportunité ou un projet') and by specifying the state parameter as a dictionary integer ID, which is not evident 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 and resource: 'Crée un positionnement' and defines the action concretely as placing a candidate or resource on an opportunity or project. It differentiates from the sibling boond_positionings_update by explicitly naming the 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?

Provides a clear 'Quand' condition (materializing a profile proposal to the client) and an explicit 'Plutôt que' section explaining when to prefer boond_positionings_update for advancing states instead of creating a second positioning. This is unambiguous routing between siblings.

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.

  • ⚠️ 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
Behavior4/5

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

Annotations include destructiveHint=true and readOnlyHint=false, which already indicate a destructive operation. The description adds valuable context: irreversibility, no trash, and the conditional confirmation behavior based on MCP capability. This goes beyond basic annotation info.

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 headers, bullet points, and a return format. Despite being in French, it is concise and information-dense, front-loading the critical irreversible nature.

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 fully covers prerequisites (ID verification), alternatives (update), behavioral notes (irreversibility, confirmation), and return format. Given the simple schema and strong annotations, 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 has 100% coverage for the single parameter, and the description adds that ID should be verified with get first. The parameter is well-documented in the schema, and the description reinforces its importance; the additional verification advice is useful.

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 permanently deletes a positioning (a specific resource) and differentiates it from the update tool. It identifies the exact action and resource, which 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?

Explicitly states when to use (only on explicit user request and after verifying ID with get), and when not to use, recommending update instead for deactivation. This provides clear decision guidance.

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.

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.

Args:

  • id (string): ID du positionnement

  • state (number, optional): État du positionnement (ID du dictionnaire setting.state.positioning)

  • stateReasonTypeOf, stateReasonDetail (optional): Motif d'état (repliés en stateReason {typeOf, detail})

  • startDate, endDate (string, optional): Dates au format YYYY-MM-DD (chaîne vide pour effacer)

  • informationComments (string, optional): Commentaires (max 250 caractères)

Returns: Données mises à jour du positionnement.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID du positionnement à modifier
stateNoÉtat du positionnement : ID numérique du dictionnaire setting.state.positioning
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.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it explains that only provided fields are modified ('Seuls les champs fournis sont modifiés'), that startDate/endDate can be cleared with an empty string, and that stateReasonTypeOf/stateReasonDetail are folded into a stateReason object. These details are not present in annotations and enhance understanding. 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 a clear opening statement of function and endpoint, followed by explicit usage conditions ('Quand', 'Plutôt que'), and a concise argument list. Every sentence serves a purpose; nothing is fluff. The structure front-loads the key differentiator (update vs create) and minimizes 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?

The description covers all necessary aspects: it names the HTTP method and endpoint, specifies the partial-update behavior, provides explicit usage conditions, explains how to clear date fields, groups related parameters, and states the return type ('Données mises à jour du positionnement'). Since an output schema exists, return details are not required. The description is complete 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.

Parameters4/5

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

Schema description coverage is 100% (all 7 params have descriptions), so the baseline is 3. However, the description adds meaningful semantic clarity beyond the schema: it groups stateReasonTypeOf and stateReasonDetail to be sent as a nested stateReason object, clarifies that startDate/endDate empty strings clear the values, and specifies the max length for informationComments. This extra context helps the agent construct correct calls.

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 positioning ('Met à jour un positionnement existant') and includes the HTTP endpoint PUT /positionings/{id}. It explicitly differentiates from the sibling `boond_positionings_create` by saying 'Plutôt que : boond_positionings_create si le positionnement n'existe pas encore', which enables correct sibling selection.

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 ('pour faire avancer l'état d'un positionnement (proposé → retenu → refusé)') and an explicit 'Plutôt que' alternative ('boond_positionings_create si le positionnement n'existe pas encore'). This gives clear when and when-not guidance, fully meeting the usage criteria.

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.

  • ⚠️ 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, idempotentHint=false), the description discloses that deletion is irreversible with no API-side trash, and that a confirmation flow may be triggered when the MCP client supports `elicitation`. It also explains the refusal response shape, which is valuable 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 and front-loaded with the core purpose before diving into conditions and warnings. Every sentence serves a purpose: usage conditions, alternative, irreversibility, confirmation behavior, and return contract. The formatting makes the important caveats 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 destructive single-parameter tool with an output schema, the description is complete. It covers when to call it, what to do before calling it, what alternative to prefer, what the destructive consequences are, how the optional confirmation flow behaves, and what the return payload indicates.

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 provides 100% coverage for the single `id` parameter, including its numeric pattern and description, so the baseline is 3. The description adds the operational guidance to verify the ID with `boond_products_get`, but it does not materially expand the semantic meaning of the id parameter itself.

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 a product from BoondManager. It also distinguishes itself from the sibling delete/update tools by naming the alternative and clarifying that this is the destructive counterpart to `boond_products_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 the tool: only on explicit user request and after verifying the ID with `boond_products_get`. It also directs the agent to prefer `boond_products_update` for deactivation or state changes, giving a clear decision rule.

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.

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.7/5.0
Behavior5/5

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

Annotations already indicate non-read-only, non-destructive, and idempotent behavior; the description adds valuable detail beyond that: partial update semantics and the explicit warning that array fields are replaced, not merged. It also states the return payload, with no contradiction against 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 and well structured: a one-line action, short usage conditions, and two bullet-style behavior notes. Every sentence carries useful information, and key points 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?

For a 7-parameter update tool with full schema coverage, an output schema, and safety annotations, the description covers the essential operational context: when to use it, partial update behavior, array replacement caveat, and return shape. No critical gap remains 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 coverage is 100%, so every parameter already has a description. The description adds a useful global note about partial writes, but it does not explain individual parameter meaning or format beyond what the schema 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 clearly states the action and resource: 'Met à jour un(e) produit existant(e), identifié(e) par son ID.' It distinguishes this tool from boond_products_create with an explicit 'Plutôt que' note, and the title reinforces the update semantics 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?

The 'Quand' section explicitly says to use it for modifying a few fields of an existing record, and the 'Plutôt que' section directs the agent to boond_products_create when the record doesn't exist yet. This resolves the main create-vs-update decision clearly.

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, the description states that the write is real and non-idempotent, that duplicate calls create duplicate records, and that relation/state/type IDs must be resolved beforehand. This adds concrete behavioral context that annotations alone do not 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 labels ('Quand', 'Plutôt que', 'Returns') and bullet points. Every sentence earns its place, and important behavioral notes 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?

For a create tool with 9 parameters and an output schema, the description covers when to use it, when not to, key ID resolution requirements, non-idempotency, and return value usage. An agent has enough context to call the tool correctly and chain the resulting ID.

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 all parameters (100% coverage), so the baseline is 3. The description adds useful shared semantics by explaining that relation IDs and state/type fields are numeric BoondManager IDs to resolve via searches or boond://dictionary/*, which is meaningful 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 verb and resource ('Crée un projet dans BoondManager') and explicitly distinguishes itself from boond_projects_update and boond_projects_search. An agent can immediately identify what this tool does and how it differs from related 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?

The description provides explicit usage guidance: use it to add a non-existent project, search first to avoid duplicates, and prefer update for existing records. This directly answers when to use the 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.

  • ⚠️ 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
Behavior4/5

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

Annotations already declare destructiveHint=true, so the description goes beyond that by adding: irreversible, no recycle bin at API level, and the conditional confirmation behavior when `elicitation` is available. That adds context beyond structured data and gives the agent a clear safety picture.

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 and conditions, uses bullets for warnings/return format, and every sentence serves a purpose. No filler, under-specification, or 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?

No output schema exists, but the description explicitly documents the return value shape and how to interpret `deleted: false` with `reason`. Given the one-parameter input and the dense annotation set, nothing an agent needs to invoke this tool safely 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 description adds the pointer to verifying the ID via `boond_projects_get`, and explains the meaning of ID in this context. This adds value beyond the schema's 'unique identifier' on 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 and resource ('Supprime définitivement un(e) projet') and clearly distinguishes itself from the sibling update tool via the 'Plutôt que' section. It is not a tautology and an agent can immediately understand the action and 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?

Explicitly specifies when to use it: only on explicit user request and after verifying the ID with `boond_projects_get` a direct told alternative. It also gives the counter-example (`boond_projects_update`) for deactivation, which routes the agent to 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_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).

  • 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

A4.8/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, and the description aligns with these by stating 'Lecture seule'. It further adds behavioral context beyond annotations: omitting the tab parameter returns only the base record, and an unknown ID yields the raw BoondManager error. These are useful, non-obvious behaviors.

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 core purpose is stated first, then usage conditions, then parameter behavior, and finally the return type and safety profile. Every sentence earns its place, and there is no redundant restating of the schema.

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 getter with two parameters and no output schema, the description is largely complete. It explains when to use it, how to obtain a valid ID, the behavior of the optional tab, the error passthrough, and the general return format. The main missing piece is an exhaustive enumeration of available tab values, but the schema already lists some and the tool's scope may make that acceptable.

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, but the description adds real semantic value: it clarifies that tab targets a specific tab and explains the consequence of omitting it. It also specifies that the ID must be sourced from boond_projects_search, which is an actionable constraint beyond the simple numeric pattern 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 'Récupère la fiche complète d'un(e) projet par son ID numérique', which states the verb, resource, and key input. It also distinguishes itself from boond_projects_search by explaining that it is used after a search to obtain attributes not present 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 an explicit 'Quand' condition (after boond_projects_search to get full attributes) and an explicit 'Plutôt que' alternative (boond_projects_search when the ID is unknown). It also warns that the ID must come from a search and never from a guess, leaving no ambiguity about selection and prerequisites.

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.

  • 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 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.7/5.0
Behavior5/5

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

Annotations already signal readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context beyond those annotations: partial update semantics, array fields being replaced rather than merged, and what is returned. 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?

Four compact sentences with no filler: the core action, the usage condition, the critical partial-update warning, and the return value. Information is front-loaded and 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 an update tool with one required ID, six optional fields, useful annotations, and an output schema, the description covers what an agent needs: how to select it, what fields are affected, the array-replacement caveat, and the response shape. Nothing important 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 every parameter documented in the input schema itself. The description does not add much per-parameter semantics, but it does clarify the update behavior (only provided fields are written), so 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 clearly states the action ('Met à jour'), the resource ('un(e) projet existant(e)'), and the identifier used ('son ID'). It explicitly distinguishes itself from the create sibling, so an agent can tell what this tool is for without inspecting 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?

It provides an explicit 'Quand' condition (modify a few fields of an existing record) and an explicit alternative ('Plutôt que : boond_projects_create si l'enregistrement n'existe pas encore'). This gives clear selection guidance versus its most relevant sibling.

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

boond_provider_invoices_createCreer 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoEtat de la facture fournisseur
endDateYesDate de fin de periode (YYYY-MM-DD)
currencyNoDevise Boond
companyIdNoID de la societe fournisseur, mappe vers providerCompany
contactIdNoID du contact fournisseur, mappe vers providerContact
referenceYesReference de la facture fournisseur
startDateYesDate de debut de periode (YYYY-MM-DD)
resourceIdYesID de la ressource portee par la facture fournisseur
invoiceDateNoDate de facture (YYYY-MM-DD)
exchangeRateNoTaux de change
currencyAgencyNoDevise agence
amountExcludingTaxNoMontant HT
amountIncludingTaxNoMontant TTC
exchangeRateAgencyNoTaux de change agence

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the operation as non-read-only and non-idempotent; the description reinforces this with Écriture non idempotente and adds the response expectation (confirmation et fiche de la facture fournisseur créée). It does not discuss permissions, duplicate handling, or errors, but it discloses the core side effect and return behavior beyond the boolean 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 organized: purpose, when/alternative, caveats, then return value. Every sentence earns its place, and the routing guidance is front-loaded ahead of the parameter caveats.

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 operation with 14 parameters and no output schema, the description provides the essential context: exact purpose, sibling differentiation, non-idempotent write, and a return expectation, while the schema handles parameter semantics. A fully complete definition might also cover duplicate-reference or error behavior, but an agent has enough 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 every parameter is already documented and the baseline is met without extra parameter detail. The added caveat about resource, providerCompany, and providerContact being numeric IDs is helpful in intent, but it uses names that do not exactly match the schema properties resourceId, companyId, and contactId.

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 facture fournisseur and immediately qualifies it as facture reçue d'un prestataire, pinning down exactly what the tool creates. It also names the sibling boond_invoices_create when differentiating, so an agent can tell this tool apart from the sales-invoice tool 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 gives an explicit Quand clause (pour enregistrer la facture émise par un sous-traitant) and an explicit Plutôt que clause naming boond_invoices_create for sale invoices. This is direct when-to-use and when-not-to-use guidance with the alternative named.

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

boond_provider_invoices_getDetails 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.7/5.0
Behavior4/5

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

The description explicitly states the operation is read-only, which reinforces the annotations. It also discloses error behavior for unknown IDs ('remonte l'erreur BoondManager telle quelle'), which is useful operational knowledge not present in 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 compact, front-loaded with the core purpose, and organized into clear usage sections ('Quand', 'Plutôt que', 'Returns'). There is no redundant repetition of schema fields or annotations.

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, the description covers the entry condition, the alternative tool, the error behavior, and the return type. Nothing an agent needs to safely invoke this tool 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 fully describes the 'id' parameter as a numeric entity ID, but the description adds important usage nuance: the ID must come from boond_provider_invoices_search and must never be guessed. This goes beyond the schema by explaining the provenance and validity 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 uses a specific verb ('Récupère la fiche complète') and clearly identifies the resource (a supplier invoice by numeric ID). It also explicitly contrasts this tool with boond_provider_invoices_search, telling the agent exactly 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 states exactly when to use this tool ('après un boond_provider_invoices_search') and when not to use it ('Plutôt que : ... si l'ID n'est pas connu'). This gives the agent a clear decision rule for choosing between this tool and its search sibling.

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éé.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes / commentaires
stateNoÉtat de l'achat
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)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate non-idempotent and not read-only, so the description's mention of 'Écriture non idempotente' adds value beyond annotations by clarifying write behavior. It also discloses a critical prerequisite: that company, contact, and project IDs must be resolved beforehand via searches. However, it doesn't detail the full response structure beyond 'confirmation et fiche' — but that is acceptable given no output schema exists. Could mention potential errors or side effects, but the disclosed constraints are valuable.

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, structured with clear sections for when to use, alternative tool, and behavioral notes. It front-loads the core action and usage context in the first line, then adds important clarification. The bullet point about ID resolution is succinct. Not overly long, but could be slightly tighter by removing the 'Returns' line if it's redundant with output schema — but since no output schema exists, it's justified.

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 (8 parameters, creation action) and that no output schema exists, the description covers the essential context: when to use, alternative, ID resolution prerequisite, and return value existence. It doesn't describe what the 'fiche' contains or how to interpret the response, but given the schema fully documents each parameter, this is adequate. The only minor gap is whether all 8 parameters are required despite 'required' being 0; the description could clarify which are essential for a valid creation, but the tool seems flexible.

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 has 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds context that IDs are numeric BoondManager IDs and need resolution, which supplements the schema, but it doesn't add meaning for each parameter beyond what the schema already states (e.g., state is 'État de l'achat', but no explanation of possible values). It does not over-credit, but the prerequisite note enhances the meaning of companyId, contactId, 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 the action ('Crée un achat ou une ligne de sous-traitance') and the resource (achat/sous-traitance), which matches the tool name and distinguishes it from related creation tools like provider invoices and orders. It specifies the business purpose (engager une dépense fournisseur) and differentiates from siblings by mentioning the alternative tool for 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?

Provides explicit when-to-use context ('pour engager une dépense fournisseur') and explicitly names the alternative tool (`boond_provider_invoices_create`) with the condition for choosing it (invoice versus purchase commitment). This clearly routes the agent away from confusion with sibling creation tools.

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(e) achat 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 désactiver ou changer l'état d'un enregistrement sans le détruire — c'est presque toujours l'intention réelle.

  • ⚠️ 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?

Despite annotations already confirming destructive operation, the description adds valuable behavioral detail: deletion is permanent with no trash, confirmation behavior depends on MCP elicitation support, and refusal yields structuredContent.deleted false with a reason. This goes beyond the schema and annotations and fully discloses the 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 compact and well-structured, with the core action in the first sentence, clearly labeled Quann/Plutôt que sections, and short bullet points for warnings. Every sentence conveys a useful decision or behavioral fact; 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 destructive tool with one parameter, this description covers when it should be invoked, how to protect against wrong deletion, what happens without confirmation, and the exact return object. There is no important operational gap for an agent invoking 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 fully describes the single id parameter with pattern and meaning, so the baseline is high. The description adds the semantic requirement that the id must be verified through boond_purchases_get, reinforcing that it must correspond to an existing purchase and not just be a numeric string.

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 the exact action: permanently delete a purchase/subcontracting record in BoondManager. It clearly differentiates the tool from related operations by naming boond_purchases_get for ID verification and boond_purchases_update as the update 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 gives an explicit condition for use: only on explicit user request after verifying the ID with boond_purchases_get. It also names the alternative—boond_purchases_update for deactivation or state changes without deletion—and even indicates that updates are much more commonly the intended action.

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_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_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.

  • ⚠️ 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 irreversibility, absence of an API-side trash, the conditional confirmation flow based on the elicitation capability, and the return contract with deleted: false on refusal. This is rich, non-obvious behavioral context that fully aligns 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 efficiently structured with front-loaded purpose, a clear 'when vs. instead' section, and compact bullet points for warnings and return behavior. Every section earns its place 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 destructive one-parameter tool, the description is complete: it covers prerequisites, alternatives, irreversibility, user-confirmation behavior, and the meaningful return field. The output schema exists and the description still adds useful interpretation guidance.

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 well documented with pattern and description. The description adds the operational advice to verify the ID via boond_resources_get, but no extra parameter 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 resource: 'Supprime définitivement un(e) ressource de BoondManager.' It clearly conveys destructive scope and is easily distinguished from siblings by naming the update tool as the safer 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?

Explicit guidance is provided: use only on explicit user request, verify the ID with boond_resources_get first, and prefer boond_resources_update for non-destructive state changes. This leaves no ambiguity about when to invoke the tool.

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).

  • 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.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, so the safety profile is covered. The description adds valuable behavioral context: without 'tab', only the base record is returned (not the union of tabs), and an unknown ID surfaces the raw BoondManager error. It also states the return format (JSON entity with attributes and relations). 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: a one-line definition, a 'Quand' section, a 'Plutôt que' section, bullet points for parameter behavior and error handling, and a final 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only get tool with 2 parameters, full schema coverage, and no output schema, the description covers the essential context: when to use it, how the tab parameter behaves, error behavior, and return format. It could arguably mention pagination or relation details, but the API's raw JSON return is stated. The main gap is that it doesn't enumerate all possible tab values, but the schema already lists examples.

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. The description adds some meaning by explaining that 'tab' targets a specific tab and that omitting it returns only the base record, and it clarifies the ID must be numeric and come from a search. However, this is mostly complementary to the schema rather than essential compensation, 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 retrieves the complete record of a resource by numeric ID, with a specific verb ('Récupère la fiche complète') and resource. It distinguishes itself from boond_resources_search by noting it is used after a search to get attributes not in the list summary, and from sibling tab-specific tools by explaining the 'tab' parameter behavior.

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_resources_search'), what to use instead if the ID is unknown ('Plutôt que : boond_resources_search si l'ID n'est pas connu'), and warns that the ID must come from a search, never from guessing. This is clear routing guidance with exclusions.

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.7/5.0
Behavior5/5

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

Critically, the description discloses the read-modify-write behavior: it reads the current list via /resources/{id}/technical-data, appends the new reference, and republishes the complete list. This is a non-obvious side effect (potential overwrite/lost update risk) that an agent must know. It also mentions the API quirk that the created reference's ID is not returned directly and must be extracted from the response. All of this adds significant value beyond the annotations (which only say the tool is not 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.

Conciseness4/5

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

The description is fairly concise and front-loaded with the core purpose. It uses short paragraphs and bullet points effectively. It loses one point because the warning about leading zeros is repeated twice for startMonth/endMonth, and the mention 'Plutôt que: boond_resources_technical_data_update' is slightly confusingly phrased. Otherwise, every sentence contributes value.

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 complexity (read-modify-write, embedded sub-object, API quirk), the description covers the essential aspects: required fields, date format pitfalls, return value behavior, and sibling differentiation. However, it does not mention potential failure modes (e.g., what happens if the resource does not exist, or how to handle concurrent modifications). For a create operation on an embedded resource with no output schema, this is a minor gap.

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 each parameter, so the baseline is 3. The description adds semantic meaning by grouping required fields (resourceId, title, company, description) and by warning about the leading-zero rejection for month fields ('05' rejected) and the int format (year as 4 digits, month as 1-12). It also explains that 'skills' is a comma-separated listaine. This compensates for the schema's terse descriptions and adds format constraints not 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 states a specific verb ('Crée') and a specific resource ('expérience professionnelle (référence) sur une ressource'), identifying it as a sub-resource of the technical data. It clearly distinguishes from siblings by naming boond_resources_reference_update and boond_resources_technical_data_update, clarifying that this tool does not touch other technical data blocks.

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 explains when to use this tool (create a new reference) and when NOT to (to complete an existing reference, use boond_resources_reference_update to avoid duplication). It also mentions that boond_resources_technical_data_update should not be used for other technical data blocks via this tool. 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_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.6/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and the description reinforces this with an explicit irreversibility warning and the read-modify-write mechanism. It also discloses the error case (untraceable referenceId returns isError with the present IDs list) and the return shape. Fully consistent with annotations and adds meaningful behavioral context beyond them.

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 core action and caution. Every sentence earns its place — mechanism, warning, usage, alternative, return behavior — with no filler. Slightly long for a delete operation but the length is justified.

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 2-parameter tool with no output schema, the description is comprehensive: read-modify-write mechanism, irreversibility warning, when-to-use guidance, alternative tool, return format, and error behavior. Nothing an agent needs to call 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 description coverage is 100% — both resourceId and referenceId are already documented in the schema. The description reiterates the referenceId error behavior but adds little semantic value beyond the schema's own parameter descriptions, 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?

States a precise verb (Supprime), the exact entity (une référence / expérience professionnelle) and its container (le DT d'une ressource), and distinguishes itself from the update sibling by explicitly naming boond_resources_reference_update as the alternative. An agent can select this tool correctly without opening any 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?

Contains an explicit 'Quand' section giving the trigger condition (remove an experience entered by mistake, upon explicit user request) and an explicit 'Plutôt que' section routing to boond_resources_reference_update for corrections rather than destruction. 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_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.9/5.0
Behavior5/5

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

Discloses merge semantics (only provided fields replace, other fields and references stay intact), return behavior (confirmation and republished technical dossier), and error behavior for an unknown referenceId. This adds meaningful context beyond the annotations, which only indicate readOnly=false, idempotent=true, and destructive=false.

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 sections with no filler: the most important merge semantics come first, followed by usage, example, and return/error behavior. Every sentence contributes to correct tool 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 an 11-parameter update endpoint with no output schema, the description covers selection, partial-update behavior, side effects, and error signaling. No important calling decision is left unaddressed.

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 beyond the schema by explaining partial-update semantics and illustrating a realistic subset of fields (startMonth/startYear/endMonth/endYear) that can be updated without touching others.

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 that it updates an existing reference via read-modify-write on /resources/{id}/technical-data, and differentiates itself from boond_resources_reference_create. The verb, target resource, and merge behavior are all 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?

Gives an explicit 'Quand' and 'Plutôt que' section naming boond_resources_reference_create as the alternative, plus a concrete use case for partial date updates. An agent can confidently decide when to use 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_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

A4.9/5.0
Behavior5/5

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

Annotations already signal idempotent and non-destructive, and the description goes well beyond them by detailing merge vs replace semantics, per-field behavior, and the guarantee that omitted fields are never reset. It also discloses the response behavior, including unchanged output when nothing needed writing.

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 well-structured with clear sections, bullet lists, and mode explanations. There is minor redundancy between the opening sentence and the 'Quand' sentence, but every other 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?

For a complex 12-parameter mutation with no output schema, the description covers purpose, usage context, sibling alternatives, merge/replace behavior, omitted-field semantics, and return behavior. Nothing essential for selecting or 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.

Parameters5/5

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

Although the schema covers all parameters, the description adds substantial meaning beyond the schema: CSV handling for skills, key-based behavior for tools/languages, conditional filling for title/summary/training/experience, and field-by-field merge behavior. This directly helps an agent construct correct calls.

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 le dossier technique (DT) d'une ressource," and enumerates the exact fields covered (compétences, outils, langues, expertises, formations, diplômes, expérience). It also distinguishes itself from the reference-management siblings by explicitly stating that professional experiences are not handled here.

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 stating when to use the tool and a 'Plutôt que' section routing professional-experience updates to boond_resources_reference_create/_update/_delete. It closes with an explicit instruction to use those sibling tools for références, leaving 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_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.

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.

Args:

  • resourceId (string): ID de la ressource

  • month (number, optional): Mois (1-12), défaut: mois courant

  • year (number, optional): Année (ex: 2025), défaut: année courante

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.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 a list with days/hours and status, and that month/year default to current values. However, it doesn't disclose pagination, ordering, or whether the list is limited to a specific period beyond the filter. 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.

Conciseness5/5

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

The description is well-structured and front-loaded: it states the core function first, then usage guidance, then parameters, then return value. Every sentence earns its place, and the 'Quand' / 'Plutôt que' section is concise and highly informative.

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 list tool with full schema coverage and annotations covering safety, the description is nearly complete. It explains the return value (list with days/hours and status) and the default behavior for month/year. The only minor gap is lack of detail on pagination or response structure, but no output schema exists and the tool is simple enough that 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 all three parameters (resourceId, month, year) with their types and defaults. The description repeats this information without adding new meaning 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 clearly states the tool retrieves timesheets (feuilles de temps / CRA) for a specific resource by ID, with an optional month/year filter. It explicitly distinguishes itself from sibling tools like boond_timesheets_get (detail of a specific CRA) and boond_timesheets_search (multiple resources), 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: use this tool to list a resource's CRA for a given month without knowing their IDs, and prefer boond_timesheets_get for a specific CRA detail or boond_timesheets_search for multiple resources. This clearly states when to use 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_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.

  • 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 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.6/5.0
Behavior5/5

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

The description discloses two key behaviors beyond annotations: (1) partial update – only provided fields are modified; (2) array fields are replaced, not merged. Annotations declare idempotentHint=true and destructiveHint=false, and the description is consistent with those. It also states the return value ('Returns the updated record'). This is substantive 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?

Four short scannable sections (description/quand/plutôt que/remarques). No fluff. 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 with a fully-described schema indu, the description covers the usage decision, the key behavioral nuance (partial write, no array merge), and the return value. With annotations indicating idempotent=true and destructive=false, plus output schema present, nothing necessary 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 every parameter has a description. The description adds that only provided fields are written, which is the key semantic needed to interpret 'partial update'. It doesn't add per-parameter detail beyond the schema, but the schema is already complete. The array-replacement warning adds value for fields like positionings that are arrays.

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 clearly states the verb-resource pair: 'modifier un(e) ressource existant(e)' (update an existing resource). It differentiates from boond_resources_create by explicitly saying 'si l'enregistrement n'existe pas encore' use create. It doesn't explicitly distinguish from boond_resources_information/other resource-actions, but the update/create distinction is the most relevant and is covered.

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' (when) – for updating a few fields of an existing record – and an explicit alternative: use boond_resources_create if the record doesn't exist yet, and boond_resources_delete if deletion is the goal. This is textbook usage guidance.

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_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.

Quand : pour ouvrir le CRA d'un couple (ressource, mois) qui n'existe pas encore. Plutôt que : boond_timesheets_search d'abord : l'API ne déduplique pas, et deux CRA peuvent coexister sur le même mois.

  • term est le mois au format YYYY-MM — un CRA couvre un mois entier, pas une journée.

  • Écriture non idempotente.

Returns : confirmation et fiche du CRA créé.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNotes
termYesMois au format YYYY-MM
stateNoÉtat de la feuille de temps
endDateNoDate de fin (YYYY-MM-DD)
projectIdNoID du projet
startDateNoDate de début (YYYY-MM-DD)
totalDaysNoTotal jours
resourceIdYesID de la ressource
totalHoursNoTotal heures

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds the important behavioral detail that the write is non-idempotent and that two CRAs can coexist on the same month. It also states the return value (confirmation + created CRA details), adding 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 compact and well-structured: a concise one-line statement of purpose, followed by clearly labeled sections ('Quand', 'Plutôt que', bullet point on 'term', idempotency note, 'Returns'). Every sentence earns its place; 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 9-parameter tool with no output schema, the description covers the essential operational guidance: when to use, what to avoid, the key parameter's format, idempotency, and return value. Some gap remains on how optional parameters (like state, startDate, endDate) relate to the monthly CRA creation, but the schema already documents these fields.

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 9 parameters. The description adds semantic clarity for 'term' (full month, daily granularity) and implicitly links 'resourceId' and 'term' as the key pair defining a CRA, but it doesn't significantly deepen the meaning of the other parameters. 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+resource (creates a monthly timesheet for a resource), defines the exact scope (one month per resource), and distinguishes it from the sibling tool by noting the API's non-deduplicating behavior. The description makes it clear this tool is for opening a new CRA for a (resource, month) pair that doesn't yet exist.

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, warning against calling boond_timesheets_search first because the API does not deduplicate. It also clarifies that 'term' must be in YYYY-MM format and covers a full month, removing ambiguity.

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 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.

Args:

  • id (string): Identifiant unique de la feuille de temps

Returns: Données JSON complètes de la feuille de temps (jours, heures, statut, détails).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifiant unique de la feuille de temps

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 behavioral context by specifying the return content: 'Données JSON complètes de la feuille de temps (jours, heures, statut, détails).' 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 uses clear labeled sections ('Quand', 'Plutôt que', 'Args', 'Returns'). Every sentence earns its place and none are redundant.

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 strong annotations and no output schema, the description is complete: it explains when to call it, what distinguishes it from the relevant sibling, and what kind of data will be returned. 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.

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 fully documents the single 'id' parameter. The description repeats the same meaning ('Identifiant unique de la feuille de temps') without adding format, source, or validation details 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 and resource: 'Récupère les informations détaillées d'une feuille de temps par son ID.' It clearly distinguishes this get-by-ID tool from listing/search tools by emphasizing the day-by-day detail of an identified CRA.

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 provided: 'Quand : après une recherche, pour le détail jour par jour d'un CRA identifié' and 'Plutôt que : boond_resources_timesheets pour lister les CRA d'une ressource sans connaître leurs ID.' This tells an agent exactly when to use it and which sibling to prefer instead.

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_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_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 (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.4/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value beyond these by specifying the tool calls no BoondManager API, reads no data, generates its response server-side, and returns a text runbook for the model to execute — clarifying the actual behavioral contract. No contradiction with annotations; the only minor gap is not detailing the exact runbook structure.

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 and front-loaded: purpose first, then 'Quand', 'Plutôt que', the no-API note, and 'Returns'. Every sentence earns its place, though the French formal structure makes it slightly longer than strictly necessary. Information density is high with no wasteful 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 complex workflow-orchestration tool with no output schema, the description fully compensates: it explains the return value (a text runbook listing ordered Boond calls with exact filters), clarifies nothing is executed by the call, and states the alternate prompt path. Together with a 100%-covered optional-parameter schema, 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 description coverage is 100%, so the schema fully documents top_n, agency_id, and manager_id, including the automatic resolution logic. The description adds only marginal param-related context (the scope concept team/agency maps to agency_id/manager_id) but no syntax or format details beyond 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 states a specific verb ('Produit une cartographie des compétences techniques d'un périmètre') with a precise resource and scope, enumerating the concrete outputs (top skills, rare skills/bus-factor risk, missing skills vs opportunities). It further distinguishes this tool from the MCP prompt `cartographie_competences`, making its identity unambiguous among the workflow 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 it (to run a multi-step scenario without manually finding the tool chain and filter names), and the 'Plutôt que' section names the exact alternative (the `cartographie_competences` prompt) and the condition that selects this variant (clients that handle `prompts/get` poorly). Clear when/when-not guidance with a named alternative.

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 (défaut: 12).

TDQS

A4.7/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 a key non-obvious trait: the tool calls no BoondManager API and reads no data, with the response generated server-side. It also states that nothing is executed by this call and the model must execute the returned runbook afterward. This is exactly the kind of behavioral context 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, starting with the purpose, then usage conditions, then side effects and return value. Every sentence earns its place: the alternative-prompt note, the no-API clarification, and the runbook explanation are all necessary for correct use, 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 runbook-generating workflow tool with no output schema, the description is complete: it explains what the tool returns, how the model should use the result, when to prefer the prompt alternative, and what side effects do not occur. Combined with the fully documented schema and safety annotations, 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 schema already fully documents both parameters, including the manager_id resolution behavior and the seuil_mois default of 12. The tool description does not add further parameter-level meaning, 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 outcome: auditing resources for obsolete, incomplete, or missing CVs/technical files and prioritizing those soon on the market. This clearly distinguishes it from the many sibling workflow tools. The later clarification that it returns a runbook rather than performing the audit itself is explicit and removes 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 says when to use this tool: to run a multi-step scenario without manually finding the tool chain and filter names. The 'Plutôt que' section names the alternative prompt `cvs_a_mettre_a_jour`, states the content is identical, and explains that this tool variant exists for clients that handle prompts/get poorly. This is strong, actionable 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_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.7/5.0
Behavior5/5

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

The description explicitly discloses the key non-obvious behavior: it calls no BoondManager API, reads no data, and returns a server-generated text runbook for the model to execute later. This goes well beyond the readOnly/idempotent annotations and prevents the agent from expecting actual resource data from this call.

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, scannable, and well-structured with clear 'Quand', 'Plutôt que', and 'Returns' sections. Every sentence conveys decision-relevant information, and it avoids repeating 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?

With only one parameter, no output schema, and no side effects, the description fully covers what the agent needs: what the runbook contains, that no data is read, and that the model must execute the returned calls. No crucial behavioral contract is left implicit.

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 `resource_id` is fully documented in the schema (100% coverage), including accepted formats (numeric ID or 'Prénom Nom') and automatic resolution via `boond_resources_search`. The top-level description adds no further parameter-specific meaning, 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 clearly identifies a workflow scenario tool: it returns a runbook for a 360° view of a resource, and explicitly states it performs no data fetch. It differentiates itself from the equivalent prompt MCP `fiche_consultant` and from sibling data-oriented tools by clarifying that the output is an ordered list of calls for the model to execute.

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 tells the agent exactly when to use the tool: to run a multi-step scenario without reconstructing the sequence and filter names. The 'Plutôt que' section names the alternative prompt, gives the condition for using it instead, and explains why this variant exists 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_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 (défaut: 60). Ex: '30' pour ne voir que les fins très proches.

TDQS

A4.7/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 that the tool makes no API call, reads no data, generates its answer server-side, and only returns instructions that the model must execute. This prevents the agent from assuming side effects or live data retrieval and fully aligns 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 structured with clear labels (Quand, Plutôt que, Returns) and every sentence carries information: scope, routing, side-effect disclaimer, and output format. It is front-loaded with the main purpose and contains 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?

With no output schema, the description correctly explains the return value (a text runbook with ordered calls and exact filters) and the follow-up behavior required from the model. Combined with annotations and parameter schema, 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 description coverage is 100%, with both manager_id and horizon_jours already documented in the input schema. The tool description does not add parameter-level detail beyond that, 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 states a specific scenario (resources whose missions end soon) and the actual deliverable (a text runbook of ordered Boond calls). It distinguishes itself from direct API tools by explicitly saying no API is called, and from sibling workflow tools by naming the fin_de_mission scenario and the MCP prompt 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?

It has an explicit 'Quand' section that tells the agent when to prefer this tool, and a 'Plutôt que' section that names the exact alternative (the MCP prompt fin_de_mission) and the condition under which to use this tool instead. This is model-friendly routing information.

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_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', 'la semaine prochaine'). Défaut: cette semaine.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds critical behavioral context: it calls no BoondManager API, reads no data, generates the response server-side, and performs no actions on the model's behalf. This prevents a serious mischaracterization of the tool's side effects. The only slight weakness is the opening 'Compile' wording, which initially suggests more data access than actually occurs.

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, making it easy to scan. It is slightly repetitive around 'no API call / nothing is done by this call', but each sentence earns its place and the key behavior is front-loaded in the Returns section.

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 optional parameter and no output schema, the description fully explains what the agent receives, what it should do with it, and what the tool does not do. The runbook output format, the exact-filter content, and the follow-up execution by the model are all explicitly covered, so an agent can 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%, so the baseline is 3. The one parameter, `semaine`, is already well documented in the schema with examples and a default; the description adds no additional semantics beyond the general weekly framing.

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 scenario clearly: it compiles a weekly view of opportunities, projects, absences, and CRA for the user and their team. However, the opening sentence could be misread as an actual data summary, and the real behavior—producing a text runbook—only becomes fully clear in the Returns section. It also does not distinguish itself from sibling workflow tools, though the name and scenario help.

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 the tool ('pour dérouler ce scénario multi-étapes sans avoir à retrouver soi-même le bon enchaînement d'outils') and when not to, naming the alternative prompt `recap_hebdo` and the exact condition for preferring it. 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_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_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 libre (ex: 'cette semaine', 'avril 2026'). Défaut: mois en cours.
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.4/5.0
Behavior5/5

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

Beyond annotations, the description explicitly states it calls no BoondManager API, reads no data, is generated server-side, and performs no actions itself; it also clarifies the model must execute the returned runbook. This is exactly the kind of side-effect disclosure that annotations alone do not 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 well organized with Quand/Plutôt que/Returns sections and a front-loaded core sentence. It earns its length, though the no-API/no-read point is stated twice ('N'appelle aucune API...' and 'rien n'est fait par cet appel'), so a sentence could be trimmed.

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 two optional params, no output schema, and annotations covering safety, the description is complete: it explains the scenario, the alternative prompt, the exact return artifact, and the execution responsibility. An agent has enough to decide and 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 input schema already documents both parameters at 100% coverage, including the default month for periode and manager_id's ID/name resolution and current-user fallback. The description adds only a paraphrase of the manager_id fallback, so it does not materially increase parameter understanding.

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 deliverable ('un état d'équipe : qui est sur quoi, qui est absent, qui est disponible') and clarifies that it returns a runbook, which is more specific than the title. It stops short of fully distinguishing this workflow from sibling workflow tools like boond_workflow_staffing_disponible, even though the 'Quand' section hints at the unique 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?

It has an explicit 'Quand' section, explaining to use it for this multi-step scenario to avoid reconstructing tool chains and filter names, and a 'Plutôt que' section naming the prompt MCP alternative and when to prefer it (clients that mishandle prompts/get). This is 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_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. 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,}$"
  2. 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
  3. 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#"
  4. 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"
        +}
  5. 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
  6. 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"
        +}
  7. 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
  8. 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

A4.3/5.0

Scored across 182 tools

Disambiguation5/5

Each tool targets a distinct entity-action combination, and descriptions explicitly contrast alternative tools ('Plutôt que: ...') to prevent misselection. Even closely related getters (e.g., boond_resources_timesheets vs boond_timesheets_search) are clearly differentiated by starting point and scope.

Naming Consistency5/5

All tools follow a uniform boond_<entity>_<action> snake_case pattern, with consistent verbs like search, get, create, update, delete and tab-specific getters (information, technical_data, actions). Even workflow and reporting tools follow the same convention (boond_workflow_*, boond_reporting_*), yielding a highly predictable naming scheme.

Tool Count2/5

At 182 tools, the set is far beyond the recommended range and even the 25+ threshold for 'too many'. While the BoondManager domain is broad, many tab-specific getters duplicate boond_<entity>_get with a tab parameter, and the workflow_* tools are essentially runbook generators that could be prompts, inflating the count unnecessarily.

Completeness5/5

The tool set provides full CRUD for all major entities (candidates, resources, contacts, companies, opportunities, projects, invoices, orders, actions, absences, expenses, positionings) plus comprehensive tab-specific getters, reporting, workflows, documents, and reference lookups. Minor gaps (e.g., no update/delete for timesheets, deliveries, or contracts) are acceptable given the workflow constraints of those entities.

Maintenance

ActivityActive
ResponsivenessResponsive

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.
    8 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
    Not graded
    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.
    -