boondmanager-mcp-server 2.6.1 → 2.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 +115 -4
- package/dist/schemas/index.d.ts +29 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +90 -17
- package/dist/schemas/index.js.map +1 -1
- package/dist/services/boond-client.d.ts +8 -0
- package/dist/services/boond-client.d.ts.map +1 -1
- package/dist/services/boond-client.js +15 -14
- package/dist/services/boond-client.js.map +1 -1
- package/dist/services/logger.d.ts +8 -0
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +26 -1
- package/dist/services/logger.js.map +1 -1
- package/dist/tools/accounts.d.ts.map +1 -1
- package/dist/tools/accounts.js +9 -37
- package/dist/tools/accounts.js.map +1 -1
- package/dist/tools/actions.d.ts.map +1 -1
- package/dist/tools/actions.js +56 -2
- package/dist/tools/actions.js.map +1 -1
- package/dist/tools/agencies.d.ts.map +1 -1
- package/dist/tools/agencies.js +9 -37
- package/dist/tools/agencies.js.map +1 -1
- package/dist/tools/business-units.d.ts.map +1 -1
- package/dist/tools/business-units.js +9 -37
- package/dist/tools/business-units.js.map +1 -1
- package/dist/tools/calendars.d.ts.map +1 -1
- package/dist/tools/calendars.js +9 -37
- package/dist/tools/calendars.js.map +1 -1
- package/dist/tools/crud-factory.d.ts +33 -3
- package/dist/tools/crud-factory.d.ts.map +1 -1
- package/dist/tools/crud-factory.js +39 -18
- package/dist/tools/crud-factory.js.map +1 -1
- package/dist/tools/expenses.d.ts.map +1 -1
- package/dist/tools/expenses.js +25 -100
- package/dist/tools/expenses.js.map +1 -1
- package/dist/tools/flags.d.ts.map +1 -1
- package/dist/tools/flags.js +9 -37
- package/dist/tools/flags.js.map +1 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +26 -80
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +9 -33
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/opportunities.d.ts.map +1 -1
- package/dist/tools/opportunities.js +28 -16
- package/dist/tools/opportunities.js.map +1 -1
- package/dist/tools/orders.d.ts.map +1 -1
- package/dist/tools/orders.js +22 -95
- package/dist/tools/orders.js.map +1 -1
- package/dist/tools/poles.d.ts.map +1 -1
- package/dist/tools/poles.js +9 -37
- package/dist/tools/poles.js.map +1 -1
- package/dist/tools/roles.d.ts.map +1 -1
- package/dist/tools/roles.js +9 -37
- package/dist/tools/roles.js.map +1 -1
- package/dist/tools/threads.d.ts.map +1 -1
- package/dist/tools/threads.js +9 -37
- package/dist/tools/threads.js.map +1 -1
- package/dist/tools/todolists.d.ts.map +1 -1
- package/dist/tools/todolists.js +9 -37
- package/dist/tools/todolists.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +9 -37
- package/dist/tools/webhooks.js.map +1 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +18 -9
- package/dist/transports/http.js.map +1 -1
- package/manifest.json +2 -2
- package/package.json +2 -2
package/dist/tools/expenses.js
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import { ExpenseSearchSchema, ExpenseCreateSchema, ExpenseUpdateSchema
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { ExpenseSearchSchema, ExpenseCreateSchema, ExpenseUpdateSchema } from "../schemas/index.js";
|
|
2
|
+
import { buildJsonApiBody, registerSearchTool, registerGetTool, registerCreateTool, registerUpdateTool, registerDeleteTool, } from "./crud-factory.js";
|
|
3
|
+
// Expense reports are searched on /expenses but read/written on /expenses-reports.
|
|
4
|
+
const SEARCH_OPTS = {
|
|
5
|
+
entityName: "note de frais",
|
|
6
|
+
entityNamePlural: "notes de frais",
|
|
7
|
+
apiPath: "/expenses",
|
|
8
|
+
prefix: "boond_expenses",
|
|
9
|
+
};
|
|
10
|
+
const REPORT_OPTS = { ...SEARCH_OPTS, apiPath: "/expenses-reports" };
|
|
11
|
+
/** Maps the resourceId/projectId convenience inputs to JSON:API relationships. */
|
|
12
|
+
function buildExpenseBody(params) {
|
|
13
|
+
const { id, resourceId, projectId, ...attrs } = params;
|
|
14
|
+
return buildJsonApiBody("expense", attrs, id, {
|
|
15
|
+
resource: resourceId ? { id: String(resourceId), type: "resource" } : undefined,
|
|
16
|
+
project: projectId ? { id: String(projectId), type: "project" } : undefined,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
4
19
|
export function registerExpenseTools(server) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
title: "Rechercher des notes de frais",
|
|
20
|
+
registerSearchTool(server, SEARCH_OPTS, {
|
|
21
|
+
schema: ExpenseSearchSchema,
|
|
8
22
|
description: `Recherche des notes de frais dans BoondManager avec filtres par ressource, projet et période.
|
|
9
23
|
|
|
10
24
|
Args:
|
|
@@ -14,101 +28,12 @@ Args:
|
|
|
14
28
|
- page, pageSize: Pagination
|
|
15
29
|
|
|
16
30
|
Returns: Liste des notes de frais correspondantes.`,
|
|
17
|
-
inputSchema: ExpenseSearchSchema,
|
|
18
|
-
annotations: {
|
|
19
|
-
readOnlyHint: true,
|
|
20
|
-
destructiveHint: false,
|
|
21
|
-
idempotentHint: true,
|
|
22
|
-
openWorldHint: true,
|
|
23
|
-
},
|
|
24
|
-
}, async (params) => {
|
|
25
|
-
const query = buildSearchQuery(params);
|
|
26
|
-
const response = await apiRequest("/expenses", "GET", undefined, query);
|
|
27
|
-
return {
|
|
28
|
-
content: [{ type: "text", text: formatListResponse(response, "note de frais") }],
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
// Get expense details
|
|
32
|
-
server.registerTool("boond_expenses_get", {
|
|
33
|
-
title: "Détails d'une note de frais",
|
|
34
|
-
description: `Récupère les informations détaillées d'une note de frais par son ID.`,
|
|
35
|
-
inputSchema: IdSchema,
|
|
36
|
-
annotations: {
|
|
37
|
-
readOnlyHint: true,
|
|
38
|
-
destructiveHint: false,
|
|
39
|
-
idempotentHint: true,
|
|
40
|
-
openWorldHint: false,
|
|
41
|
-
},
|
|
42
|
-
}, async (params) => {
|
|
43
|
-
const response = await apiRequest(`/expenses-reports/${params.id}`);
|
|
44
|
-
return {
|
|
45
|
-
content: [{ type: "text", text: formatDetailResponse(response) }],
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
// Create expense
|
|
49
|
-
server.registerTool("boond_expenses_create", {
|
|
50
|
-
title: "Créer une note de frais",
|
|
51
|
-
description: `Crée une nouvelle note de frais dans BoondManager, liée à une ressource et optionnellement un projet.`,
|
|
52
|
-
inputSchema: ExpenseCreateSchema,
|
|
53
|
-
annotations: {
|
|
54
|
-
readOnlyHint: false,
|
|
55
|
-
destructiveHint: false,
|
|
56
|
-
idempotentHint: false,
|
|
57
|
-
openWorldHint: false,
|
|
58
|
-
},
|
|
59
|
-
}, async (params) => {
|
|
60
|
-
const { resourceId, projectId, ...attrs } = params;
|
|
61
|
-
const body = buildJsonApiBody("expense", attrs);
|
|
62
|
-
const relationships = {};
|
|
63
|
-
if (resourceId)
|
|
64
|
-
relationships.resource = { data: { id: resourceId, type: "resource" } };
|
|
65
|
-
if (projectId)
|
|
66
|
-
relationships.project = { data: { id: projectId, type: "project" } };
|
|
67
|
-
if (Object.keys(relationships).length > 0) {
|
|
68
|
-
body.data.relationships = relationships;
|
|
69
|
-
}
|
|
70
|
-
const response = await apiRequest("/expenses-reports", "POST", body);
|
|
71
|
-
const entity = Array.isArray(response.data) ? response.data[0] : response.data;
|
|
72
|
-
return {
|
|
73
|
-
content: [
|
|
74
|
-
{
|
|
75
|
-
type: "text",
|
|
76
|
-
text: `✅ Note de frais créée avec succès.\nID: ${entity?.id}\n\n${formatDetailResponse(response)}`,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
});
|
|
81
|
-
// Update expense
|
|
82
|
-
server.registerTool("boond_expenses_update", {
|
|
83
|
-
title: "Modifier une note de frais",
|
|
84
|
-
description: `Met à jour une note de frais existante. Seuls les champs fournis sont modifiés.`,
|
|
85
|
-
inputSchema: ExpenseUpdateSchema,
|
|
86
|
-
annotations: {
|
|
87
|
-
readOnlyHint: false,
|
|
88
|
-
destructiveHint: false,
|
|
89
|
-
idempotentHint: true,
|
|
90
|
-
openWorldHint: false,
|
|
91
|
-
},
|
|
92
|
-
}, async (params) => {
|
|
93
|
-
const { id, ...attrs } = params;
|
|
94
|
-
const body = buildJsonApiBody("expense", attrs, id);
|
|
95
|
-
const response = await apiRequest(`/expenses-reports/${id}`, "PUT", body);
|
|
96
|
-
return {
|
|
97
|
-
content: [
|
|
98
|
-
{
|
|
99
|
-
type: "text",
|
|
100
|
-
text: `✅ Note de frais #${id} mise à jour.\n\n${formatDetailResponse(response)}`,
|
|
101
|
-
},
|
|
102
|
-
],
|
|
103
|
-
};
|
|
104
31
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
prefix: "boond_expenses",
|
|
111
|
-
}, {
|
|
32
|
+
registerGetTool(server, REPORT_OPTS, { withTab: false });
|
|
33
|
+
registerCreateTool(server, REPORT_OPTS, ExpenseCreateSchema, buildExpenseBody);
|
|
34
|
+
// BoondManager expects PUT (not PATCH) on /expenses-reports.
|
|
35
|
+
registerUpdateTool(server, REPORT_OPTS, ExpenseUpdateSchema, buildExpenseBody, { method: "PUT" });
|
|
36
|
+
registerDeleteTool(server, REPORT_OPTS, {
|
|
112
37
|
title: "Supprimer une note de frais",
|
|
113
38
|
description: `Supprime une note de frais de BoondManager. ⚠️ Action irréversible. Si le client MCP supporte l'élicitation, une confirmation est demandée avant la suppression.`,
|
|
114
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expenses.js","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"expenses.js","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,mFAAmF;AACnF,MAAM,WAAW,GAAG;IAClB,UAAU,EAAE,eAAe;IAC3B,gBAAgB,EAAE,gBAAgB;IAClC,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,gBAAgB;CACzB,CAAC;AACF,MAAM,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAErE,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,MAA+B;IACvD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACvD,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAwB,EAAE;QAClE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/E,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE;QACtC,MAAM,EAAE,mBAAmB;QAC3B,WAAW,EAAE;;;;;;;;mDAQkC;KAChD,CAAC,CAAC;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IAC/E,6DAA6D;IAC7D,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE;QACtC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,kKAAkK;KAChL,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/tools/flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/tools/flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGzD"}
|
package/dist/tools/flags.js
CHANGED
|
@@ -1,40 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { registerSearchTool, registerGetTool } from "./crud-factory.js";
|
|
2
|
+
const OPTS = {
|
|
3
|
+
entityName: "drapeau",
|
|
4
|
+
entityNamePlural: "drapeaux",
|
|
5
|
+
apiPath: "/flags",
|
|
6
|
+
prefix: "boond_flags",
|
|
7
|
+
};
|
|
3
8
|
export function registerFlagTools(server) {
|
|
4
|
-
server
|
|
5
|
-
|
|
6
|
-
description: `Recherche des drapeaux (flags/étiquettes) dans BoondManager.
|
|
7
|
-
|
|
8
|
-
Returns: Liste des drapeaux correspondants.`,
|
|
9
|
-
inputSchema: SearchSchema,
|
|
10
|
-
annotations: {
|
|
11
|
-
readOnlyHint: true,
|
|
12
|
-
destructiveHint: false,
|
|
13
|
-
idempotentHint: true,
|
|
14
|
-
openWorldHint: true,
|
|
15
|
-
},
|
|
16
|
-
}, async (params) => {
|
|
17
|
-
const query = buildSearchQuery(params);
|
|
18
|
-
const response = await apiRequest("/flags", "GET", undefined, query);
|
|
19
|
-
return {
|
|
20
|
-
content: [{ type: "text", text: formatListResponse(response, "drapeau") }],
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
server.registerTool("boond_flags_get", {
|
|
24
|
-
title: "Détails d'un drapeau/étiquette",
|
|
25
|
-
description: `Récupère les informations détaillées d'un drapeau par son ID.`,
|
|
26
|
-
inputSchema: IdSchema,
|
|
27
|
-
annotations: {
|
|
28
|
-
readOnlyHint: true,
|
|
29
|
-
destructiveHint: false,
|
|
30
|
-
idempotentHint: true,
|
|
31
|
-
openWorldHint: false,
|
|
32
|
-
},
|
|
33
|
-
}, async (params) => {
|
|
34
|
-
const response = await apiRequest(`/flags/${params.id}`);
|
|
35
|
-
return {
|
|
36
|
-
content: [{ type: "text", text: formatDetailResponse(response) }],
|
|
37
|
-
};
|
|
38
|
-
});
|
|
9
|
+
registerSearchTool(server, OPTS);
|
|
10
|
+
registerGetTool(server, OPTS, { withTab: false });
|
|
39
11
|
}
|
|
40
12
|
//# sourceMappingURL=flags.js.map
|
package/dist/tools/flags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/tools/flags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/tools/flags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,SAAS;IACrB,gBAAgB,EAAE,UAAU;IAC5B,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6BzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8C5D"}
|
package/dist/tools/invoices.js
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import { InvoiceSearchSchema, InvoiceCreateSchema, InvoiceUpdateSchema
|
|
2
|
-
import { apiRequest, buildSearchQuery, formatListResponse
|
|
3
|
-
import { buildJsonApiBody, registerDeleteTool } from "./crud-factory.js";
|
|
1
|
+
import { InvoiceSearchSchema, InvoiceCreateSchema, InvoiceUpdateSchema } from "../schemas/index.js";
|
|
2
|
+
import { apiRequest, buildSearchQuery, formatListResponse } from "../services/boond-client.js";
|
|
3
|
+
import { buildJsonApiBody, buildListStructured, SearchOutputSchema, registerGetTool, registerCreateTool, registerUpdateTool, registerDeleteTool, } from "./crud-factory.js";
|
|
4
|
+
const OPTS = {
|
|
5
|
+
entityName: "facture",
|
|
6
|
+
entityNamePlural: "factures",
|
|
7
|
+
apiPath: "/invoices",
|
|
8
|
+
prefix: "boond_invoices",
|
|
9
|
+
};
|
|
10
|
+
/** Maps the companyId/projectId convenience inputs to JSON:API relationships. */
|
|
11
|
+
function buildInvoiceBody(params) {
|
|
12
|
+
const { id, companyId, projectId, ...attrs } = params;
|
|
13
|
+
return buildJsonApiBody("invoice", attrs, id, {
|
|
14
|
+
company: companyId ? { id: String(companyId), type: "company" } : undefined,
|
|
15
|
+
project: projectId ? { id: String(projectId), type: "project" } : undefined,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
4
18
|
export function registerInvoiceTools(server) {
|
|
5
|
-
// Search invoices
|
|
19
|
+
// Search invoices — kept hand-rolled: it applies a `period` default and
|
|
20
|
+
// forwards the startDate/endDate period window, which the generic factory
|
|
21
|
+
// search does not model.
|
|
6
22
|
server.registerTool("boond_invoices_search", {
|
|
7
23
|
title: "Rechercher des factures",
|
|
8
24
|
description: `Recherche des factures dans BoondManager avec filtres par société, projet et période.
|
|
@@ -15,6 +31,7 @@ Args:
|
|
|
15
31
|
|
|
16
32
|
Returns: Liste des factures correspondantes.`,
|
|
17
33
|
inputSchema: InvoiceSearchSchema,
|
|
34
|
+
outputSchema: SearchOutputSchema,
|
|
18
35
|
annotations: {
|
|
19
36
|
readOnlyHint: true,
|
|
20
37
|
destructiveHint: false,
|
|
@@ -31,84 +48,13 @@ Returns: Liste des factures correspondantes.`,
|
|
|
31
48
|
const response = await apiRequest("/invoices", "GET", undefined, query);
|
|
32
49
|
return {
|
|
33
50
|
content: [{ type: "text", text: formatListResponse(response, "facture") }],
|
|
51
|
+
structuredContent: buildListStructured(response),
|
|
34
52
|
};
|
|
35
53
|
});
|
|
36
|
-
|
|
37
|
-
server
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
inputSchema: IdSchema,
|
|
41
|
-
annotations: {
|
|
42
|
-
readOnlyHint: true,
|
|
43
|
-
destructiveHint: false,
|
|
44
|
-
idempotentHint: true,
|
|
45
|
-
openWorldHint: false,
|
|
46
|
-
},
|
|
47
|
-
}, async (params) => {
|
|
48
|
-
const response = await apiRequest(`/invoices/${params.id}`);
|
|
49
|
-
return {
|
|
50
|
-
content: [{ type: "text", text: formatDetailResponse(response) }],
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
// Create invoice
|
|
54
|
-
server.registerTool("boond_invoices_create", {
|
|
55
|
-
title: "Créer une facture",
|
|
56
|
-
description: `Crée une nouvelle facture dans BoondManager, optionnellement liée à une société et un projet.`,
|
|
57
|
-
inputSchema: InvoiceCreateSchema,
|
|
58
|
-
annotations: {
|
|
59
|
-
readOnlyHint: false,
|
|
60
|
-
destructiveHint: false,
|
|
61
|
-
idempotentHint: false,
|
|
62
|
-
openWorldHint: false,
|
|
63
|
-
},
|
|
64
|
-
}, async (params) => {
|
|
65
|
-
const { companyId, projectId, ...attrs } = params;
|
|
66
|
-
const body = buildJsonApiBody("invoice", attrs);
|
|
67
|
-
const relationships = {};
|
|
68
|
-
if (companyId)
|
|
69
|
-
relationships.company = { data: { id: companyId, type: "company" } };
|
|
70
|
-
if (projectId)
|
|
71
|
-
relationships.project = { data: { id: projectId, type: "project" } };
|
|
72
|
-
if (Object.keys(relationships).length > 0) {
|
|
73
|
-
body.data.relationships = relationships;
|
|
74
|
-
}
|
|
75
|
-
const response = await apiRequest("/invoices", "POST", body);
|
|
76
|
-
const entity = Array.isArray(response.data) ? response.data[0] : response.data;
|
|
77
|
-
return {
|
|
78
|
-
content: [
|
|
79
|
-
{
|
|
80
|
-
type: "text",
|
|
81
|
-
text: `✅ Facture créée avec succès.\nID: ${entity?.id}\n\n${formatDetailResponse(response)}`,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
// Update invoice
|
|
87
|
-
server.registerTool("boond_invoices_update", {
|
|
88
|
-
title: "Modifier une facture",
|
|
89
|
-
description: `Met à jour une facture existante. Seuls les champs fournis sont modifiés.`,
|
|
90
|
-
inputSchema: InvoiceUpdateSchema,
|
|
91
|
-
annotations: {
|
|
92
|
-
readOnlyHint: false,
|
|
93
|
-
destructiveHint: false,
|
|
94
|
-
idempotentHint: true,
|
|
95
|
-
openWorldHint: false,
|
|
96
|
-
},
|
|
97
|
-
}, async (params) => {
|
|
98
|
-
const { id, ...attrs } = params;
|
|
99
|
-
const body = buildJsonApiBody("invoice", attrs, id);
|
|
100
|
-
const response = await apiRequest(`/invoices/${id}`, "PATCH", body);
|
|
101
|
-
return {
|
|
102
|
-
content: [
|
|
103
|
-
{
|
|
104
|
-
type: "text",
|
|
105
|
-
text: `✅ Facture #${id} mise à jour.\n\n${formatDetailResponse(response)}`,
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
};
|
|
109
|
-
});
|
|
110
|
-
// Delete invoice — via la factory pour l'élicitation de confirmation + structuredContent
|
|
111
|
-
registerDeleteTool(server, { entityName: "facture", entityNamePlural: "factures", apiPath: "/invoices", prefix: "boond_invoices" }, {
|
|
54
|
+
registerGetTool(server, OPTS, { withTab: false });
|
|
55
|
+
registerCreateTool(server, OPTS, InvoiceCreateSchema, buildInvoiceBody);
|
|
56
|
+
registerUpdateTool(server, OPTS, InvoiceUpdateSchema, buildInvoiceBody);
|
|
57
|
+
registerDeleteTool(server, OPTS, {
|
|
112
58
|
title: "Supprimer une facture",
|
|
113
59
|
description: `Supprime une facture de BoondManager. ⚠️ Action irréversible. Si le client MCP supporte l'élicitation, une confirmation est demandée avant la suppression.`,
|
|
114
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,SAAS;IACrB,gBAAgB,EAAE,UAAU;IAC5B,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,iFAAiF;AACjF,SAAS,gBAAgB,CAAC,MAA+B;IACvD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACtD,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAwB,EAAE;QAClE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3E,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,wEAAwE;IACxE,0EAA0E;IAC1E,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE;;;;;;;;6CAQ0B;QACvC,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,kBAAkB;QAChC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,SAAS;YAAE,KAAK,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACtD,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;YACnF,iBAAiB,EAAE,mBAAmB,CAAC,QAAQ,CAAC;SACjD,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACxE,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACxE,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE;QAC/B,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,4JAA4J;KAC1K,CAAC,CAAC;AACL,CAAC"}
|
package/dist/tools/logs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAOxD"}
|
package/dist/tools/logs.js
CHANGED
|
@@ -1,40 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { registerSearchTool, registerGetTool } from "./crud-factory.js";
|
|
2
|
+
const OPTS = {
|
|
3
|
+
entityName: "log",
|
|
4
|
+
entityNamePlural: "logs",
|
|
5
|
+
apiPath: "/logs",
|
|
6
|
+
prefix: "boond_logs",
|
|
7
|
+
};
|
|
3
8
|
export function registerLogTools(server) {
|
|
4
|
-
server
|
|
5
|
-
title: "Rechercher des logs d'audit",
|
|
9
|
+
registerSearchTool(server, OPTS, {
|
|
6
10
|
description: `Recherche des logs d'audit dans BoondManager (historique des actions utilisateurs).
|
|
7
11
|
|
|
8
12
|
Returns: Liste des logs correspondants.`,
|
|
9
|
-
inputSchema: SearchSchema,
|
|
10
|
-
annotations: {
|
|
11
|
-
readOnlyHint: true,
|
|
12
|
-
destructiveHint: false,
|
|
13
|
-
idempotentHint: true,
|
|
14
|
-
openWorldHint: true,
|
|
15
|
-
},
|
|
16
|
-
}, async (params) => {
|
|
17
|
-
const query = buildSearchQuery(params);
|
|
18
|
-
const response = await apiRequest("/logs", "GET", undefined, query);
|
|
19
|
-
return {
|
|
20
|
-
content: [{ type: "text", text: formatListResponse(response, "log") }],
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
server.registerTool("boond_logs_get", {
|
|
24
|
-
title: "Détails d'un log d'audit",
|
|
25
|
-
description: `Récupère les informations détaillées d'un log d'audit par son ID.`,
|
|
26
|
-
inputSchema: IdSchema,
|
|
27
|
-
annotations: {
|
|
28
|
-
readOnlyHint: true,
|
|
29
|
-
destructiveHint: false,
|
|
30
|
-
idempotentHint: true,
|
|
31
|
-
openWorldHint: false,
|
|
32
|
-
},
|
|
33
|
-
}, async (params) => {
|
|
34
|
-
const response = await apiRequest(`/logs/${params.id}`);
|
|
35
|
-
return {
|
|
36
|
-
content: [{ type: "text", text: formatDetailResponse(response) }],
|
|
37
|
-
};
|
|
38
13
|
});
|
|
14
|
+
registerGetTool(server, OPTS, { withTab: false });
|
|
39
15
|
}
|
|
40
16
|
//# sourceMappingURL=logs.js.map
|
package/dist/tools/logs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,MAAM;IACxB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE;QAC/B,WAAW,EAAE;;wCAEuB;KACrC,CAAC,CAAC;IACH,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opportunities.d.ts","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"opportunities.d.ts","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoJzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsChE"}
|
|
@@ -86,28 +86,40 @@ Cas d'usage courants :
|
|
|
86
86
|
Pagination : \`page\`, \`pageSize\` (max 500). Tri : \`sort: "creationDate"|"title"|"company.name"|"startDate"|"endDate"|"state"|"closingDate"|"answerDate"|"updateDate"|...\` + \`order\`.
|
|
87
87
|
|
|
88
88
|
Returns : liste paginée des opportunités. Utiliser \`boond_opportunities_get\` ou les outils d'onglets pour le détail.`;
|
|
89
|
+
/**
|
|
90
|
+
* Builds the JSON:API body for create (no id) and update (with id) of an
|
|
91
|
+
* opportunity. Maps the friendly schema field names to the API's attribute /
|
|
92
|
+
* relationship names (see issues #113 and #124):
|
|
93
|
+
* - `name` → /data/attributes/title
|
|
94
|
+
* - `note` → /data/attributes/description (the API has no `note` attribute)
|
|
95
|
+
* - `{company,contact,pole,hrManager,mainManager,agency}Id` → relationships
|
|
96
|
+
* `buildJsonApiBody` strips undefined attributes and relationships, so partial
|
|
97
|
+
* updates only touch the supplied fields.
|
|
98
|
+
*/
|
|
99
|
+
function buildOpportunityBody(params) {
|
|
100
|
+
const { id, name, note, companyId, contactId, poleId, hrManagerId, mainManagerId, agencyId, ...attributes } = params;
|
|
101
|
+
return buildJsonApiBody("opportunity", { ...attributes, title: name, description: note }, id, {
|
|
102
|
+
company: companyId ? { id: companyId, type: "company" } : undefined,
|
|
103
|
+
contact: contactId ? { id: contactId, type: "contact" } : undefined,
|
|
104
|
+
pole: poleId ? { id: poleId, type: "pole" } : undefined,
|
|
105
|
+
hrManager: hrManagerId ? { id: hrManagerId, type: "resource" } : undefined,
|
|
106
|
+
mainManager: mainManagerId ? { id: mainManagerId, type: "resource" } : undefined,
|
|
107
|
+
agency: agencyId ? { id: agencyId, type: "agency" } : undefined,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
89
110
|
export function registerOpportunityTools(server) {
|
|
90
111
|
registerSearchTool(server, OPTS, {
|
|
91
112
|
schema: OpportunitySearchSchema,
|
|
92
113
|
description: OPPORTUNITY_SEARCH_DESCRIPTION,
|
|
93
114
|
});
|
|
94
115
|
registerGetTool(server, OPTS);
|
|
95
|
-
registerCreateTool(server, OPTS, OpportunityCreateSchema,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
relationships.contact = { data: { id: contactId, type: "contact" } };
|
|
103
|
-
if (Object.keys(relationships).length > 0) {
|
|
104
|
-
body.data.relationships = relationships;
|
|
105
|
-
}
|
|
106
|
-
return body;
|
|
107
|
-
});
|
|
108
|
-
registerUpdateTool(server, OPTS, OpportunityUpdateSchema, (params) => {
|
|
109
|
-
const { id, ...attrs } = params;
|
|
110
|
-
return buildJsonApiBody("opportunity", attrs, id);
|
|
116
|
+
registerCreateTool(server, OPTS, OpportunityCreateSchema, buildOpportunityBody);
|
|
117
|
+
// Updates go through PUT /opportunities/{id}/information — the base resource
|
|
118
|
+
// returns 405 on PATCH (issue #124). buildJsonApiBody drops undefined values,
|
|
119
|
+
// so PUT still only touches the fields the caller supplied.
|
|
120
|
+
registerUpdateTool(server, OPTS, OpportunityUpdateSchema, buildOpportunityBody, {
|
|
121
|
+
method: "PUT",
|
|
122
|
+
pathSuffix: "information",
|
|
111
123
|
});
|
|
112
124
|
registerDeleteTool(server, OPTS);
|
|
113
125
|
// Register one tool per opportunity tab
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opportunities.js","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,aAAa;IACzB,gBAAgB,EAAE,cAAc;IAChC,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,qBAAqB;CAC9B,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACZ,CAAC;AASX,MAAM,gBAAgB,GAAoB;IACxC;QACE,IAAI,EAAE,aAAa;QACnB,GAAG,EAAE,aAAa;QAClB,KAAK,EAAE,0CAA0C;QACjD,WAAW,EAAE;;;;;6CAK4B;KAC1C;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE;;;;;kDAKiC;KAC/C;IACD;QACE,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EAAE;;;;;qDAKoC;KAClD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE;;;;;iDAKgC;KAC9C;IACD;QACE,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,yCAAyC;QAChD,WAAW,EAAE;;;;;4DAK2C;KACzD;CACF,CAAC;AAEF,MAAM,8BAA8B,GAAG;;;;;;;;;;;;;;;uHAegF,CAAC;AAExH,
|
|
1
|
+
{"version":3,"file":"opportunities.js","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmB1D"}
|