Skip to main content
Glama
fauguste

boondmanager-mcp-server

Reporting synthèse

boond_reporting_synthesis
Read-onlyIdempotent

Retrieve aggregated totals (revenue, margin, rates, volumes) across perimeters and periods for commercial, HR, recruitment, and billing reporting. Returns calculated indicators, not record lists.

Instructions

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.

Input Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.12.2
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  2. Changed23 schema fields changedv2.7.0
    • 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"
      +]
  3. First observedv2.1.0

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.

Deploy Server

Other Tools