boondmanager-mcp-server 1.7.0 → 1.7.2

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.
@@ -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;AA+fzE,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;AA0pBzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAY1D;AAED,wFAAwF;AACxF,eAAO,MAAM,kBAAkB;;;;;GAK5B,CAAC"}
@@ -17,6 +17,38 @@ import { z } from "zod";
17
17
  const userMessage = (text) => ({
18
18
  messages: [{ role: "user", content: { type: "text", text } }],
19
19
  });
20
+ const SEARCH_TOOL_BY_KIND = {
21
+ resource: "boond_resources_search",
22
+ society: "boond_companies_search",
23
+ opportunity: "boond_opportunities_search",
24
+ agency: "boond_agencies_search",
25
+ };
26
+ const LABEL_BY_KIND = {
27
+ resource: "ressource",
28
+ society: "société",
29
+ opportunity: "opportunité",
30
+ agency: "agence",
31
+ };
32
+ const resolveEntity = (input, kind, placeholder) => {
33
+ const trimmed = input.trim();
34
+ if (/^\d+$/.test(trimmed)) {
35
+ return { idForFilter: trimmed, preamble: "" };
36
+ }
37
+ const tool = SEARCH_TOOL_BY_KIND[kind];
38
+ const label = LABEL_BY_KIND[kind];
39
+ const preamble = [
40
+ `**Préalable — résolution de la ${label} :** « ${trimmed} » n'est pas un ID numérique.`,
41
+ `- Appeler \`${tool}\` avec \`keywords: "${trimmed}"\` et \`pageSize: 5\`.`,
42
+ `- Retenir l'\`id\` du résultat le plus pertinent → ce sera la valeur \`${placeholder}\` à utiliser dans toutes les étapes ci-dessous.`,
43
+ `- Si plusieurs candidats matchent, demander confirmation à l'utilisateur avant de poursuivre.`,
44
+ "",
45
+ ].join("\n");
46
+ return { idForFilter: placeholder, preamble };
47
+ };
48
+ const ID_OR_NAME_HINT_RESOURCE = "Accepte soit l'ID numérique, soit « Prénom Nom » (le serveur résoudra automatiquement via `boond_resources_search`).";
49
+ const ID_OR_NAME_HINT_SOCIETY = "Accepte soit l'ID numérique, soit le nom de la société (résolution auto via `boond_companies_search`).";
50
+ const ID_OR_NAME_HINT_OPPORTUNITY = "Accepte soit l'ID numérique, soit l'intitulé de l'opportunité (résolution auto via `boond_opportunities_search`).";
51
+ const ID_OR_NAME_HINT_AGENCY = "Accepte soit l'ID numérique, soit le nom de l'agence (résolution auto via `boond_agencies_search`).";
20
52
  const PROMPTS = [
21
53
  {
22
54
  name: "synthese_equipe",
@@ -27,7 +59,9 @@ const PROMPTS = [
27
59
  manager_id: z
28
60
  .string()
29
61
  .optional()
30
- .describe("ID du manager (ressource Boond). Si absent, l'outil `boond_application_current_user` doit être appelé pour le récupérer."),
62
+ .describe("Manager ciblé. " +
63
+ ID_OR_NAME_HINT_RESOURCE +
64
+ " Si absent, l'outil `boond_application_current_user` est appelé pour le récupérer."),
31
65
  periode: z
32
66
  .string()
33
67
  .optional()
@@ -35,23 +69,25 @@ const PROMPTS = [
35
69
  },
36
70
  build: ({ manager_id, periode }) => {
37
71
  const periodeText = periode || "le mois en cours";
38
- const managerStep = manager_id
39
- ? `Le manager ciblé est l'ID ${manager_id}.`
40
- : "Commence par appeler `boond_application_current_user` pour obtenir mon ID utilisateur, puis utilise-le comme `manager_id`.";
41
- return [
42
- `Produis une synthèse de l'équipe pour ${periodeText}.`,
43
- "",
44
- managerStep,
45
- "",
46
- "Étapes :",
47
- "1. Lister les membres de l'équipe : `boond_resources_search` avec `perimeterManagers: [<manager_id>]` et `resourceStates` pour ne garder que les actifs (récupère les états valides via `boond_application_dictionary` avec `setting.state.resource` si besoin).",
48
- "2. Pour chaque ressource retournée, récupérer en parallèle :",
49
- " - `boond_resources_positionings` (qui est sur quel projet)",
50
- " - `boond_resources_absences_reports` (absences validées/à venir)",
51
- " - `boond_resources_times_reports` (CRA récent, pour confirmer l'occupation)",
52
- "3. Synthétiser un tableau par personne : nom, projet courant, % occupation, absences sur la période, disponibilité.",
53
- "4. Conclure par les signaux faibles (sur-/sous-charge, absences non couvertes, ressources sans positionnement).",
54
- ].join("\n");
72
+ let preamble = "";
73
+ let managerStep;
74
+ let managerIdLit;
75
+ if (manager_id) {
76
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
77
+ preamble = r.preamble;
78
+ managerIdLit = r.idForFilter;
79
+ managerStep = `Le manager ciblé a pour ID \`${managerIdLit}\`.`;
80
+ }
81
+ else {
82
+ managerIdLit = "<MANAGER_ID>";
83
+ managerStep =
84
+ "Commence par appeler `boond_application_current_user` pour obtenir mon ID utilisateur, puis utilise-le comme `<MANAGER_ID>`.";
85
+ }
86
+ const lines = [`Produis une synthèse de l'équipe pour ${periodeText}.`, ""];
87
+ if (preamble)
88
+ lines.push(preamble);
89
+ lines.push(managerStep, "", "Étapes :", `1. Lister les membres de l'équipe : \`boond_resources_search\` avec \`perimeterManagers: [${managerIdLit}]\` et \`resourceStates\` pour ne garder que les actifs (récupère les états valides via \`boond_application_dictionary\` avec \`setting.state.resource\` si besoin).`, "2. Pour chaque ressource retournée, récupérer en parallèle :", " - `boond_resources_positionings` (qui est sur quel projet)", " - `boond_resources_absences_reports` (absences validées/à venir)", " - `boond_resources_times_reports` (CRA récent, pour confirmer l'occupation)", "3. Synthétiser un tableau par personne : nom, projet courant, % occupation, absences sur la période, disponibilité.", "4. Conclure par les signaux faibles (sur-/sous-charge, absences non couvertes, ressources sans positionnement).");
90
+ return lines.join("\n");
55
91
  },
56
92
  },
57
93
  {
@@ -65,31 +101,26 @@ const PROMPTS = [
65
101
  manager_id: z
66
102
  .string()
67
103
  .optional()
68
- .describe("ID du commercial. Si absent, scope = équipe de l'utilisateur courant via `perimeterDynamic: ['data']`."),
104
+ .describe("Commercial ciblé. " +
105
+ ID_OR_NAME_HINT_RESOURCE +
106
+ " Si absent, scope = équipe de l'utilisateur courant via `perimeterDynamic: ['data']`."),
69
107
  },
70
108
  build: ({ date_debut, date_fin, manager_id }) => {
71
- const scopeFilter = manager_id
72
- ? `\`perimeterManagers: [${manager_id}]\``
73
- : "`perimeterDynamic: ['data']` (mes opportunités)";
74
- return [
75
- `Analyse mon pipeline commercial avec closing entre ${date_debut} et ${date_fin}.`,
76
- "",
77
- `Périmètre : ${scopeFilter}.`,
78
- "",
79
- "Étapes :",
80
- "1. Appeler `boond_opportunities_search` avec :",
81
- ` - \`period: "closingDate"\``,
82
- ` - \`startDate: "${date_debut}"\`, \`endDate: "${date_fin}"\``,
83
- ` - ${scopeFilter}`,
84
- " - `pageSize: 100`",
85
- "2. Si plus de 100 résultats, paginer via `page`.",
86
- "3. Récupérer le dictionnaire des états via `boond_application_dictionary` avec `setting.state.opportunity` pour traduire les ID en libellés.",
87
- "4. Restituer :",
88
- " - Nombre total d'opportunités, par état",
89
- " - CA pondéré total (somme de `turnoverWeightedExcludingTax`)",
90
- " - Top 10 par montant pondéré, avec société/contact/closingDate",
91
- " - Risques : opportunités dont la closingDate est passée mais qui ne sont pas encore en état Gagnée/Perdue.",
92
- ].join("\n");
109
+ let preamble = "";
110
+ let scopeFilter;
111
+ if (manager_id) {
112
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
113
+ preamble = r.preamble;
114
+ scopeFilter = `\`perimeterManagers: [${r.idForFilter}]\``;
115
+ }
116
+ else {
117
+ scopeFilter = "`perimeterDynamic: ['data']` (mes opportunités)";
118
+ }
119
+ const lines = [`Analyse mon pipeline commercial avec closing entre ${date_debut} et ${date_fin}.`, ""];
120
+ if (preamble)
121
+ lines.push(preamble);
122
+ lines.push(`Périmètre : ${scopeFilter}.`, "", "Étapes :", "1. Appeler `boond_opportunities_search` avec :", ` - \`period: "closingDate"\``, ` - \`startDate: "${date_debut}"\`, \`endDate: "${date_fin}"\``, ` - ${scopeFilter}`, " - `pageSize: 100`", "2. Si plus de 100 résultats, paginer via `page`.", "3. Récupérer le dictionnaire des états via `boond_application_dictionary` avec `setting.state.opportunity` pour traduire les ID en libellés.", "4. Restituer :", " - Nombre total d'opportunités, par état", " - CA pondéré total (somme de `turnoverWeightedExcludingTax`)", " - Top 10 par montant pondéré, avec société/contact/closingDate", " - Risques : opportunités dont la closingDate est passée mais qui ne sont pas encore en état Gagnée/Perdue.");
123
+ return lines.join("\n");
93
124
  },
94
125
  },
95
126
  {
@@ -98,24 +129,27 @@ const PROMPTS = [
98
129
  description: "Liste les factures impayées avec date d'échéance dépassée, regroupées par société. " +
99
130
  "Optionnellement filtrable sur une société spécifique.",
100
131
  argsSchema: {
101
- society_id: z.string().optional().describe("ID d'une société pour cibler la relance."),
132
+ society_id: z
133
+ .string()
134
+ .optional()
135
+ .describe("Société ciblée pour la relance. " + ID_OR_NAME_HINT_SOCIETY),
102
136
  },
103
137
  build: ({ society_id }) => {
104
- return [
105
- "Identifie les factures à relancer (impayées dont l'échéance est dépassée).",
106
- "",
107
- "Étapes :",
108
- "1. Appeler `boond_invoices_search` :",
109
- society_id
110
- ? ` - \`companyId: "${society_id}"\``
111
- : " - sans filtre société (toutes les factures du périmètre courant)",
112
- " - `pageSize: 100`",
113
- "2. Récupérer le dictionnaire `setting.state.invoice` via `boond_application_dictionary` pour identifier les états « payée » / « partiellement payée » / etc.",
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.",
115
- "4. Pour chaque facture retenue, récupérer le détail via `boond_invoices_get` si nécessaire pour obtenir le contact/email de relance.",
116
- "5. Restituer un tableau groupé par société : société | nombre de factures impayées | total HT impayé | facture la plus ancienne (référence + jours de retard) | contact à relancer.",
117
- "6. Ajouter une ligne « Total » en bas.",
118
- ].join("\n");
138
+ let preamble = "";
139
+ let filterLine;
140
+ if (society_id) {
141
+ const r = resolveEntity(society_id, "society", "<SOCIETE_ID>");
142
+ preamble = r.preamble;
143
+ filterLine = ` - \`companyId: "${r.idForFilter}"\``;
144
+ }
145
+ else {
146
+ filterLine = " - sans filtre société (toutes les factures du périmètre courant)";
147
+ }
148
+ const lines = ["Identifie les factures à relancer (impayées dont l'échéance est dépassée).", ""];
149
+ if (preamble)
150
+ lines.push(preamble);
151
+ lines.push("Étapes :", "1. Appeler `boond_invoices_search` :", filterLine, " - `pageSize: 100`", "2. Récupérer le dictionnaire `setting.state.invoice` via `boond_application_dictionary` pour identifier les états « payée » / « partiellement payée » / etc.", "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.", "4. Pour chaque facture retenue, récupérer le détail via `boond_invoices_get` si nécessaire pour obtenir le contact/email de relance.", "5. Restituer un tableau groupé par société : société | nombre de factures impayées | total HT impayé | facture la plus ancienne (référence + jours de retard) | contact à relancer.", "6. Ajouter une ligne « Total » en bas.");
152
+ return lines.join("\n");
119
153
  },
120
154
  },
121
155
  {
@@ -123,25 +157,16 @@ const PROMPTS = [
123
157
  title: "Candidats correspondant à une opportunité",
124
158
  description: "À partir d'une opportunité (ses outils, expertise, mobilité), trouve les candidats actifs qui matchent.",
125
159
  argsSchema: {
126
- opportunity_id: z.string().describe("ID de l'opportunité à pourvoir."),
160
+ opportunity_id: z.string().describe("Opportunité à pourvoir. " + ID_OR_NAME_HINT_OPPORTUNITY),
127
161
  },
128
162
  build: ({ opportunity_id }) => {
129
- return [
130
- `Identifie les candidats qui matchent l'opportunité ${opportunity_id}.`,
131
- "",
132
- "Étapes :",
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.`,
134
- "2. Extraire les critères : `tools`, `expertiseAreas`, `activityAreas`, `places` (mobilité), `durations`, `startDate`/`endDate`.",
135
- "3. Appeler `boond_candidates_search` avec :",
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)',
137
- " - `expertiseAreas` correspondants",
138
- " - `mobilityAreas` matchant le lieu",
139
- " - `candidateStates` actifs uniquement (consulter `setting.state.candidate` via `boond_application_dictionary`)",
140
- ' - `period: "available"` + `startDate`/`endDate` calés sur la mission, pour ne garder que les candidats disponibles',
141
- " - `pageSize: 50`",
142
- "4. Pour les top 20 candidats retournés, récupérer `boond_candidates_technical_data` pour vérifier l'adéquation fine.",
143
- "5. Restituer un classement : nom | titre | dispo | note d'adéquation (sur 10) avec justification 1 ligne.",
144
- ].join("\n");
163
+ const r = resolveEntity(opportunity_id ?? "", "opportunity", "<OPPORTUNITY_ID>");
164
+ const oppLit = r.idForFilter;
165
+ const lines = [`Identifie les candidats qui matchent l'opportunité ${oppLit}.`, ""];
166
+ if (r.preamble)
167
+ lines.push(r.preamble);
168
+ lines.push("Étapes :", `1. Récupérer le détail de l'opportunité : \`boond_opportunities_get(id="${oppLit}")\` puis l'onglet \`information\` pour les attributs détaillés.`, "2. Extraire les critères : `tools`, `expertiseAreas`, `activityAreas`, `places` (mobilité), `durations`, `startDate`/`endDate`.", "3. Appeler `boond_candidates_search` avec :", ' - les `tools` extraits (logique OU par défaut ; si l\'opportunité est très exigeante, repasser avec `["#AND#", ...]` pour exiger toutes les compétences)', " - `expertiseAreas` correspondants", " - `mobilityAreas` matchant le lieu", " - `candidateStates` actifs uniquement (consulter `setting.state.candidate` via `boond_application_dictionary`)", ' - `period: "available"` + `startDate`/`endDate` calés sur la mission, pour ne garder que les candidats disponibles', " - `pageSize: 50`", "4. Pour les top 20 candidats retournés, récupérer `boond_candidates_technical_data` pour vérifier l'adéquation fine.", "5. Restituer un classement : nom | titre | dispo | note d'adéquation (sur 10) avec justification 1 ligne.");
169
+ return lines.join("\n");
145
170
  },
146
171
  },
147
172
  {
@@ -149,23 +174,16 @@ const PROMPTS = [
149
174
  title: "Fiche complète d'un collaborateur",
150
175
  description: "Vue 360° d'une ressource : info, profil technique, positionnements, absences, CRA récents.",
151
176
  argsSchema: {
152
- resource_id: z.string().describe("ID de la ressource."),
177
+ resource_id: z.string().describe("Ressource ciblée. " + ID_OR_NAME_HINT_RESOURCE),
153
178
  },
154
179
  build: ({ resource_id }) => {
155
- return [
156
- `Produis la fiche complète de la ressource ${resource_id}.`,
157
- "",
158
- "Étapes (à exécuter en parallèle quand possible) :",
159
- `1. \`boond_resources_information(id="${resource_id}")\` — coordonnées et état civil`,
160
- `2. \`boond_resources_technical_data(id="${resource_id}")\` — compétences, formations, langues, CV`,
161
- `3. \`boond_resources_administrative(id="${resource_id}")\` — données RH (TJM, salaire, contrat) si autorisé`,
162
- `4. \`boond_resources_positionings(id="${resource_id}")\` — positionnements actifs et historiques`,
163
- `5. \`boond_resources_projects(id="${resource_id}")\` — projets passés/en cours`,
164
- `6. \`boond_resources_absences_reports(id="${resource_id}")\` — absences à venir et passées récentes`,
165
- `7. \`boond_resources_times_reports(id="${resource_id}")\` — CRA des 3 derniers mois`,
166
- "",
167
- "Restitution : un document structuré en sections (Identité / Profil technique / Mission actuelle / Historique projets / Disponibilité / RH si pertinent). Mettre en évidence : projet courant, prochaine date de fin de mission, prochaine absence, taux d'occupation moyen sur 3 mois.",
168
- ].join("\n");
180
+ const r = resolveEntity(resource_id ?? "", "resource", "<RESOURCE_ID>");
181
+ const idLit = r.idForFilter;
182
+ const lines = [`Produis la fiche complète de la ressource ${idLit}.`, ""];
183
+ if (r.preamble)
184
+ lines.push(r.preamble);
185
+ lines.push("Étapes (à exécuter en parallèle quand possible) :", `1. \`boond_resources_information(id="${idLit}")\` — coordonnées et état civil`, `2. \`boond_resources_technical_data(id="${idLit}")\` — compétences, formations, langues, CV`, `3. \`boond_resources_administrative(id="${idLit}")\` — données RH (TJM, salaire, contrat) si autorisé`, `4. \`boond_resources_positionings(id="${idLit}")\` — positionnements actifs et historiques`, `5. \`boond_resources_projects(id="${idLit}")\` — projets passés/en cours`, `6. \`boond_resources_absences_reports(id="${idLit}")\` — absences à venir et passées récentes`, `7. \`boond_resources_times_reports(id="${idLit}")\` — CRA des 3 derniers mois`, "", "Restitution : un document structuré en sections (Identité / Profil technique / Mission actuelle / Historique projets / Disponibilité / RH si pertinent). Mettre en évidence : projet courant, prochaine date de fin de mission, prochaine absence, taux d'occupation moyen sur 3 mois.");
186
+ return lines.join("\n");
169
187
  },
170
188
  },
171
189
  {
@@ -184,39 +202,35 @@ const PROMPTS = [
184
202
  manager_id: z
185
203
  .string()
186
204
  .optional()
187
- .describe("ID d'un manager pour restreindre à son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
205
+ .describe("Manager pour restreindre à son équipe. " +
206
+ ID_OR_NAME_HINT_RESOURCE +
207
+ " Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
188
208
  },
189
209
  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)";
210
+ let preamble = "";
211
+ let scope;
212
+ if (manager_id) {
213
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
214
+ preamble = r.preamble;
215
+ scope = `\`perimeterManagers: [${r.idForFilter}]\``;
216
+ }
217
+ else {
218
+ scope = "`perimeterDynamic: ['managers']` (mon équipe / mes N-1)";
219
+ }
193
220
  const skillsStep = competences
194
221
  ? `1. Mapper les compétences « ${competences} » vers leurs IDs : \`boond_application_dictionary\` avec \`setting.tool\` (et éventuellement \`setting.expertiseArea\`).`
195
222
  : "1. Pas de filtre compétences fourni — passer directement à l'étape 2.";
196
223
  const toolsLine = competences
197
224
  ? " - `tools: [...]` issus de l'étape 1 (logique OU ; pour exiger toutes les compétences, mettre `'#AND#'` en 1er élément)"
198
225
  : "";
199
- return [
226
+ const lines = [
200
227
  `Identifie les ressources internes disponibles pour un staffing entre ${start_date} et ${end_date}.`,
201
228
  "",
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");
229
+ ];
230
+ if (preamble)
231
+ lines.push(preamble);
232
+ lines.push(`Périmètre : ${scope}.`, "", "Étapes :", skillsStep, "2. Appeler `boond_resources_search` avec :", ` - \`period: "available"\`, \`startDate: "${start_date}"\`, \`endDate: "${end_date}"\``, ` - ${scope}`, toolsLine, " - `resourceStates: [...]` filtrés sur les états « actif » uniquement (consulter `setting.state.resource` via `boond_application_dictionary`)", ' - `pageSize: 50`, `sort: "availability"`, `order: "asc"`', "3. Pour les 15 premières ressources retournées (en parallèle) :", " - `boond_resources_positionings` — vérifier qu'aucun positionnement actif ne couvre déjà la fenêtre", " - `boond_resources_technical_data` — confirmer compétences clés et niveau d'expérience", "4. Restituer un tableau trié par date de disponibilité : ressource | titre | dispo le | compétences matchées | mobilité | manager | TJM cible.", "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).");
233
+ return lines.filter(Boolean).join("\n");
220
234
  },
221
235
  },
222
236
  {
@@ -232,33 +246,30 @@ const PROMPTS = [
232
246
  manager_id: z
233
247
  .string()
234
248
  .optional()
235
- .describe("ID d'un manager pour restreindre à son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
249
+ .describe("Manager pour restreindre à son équipe. " +
250
+ ID_OR_NAME_HINT_RESOURCE +
251
+ " Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
236
252
  },
237
253
  build: ({ horizon_jours, manager_id }) => {
238
254
  const horizon = horizon_jours || "60";
239
- const scope = manager_id ? `\`perimeterManagers: [${manager_id}]\`` : "`perimeterDynamic: ['managers']`";
240
- return [
255
+ let preamble = "";
256
+ let scope;
257
+ if (manager_id) {
258
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
259
+ preamble = r.preamble;
260
+ scope = `\`perimeterManagers: [${r.idForFilter}]\``;
261
+ }
262
+ else {
263
+ scope = "`perimeterDynamic: ['managers']`";
264
+ }
265
+ const lines = [
241
266
  `Liste les ressources dont la mission se termine dans les ${horizon} prochains jours.`,
242
267
  "",
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");
268
+ ];
269
+ if (preamble)
270
+ lines.push(preamble);
271
+ lines.push(`Périmètre : ${scope}.`, "", "Étapes :", `1. Calculer la fenêtre : aujourd'hui (D) → D + ${horizon} jours (D+H). Conserver ces deux dates au format YYYY-MM-DD.`, "2. Appeler `boond_resources_search` avec :", ' - `period: "available"`, `startDate: D`, `endDate: D+H`', ` - ${scope}`, " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource`)", ' - `pageSize: 100`, `sort: "availability"`, `order: "asc"`', " → Cela retourne les ressources qui (re)deviennent disponibles dans la fenêtre — proxy direct pour « fin de mission ».", "3. Pour chaque ressource, en parallèle :", " - `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", " - `boond_resources_projects` — historique projet récent pour contexte", "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).", "5. Mettre en évidence en haut du tableau :", " - **Urgent** : fin dans <= 15 jours sans relais identifié", " - **À surveiller** : fin entre 15 et 30 jours sans relais", "6. Conclure par 3-5 actions concrètes : relances commerciales, repositionnements internes, etc.");
272
+ return lines.join("\n");
262
273
  },
263
274
  },
264
275
  {
@@ -270,44 +281,37 @@ const PROMPTS = [
270
281
  manager_id: z
271
282
  .string()
272
283
  .optional()
273
- .describe("ID d'un manager pour cibler son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
284
+ .describe("Manager pour cibler son équipe. " +
285
+ ID_OR_NAME_HINT_RESOURCE +
286
+ " Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
274
287
  agency_id: z
275
288
  .string()
276
289
  .optional()
277
- .describe("ID d'agence pour cartographier toute une agence (alternatif à `manager_id`)."),
290
+ .describe("Agence pour cartographier toute une agence (alternatif à `manager_id`). " + ID_OR_NAME_HINT_AGENCY),
278
291
  top_n: z.string().optional().describe("Nombre de compétences à mettre en avant dans le top (défaut: 20)."),
279
292
  },
280
293
  build: ({ manager_id, agency_id, top_n }) => {
281
294
  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");
295
+ let preamble = "";
296
+ let scope;
297
+ if (agency_id) {
298
+ const r = resolveEntity(agency_id, "agency", "<AGENCY_ID>");
299
+ preamble = r.preamble;
300
+ scope = `\`perimeterAgencies: [${r.idForFilter}]\``;
301
+ }
302
+ else if (manager_id) {
303
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
304
+ preamble = r.preamble;
305
+ scope = `\`perimeterManagers: [${r.idForFilter}]\``;
306
+ }
307
+ else {
308
+ scope = "`perimeterDynamic: ['managers']`";
309
+ }
310
+ const lines = ["Cartographie les compétences techniques du périmètre.", ""];
311
+ if (preamble)
312
+ lines.push(preamble);
313
+ lines.push(`Périmètre : ${scope}.`, "", "Étapes :", "1. Lister les ressources actives via `boond_resources_search` :", ` - ${scope}`, " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource` via `boond_application_dictionary`)", " - `pageSize: 100` (paginer si > 100)", "2. Récupérer le dictionnaire `setting.tool` (et `setting.expertiseArea`, `setting.languageSpoken`) via `boond_application_dictionary` pour traduire les IDs en libellés.", "3. Pour chaque ressource (par batchs parallèles), appeler `boond_resources_technical_data` et extraire `tools`, `expertiseAreas`, `languages`, `experiences`.", "4. Agréger côté agent :", ` - **Top ${top}** : compétences les plus représentées (nb de ressources)`, " - **Rares** : compétences possédées par 1 ou 2 personnes (risque bus-factor)", " - **Saturées** : compétences possédées par > 70% de l'équipe (potentielle banalisation)", "5. Croiser avec les opportunités ouvertes via `boond_opportunities_search` (`opportunityStates` actifs, `perimeterDynamic`/`perimeterAgencies` cohérents) et leurs `tools` :", " - **Manquantes** : compétences demandées sur les opportunités mais absentes du périmètre — alerte recrutement / formation", "6. Restituer en 4 sections :", ` - Top ${top} compétences (tableau : compétence | nb ressources | exemples de noms)`, " - Compétences rares (avec porteurs nominatifs et nombre d'opportunités demandant cette compétence)", " - Compétences saturées", " - Compétences manquantes vs opportunités (recommandations recrutement / formation)");
314
+ return lines.join("\n");
311
315
  },
312
316
  },
313
317
  {
@@ -323,35 +327,30 @@ const PROMPTS = [
323
327
  manager_id: z
324
328
  .string()
325
329
  .optional()
326
- .describe("ID d'un manager pour cibler son équipe. Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
330
+ .describe("Manager pour cibler son équipe. " +
331
+ ID_OR_NAME_HINT_RESOURCE +
332
+ " Si absent, scope = mon équipe via `perimeterDynamic: ['managers']`."),
327
333
  },
328
334
  build: ({ seuil_mois, manager_id }) => {
329
335
  const seuil = seuil_mois || "12";
330
- const scope = manager_id ? `\`perimeterManagers: [${manager_id}]\`` : "`perimeterDynamic: ['managers']`";
331
- return [
336
+ let preamble = "";
337
+ let scope;
338
+ if (manager_id) {
339
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
340
+ preamble = r.preamble;
341
+ scope = `\`perimeterManagers: [${r.idForFilter}]\``;
342
+ }
343
+ else {
344
+ scope = "`perimeterDynamic: ['managers']`";
345
+ }
346
+ const lines = [
332
347
  `Identifie les CV / dossiers techniques à rafraîchir (seuil d'obsolescence : ${seuil} mois).`,
333
348
  "",
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");
349
+ ];
350
+ if (preamble)
351
+ lines.push(preamble);
352
+ lines.push(`Périmètre : ${scope}.`, "", "Étapes :", "1. Lister les ressources actives via `boond_resources_search` :", ` - ${scope}`, " - `resourceStates` filtrés sur les états « actif » (consulter `setting.state.resource`)", " - `pageSize: 100` (paginer si nécessaire)", "2. Pour chaque ressource (par batchs parallèles), appeler `boond_resources_technical_data` et lire :", " - `updateDate` du dossier technique", " - présence et longueur du CV (`resume`)", " - nombre de compétences déclarées (`tools`)", " - nombre d'expériences renseignées", "3. Filtrer côté agent : ne conserver que les ressources dont au moins UN critère est défaillant —", ` - \`updateDate\` antérieure de plus de ${seuil} mois, OU`, " - CV manquant / vide, OU", " - moins de 3 compétences (`tools`) déclarées, OU", " - aucune expérience renseignée.", '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**.', "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).", "6. Conclure par les 5 ressources à relancer en premier (avec template de message court à envoyer au manager).");
353
+ return lines.join("\n");
355
354
  },
356
355
  },
357
356
  {
@@ -378,48 +377,38 @@ const PROMPTS = [
378
377
  manager_id: z
379
378
  .string()
380
379
  .optional()
381
- .describe("ID d'un manager pour restreindre le scope ressources internes. Sinon scope ouvert (toute l'organisation accessible)."),
380
+ .describe("Manager pour restreindre le scope ressources internes. " +
381
+ ID_OR_NAME_HINT_RESOURCE +
382
+ " Sinon scope ouvert (toute l'organisation accessible)."),
382
383
  },
383
384
  build: ({ competences, experience_min, dispo_avant, inclure_candidats, manager_id }) => {
384
385
  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)";
386
+ let preamble = "";
387
+ let scope;
388
+ let scopeFilter;
389
+ if (manager_id) {
390
+ const r = resolveEntity(manager_id, "resource", "<MANAGER_ID>");
391
+ preamble = r.preamble;
392
+ scopeFilter = `\`perimeterManagers: [${r.idForFilter}]\``;
393
+ scope = scopeFilter;
394
+ }
395
+ else {
396
+ scope = "(pas de filtre périmètre — recherche sur l'ensemble accessible à l'utilisateur)";
397
+ scopeFilter = "";
398
+ }
388
399
  const dispoLine = dispo_avant
389
400
  ? ` - \`period: "available"\`, \`endDate: "${dispo_avant}"\` (disponible au plus tard à cette date)`
390
401
  : "";
391
402
  const expStep = experience_min
392
403
  ? `2bis. Mapper l'expérience minimum « ${experience_min} » vers les IDs \`experiences\` via \`boond_application_dictionary\` avec \`setting.experience\`.`
393
404
  : "";
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");
405
+ const lines = [`Recherche un profil correspondant aux compétences : « ${competences} ».`, ""];
406
+ if (preamble)
407
+ lines.push(preamble);
408
+ lines.push(`Scope ressources internes : ${scope}.`, `Inclure les candidats actifs : ${includeCandidates ? "oui" : "non"}.`, "", "Étapes :", "1. Mapper les compétences libres vers leurs IDs :", " - `boond_application_dictionary` avec `setting.tool` pour les outils / technos", " - `boond_application_dictionary` avec `setting.expertiseArea` pour les domaines d'expertise", "2. Identifier les compétences indispensables (toutes requises) vs souhaitables, à partir du libellé du besoin.", expStep, "3. Recherche dans les ressources internes via `boond_resources_search` :", ' - `tools: [...]` (si plusieurs compétences indispensables, préfixer par `"#AND#"` pour exiger toutes ; sinon laisser en OU)', " - `expertiseAreas: [...]` éventuellement", experience_min ? " - `experiences: [...]` issus de l'étape 2bis" : "", dispoLine, scopeFilter ? ` - ${scopeFilter}` : "", " - `resourceStates` actifs uniquement (consulter `setting.state.resource`)", " - `pageSize: 30`", includeCandidates
409
+ ? "4. En parallèle, recherche dans les candidats via `boond_candidates_search` avec les mêmes filtres + `candidateStates` actifs (consulter `setting.state.candidate`)."
410
+ : "4. (Skip — recherche limitée aux ressources internes.)", "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.", "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).", "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).");
411
+ return lines.filter(Boolean).join("\n");
423
412
  },
424
413
  },
425
414
  {
@@ -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.7.0",
6
- "description": "MCP Server for BoondManager API - 156 tools, 11 prompts, 20 resources across 36 domains for ERP/CRM data",
5
+ "version": "1.7.2",
6
+ "description": "MCP Server for BoondManager API - 156 tools, 11 prompts, 20 resources (ERP/CRM)",
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,7 +1,7 @@
1
1
  {
2
2
  "name": "boondmanager-mcp-server",
3
- "version": "1.7.0",
4
- "description": "MCP Server for BoondManager API - Resources, Candidates & CRM",
3
+ "version": "1.7.2",
4
+ "description": "MCP Server for BoondManager API - 156 tools, 11 prompts, 20 resources (ERP/CRM)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",