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 +108 -5
- package/dist/index.js +27 -45
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +57 -0
- package/dist/server.js.map +1 -0
- package/dist/transports/http.d.ts +20 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +152 -0
- package/dist/transports/http.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +1 -1
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 (
|
|
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
|
|
376
|
-
-
|
|
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
|
|
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
|
-
- **
|
|
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 {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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(
|
|
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":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -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.
|
|
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",
|