boondmanager-mcp-server 1.5.3 → 1.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 +105 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +282 -16
- package/dist/prompts/index.js.map +1 -1
- package/dist/schemas/index.js +13 -13
- package/dist/schemas/index.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +27 -1
- package/dist/server.js.map +1 -1
- package/dist/services/boond-client.d.ts +64 -0
- package/dist/services/boond-client.d.ts.map +1 -1
- package/dist/services/boond-client.js +235 -14
- package/dist/services/boond-client.js.map +1 -1
- package/dist/services/logger.d.ts +18 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +45 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/rate-limiter.d.ts +39 -0
- package/dist/services/rate-limiter.d.ts.map +1 -0
- package/dist/services/rate-limiter.js +74 -0
- package/dist/services/rate-limiter.js.map +1 -0
- package/dist/tools/provider-invoices.js +2 -2
- package/dist/tools/provider-invoices.js.map +1 -1
- package/dist/tools/purchases.js +2 -2
- package/dist/tools/purchases.js.map +1 -1
- package/dist/transports/http.d.ts +8 -0
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +79 -7
- package/dist/transports/http.js.map +1 -1
- package/manifest.json +3 -5
- package/package.json +11 -1
package/dist/transports/http.js
CHANGED
|
@@ -2,12 +2,26 @@ import { createServer } from "node:http";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
4
|
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { logger, generateCorrelationId } from "../services/logger.js";
|
|
6
|
+
// Defaults: a half-hour idle window matches typical MCP gateway behaviour, and
|
|
7
|
+
// a 5-minute sweep keeps memory bounded without hammering the event loop.
|
|
8
|
+
const DEFAULT_SESSION_TTL_MS = 30 * 60_000;
|
|
9
|
+
const DEFAULT_SESSION_SWEEP_INTERVAL_MS = 5 * 60_000;
|
|
5
10
|
function readEnv(key) {
|
|
6
11
|
const v = process.env[key];
|
|
7
12
|
if (!v || v.startsWith("${"))
|
|
8
13
|
return undefined;
|
|
9
14
|
return v;
|
|
10
15
|
}
|
|
16
|
+
function readPositiveInt(key, fallback) {
|
|
17
|
+
const raw = readEnv(key);
|
|
18
|
+
if (!raw)
|
|
19
|
+
return fallback;
|
|
20
|
+
const parsed = Number(raw);
|
|
21
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
22
|
+
return fallback;
|
|
23
|
+
return Math.floor(parsed);
|
|
24
|
+
}
|
|
11
25
|
export function resolveHttpOptions() {
|
|
12
26
|
const portRaw = readEnv("MCP_HTTP_PORT");
|
|
13
27
|
const port = portRaw ? Number.parseInt(portRaw, 10) : 3000;
|
|
@@ -23,6 +37,8 @@ export function resolveHttpOptions() {
|
|
|
23
37
|
stateless,
|
|
24
38
|
bearerToken: readEnv("MCP_HTTP_BEARER_TOKEN"),
|
|
25
39
|
enableJsonResponse,
|
|
40
|
+
sessionTtlMs: readPositiveInt("MCP_HTTP_SESSION_TTL_MS", DEFAULT_SESSION_TTL_MS),
|
|
41
|
+
sessionSweepIntervalMs: readPositiveInt("MCP_HTTP_SESSION_SWEEP_INTERVAL_MS", DEFAULT_SESSION_SWEEP_INTERVAL_MS),
|
|
26
42
|
};
|
|
27
43
|
}
|
|
28
44
|
async function readJsonBody(req) {
|
|
@@ -49,9 +65,44 @@ function writeJsonRpcError(res, status, message) {
|
|
|
49
65
|
id: null,
|
|
50
66
|
}));
|
|
51
67
|
}
|
|
68
|
+
async function destroySession(entry) {
|
|
69
|
+
// Close transport and server independently so a failure in one still lets
|
|
70
|
+
// the other release its resources. We swallow errors because the caller
|
|
71
|
+
// already lost interest in this session.
|
|
72
|
+
await Promise.allSettled([
|
|
73
|
+
Promise.resolve().then(() => entry.transport.close()),
|
|
74
|
+
Promise.resolve().then(() => entry.server.close()),
|
|
75
|
+
]);
|
|
76
|
+
}
|
|
52
77
|
export async function startHttpTransport(createServerFactory, options) {
|
|
53
78
|
const sessions = new Map();
|
|
79
|
+
const sessionTtlMs = options.sessionTtlMs ?? DEFAULT_SESSION_TTL_MS;
|
|
80
|
+
const sessionSweepIntervalMs = options.sessionSweepIntervalMs ?? DEFAULT_SESSION_SWEEP_INTERVAL_MS;
|
|
81
|
+
const sweepIdleSessions = async () => {
|
|
82
|
+
const cutoff = Date.now() - sessionTtlMs;
|
|
83
|
+
const expired = [];
|
|
84
|
+
for (const [id, entry] of sessions) {
|
|
85
|
+
if (entry.lastActivityAt < cutoff) {
|
|
86
|
+
expired.push([id, entry]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const [id] of expired)
|
|
90
|
+
sessions.delete(id);
|
|
91
|
+
await Promise.all(expired.map(([, entry]) => destroySession(entry)));
|
|
92
|
+
return expired.length;
|
|
93
|
+
};
|
|
94
|
+
// Periodic sweep — only meaningful in stateful mode. `unref()` lets the
|
|
95
|
+
// process exit naturally even when the timer is pending.
|
|
96
|
+
let sweepTimer;
|
|
97
|
+
if (!options.stateless) {
|
|
98
|
+
sweepTimer = setInterval(() => {
|
|
99
|
+
void sweepIdleSessions();
|
|
100
|
+
}, sessionSweepIntervalMs);
|
|
101
|
+
sweepTimer.unref?.();
|
|
102
|
+
}
|
|
54
103
|
const httpServer = createServer(async (req, res) => {
|
|
104
|
+
const corrId = generateCorrelationId();
|
|
105
|
+
const reqLogger = logger.child({ corrId, method: req.method, path: req.url });
|
|
55
106
|
try {
|
|
56
107
|
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
57
108
|
if (url.pathname !== options.path) {
|
|
@@ -90,7 +141,9 @@ export async function startHttpTransport(createServerFactory, options) {
|
|
|
90
141
|
const sessionIdHeader = req.headers["mcp-session-id"];
|
|
91
142
|
const sessionId = Array.isArray(sessionIdHeader) ? sessionIdHeader[0] : sessionIdHeader;
|
|
92
143
|
if (sessionId && sessions.has(sessionId)) {
|
|
93
|
-
|
|
144
|
+
const entry = sessions.get(sessionId);
|
|
145
|
+
entry.lastActivityAt = Date.now();
|
|
146
|
+
await entry.transport.handleRequest(req, res);
|
|
94
147
|
return;
|
|
95
148
|
}
|
|
96
149
|
if (req.method !== "POST") {
|
|
@@ -107,22 +160,36 @@ export async function startHttpTransport(createServerFactory, options) {
|
|
|
107
160
|
sessionIdGenerator: () => randomUUID(),
|
|
108
161
|
enableJsonResponse: options.enableJsonResponse,
|
|
109
162
|
onsessioninitialized: (id) => {
|
|
110
|
-
sessions.set(id, transport);
|
|
163
|
+
sessions.set(id, { transport, server, lastActivityAt: Date.now() });
|
|
164
|
+
reqLogger.info({ sessionId: id, sessionCount: sessions.size }, "MCP session initialized");
|
|
111
165
|
},
|
|
112
166
|
onsessionclosed: (id) => {
|
|
113
|
-
sessions.
|
|
167
|
+
const entry = sessions.get(id);
|
|
168
|
+
if (entry) {
|
|
169
|
+
sessions.delete(id);
|
|
170
|
+
void destroySession(entry);
|
|
171
|
+
reqLogger.info({ sessionId: id, sessionCount: sessions.size }, "MCP session closed");
|
|
172
|
+
}
|
|
114
173
|
},
|
|
115
174
|
});
|
|
116
175
|
transport.onclose = () => {
|
|
117
|
-
|
|
118
|
-
|
|
176
|
+
const id = transport.sessionId;
|
|
177
|
+
if (!id)
|
|
178
|
+
return;
|
|
179
|
+
const entry = sessions.get(id);
|
|
180
|
+
if (entry) {
|
|
181
|
+
sessions.delete(id);
|
|
182
|
+
// Server is closed by destroySession — but if the transport's own
|
|
183
|
+
// close path already disposed it, the second call is a no-op.
|
|
184
|
+
void entry.server.close().catch(() => undefined);
|
|
185
|
+
}
|
|
119
186
|
};
|
|
120
187
|
const server = createServerFactory();
|
|
121
188
|
await server.connect(transport);
|
|
122
189
|
await transport.handleRequest(req, res, body);
|
|
123
190
|
}
|
|
124
191
|
catch (error) {
|
|
125
|
-
|
|
192
|
+
reqLogger.error({ err: error }, "HTTP transport error");
|
|
126
193
|
if (!res.headersSent) {
|
|
127
194
|
writeJsonRpcError(res, 500, "Internal server error");
|
|
128
195
|
}
|
|
@@ -140,9 +207,14 @@ export async function startHttpTransport(createServerFactory, options) {
|
|
|
140
207
|
});
|
|
141
208
|
return {
|
|
142
209
|
address: { host: options.host, port: options.port, path: options.path },
|
|
210
|
+
sessionCount: () => sessions.size,
|
|
211
|
+
sweepIdleSessions,
|
|
143
212
|
close: async () => {
|
|
144
|
-
|
|
213
|
+
if (sweepTimer)
|
|
214
|
+
clearInterval(sweepTimer);
|
|
215
|
+
const entries = Array.from(sessions.values());
|
|
145
216
|
sessions.clear();
|
|
217
|
+
await Promise.all(entries.map((e) => destroySession(e)));
|
|
146
218
|
await new Promise((resolve, reject) => {
|
|
147
219
|
httpServer.close((err) => (err ? reject(err) : resolve()));
|
|
148
220
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmC,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "boondmanager-mcp-server",
|
|
4
4
|
"display_name": "BoondManager MCP Server",
|
|
5
|
-
"version": "1.
|
|
6
|
-
"description": "MCP Server for BoondManager API -
|
|
5
|
+
"version": "1.7.0",
|
|
6
|
+
"description": "MCP Server for BoondManager API - 156 tools, 11 prompts, 20 resources across 36 domains for ERP/CRM data",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Frédéric Auguste",
|
|
9
9
|
"url": "https://github.com/fauguste/boondmanager-mcp-server"
|
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
"homepage": "https://github.com/fauguste/boondmanager-mcp-server#readme",
|
|
16
16
|
"support": "https://github.com/fauguste/boondmanager-mcp-server/issues",
|
|
17
17
|
"license": "Apache-2.0",
|
|
18
|
-
"icons": [
|
|
19
|
-
{ "src": "icon.png", "size": "128x128" }
|
|
20
|
-
],
|
|
18
|
+
"icons": [{ "src": "icon.png", "size": "128x128" }],
|
|
21
19
|
"server": {
|
|
22
20
|
"type": "node",
|
|
23
21
|
"entry_point": "dist/index.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boondmanager-mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.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",
|
|
@@ -32,12 +32,17 @@
|
|
|
32
32
|
"dev": "tsc --watch",
|
|
33
33
|
"lint": "eslint src/",
|
|
34
34
|
"lint:fix": "eslint src/ --fix",
|
|
35
|
+
"format": "prettier --write \"src/**/*.{ts,js,json}\"",
|
|
36
|
+
"format:check": "prettier --check \"src/**/*.{ts,js,json}\"",
|
|
35
37
|
"test": "vitest run",
|
|
36
38
|
"test:watch": "vitest",
|
|
37
39
|
"test:coverage": "vitest run --coverage",
|
|
38
40
|
"typecheck": "tsc --noEmit",
|
|
39
41
|
"docs:tools": "npm run build && node scripts/generate-tools-catalog.mjs",
|
|
40
42
|
"docs:tools:check": "npm run build && node scripts/generate-tools-catalog.mjs --check",
|
|
43
|
+
"api:monitor:test": "node scripts/test-api-monitor.cjs",
|
|
44
|
+
"api:monitor:save": "node scripts/test-api-monitor.cjs --save",
|
|
45
|
+
"prepare": "husky",
|
|
41
46
|
"prepublishOnly": "npm run build"
|
|
42
47
|
},
|
|
43
48
|
"keywords": [
|
|
@@ -53,6 +58,7 @@
|
|
|
53
58
|
"license": "Apache-2.0",
|
|
54
59
|
"dependencies": {
|
|
55
60
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
61
|
+
"pino": "^10.3.1",
|
|
56
62
|
"zod": "^4.3.6"
|
|
57
63
|
},
|
|
58
64
|
"devDependencies": {
|
|
@@ -60,6 +66,10 @@
|
|
|
60
66
|
"@types/node": "^25.3.0",
|
|
61
67
|
"@vitest/coverage-v8": "^4.0.18",
|
|
62
68
|
"eslint": "^10.0.2",
|
|
69
|
+
"husky": "^9.1.7",
|
|
70
|
+
"lint-staged": "^16.4.0",
|
|
71
|
+
"pino-pretty": "^13.1.3",
|
|
72
|
+
"prettier": "^3.8.3",
|
|
63
73
|
"typescript": "^6.0.2",
|
|
64
74
|
"typescript-eslint": "^8.0.0",
|
|
65
75
|
"vitest": "^4.0.18"
|