boondmanager-mcp-server 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -120,7 +120,9 @@ Pour les dictionnaires hors de cette liste curee, l'outil `boond_application_dic
120
120
 
121
121
  ## Prompts pre-orchestres
122
122
 
123
- 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 (slash command ou menu).
123
+ 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.
124
+
125
+ ### Workflows transverses
124
126
 
125
127
  | Prompt | Usage |
126
128
  |--------|-------|
@@ -131,6 +133,62 @@ En plus des outils, le serveur expose des **prompts MCP** (templates pre-cables)
131
133
  | `fiche_consultant` | Vue 360 d'une ressource : info + technique + positionnements + absences + CRA recents. |
132
134
  | `recap_hebdo` | Recap hebdomadaire : pipeline qui a bouge, equipe absente, projets actifs, actions a mener. |
133
135
 
136
+ ### Ressources, competences & CV
137
+
138
+ | Prompt | Usage |
139
+ |--------|-------|
140
+ | `staffing_disponible` | Consultants internes disponibles sur une fenetre donnee (filtre optionnel par competences libres et perimetre), tries par dispo croissante avec top 3 prioritaires. |
141
+ | `fin_de_mission` | Anticipation des fins de mission sous N jours (defaut 60). Marque en **urgent** les fins <= 15j sans relais identifie. |
142
+ | `cartographie_competences` | Cartographie des competences d'un perimetre (equipe / agence) : top N, competences rares (bus-factor), saturees, manquantes vs opportunites ouvertes. |
143
+ | `cvs_a_mettre_a_jour` | Audit fraicheur des CV / dossiers techniques (seuil d'obsolescence configurable). Priorise les ressources bientot sur le marche. |
144
+ | `recherche_profil_competences` | Recherche multi-source (ressources internes + candidats) par mix de competences libres, sans opportunite requise. Classe par adequation /10. |
145
+
146
+ ### Comment invoquer un prompt
147
+
148
+ 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.
149
+
150
+ **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.
151
+
152
+ **Claude Code** : pareil, `/` puis selection ; les arguments sont demandes inline.
153
+
154
+ **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"*.
155
+
156
+ Exemples d'invocation des prompts ressources / competences / CV :
157
+
158
+ ```
159
+ /staffing_disponible
160
+ start_date = 2026-06-01
161
+ end_date = 2026-09-01
162
+ competences = Java Spring AWS Kubernetes
163
+ manager_id = (vide -> mon equipe)
164
+ ```
165
+
166
+ ```
167
+ /fin_de_mission
168
+ horizon_jours = 30
169
+ ```
170
+
171
+ ```
172
+ /cartographie_competences
173
+ agency_id = 7
174
+ top_n = 15
175
+ ```
176
+
177
+ ```
178
+ /cvs_a_mettre_a_jour
179
+ seuil_mois = 6
180
+ ```
181
+
182
+ ```
183
+ /recherche_profil_competences
184
+ competences = .NET Azure DevOps
185
+ experience_min = 5 ans
186
+ dispo_avant = 2026-07-15
187
+ inclure_candidats = oui
188
+ ```
189
+
190
+ > Apres modification de la config Claude (`claude_desktop_config.json` etc.), **redemarrer le client** : la liste des prompts MCP n'est pas hot-reloadee.
191
+
134
192
  ## Prerequis
135
193
 
136
194
  - Node.js >= 20
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8NzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAY1D;AAED,wFAAwF;AACxF,eAAO,MAAM,kBAAkB;;;;;GAK5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+fzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAY1D;AAED,wFAAwF;AACxF,eAAO,MAAM,kBAAkB;;;;;GAK5B,CAAC"}
@@ -15,19 +15,23 @@ import { z } from "zod";
15
15
  * follow-up questions.
16
16
  */
17
17
  const userMessage = (text) => ({
18
- messages: [
19
- { role: "user", content: { type: "text", text } },
20
- ],
18
+ messages: [{ role: "user", content: { type: "text", text } }],
21
19
  });
22
20
  const PROMPTS = [
23
21
  {
24
22
  name: "synthese_equipe",
25
23
  title: "Synthèse d'une équipe",
26
- description: "Produit un état d'équipe : qui est sur quoi, qui est absent, qui est disponible. "
27
- + "Si manager_id est omis, utilise l'utilisateur courant comme manager.",
24
+ description: "Produit un état d'équipe : qui est sur quoi, qui est absent, qui est disponible. " +
25
+ "Si manager_id est omis, utilise l'utilisateur courant comme manager.",
28
26
  argsSchema: {
29
- manager_id: z.string().optional().describe("ID du manager (ressource Boond). Si absent, l'outil `boond_application_current_user` doit être appelé pour le récupérer."),
30
- periode: z.string().optional().describe("Période d'analyse libre (ex: 'cette semaine', 'avril 2026'). Défaut: mois en cours."),
27
+ manager_id: z
28
+ .string()
29
+ .optional()
30
+ .describe("ID du manager (ressource Boond). Si absent, l'outil `boond_application_current_user` doit être appelé pour le récupérer."),
31
+ periode: z
32
+ .string()
33
+ .optional()
34
+ .describe("Période d'analyse libre (ex: 'cette semaine', 'avril 2026'). Défaut: mois en cours."),
31
35
  },
32
36
  build: ({ manager_id, periode }) => {
33
37
  const periodeText = periode || "le mois en cours";
@@ -53,12 +57,15 @@ const PROMPTS = [
53
57
  {
54
58
  name: "pipeline_commercial",
55
59
  title: "Pipeline commercial sur une période",
56
- description: "Analyse les opportunités commerciales avec closing prévu dans la période donnée : "
57
- + "répartition par état, CA pondéré, top opportunités.",
60
+ description: "Analyse les opportunités commerciales avec closing prévu dans la période donnée : " +
61
+ "répartition par état, CA pondéré, top opportunités.",
58
62
  argsSchema: {
59
63
  date_debut: z.string().describe("Début de période (YYYY-MM-DD)."),
60
64
  date_fin: z.string().describe("Fin de période (YYYY-MM-DD)."),
61
- manager_id: z.string().optional().describe("ID du commercial. Si absent, scope = équipe de l'utilisateur courant via `perimeterDynamic: ['data']`."),
65
+ manager_id: z
66
+ .string()
67
+ .optional()
68
+ .describe("ID du commercial. Si absent, scope = équipe de l'utilisateur courant via `perimeterDynamic: ['data']`."),
62
69
  },
63
70
  build: ({ date_debut, date_fin, manager_id }) => {
64
71
  const scopeFilter = manager_id
@@ -88,8 +95,8 @@ const PROMPTS = [
88
95
  {
89
96
  name: "factures_a_relancer",
90
97
  title: "Factures impayées à relancer",
91
- description: "Liste les factures impayées avec date d'échéance dépassée, regroupées par société. "
92
- + "Optionnellement filtrable sur une société spécifique.",
98
+ description: "Liste les factures impayées avec date d'échéance dépassée, regroupées par société. " +
99
+ "Optionnellement filtrable sur une société spécifique.",
93
100
  argsSchema: {
94
101
  society_id: z.string().optional().describe("ID d'une société pour cibler la relance."),
95
102
  },
@@ -99,7 +106,9 @@ const PROMPTS = [
99
106
  "",
100
107
  "Étapes :",
101
108
  "1. Appeler `boond_invoices_search` :",
102
- society_id ? ` - \`companyId: "${society_id}"\`` : " - sans filtre société (toutes les factures du périmètre courant)",
109
+ society_id
110
+ ? ` - \`companyId: "${society_id}"\``
111
+ : " - sans filtre société (toutes les factures du périmètre courant)",
103
112
  " - `pageSize: 100`",
104
113
  "2. Récupérer le dictionnaire `setting.state.invoice` via `boond_application_dictionary` pour identifier les états « payée » / « partiellement payée » / etc.",
105
114
  "3. Filtrer côté agent : ne conserver que les factures dont l'état n'est PAS « payée » ET dont la `dueDate` est strictement antérieure à aujourd'hui.",
@@ -124,11 +133,11 @@ const PROMPTS = [
124
133
  `1. Récupérer le détail de l'opportunité : \`boond_opportunities_get(id="${opportunity_id}")\` puis l'onglet \`information\` pour les attributs détaillés.`,
125
134
  "2. Extraire les critères : `tools`, `expertiseAreas`, `activityAreas`, `places` (mobilité), `durations`, `startDate`/`endDate`.",
126
135
  "3. Appeler `boond_candidates_search` avec :",
127
- " - les `tools` extraits (logique OU par défaut ; si l'opportunité est très exigeante, repasser avec `[\"#AND#\", ...]` pour exiger toutes les compétences)",
136
+ ' - les `tools` extraits (logique OU par défaut ; si l\'opportunité est très exigeante, repasser avec `["#AND#", ...]` pour exiger toutes les compétences)',
128
137
  " - `expertiseAreas` correspondants",
129
138
  " - `mobilityAreas` matchant le lieu",
130
139
  " - `candidateStates` actifs uniquement (consulter `setting.state.candidate` via `boond_application_dictionary`)",
131
- " - `period: \"available\"` + `startDate`/`endDate` calés sur la mission, pour ne garder que les candidats disponibles",
140
+ ' - `period: "available"` + `startDate`/`endDate` calés sur la mission, pour ne garder que les candidats disponibles',
132
141
  " - `pageSize: 50`",
133
142
  "4. Pour les top 20 candidats retournés, récupérer `boond_candidates_technical_data` pour vérifier l'adéquation fine.",
134
143
  "5. Restituer un classement : nom | titre | dispo | note d'adéquation (sur 10) avec justification 1 ligne.",
@@ -159,12 +168,269 @@ const PROMPTS = [
159
168
  ].join("\n");
160
169
  },
161
170
  },
171
+ {
172
+ name: "staffing_disponible",
173
+ title: "Consultants disponibles pour un staffing",
174
+ description: "Identifie les ressources internes disponibles pour un staffing sur une fenêtre donnée, " +
175
+ "avec filtres optionnels par compétences (texte libre) et périmètre. " +
176
+ "Trie par date de disponibilité croissante et propose les profils prioritaires à activer.",
177
+ argsSchema: {
178
+ start_date: z.string().describe("Début de fenêtre de staffing (YYYY-MM-DD)."),
179
+ end_date: z.string().describe("Fin de fenêtre de staffing (YYYY-MM-DD)."),
180
+ competences: z
181
+ .string()
182
+ .optional()
183
+ .describe("Compétences recherchées en texte libre (ex: 'Java Spring AWS'). Le modèle les mappera vers `tools` via le dictionnaire."),
184
+ manager_id: z
185
+ .string()
186
+ .optional()
187
+ .describe("ID d'un manager pour restreindre à son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
188
+ },
189
+ build: ({ start_date, end_date, competences, manager_id }) => {
190
+ const scope = manager_id
191
+ ? `\`perimeterManagers: [${manager_id}]\``
192
+ : "`perimeterDynamic: ['managers']` (mon équipe / mes N-1)";
193
+ const skillsStep = competences
194
+ ? `1. Mapper les compétences « ${competences} » vers leurs IDs : \`boond_application_dictionary\` avec \`setting.tool\` (et éventuellement \`setting.expertiseArea\`).`
195
+ : "1. Pas de filtre compétences fourni — passer directement à l'étape 2.";
196
+ const toolsLine = competences
197
+ ? " - `tools: [...]` issus de l'étape 1 (logique OU ; pour exiger toutes les compétences, mettre `'#AND#'` en 1er élément)"
198
+ : "";
199
+ return [
200
+ `Identifie les ressources internes disponibles pour un staffing entre ${start_date} et ${end_date}.`,
201
+ "",
202
+ `Périmètre : ${scope}.`,
203
+ "",
204
+ "Étapes :",
205
+ skillsStep,
206
+ "2. Appeler `boond_resources_search` avec :",
207
+ ` - \`period: "available"\`, \`startDate: "${start_date}"\`, \`endDate: "${end_date}"\``,
208
+ ` - ${scope}`,
209
+ toolsLine,
210
+ " - `resourceStates: [...]` filtrés sur les états « actif » uniquement (consulter `setting.state.resource` via `boond_application_dictionary`)",
211
+ ' - `pageSize: 50`, `sort: "availability"`, `order: "asc"`',
212
+ "3. Pour les 15 premières ressources retournées (en parallèle) :",
213
+ " - `boond_resources_positionings` — vérifier qu'aucun positionnement actif ne couvre déjà la fenêtre",
214
+ " - `boond_resources_technical_data` — confirmer compétences clés et niveau d'expérience",
215
+ "4. Restituer un tableau trié par date de disponibilité : ressource | titre | dispo le | compétences matchées | mobilité | manager | TJM cible.",
216
+ "5. Conclure par les 3 profils prioritaires à activer + un signal si la pénurie est forte (< 5 résultats — suggérer d'élargir la fenêtre ou les compétences).",
217
+ ]
218
+ .filter(Boolean)
219
+ .join("\n");
220
+ },
221
+ },
222
+ {
223
+ name: "fin_de_mission",
224
+ title: "Anticipation des fins de mission",
225
+ description: "Liste les ressources dont la mission se termine dans les prochains jours, " +
226
+ "pour anticiper le repositionnement. Met en évidence les fins imminentes sans relais identifié.",
227
+ argsSchema: {
228
+ horizon_jours: z
229
+ .string()
230
+ .optional()
231
+ .describe("Nombre de jours à anticiper (défaut: 60). Ex: '30' pour ne voir que les fins très proches."),
232
+ manager_id: z
233
+ .string()
234
+ .optional()
235
+ .describe("ID d'un manager pour restreindre à son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
236
+ },
237
+ build: ({ horizon_jours, manager_id }) => {
238
+ const horizon = horizon_jours || "60";
239
+ const scope = manager_id ? `\`perimeterManagers: [${manager_id}]\`` : "`perimeterDynamic: ['managers']`";
240
+ return [
241
+ `Liste les ressources dont la mission se termine dans les ${horizon} prochains jours.`,
242
+ "",
243
+ `Périmètre : ${scope}.`,
244
+ "",
245
+ "Étapes :",
246
+ `1. Calculer la fenêtre : aujourd'hui (D) → D + ${horizon} jours (D+H). Conserver ces deux dates au format YYYY-MM-DD.`,
247
+ "2. Appeler `boond_resources_search` avec :",
248
+ ' - `period: "available"`, `startDate: D`, `endDate: D+H`',
249
+ ` - ${scope}`,
250
+ " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource`)",
251
+ ' - `pageSize: 100`, `sort: "availability"`, `order: "asc"`',
252
+ " → Cela retourne les ressources qui (re)deviennent disponibles dans la fenêtre — proxy direct pour « fin de mission ».",
253
+ "3. Pour chaque ressource, en parallèle :",
254
+ " - `boond_resources_positionings` — récupérer le positionnement courant (projet + société + date de fin) et détecter d'éventuels positionnements de relais déjà actés",
255
+ " - `boond_resources_projects` — historique projet récent pour contexte",
256
+ "4. Restituer un tableau trié par date de fin croissante : ressource | projet courant | société cliente | date de fin | jours restants | manager | relais déjà identifié (oui/non).",
257
+ "5. Mettre en évidence en haut du tableau :",
258
+ " - **Urgent** : fin dans <= 15 jours sans relais identifié",
259
+ " - **À surveiller** : fin entre 15 et 30 jours sans relais",
260
+ "6. Conclure par 3-5 actions concrètes : relances commerciales, repositionnements internes, etc.",
261
+ ].join("\n");
262
+ },
263
+ },
264
+ {
265
+ name: "cartographie_competences",
266
+ title: "Cartographie des compétences d'un périmètre",
267
+ description: "Produit une cartographie des compétences techniques d'un périmètre (équipe, agence, …) : " +
268
+ "top compétences, compétences rares (risque bus-factor) et compétences manquantes vs opportunités ouvertes.",
269
+ argsSchema: {
270
+ manager_id: z
271
+ .string()
272
+ .optional()
273
+ .describe("ID d'un manager pour cibler son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
274
+ agency_id: z
275
+ .string()
276
+ .optional()
277
+ .describe("ID d'agence pour cartographier toute une agence (alternatif à `manager_id`)."),
278
+ top_n: z.string().optional().describe("Nombre de compétences à mettre en avant dans le top (défaut: 20)."),
279
+ },
280
+ build: ({ manager_id, agency_id, top_n }) => {
281
+ const top = top_n || "20";
282
+ const scope = agency_id
283
+ ? `\`perimeterAgencies: [${agency_id}]\``
284
+ : manager_id
285
+ ? `\`perimeterManagers: [${manager_id}]\``
286
+ : "`perimeterDynamic: ['managers']`";
287
+ return [
288
+ "Cartographie les compétences techniques du périmètre.",
289
+ "",
290
+ `Périmètre : ${scope}.`,
291
+ "",
292
+ "Étapes :",
293
+ "1. Lister les ressources actives via `boond_resources_search` :",
294
+ ` - ${scope}`,
295
+ " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource` via `boond_application_dictionary`)",
296
+ " - `pageSize: 100` (paginer si > 100)",
297
+ "2. Récupérer le dictionnaire `setting.tool` (et `setting.expertiseArea`, `setting.languageSpoken`) via `boond_application_dictionary` pour traduire les IDs en libellés.",
298
+ "3. Pour chaque ressource (par batchs parallèles), appeler `boond_resources_technical_data` et extraire `tools`, `expertiseAreas`, `languages`, `experiences`.",
299
+ "4. Agréger côté agent :",
300
+ ` - **Top ${top}** : compétences les plus représentées (nb de ressources)`,
301
+ " - **Rares** : compétences possédées par 1 ou 2 personnes (risque bus-factor)",
302
+ " - **Saturées** : compétences possédées par > 70% de l'équipe (potentielle banalisation)",
303
+ "5. Croiser avec les opportunités ouvertes via `boond_opportunities_search` (`opportunityStates` actifs, `perimeterDynamic`/`perimeterAgencies` cohérents) et leurs `tools` :",
304
+ " - **Manquantes** : compétences demandées sur les opportunités mais absentes du périmètre — alerte recrutement / formation",
305
+ "6. Restituer en 4 sections :",
306
+ ` - Top ${top} compétences (tableau : compétence | nb ressources | exemples de noms)`,
307
+ " - Compétences rares (avec porteurs nominatifs et nombre d'opportunités demandant cette compétence)",
308
+ " - Compétences saturées",
309
+ " - Compétences manquantes vs opportunités (recommandations recrutement / formation)",
310
+ ].join("\n");
311
+ },
312
+ },
313
+ {
314
+ name: "cvs_a_mettre_a_jour",
315
+ title: "Audit fraîcheur des CV / dossiers techniques",
316
+ description: "Identifie les ressources dont le CV ou le dossier technique est obsolète, incomplet, ou manquant. " +
317
+ "Priorise celles bientôt sur le marché (en intercontrat ou disponibles à court terme).",
318
+ argsSchema: {
319
+ seuil_mois: z
320
+ .string()
321
+ .optional()
322
+ .describe("Un dossier technique non touché depuis plus de N mois est considéré obsolète (défaut: 12)."),
323
+ manager_id: z
324
+ .string()
325
+ .optional()
326
+ .describe("ID d'un manager pour cibler son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
327
+ },
328
+ build: ({ seuil_mois, manager_id }) => {
329
+ const seuil = seuil_mois || "12";
330
+ const scope = manager_id ? `\`perimeterManagers: [${manager_id}]\`` : "`perimeterDynamic: ['managers']`";
331
+ return [
332
+ `Identifie les CV / dossiers techniques à rafraîchir (seuil d'obsolescence : ${seuil} mois).`,
333
+ "",
334
+ `Périmètre : ${scope}.`,
335
+ "",
336
+ "Étapes :",
337
+ "1. Lister les ressources actives via `boond_resources_search` :",
338
+ ` - ${scope}`,
339
+ " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource`)",
340
+ " - `pageSize: 100` (paginer si nécessaire)",
341
+ "2. Pour chaque ressource (par batchs parallèles), appeler `boond_resources_technical_data` et lire :",
342
+ " - `updateDate` du dossier technique",
343
+ " - présence et longueur du CV (`resume`)",
344
+ " - nombre de compétences déclarées (`tools`)",
345
+ " - nombre d'expériences renseignées",
346
+ "3. Filtrer côté agent : ne conserver que les ressources dont au moins UN critère est défaillant —",
347
+ ` - \`updateDate\` antérieure de plus de ${seuil} mois, OU`,
348
+ " - CV manquant / vide, OU",
349
+ " - moins de 3 compétences (`tools`) déclarées, OU",
350
+ " - aucune expérience renseignée.",
351
+ '4. Croiser avec la disponibilité pour prioriser : `boond_resources_search` avec `period: "available"` + fenêtre des 3 prochains mois, et marquer les ressources concernées comme **prioritaires**.',
352
+ "5. Restituer un tableau de relance trié par priorité décroissante : ressource | manager | dernière maj DT | jours d'ancienneté | trous (CV manquant / 0 compétences / 0 expérience) | bientôt dispo (oui/non).",
353
+ "6. Conclure par les 5 ressources à relancer en premier (avec template de message court à envoyer au manager).",
354
+ ].join("\n");
355
+ },
356
+ },
357
+ {
358
+ name: "recherche_profil_competences",
359
+ title: "Recherche multi-source d'un profil par compétences",
360
+ description: "Recherche un profil correspondant à un mix de compétences libres, en croisant ressources internes " +
361
+ "et candidats. Sortie classée par adéquation. Utile en amont d'un staffing ou d'une opportunité non encore qualifiée.",
362
+ argsSchema: {
363
+ competences: z
364
+ .string()
365
+ .describe("Compétences recherchées en texte libre (ex: 'Java Spring AWS Kubernetes', '.NET Azure DevOps')."),
366
+ experience_min: z
367
+ .string()
368
+ .optional()
369
+ .describe("Niveau d'expérience minimum en texte libre (ex: '5 ans', 'senior'). Le modèle le mappera vers `experiences` via le dictionnaire."),
370
+ dispo_avant: z
371
+ .string()
372
+ .optional()
373
+ .describe("Disponibilité requise au plus tard à cette date (YYYY-MM-DD). Si fourni, applique `period: 'available'` + `endDate`."),
374
+ inclure_candidats: z
375
+ .string()
376
+ .optional()
377
+ .describe("'oui' (défaut) pour inclure aussi les candidats actifs ; 'non' pour ne chercher que dans les ressources internes."),
378
+ manager_id: z
379
+ .string()
380
+ .optional()
381
+ .describe("ID d'un manager pour restreindre le scope ressources internes. Sinon scope ouvert (toute l'organisation accessible)."),
382
+ },
383
+ build: ({ competences, experience_min, dispo_avant, inclure_candidats, manager_id }) => {
384
+ const includeCandidates = (inclure_candidats || "oui").toLowerCase() !== "non";
385
+ const scope = manager_id
386
+ ? `\`perimeterManagers: [${manager_id}]\``
387
+ : "(pas de filtre périmètre — recherche sur l'ensemble accessible à l'utilisateur)";
388
+ const dispoLine = dispo_avant
389
+ ? ` - \`period: "available"\`, \`endDate: "${dispo_avant}"\` (disponible au plus tard à cette date)`
390
+ : "";
391
+ const expStep = experience_min
392
+ ? `2bis. Mapper l'expérience minimum « ${experience_min} » vers les IDs \`experiences\` via \`boond_application_dictionary\` avec \`setting.experience\`.`
393
+ : "";
394
+ return [
395
+ `Recherche un profil correspondant aux compétences : « ${competences} ».`,
396
+ "",
397
+ `Scope ressources internes : ${scope}.`,
398
+ `Inclure les candidats actifs : ${includeCandidates ? "oui" : "non"}.`,
399
+ "",
400
+ "Étapes :",
401
+ "1. Mapper les compétences libres vers leurs IDs :",
402
+ " - `boond_application_dictionary` avec `setting.tool` pour les outils / technos",
403
+ " - `boond_application_dictionary` avec `setting.expertiseArea` pour les domaines d'expertise",
404
+ "2. Identifier les compétences indispensables (toutes requises) vs souhaitables, à partir du libellé du besoin.",
405
+ expStep,
406
+ "3. Recherche dans les ressources internes via `boond_resources_search` :",
407
+ ' - `tools: [...]` (si plusieurs compétences indispensables, préfixer par `"#AND#"` pour exiger toutes ; sinon laisser en OU)',
408
+ " - `expertiseAreas: [...]` éventuellement",
409
+ experience_min ? " - `experiences: [...]` issus de l'étape 2bis" : "",
410
+ dispoLine,
411
+ manager_id ? ` - ${scope}` : "",
412
+ " - `resourceStates` actifs uniquement (consulter `setting.state.resource`)",
413
+ " - `pageSize: 30`",
414
+ includeCandidates
415
+ ? "4. En parallèle, recherche dans les candidats via `boond_candidates_search` avec les mêmes filtres + `candidateStates` actifs (consulter `setting.state.candidate`)."
416
+ : "4. (Skip — recherche limitée aux ressources internes.)",
417
+ "5. Pour les top 10 résultats combinés, récupérer `technical_data` (`boond_resources_technical_data` ou `boond_candidates_technical_data`) pour vérifier l'adéquation fine.",
418
+ "6. Restituer un classement unique : type (Ressource interne / Candidat) | nom | titre | compétences matchées | expérience | dispo | localisation/mobilité | note d'adéquation /10 (1 ligne de justification).",
419
+ "7. Si moins de 5 résultats : suggérer un assouplissement (retirer une compétence secondaire, élargir le périmètre géographique, accepter un junior, sous-traitance).",
420
+ ]
421
+ .filter(Boolean)
422
+ .join("\n");
423
+ },
424
+ },
162
425
  {
163
426
  name: "recap_hebdo",
164
427
  title: "Récap hebdomadaire (moi + mon équipe)",
165
428
  description: "Compile en une vue ce qui s'est passé / va se passer cette semaine pour moi et mon équipe : opportunités, projets, absences, CRA.",
166
429
  argsSchema: {
167
- semaine: z.string().optional().describe("Semaine ciblée (ex: 'cette semaine', 'la semaine prochaine'). Défaut: cette semaine."),
430
+ semaine: z
431
+ .string()
432
+ .optional()
433
+ .describe("Semaine ciblée (ex: 'cette semaine', 'la semaine prochaine'). Défaut: cette semaine."),
168
434
  },
169
435
  build: ({ semaine }) => {
170
436
  const semaineText = semaine || "cette semaine";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "boondmanager-mcp-server",
4
4
  "display_name": "BoondManager MCP Server",
5
- "version": "1.6.0",
6
- "description": "MCP Server for BoondManager API - 158 tools across 36 domains for ERP/CRM data",
5
+ "version": "1.7.0",
6
+ "description": "MCP Server for BoondManager API - 156 tools, 11 prompts, 20 resources across 36 domains for ERP/CRM data",
7
7
  "author": {
8
8
  "name": "Frédéric Auguste",
9
9
  "url": "https://github.com/fauguste/boondmanager-mcp-server"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boondmanager-mcp-server",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "MCP Server for BoondManager API - Resources, Candidates & CRM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -40,6 +40,8 @@
40
40
  "typecheck": "tsc --noEmit",
41
41
  "docs:tools": "npm run build && node scripts/generate-tools-catalog.mjs",
42
42
  "docs:tools:check": "npm run build && node scripts/generate-tools-catalog.mjs --check",
43
+ "api:monitor:test": "node scripts/test-api-monitor.cjs",
44
+ "api:monitor:save": "node scripts/test-api-monitor.cjs --save",
43
45
  "prepare": "husky",
44
46
  "prepublishOnly": "npm run build"
45
47
  },