boondmanager-mcp-server 1.0.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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -0
  3. package/dist/constants.d.ts +32 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +35 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +47 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/schemas/index.d.ts +347 -0
  12. package/dist/schemas/index.d.ts.map +1 -0
  13. package/dist/schemas/index.js +364 -0
  14. package/dist/schemas/index.js.map +1 -0
  15. package/dist/services/boond-client.d.ts +12 -0
  16. package/dist/services/boond-client.d.ts.map +1 -0
  17. package/dist/services/boond-client.js +123 -0
  18. package/dist/services/boond-client.js.map +1 -0
  19. package/dist/tools/absences.d.ts +3 -0
  20. package/dist/tools/absences.d.ts.map +1 -0
  21. package/dist/tools/absences.js +116 -0
  22. package/dist/tools/absences.js.map +1 -0
  23. package/dist/tools/actions.d.ts +3 -0
  24. package/dist/tools/actions.d.ts.map +1 -0
  25. package/dist/tools/actions.js +100 -0
  26. package/dist/tools/actions.js.map +1 -0
  27. package/dist/tools/advantages.d.ts +3 -0
  28. package/dist/tools/advantages.d.ts.map +1 -0
  29. package/dist/tools/advantages.js +47 -0
  30. package/dist/tools/advantages.js.map +1 -0
  31. package/dist/tools/application.d.ts +3 -0
  32. package/dist/tools/application.d.ts.map +1 -0
  33. package/dist/tools/application.js +60 -0
  34. package/dist/tools/application.js.map +1 -0
  35. package/dist/tools/candidates.d.ts +3 -0
  36. package/dist/tools/candidates.d.ts.map +1 -0
  37. package/dist/tools/candidates.js +90 -0
  38. package/dist/tools/candidates.js.map +1 -0
  39. package/dist/tools/companies.d.ts +3 -0
  40. package/dist/tools/companies.d.ts.map +1 -0
  41. package/dist/tools/companies.js +79 -0
  42. package/dist/tools/companies.js.map +1 -0
  43. package/dist/tools/contacts.d.ts +3 -0
  44. package/dist/tools/contacts.d.ts.map +1 -0
  45. package/dist/tools/contacts.js +85 -0
  46. package/dist/tools/contacts.js.map +1 -0
  47. package/dist/tools/crud-factory.d.ts +16 -0
  48. package/dist/tools/crud-factory.d.ts.map +1 -0
  49. package/dist/tools/crud-factory.js +146 -0
  50. package/dist/tools/crud-factory.js.map +1 -0
  51. package/dist/tools/deliveries.d.ts +3 -0
  52. package/dist/tools/deliveries.d.ts.map +1 -0
  53. package/dist/tools/deliveries.js +48 -0
  54. package/dist/tools/deliveries.js.map +1 -0
  55. package/dist/tools/expenses.d.ts +3 -0
  56. package/dist/tools/expenses.d.ts.map +1 -0
  57. package/dist/tools/expenses.js +119 -0
  58. package/dist/tools/expenses.js.map +1 -0
  59. package/dist/tools/index.d.ts +19 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +19 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/invoices.d.ts +3 -0
  64. package/dist/tools/invoices.d.ts.map +1 -0
  65. package/dist/tools/invoices.js +119 -0
  66. package/dist/tools/invoices.js.map +1 -0
  67. package/dist/tools/opportunities.d.ts +3 -0
  68. package/dist/tools/opportunities.d.ts.map +1 -0
  69. package/dist/tools/opportunities.js +88 -0
  70. package/dist/tools/opportunities.js.map +1 -0
  71. package/dist/tools/orders.d.ts +3 -0
  72. package/dist/tools/orders.d.ts.map +1 -0
  73. package/dist/tools/orders.js +118 -0
  74. package/dist/tools/orders.js.map +1 -0
  75. package/dist/tools/payments.d.ts +3 -0
  76. package/dist/tools/payments.d.ts.map +1 -0
  77. package/dist/tools/payments.js +48 -0
  78. package/dist/tools/payments.js.map +1 -0
  79. package/dist/tools/positionings.d.ts +3 -0
  80. package/dist/tools/positionings.d.ts.map +1 -0
  81. package/dist/tools/positionings.js +100 -0
  82. package/dist/tools/positionings.js.map +1 -0
  83. package/dist/tools/products.d.ts +3 -0
  84. package/dist/tools/products.d.ts.map +1 -0
  85. package/dist/tools/products.js +22 -0
  86. package/dist/tools/products.js.map +1 -0
  87. package/dist/tools/projects.d.ts +3 -0
  88. package/dist/tools/projects.d.ts.map +1 -0
  89. package/dist/tools/projects.js +101 -0
  90. package/dist/tools/projects.js.map +1 -0
  91. package/dist/tools/resources.d.ts +3 -0
  92. package/dist/tools/resources.d.ts.map +1 -0
  93. package/dist/tools/resources.js +112 -0
  94. package/dist/tools/resources.js.map +1 -0
  95. package/dist/tools/timesheets.d.ts +3 -0
  96. package/dist/tools/timesheets.d.ts.map +1 -0
  97. package/dist/tools/timesheets.js +116 -0
  98. package/dist/tools/timesheets.js.map +1 -0
  99. package/dist/types.d.ts +37 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +3 -0
  102. package/dist/types.js.map +1 -0
  103. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerOpportunityTools(server: McpServer): void;
3
+ //# sourceMappingURL=opportunities.d.ts.map
@@ -0,0 +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;AAsEzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0ChE"}
@@ -0,0 +1,88 @@
1
+ import { OpportunityCreateSchema, OpportunityUpdateSchema, IdSchema } from "../schemas/index.js";
2
+ import { registerSearchTool, registerGetTool, registerCreateTool, registerUpdateTool, registerDeleteTool, buildJsonApiBody, } from "./crud-factory.js";
3
+ import { apiRequest, formatDetailResponse } from "../services/boond-client.js";
4
+ const OPTS = {
5
+ entityName: "opportunité",
6
+ entityNamePlural: "opportunités",
7
+ apiPath: "/opportunities",
8
+ prefix: "boond_opportunities",
9
+ };
10
+ const TAB_TOOL_ANNOTATIONS = {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: false,
15
+ };
16
+ const OPPORTUNITY_TABS = [
17
+ {
18
+ name: "information",
19
+ tab: "information",
20
+ title: "Informations générales d'une opportunité",
21
+ description: `Récupère les informations générales d'une opportunité (client, dates, montant, probabilité, état...).
22
+
23
+ Args:
24
+ - id (string): ID de l'opportunité
25
+
26
+ Returns: Données générales de l'opportunité.`,
27
+ },
28
+ {
29
+ name: "actions",
30
+ tab: "actions",
31
+ title: "Actions liées à une opportunité",
32
+ description: `Récupère les actions (appels, emails, RDV, notes) associées à une opportunité.
33
+
34
+ Args:
35
+ - id (string): ID de l'opportunité
36
+
37
+ Returns: Liste des actions liées à l'opportunité.`,
38
+ },
39
+ {
40
+ name: "documents",
41
+ tab: "documents",
42
+ title: "Documents d'une opportunité",
43
+ description: `Récupère les documents attachés à une opportunité (propositions commerciales, cahiers des charges...).
44
+
45
+ Args:
46
+ - id (string): ID de l'opportunité
47
+
48
+ Returns: Liste des documents de l'opportunité.`,
49
+ },
50
+ ];
51
+ export function registerOpportunityTools(server) {
52
+ registerSearchTool(server, OPTS);
53
+ registerGetTool(server, OPTS);
54
+ registerCreateTool(server, OPTS, OpportunityCreateSchema, (params) => {
55
+ const { companyId, contactId, ...attrs } = params;
56
+ const body = buildJsonApiBody("opportunity", attrs);
57
+ const relationships = {};
58
+ if (companyId)
59
+ relationships.company = { data: { id: companyId, type: "company" } };
60
+ if (contactId)
61
+ relationships.contact = { data: { id: contactId, type: "contact" } };
62
+ if (Object.keys(relationships).length > 0) {
63
+ body.data.relationships = relationships;
64
+ }
65
+ return body;
66
+ });
67
+ registerUpdateTool(server, OPTS, OpportunityUpdateSchema, (params) => {
68
+ const { id, ...attrs } = params;
69
+ return buildJsonApiBody("opportunity", attrs, id);
70
+ });
71
+ registerDeleteTool(server, OPTS);
72
+ // Register one tool per opportunity tab
73
+ for (const tab of OPPORTUNITY_TABS) {
74
+ server.registerTool(`boond_opportunities_${tab.name}`, {
75
+ title: tab.title,
76
+ description: tab.description,
77
+ inputSchema: IdSchema,
78
+ annotations: TAB_TOOL_ANNOTATIONS,
79
+ }, async (params) => {
80
+ const response = await apiRequest(`/opportunities/${params.id}/${tab.tab}`);
81
+ const text = formatDetailResponse(response);
82
+ return {
83
+ content: [{ type: "text", text }],
84
+ };
85
+ });
86
+ }
87
+ }
88
+ //# sourceMappingURL=opportunities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunities.js","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerOrderTools(server: McpServer): void;
3
+ //# sourceMappingURL=orders.d.ts.map
@@ -0,0 +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;AAKzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuI1D"}
@@ -0,0 +1,118 @@
1
+ import { OrderSearchSchema, OrderCreateSchema, OrderUpdateSchema, IdSchema } from "../schemas/index.js";
2
+ import { apiRequest, buildSearchQuery, formatListResponse, formatDetailResponse } from "../services/boond-client.js";
3
+ import { buildJsonApiBody } from "./crud-factory.js";
4
+ export function registerOrderTools(server) {
5
+ // Search orders
6
+ server.registerTool("boond_orders_search", {
7
+ title: "Rechercher des bons de commande",
8
+ description: `Recherche des bons de commande dans BoondManager avec filtres par société et projet.
9
+
10
+ Args:
11
+ - keywords (string, optional): Termes de recherche
12
+ - companyId, projectId (string, optional): Filtrer par entité liée
13
+ - page, pageSize: Pagination
14
+
15
+ Returns: Liste des bons de commande correspondants.`,
16
+ inputSchema: OrderSearchSchema,
17
+ annotations: {
18
+ readOnlyHint: true,
19
+ destructiveHint: false,
20
+ idempotentHint: true,
21
+ openWorldHint: true,
22
+ },
23
+ }, async (params) => {
24
+ const query = buildSearchQuery(params);
25
+ const response = await apiRequest("/orders", "GET", undefined, query);
26
+ return {
27
+ content: [{ type: "text", text: formatListResponse(response, "bon de commande") }],
28
+ };
29
+ });
30
+ // Get order details
31
+ server.registerTool("boond_orders_get", {
32
+ title: "Détails d'un bon de commande",
33
+ description: `Récupère les informations détaillées d'un bon de commande par son ID.`,
34
+ inputSchema: IdSchema,
35
+ annotations: {
36
+ readOnlyHint: true,
37
+ destructiveHint: false,
38
+ idempotentHint: true,
39
+ openWorldHint: false,
40
+ },
41
+ }, async (params) => {
42
+ const response = await apiRequest(`/orders/${params.id}`);
43
+ return {
44
+ content: [{ type: "text", text: formatDetailResponse(response) }],
45
+ };
46
+ });
47
+ // Create order
48
+ server.registerTool("boond_orders_create", {
49
+ title: "Créer un bon de commande",
50
+ description: `Crée un nouveau bon de commande dans BoondManager, optionnellement lié à une société et un projet.`,
51
+ inputSchema: OrderCreateSchema,
52
+ annotations: {
53
+ readOnlyHint: false,
54
+ destructiveHint: false,
55
+ idempotentHint: false,
56
+ openWorldHint: false,
57
+ },
58
+ }, async (params) => {
59
+ const { companyId, projectId, ...attrs } = params;
60
+ const body = buildJsonApiBody("order", attrs);
61
+ const relationships = {};
62
+ if (companyId)
63
+ relationships.company = { data: { id: companyId, type: "company" } };
64
+ if (projectId)
65
+ relationships.project = { data: { id: projectId, type: "project" } };
66
+ if (Object.keys(relationships).length > 0) {
67
+ body.data.relationships = relationships;
68
+ }
69
+ const response = await apiRequest("/orders", "POST", body);
70
+ const entity = Array.isArray(response.data) ? response.data[0] : response.data;
71
+ return {
72
+ content: [{
73
+ type: "text",
74
+ text: `✅ Bon de commande créé avec succès.\nID: ${entity?.id}\n\n${formatDetailResponse(response)}`,
75
+ }],
76
+ };
77
+ });
78
+ // Update order
79
+ server.registerTool("boond_orders_update", {
80
+ title: "Modifier un bon de commande",
81
+ description: `Met à jour un bon de commande existant. Seuls les champs fournis sont modifiés.`,
82
+ inputSchema: OrderUpdateSchema,
83
+ annotations: {
84
+ readOnlyHint: false,
85
+ destructiveHint: false,
86
+ idempotentHint: true,
87
+ openWorldHint: false,
88
+ },
89
+ }, async (params) => {
90
+ const { id, ...attrs } = params;
91
+ const body = buildJsonApiBody("order", attrs, id);
92
+ const response = await apiRequest(`/orders/${id}`, "PATCH", body);
93
+ return {
94
+ content: [{
95
+ type: "text",
96
+ text: `✅ Bon de commande #${id} mis à jour.\n\n${formatDetailResponse(response)}`,
97
+ }],
98
+ };
99
+ });
100
+ // Delete order
101
+ server.registerTool("boond_orders_delete", {
102
+ title: "Supprimer un bon de commande",
103
+ description: `Supprime un bon de commande de BoondManager. ⚠️ Action irréversible.`,
104
+ inputSchema: IdSchema,
105
+ annotations: {
106
+ readOnlyHint: false,
107
+ destructiveHint: true,
108
+ idempotentHint: false,
109
+ openWorldHint: false,
110
+ },
111
+ }, async (params) => {
112
+ await apiRequest(`/orders/${params.id}`, "DELETE");
113
+ return {
114
+ content: [{ type: "text", text: `🗑️ Bon de commande #${params.id} supprimé.` }],
115
+ };
116
+ });
117
+ }
118
+ //# sourceMappingURL=orders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPaymentTools(server: McpServer): void;
3
+ //# sourceMappingURL=payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/tools/payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqD5D"}
@@ -0,0 +1,48 @@
1
+ import { PaymentSearchSchema, IdSchema } from "../schemas/index.js";
2
+ import { apiRequest, buildSearchQuery, formatListResponse, formatDetailResponse } from "../services/boond-client.js";
3
+ export function registerPaymentTools(server) {
4
+ // Search payments
5
+ server.registerTool("boond_payments_search", {
6
+ title: "Rechercher des paiements",
7
+ description: `Recherche des paiements / règlements dans BoondManager avec filtres par facture, société et période.
8
+
9
+ Args:
10
+ - keywords (string, optional): Termes de recherche
11
+ - invoiceId, companyId (string, optional): Filtrer par entité liée
12
+ - startDate, endDate (string, optional): Période (YYYY-MM-DD)
13
+ - page, pageSize: Pagination
14
+
15
+ Returns: Liste des paiements correspondants.`,
16
+ inputSchema: PaymentSearchSchema,
17
+ annotations: {
18
+ readOnlyHint: true,
19
+ destructiveHint: false,
20
+ idempotentHint: true,
21
+ openWorldHint: true,
22
+ },
23
+ }, async (params) => {
24
+ const query = buildSearchQuery(params);
25
+ const response = await apiRequest("/payments", "GET", undefined, query);
26
+ return {
27
+ content: [{ type: "text", text: formatListResponse(response, "paiement") }],
28
+ };
29
+ });
30
+ // Get payment details
31
+ server.registerTool("boond_payments_get", {
32
+ title: "Détails d'un paiement",
33
+ description: `Récupère les informations détaillées d'un paiement / règlement par son ID.`,
34
+ inputSchema: IdSchema,
35
+ annotations: {
36
+ readOnlyHint: true,
37
+ destructiveHint: false,
38
+ idempotentHint: true,
39
+ openWorldHint: false,
40
+ },
41
+ }, async (params) => {
42
+ const response = await apiRequest(`/payments/${params.id}`);
43
+ return {
44
+ content: [{ type: "text", text: formatDetailResponse(response) }],
45
+ };
46
+ });
47
+ }
48
+ //# sourceMappingURL=payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/tools/payments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAErH,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE;;;;;;;;6CAQ0B;QACvC,WAAW,EAAE,mBAAmB;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,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,UAAU,CAAC,EAAE,CAAC;SACrF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,aAAa,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPositioningTools(server: McpServer): void;
3
+ //# sourceMappingURL=positionings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positionings.d.ts","sourceRoot":"","sources":["../../src/tools/positionings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8GhE"}
@@ -0,0 +1,100 @@
1
+ import { PositioningSearchSchema, PositioningCreateSchema, IdSchema } from "../schemas/index.js";
2
+ import { apiRequest, buildSearchQuery, formatListResponse, formatDetailResponse } from "../services/boond-client.js";
3
+ import { buildJsonApiBody } from "./crud-factory.js";
4
+ export function registerPositioningTools(server) {
5
+ // Search positionings
6
+ server.registerTool("boond_positionings_search", {
7
+ title: "Rechercher des positionnements",
8
+ description: `Recherche des positionnements (placement de candidats/ressources sur des projets/opportunités) dans BoondManager.
9
+
10
+ Args:
11
+ - keywords (string, optional): Termes de recherche
12
+ - candidateId, resourceId, projectId, opportunityId (string, optional): Filtrer par entité liée
13
+ - page, pageSize: Pagination
14
+
15
+ Returns: Liste des positionnements correspondants.`,
16
+ inputSchema: PositioningSearchSchema,
17
+ annotations: {
18
+ readOnlyHint: true,
19
+ destructiveHint: false,
20
+ idempotentHint: true,
21
+ openWorldHint: true,
22
+ },
23
+ }, async (params) => {
24
+ const query = buildSearchQuery(params);
25
+ const response = await apiRequest("/positionings", "GET", undefined, query);
26
+ return {
27
+ content: [{ type: "text", text: formatListResponse(response, "positionnement") }],
28
+ };
29
+ });
30
+ // Get positioning details
31
+ server.registerTool("boond_positionings_get", {
32
+ title: "Détails d'un positionnement",
33
+ description: `Récupère les informations détaillées d'un positionnement par son ID.`,
34
+ inputSchema: IdSchema,
35
+ annotations: {
36
+ readOnlyHint: true,
37
+ destructiveHint: false,
38
+ idempotentHint: true,
39
+ openWorldHint: false,
40
+ },
41
+ }, async (params) => {
42
+ const response = await apiRequest(`/positionings/${params.id}`);
43
+ return {
44
+ content: [{ type: "text", text: formatDetailResponse(response) }],
45
+ };
46
+ });
47
+ // Create positioning
48
+ server.registerTool("boond_positionings_create", {
49
+ title: "Créer un positionnement",
50
+ description: `Crée un nouveau positionnement pour placer un candidat ou une ressource sur un projet ou une opportunité.`,
51
+ inputSchema: PositioningCreateSchema,
52
+ annotations: {
53
+ readOnlyHint: false,
54
+ destructiveHint: false,
55
+ idempotentHint: false,
56
+ openWorldHint: false,
57
+ },
58
+ }, async (params) => {
59
+ const { candidateId, resourceId, projectId, opportunityId, ...attrs } = params;
60
+ const body = buildJsonApiBody("positioning", attrs);
61
+ const relationships = {};
62
+ if (candidateId)
63
+ relationships.candidate = { data: { id: candidateId, type: "candidate" } };
64
+ if (resourceId)
65
+ relationships.resource = { data: { id: resourceId, type: "resource" } };
66
+ if (projectId)
67
+ relationships.project = { data: { id: projectId, type: "project" } };
68
+ if (opportunityId)
69
+ relationships.opportunity = { data: { id: opportunityId, type: "opportunity" } };
70
+ if (Object.keys(relationships).length > 0) {
71
+ body.data.relationships = relationships;
72
+ }
73
+ const response = await apiRequest("/positionings", "POST", body);
74
+ const entity = Array.isArray(response.data) ? response.data[0] : response.data;
75
+ return {
76
+ content: [{
77
+ type: "text",
78
+ text: `✅ Positionnement créé avec succès.\nID: ${entity?.id}\n\n${formatDetailResponse(response)}`,
79
+ }],
80
+ };
81
+ });
82
+ // Delete positioning
83
+ server.registerTool("boond_positionings_delete", {
84
+ title: "Supprimer un positionnement",
85
+ description: `Supprime un positionnement de BoondManager. ⚠️ Action irréversible.`,
86
+ inputSchema: IdSchema,
87
+ annotations: {
88
+ readOnlyHint: false,
89
+ destructiveHint: true,
90
+ idempotentHint: false,
91
+ openWorldHint: false,
92
+ },
93
+ }, async (params) => {
94
+ await apiRequest(`/positionings/${params.id}`, "DELETE");
95
+ return {
96
+ content: [{ type: "text", text: `🗑️ Positionnement #${params.id} supprimé.` }],
97
+ };
98
+ });
99
+ }
100
+ //# sourceMappingURL=positionings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positionings.js","sourceRoot":"","sources":["../../src/tools/positionings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerProductTools(server: McpServer): void;
3
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../src/tools/products.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAe5D"}
@@ -0,0 +1,22 @@
1
+ import { ProductCreateSchema, ProductUpdateSchema } from "../schemas/index.js";
2
+ import { registerSearchTool, registerGetTool, registerCreateTool, registerUpdateTool, registerDeleteTool, buildJsonApiBody, } from "./crud-factory.js";
3
+ const OPTS = {
4
+ entityName: "produit",
5
+ entityNamePlural: "produits",
6
+ apiPath: "/products",
7
+ prefix: "boond_products",
8
+ };
9
+ export function registerProductTools(server) {
10
+ registerSearchTool(server, OPTS);
11
+ registerGetTool(server, OPTS);
12
+ registerCreateTool(server, OPTS, ProductCreateSchema, (params) => {
13
+ const { ...attrs } = params;
14
+ return buildJsonApiBody("product", attrs);
15
+ });
16
+ registerUpdateTool(server, OPTS, ProductUpdateSchema, (params) => {
17
+ const { id, ...attrs } = params;
18
+ return buildJsonApiBody("product", attrs, id);
19
+ });
20
+ registerDeleteTool(server, OPTS);
21
+ }
22
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/tools/products.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,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,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE9B,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/D,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAC5B,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/D,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAChC,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAY,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerProjectTools(server: McpServer): void;
3
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiFzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2C5D"}
@@ -0,0 +1,101 @@
1
+ import { ProjectCreateSchema, ProjectUpdateSchema, IdSchema } from "../schemas/index.js";
2
+ import { registerSearchTool, registerGetTool, registerCreateTool, registerUpdateTool, registerDeleteTool, buildJsonApiBody, } from "./crud-factory.js";
3
+ import { apiRequest, formatDetailResponse } from "../services/boond-client.js";
4
+ const OPTS = {
5
+ entityName: "projet",
6
+ entityNamePlural: "projets",
7
+ apiPath: "/projects",
8
+ prefix: "boond_projects",
9
+ };
10
+ const TAB_TOOL_ANNOTATIONS = {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: false,
15
+ };
16
+ const PROJECT_TABS = [
17
+ {
18
+ name: "information",
19
+ tab: "information",
20
+ title: "Informations générales d'un projet",
21
+ description: `Récupère les informations générales d'un projet (client, dates, état, description, responsable...).
22
+
23
+ Args:
24
+ - id (string): ID du projet
25
+
26
+ Returns: Données générales du projet.`,
27
+ },
28
+ {
29
+ name: "planning",
30
+ tab: "planning",
31
+ title: "Planning d'un projet",
32
+ description: `Récupère le planning d'un projet (jalons, phases, dates prévisionnelles et réelles...).
33
+
34
+ Args:
35
+ - id (string): ID du projet
36
+
37
+ Returns: Données de planning du projet.`,
38
+ },
39
+ {
40
+ name: "actions",
41
+ tab: "actions",
42
+ title: "Actions liées à un projet",
43
+ description: `Récupère les actions (appels, emails, RDV, notes) associées à un projet.
44
+
45
+ Args:
46
+ - id (string): ID du projet
47
+
48
+ Returns: Liste des actions liées au projet.`,
49
+ },
50
+ {
51
+ name: "documents",
52
+ tab: "documents",
53
+ title: "Documents d'un projet",
54
+ description: `Récupère les documents attachés à un projet (contrats, avenants, spécifications, livrables...).
55
+
56
+ Args:
57
+ - id (string): ID du projet
58
+
59
+ Returns: Liste des documents du projet.`,
60
+ },
61
+ ];
62
+ export function registerProjectTools(server) {
63
+ registerSearchTool(server, OPTS);
64
+ registerGetTool(server, OPTS);
65
+ registerCreateTool(server, OPTS, ProjectCreateSchema, (params) => {
66
+ const { companyId, contactId, opportunityId, ...attrs } = params;
67
+ const body = buildJsonApiBody("project", attrs);
68
+ const relationships = {};
69
+ if (companyId)
70
+ relationships.company = { data: { id: companyId, type: "company" } };
71
+ if (contactId)
72
+ relationships.contact = { data: { id: contactId, type: "contact" } };
73
+ if (opportunityId)
74
+ relationships.opportunity = { data: { id: opportunityId, type: "opportunity" } };
75
+ if (Object.keys(relationships).length > 0) {
76
+ body.data.relationships = relationships;
77
+ }
78
+ return body;
79
+ });
80
+ registerUpdateTool(server, OPTS, ProjectUpdateSchema, (params) => {
81
+ const { id, ...attrs } = params;
82
+ return buildJsonApiBody("project", attrs, id);
83
+ });
84
+ registerDeleteTool(server, OPTS);
85
+ // Register one tool per project tab
86
+ for (const tab of PROJECT_TABS) {
87
+ server.registerTool(`boond_projects_${tab.name}`, {
88
+ title: tab.title,
89
+ description: tab.description,
90
+ inputSchema: IdSchema,
91
+ annotations: TAB_TOOL_ANNOTATIONS,
92
+ }, async (params) => {
93
+ const response = await apiRequest(`/projects/${params.id}/${tab.tab}`);
94
+ const text = formatDetailResponse(response);
95
+ return {
96
+ content: [{ type: "text", text }],
97
+ };
98
+ });
99
+ }
100
+ }
101
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerResourceTools(server: McpServer): void;
3
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/tools/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmC7D"}