boondmanager-mcp-server 1.3.8 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -268,6 +268,105 @@ export BOOND_BASE_URL="https://votre-instance.boondmanager.com/api"
268
268
 
269
269
  Par defaut, l'URL est `https://ui.boondmanager.com/api`.
270
270
 
271
+ ## Transports
272
+
273
+ Le serveur supporte deux transports MCP, selectionnables via la variable d'environnement `MCP_TRANSPORT`.
274
+
275
+ | Transport | Valeur | Cas d'usage |
276
+ |-----------|--------|-------------|
277
+ | **stdio** (defaut) | `stdio` ou non defini | Claude Desktop, Claude Code, integration locale |
278
+ | **Streamable HTTP** | `http` (alias : `streamable-http`) | Gateway MCP, deploiement distant, conteneurs |
279
+
280
+ ### Streamable HTTP (pour les gateways MCP)
281
+
282
+ Depuis la v1.4.0, le serveur peut etre expose en HTTP (specification MCP Streamable HTTP 2025-03-26) afin d'etre branche derriere une passerelle MCP ou deploye comme service.
283
+
284
+ ```bash
285
+ export MCP_TRANSPORT=http
286
+ export MCP_HTTP_HOST=0.0.0.0 # defaut: 127.0.0.1
287
+ export MCP_HTTP_PORT=3000 # defaut: 3000
288
+ export MCP_HTTP_PATH=/mcp # defaut: /mcp
289
+ export MCP_HTTP_BEARER_TOKEN=xxx # optionnel: protege l'endpoint
290
+ export BOOND_API_TOKEN=... # (credentials BoondManager, comme en stdio)
291
+
292
+ npx boondmanager-mcp-server
293
+ # 🚀 BoondManager MCP Server running (streamable HTTP transport)
294
+ # 📡 Endpoint: http://0.0.0.0:3000/mcp
295
+ # 🔑 Mode: stateless
296
+ ```
297
+
298
+ **Variables d'environnement HTTP**
299
+
300
+ | Variable | Defaut | Description |
301
+ |----------|--------|-------------|
302
+ | `MCP_TRANSPORT` | `stdio` | `http` pour activer le transport HTTP |
303
+ | `MCP_HTTP_HOST` | `127.0.0.1` | Interface d'ecoute (`0.0.0.0` pour exposer) |
304
+ | `MCP_HTTP_PORT` | `3000` | Port TCP |
305
+ | `MCP_HTTP_PATH` | `/mcp` | Chemin HTTP de l'endpoint MCP |
306
+ | `MCP_HTTP_STATEFUL` | `false` | `true` pour activer le mode stateful (session `Mcp-Session-Id`) |
307
+ | `MCP_HTTP_BEARER_TOKEN` | _(vide)_ | Si defini, le serveur exige `Authorization: Bearer <token>` |
308
+ | `MCP_HTTP_JSON_RESPONSE` | `false` | `true` pour forcer des reponses JSON (sans SSE) |
309
+
310
+ **Stateless (defaut)** : chaque requete HTTP POST est independante, idealement adapte a un gateway qui multiplexe plusieurs serveurs MCP. Aucune session n'est conservee cote serveur.
311
+
312
+ **Stateful** : le serveur genere un `Mcp-Session-Id` a l'initialisation que le client doit renvoyer dans chaque requete suivante. Utile pour les clients MCP natifs qui beneficient du streaming SSE et des notifications serveur.
313
+
314
+ #### Exemple : verifier l'endpoint
315
+
316
+ ```bash
317
+ curl -s -X POST http://localhost:3000/mcp \
318
+ -H 'Content-Type: application/json' \
319
+ -H 'Accept: application/json, text/event-stream' \
320
+ -d '{
321
+ "jsonrpc": "2.0",
322
+ "id": 1,
323
+ "method": "initialize",
324
+ "params": {
325
+ "protocolVersion": "2025-06-18",
326
+ "capabilities": {},
327
+ "clientInfo": { "name": "curl", "version": "1.0" }
328
+ }
329
+ }'
330
+ ```
331
+
332
+ #### Exemple : Claude Code via HTTP
333
+
334
+ ```bash
335
+ claude mcp add --transport http \
336
+ --header "Authorization: Bearer votre_token_local" \
337
+ boondmanager https://mcp.votre-domaine.com/mcp
338
+ ```
339
+
340
+ #### Exemple : configuration `.mcp.json` HTTP
341
+
342
+ ```json
343
+ {
344
+ "mcpServers": {
345
+ "boondmanager": {
346
+ "type": "http",
347
+ "url": "https://mcp.votre-domaine.com/mcp",
348
+ "headers": {
349
+ "Authorization": "Bearer ${MCP_HTTP_BEARER_TOKEN}"
350
+ }
351
+ }
352
+ }
353
+ }
354
+ ```
355
+
356
+ #### Exemple : Docker
357
+
358
+ ```bash
359
+ docker run --rm -p 3000:3000 \
360
+ -e MCP_TRANSPORT=http \
361
+ -e MCP_HTTP_HOST=0.0.0.0 \
362
+ -e MCP_HTTP_BEARER_TOKEN=$(openssl rand -hex 32) \
363
+ -e BOOND_API_TOKEN=$BOOND_API_TOKEN \
364
+ node:20-alpine \
365
+ npx -y boondmanager-mcp-server
366
+ ```
367
+
368
+ > **Securite** : en HTTP, les credentials BoondManager restent cote serveur (variables d'environnement du conteneur). Seul le token MCP (`MCP_HTTP_BEARER_TOKEN`) circule entre le client et le serveur. Derriere un reverse proxy, ajoutez TLS (HTTPS) et limitez l'acces reseau au gateway.
369
+
271
370
  ## Exemples d'utilisation
272
371
 
273
372
  Une fois configure, vous pouvez demander a Claude :
@@ -315,9 +414,12 @@ Une fois configure, vous pouvez demander a Claude :
315
414
  ```
316
415
  boondmanager-mcp-server/
317
416
  ├── src/
318
- │ ├── index.ts # Point d'entree MCP (stdio)
417
+ │ ├── index.ts # Point d'entree MCP (selection du transport)
418
+ │ ├── server.ts # Factory createMcpServer() + liste des domaines
319
419
  │ ├── constants.ts # Configuration, API paths, onglets
320
420
  │ ├── types.ts # Types TypeScript (JSON:API)
421
+ │ ├── transports/
422
+ │ │ └── http.ts # Transport Streamable HTTP (gateway/remote)
321
423
  │ ├── services/
322
424
  │ │ └── boond-client.ts # Client HTTP API BoondManager
323
425
  │ ├── schemas/
@@ -372,11 +474,12 @@ boondmanager-mcp-server/
372
474
 
373
475
  ## Securite
374
476
 
375
- - Les credentials ne transitent jamais via le reseau MCP -- ils sont configures en variables d'environnement locales
376
- - Le serveur tourne en local (stdio), pas de port reseau expose
477
+ - Les credentials BoondManager (JWT ou BasicAuth) ne transitent jamais via le protocole MCP -- ils sont configures en variables d'environnement cote serveur uniquement
478
+ - En mode **stdio**, le serveur tourne en local, aucun port reseau n'est expose
479
+ - En mode **streamable HTTP**, protegez l'endpoint avec `MCP_HTTP_BEARER_TOKEN` + TLS (HTTPS via reverse proxy) et restreignez l'acces reseau a votre gateway
377
480
  - Compatible avec les exigences ISO 27001
378
481
  - L'API BoondManager est hebergee en France et conforme RGPD
379
- - Authentification par BasicAuth (base64) ou JWT Bearer token
482
+ - Authentification BoondManager : JWT (recommande), BasicAuth, ou JWT construit automatiquement a partir des composants
380
483
 
381
484
  ## Developpement
382
485
 
@@ -407,7 +510,7 @@ npm run typecheck
407
510
  - **Validation** : Zod 4
408
511
  - **Tests** : Vitest 4 + couverture V8
409
512
  - **Lint** : ESLint 10 + typescript-eslint
410
- - **Transport** : stdio (pas de port reseau)
513
+ - **Transports** : stdio (defaut) + Streamable HTTP (MCP 2025-03-26)
411
514
 
412
515
  ## Ressources
413
516
 
package/dist/index.js CHANGED
@@ -1,50 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
3
  import { initClient } from "./services/boond-client.js";
5
- import { registerCandidateTools, registerResourceTools, registerContactTools, registerCompanyTools, registerOpportunityTools, registerActionTools, registerTimesheetTools, registerProjectTools, registerInvoiceTools, registerOrderTools, registerDeliveryTools, registerAbsenceTools, registerExpenseTools, registerProductTools, registerPositioningTools, registerPaymentTools, registerAdvantageTools, registerApplicationTools, registerContractTools, registerPurchaseTools, registerProviderInvoiceTools, registerAccountTools, registerAgencyTools, registerBusinessUnitTools, registerRoleTools, registerLogTools, registerNotificationTools, registerThreadTools, registerTodolistTools, registerFlagTools, registerCalendarTools, registerWebhookTools, registerValidationTools, registerPoleTools, registerReportingTools, registerPlanningAbsenceTools, } from "./tools/index.js";
6
- const server = new McpServer({
7
- name: "boondmanager-mcp-server",
8
- version: "1.0.0",
9
- });
10
- // Register all domain tools
11
- registerCandidateTools(server);
12
- registerResourceTools(server);
13
- registerContactTools(server);
14
- registerCompanyTools(server);
15
- registerOpportunityTools(server);
16
- registerActionTools(server);
17
- registerTimesheetTools(server);
18
- registerProjectTools(server);
19
- registerInvoiceTools(server);
20
- registerOrderTools(server);
21
- registerDeliveryTools(server);
22
- registerAbsenceTools(server);
23
- registerExpenseTools(server);
24
- registerProductTools(server);
25
- registerPositioningTools(server);
26
- registerPaymentTools(server);
27
- registerAdvantageTools(server);
28
- registerApplicationTools(server);
29
- registerContractTools(server);
30
- registerPurchaseTools(server);
31
- registerProviderInvoiceTools(server);
32
- registerAccountTools(server);
33
- registerAgencyTools(server);
34
- registerBusinessUnitTools(server);
35
- registerRoleTools(server);
36
- registerLogTools(server);
37
- registerNotificationTools(server);
38
- registerThreadTools(server);
39
- registerTodolistTools(server);
40
- registerFlagTools(server);
41
- registerCalendarTools(server);
42
- registerWebhookTools(server);
43
- registerValidationTools(server);
44
- registerPoleTools(server);
45
- registerReportingTools(server);
46
- registerPlanningAbsenceTools(server);
47
- // Initialize and run
4
+ import { createMcpServer, REGISTERED_DOMAINS } from "./server.js";
5
+ import { resolveHttpOptions, startHttpTransport } from "./transports/http.js";
6
+ function resolveTransport() {
7
+ const raw = (process.env["MCP_TRANSPORT"] ?? "").toLowerCase().trim();
8
+ if (raw === "http" || raw === "streamable-http" || raw === "streamablehttp")
9
+ return "http";
10
+ return "stdio";
11
+ }
48
12
  async function main() {
49
13
  try {
50
14
  initClient();
@@ -53,10 +17,28 @@ async function main() {
53
17
  console.error("⚠️ Configuration warning:", error.message);
54
18
  console.error("The server will start but API calls will fail without proper credentials.");
55
19
  }
20
+ const kind = resolveTransport();
21
+ if (kind === "http") {
22
+ const options = resolveHttpOptions();
23
+ const handle = await startHttpTransport(createMcpServer, options);
24
+ console.error("🚀 BoondManager MCP Server running (streamable HTTP transport)");
25
+ console.error(`📡 Endpoint: http://${handle.address.host}:${handle.address.port}${handle.address.path}`);
26
+ console.error(`🔑 Mode: ${options.stateless ? "stateless" : "stateful"}${options.bearerToken ? " (bearer auth)" : ""}`);
27
+ console.error(`📦 Domains: ${REGISTERED_DOMAINS.join(", ")}`);
28
+ const shutdown = async (signal) => {
29
+ console.error(`\n🛑 Received ${signal}, shutting down...`);
30
+ await handle.close();
31
+ process.exit(0);
32
+ };
33
+ process.on("SIGINT", () => void shutdown("SIGINT"));
34
+ process.on("SIGTERM", () => void shutdown("SIGTERM"));
35
+ return;
36
+ }
37
+ const server = createMcpServer();
56
38
  const transport = new StdioServerTransport();
57
39
  await server.connect(transport);
58
40
  console.error("🚀 BoondManager MCP Server running (stdio transport)");
59
- console.error("📦 Domains: candidates, resources, contacts, companies, opportunities, actions, timesheets, projects, invoices, orders, deliveries, absences, expenses, products, positionings, payments, advantages, application, contracts, purchases, provider-invoices, accounts, agencies, business-units, roles, logs, notifications, threads, todolists, flags, calendars, webhooks, validations, poles, reporting, planning-absences");
41
+ console.error(`📦 Domains: ${REGISTERED_DOMAINS.join(", ")}`);
60
42
  }
61
43
  main().catch((error) => {
62
44
  console.error("Fatal error:", error);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare const SERVER_NAME = "boondmanager-mcp-server";
3
+ export declare const SERVER_VERSION = "1.0.0";
4
+ export declare const REGISTERED_DOMAINS: readonly ["candidates", "resources", "contacts", "companies", "opportunities", "actions", "timesheets", "projects", "invoices", "orders", "deliveries", "absences", "expenses", "products", "positionings", "payments", "advantages", "application", "contracts", "purchases", "provider-invoices", "accounts", "agencies", "business-units", "roles", "logs", "notifications", "threads", "todolists", "flags", "calendars", "webhooks", "validations", "poles", "reporting", "planning-absences"];
5
+ export declare function createMcpServer(): McpServer;
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwCpE,eAAO,MAAM,WAAW,4BAA4B,CAAC;AACrD,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,kBAAkB,qeAQrB,CAAC;AAEX,wBAAgB,eAAe,IAAI,SAAS,CA4C3C"}
package/dist/server.js ADDED
@@ -0,0 +1,57 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerCandidateTools, registerResourceTools, registerContactTools, registerCompanyTools, registerOpportunityTools, registerActionTools, registerTimesheetTools, registerProjectTools, registerInvoiceTools, registerOrderTools, registerDeliveryTools, registerAbsenceTools, registerExpenseTools, registerProductTools, registerPositioningTools, registerPaymentTools, registerAdvantageTools, registerApplicationTools, registerContractTools, registerPurchaseTools, registerProviderInvoiceTools, registerAccountTools, registerAgencyTools, registerBusinessUnitTools, registerRoleTools, registerLogTools, registerNotificationTools, registerThreadTools, registerTodolistTools, registerFlagTools, registerCalendarTools, registerWebhookTools, registerValidationTools, registerPoleTools, registerReportingTools, registerPlanningAbsenceTools, } from "./tools/index.js";
3
+ export const SERVER_NAME = "boondmanager-mcp-server";
4
+ export const SERVER_VERSION = "1.0.0";
5
+ export const REGISTERED_DOMAINS = [
6
+ "candidates", "resources", "contacts", "companies", "opportunities", "actions",
7
+ "timesheets", "projects", "invoices", "orders", "deliveries", "absences",
8
+ "expenses", "products", "positionings", "payments", "advantages", "application",
9
+ "contracts", "purchases", "provider-invoices", "accounts", "agencies",
10
+ "business-units", "roles", "logs", "notifications", "threads", "todolists",
11
+ "flags", "calendars", "webhooks", "validations", "poles", "reporting",
12
+ "planning-absences",
13
+ ];
14
+ export function createMcpServer() {
15
+ const server = new McpServer({
16
+ name: SERVER_NAME,
17
+ version: SERVER_VERSION,
18
+ });
19
+ registerCandidateTools(server);
20
+ registerResourceTools(server);
21
+ registerContactTools(server);
22
+ registerCompanyTools(server);
23
+ registerOpportunityTools(server);
24
+ registerActionTools(server);
25
+ registerTimesheetTools(server);
26
+ registerProjectTools(server);
27
+ registerInvoiceTools(server);
28
+ registerOrderTools(server);
29
+ registerDeliveryTools(server);
30
+ registerAbsenceTools(server);
31
+ registerExpenseTools(server);
32
+ registerProductTools(server);
33
+ registerPositioningTools(server);
34
+ registerPaymentTools(server);
35
+ registerAdvantageTools(server);
36
+ registerApplicationTools(server);
37
+ registerContractTools(server);
38
+ registerPurchaseTools(server);
39
+ registerProviderInvoiceTools(server);
40
+ registerAccountTools(server);
41
+ registerAgencyTools(server);
42
+ registerBusinessUnitTools(server);
43
+ registerRoleTools(server);
44
+ registerLogTools(server);
45
+ registerNotificationTools(server);
46
+ registerThreadTools(server);
47
+ registerTodolistTools(server);
48
+ registerFlagTools(server);
49
+ registerCalendarTools(server);
50
+ registerWebhookTools(server);
51
+ registerValidationTools(server);
52
+ registerPoleTools(server);
53
+ registerReportingTools(server);
54
+ registerPlanningAbsenceTools(server);
55
+ return server;
56
+ }
57
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export interface HttpTransportOptions {
3
+ host: string;
4
+ port: number;
5
+ path: string;
6
+ stateless: boolean;
7
+ bearerToken?: string;
8
+ enableJsonResponse: boolean;
9
+ }
10
+ export interface HttpServerHandle {
11
+ close: () => Promise<void>;
12
+ address: {
13
+ host: string;
14
+ port: number;
15
+ path: string;
16
+ };
17
+ }
18
+ export declare function resolveHttpOptions(): HttpTransportOptions;
19
+ export declare function startHttpTransport(createServerFactory: () => McpServer, options: HttpTransportOptions): Promise<HttpServerHandle>;
20
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAQD,wBAAgB,kBAAkB,IAAI,oBAAoB,CAkBzD;AA4BD,wBAAsB,kBAAkB,CACtC,mBAAmB,EAAE,MAAM,SAAS,EACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CA4G3B"}
@@ -0,0 +1,152 @@
1
+ import { createServer } from "node:http";
2
+ import { randomUUID } from "node:crypto";
3
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
+ function readEnv(key) {
6
+ const v = process.env[key];
7
+ if (!v || v.startsWith("${"))
8
+ return undefined;
9
+ return v;
10
+ }
11
+ export function resolveHttpOptions() {
12
+ const portRaw = readEnv("MCP_HTTP_PORT");
13
+ const port = portRaw ? Number.parseInt(portRaw, 10) : 3000;
14
+ if (!Number.isFinite(port) || port <= 0 || port > 65535) {
15
+ throw new Error(`Invalid MCP_HTTP_PORT: ${portRaw}`);
16
+ }
17
+ const stateless = (readEnv("MCP_HTTP_STATEFUL") ?? "false").toLowerCase() !== "true";
18
+ const enableJsonResponse = (readEnv("MCP_HTTP_JSON_RESPONSE") ?? "false").toLowerCase() === "true";
19
+ return {
20
+ host: readEnv("MCP_HTTP_HOST") ?? "127.0.0.1",
21
+ port,
22
+ path: readEnv("MCP_HTTP_PATH") ?? "/mcp",
23
+ stateless,
24
+ bearerToken: readEnv("MCP_HTTP_BEARER_TOKEN"),
25
+ enableJsonResponse,
26
+ };
27
+ }
28
+ async function readJsonBody(req) {
29
+ const chunks = [];
30
+ for await (const chunk of req) {
31
+ chunks.push(chunk);
32
+ }
33
+ const raw = Buffer.concat(chunks).toString("utf8");
34
+ if (!raw)
35
+ return undefined;
36
+ try {
37
+ return JSON.parse(raw);
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ function writeJsonRpcError(res, status, message) {
44
+ res.statusCode = status;
45
+ res.setHeader("Content-Type", "application/json");
46
+ res.end(JSON.stringify({
47
+ jsonrpc: "2.0",
48
+ error: { code: -32000, message },
49
+ id: null,
50
+ }));
51
+ }
52
+ export async function startHttpTransport(createServerFactory, options) {
53
+ const sessions = new Map();
54
+ const httpServer = createServer(async (req, res) => {
55
+ try {
56
+ const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
57
+ if (url.pathname !== options.path) {
58
+ res.statusCode = 404;
59
+ res.end("Not found");
60
+ return;
61
+ }
62
+ if (options.bearerToken) {
63
+ const auth = req.headers["authorization"];
64
+ if (auth !== `Bearer ${options.bearerToken}`) {
65
+ res.statusCode = 401;
66
+ res.setHeader("WWW-Authenticate", "Bearer");
67
+ res.end("Unauthorized");
68
+ return;
69
+ }
70
+ }
71
+ if (options.stateless) {
72
+ if (req.method !== "POST") {
73
+ writeJsonRpcError(res, 405, "Only POST is supported in stateless mode");
74
+ return;
75
+ }
76
+ const transport = new StreamableHTTPServerTransport({
77
+ sessionIdGenerator: undefined,
78
+ enableJsonResponse: options.enableJsonResponse,
79
+ });
80
+ const server = createServerFactory();
81
+ res.on("close", () => {
82
+ void transport.close();
83
+ void server.close();
84
+ });
85
+ await server.connect(transport);
86
+ await transport.handleRequest(req, res);
87
+ return;
88
+ }
89
+ // Stateful mode: route by Mcp-Session-Id header
90
+ const sessionIdHeader = req.headers["mcp-session-id"];
91
+ const sessionId = Array.isArray(sessionIdHeader) ? sessionIdHeader[0] : sessionIdHeader;
92
+ if (sessionId && sessions.has(sessionId)) {
93
+ await sessions.get(sessionId).handleRequest(req, res);
94
+ return;
95
+ }
96
+ if (req.method !== "POST") {
97
+ writeJsonRpcError(res, 400, "Missing or invalid session ID");
98
+ return;
99
+ }
100
+ // Parse body to detect initialization
101
+ const body = await readJsonBody(req);
102
+ if (!isInitializeRequest(body)) {
103
+ writeJsonRpcError(res, 400, "First request must be an MCP initialize message");
104
+ return;
105
+ }
106
+ const transport = new StreamableHTTPServerTransport({
107
+ sessionIdGenerator: () => randomUUID(),
108
+ enableJsonResponse: options.enableJsonResponse,
109
+ onsessioninitialized: (id) => {
110
+ sessions.set(id, transport);
111
+ },
112
+ onsessionclosed: (id) => {
113
+ sessions.delete(id);
114
+ },
115
+ });
116
+ transport.onclose = () => {
117
+ if (transport.sessionId)
118
+ sessions.delete(transport.sessionId);
119
+ };
120
+ const server = createServerFactory();
121
+ await server.connect(transport);
122
+ await transport.handleRequest(req, res, body);
123
+ }
124
+ catch (error) {
125
+ console.error("HTTP transport error:", error);
126
+ if (!res.headersSent) {
127
+ writeJsonRpcError(res, 500, "Internal server error");
128
+ }
129
+ else {
130
+ res.end();
131
+ }
132
+ }
133
+ });
134
+ await new Promise((resolve, reject) => {
135
+ httpServer.once("error", reject);
136
+ httpServer.listen(options.port, options.host, () => {
137
+ httpServer.removeListener("error", reject);
138
+ resolve();
139
+ });
140
+ });
141
+ return {
142
+ address: { host: options.host, port: options.port, path: options.path },
143
+ close: async () => {
144
+ await Promise.all(Array.from(sessions.values()).map((t) => t.close()));
145
+ sessions.clear();
146
+ await new Promise((resolve, reject) => {
147
+ httpServer.close((err) => (err ? reject(err) : resolve()));
148
+ });
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "boondmanager-mcp-server",
4
4
  "display_name": "BoondManager MCP Server",
5
- "version": "1.3.8",
5
+ "version": "1.4.0",
6
6
  "description": "MCP Server for BoondManager API - 158 tools across 36 domains for ERP/CRM data",
7
7
  "author": {
8
8
  "name": "Silamir",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boondmanager-mcp-server",
3
- "version": "1.3.8",
3
+ "version": "1.4.0",
4
4
  "description": "MCP Server for BoondManager API - Resources, Candidates & CRM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",