@uptimizr/collector-server 2.1.0 → 2.2.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/AGENTS.md +179 -6
- package/README.md +69 -0
- package/dist/__tests__/support/registryRequests.d.ts +2 -1
- package/dist/__tests__/support/registryRequests.d.ts.map +1 -1
- package/dist/__tests__/support/registryRequests.js +17 -1
- package/dist/__tests__/support/registryRequests.js.map +1 -1
- package/dist/__tests__/support/subscriptionFixtures.d.ts +63 -0
- package/dist/__tests__/support/subscriptionFixtures.d.ts.map +1 -0
- package/dist/__tests__/support/subscriptionFixtures.js +17 -0
- package/dist/__tests__/support/subscriptionFixtures.js.map +1 -0
- package/dist/agentReport.d.ts +256 -0
- package/dist/agentReport.d.ts.map +1 -0
- package/dist/agentReport.js +861 -0
- package/dist/agentReport.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +112 -5
- package/dist/app.js.map +1 -1
- package/dist/audit.d.ts +5 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +24 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +41 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +99 -2
- package/dist/cli.js.map +1 -1
- package/dist/clickhouseStore.d.ts.map +1 -1
- package/dist/clickhouseStore.js +44 -2
- package/dist/clickhouseStore.js.map +1 -1
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/connectionLimiter.d.ts +23 -0
- package/dist/connectionLimiter.d.ts.map +1 -0
- package/dist/connectionLimiter.js +24 -0
- package/dist/connectionLimiter.js.map +1 -0
- package/dist/duckdbStore.d.ts.map +1 -1
- package/dist/duckdbStore.js +44 -1
- package/dist/duckdbStore.js.map +1 -1
- package/dist/internalDispatch.d.ts +36 -0
- package/dist/internalDispatch.d.ts.map +1 -0
- package/dist/internalDispatch.js +50 -0
- package/dist/internalDispatch.js.map +1 -0
- package/dist/memoryStore.d.ts.map +1 -1
- package/dist/memoryStore.js +314 -1
- package/dist/memoryStore.js.map +1 -1
- package/dist/mssqlStore.d.ts.map +1 -1
- package/dist/mssqlStore.js +44 -2
- package/dist/mssqlStore.js.map +1 -1
- package/dist/postgresStore.d.ts.map +1 -1
- package/dist/postgresStore.js +44 -2
- package/dist/postgresStore.js.map +1 -1
- package/dist/projectMetadata.d.ts +82 -0
- package/dist/projectMetadata.d.ts.map +1 -0
- package/dist/projectMetadata.js +50 -0
- package/dist/projectMetadata.js.map +1 -0
- package/dist/routes/context.d.ts +135 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +306 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/insights.d.ts +36 -0
- package/dist/routes/insights.d.ts.map +1 -0
- package/dist/routes/insights.js +810 -0
- package/dist/routes/insights.js.map +1 -0
- package/dist/routes/live.d.ts +8 -0
- package/dist/routes/live.d.ts.map +1 -1
- package/dist/routes/live.js +8 -7
- package/dist/routes/live.js.map +1 -1
- package/dist/routes/mcp.d.ts +36 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +262 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/meta.d.ts +16 -2
- package/dist/routes/meta.d.ts.map +1 -1
- package/dist/routes/meta.js +699 -10
- package/dist/routes/meta.js.map +1 -1
- package/dist/routes/metadata.d.ts +31 -0
- package/dist/routes/metadata.d.ts.map +1 -0
- package/dist/routes/metadata.js +163 -0
- package/dist/routes/metadata.js.map +1 -0
- package/dist/routes/narrative.d.ts +36 -0
- package/dist/routes/narrative.d.ts.map +1 -0
- package/dist/routes/narrative.js +95 -0
- package/dist/routes/narrative.js.map +1 -0
- package/dist/routes/panels.d.ts +44 -0
- package/dist/routes/panels.d.ts.map +1 -0
- package/dist/routes/panels.js +108 -0
- package/dist/routes/panels.js.map +1 -0
- package/dist/routes/query-dsl.d.ts +50 -0
- package/dist/routes/query-dsl.d.ts.map +1 -0
- package/dist/routes/query-dsl.js +359 -0
- package/dist/routes/query-dsl.js.map +1 -0
- package/dist/routes/query.d.ts +36 -0
- package/dist/routes/query.d.ts.map +1 -1
- package/dist/routes/query.js +101 -13
- package/dist/routes/query.js.map +1 -1
- package/dist/routes/subscriptions.d.ts +52 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +290 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/store.d.ts +113 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/subscriptions/cli.d.ts +36 -0
- package/dist/subscriptions/cli.d.ts.map +1 -0
- package/dist/subscriptions/cli.js +143 -0
- package/dist/subscriptions/cli.js.map +1 -0
- package/dist/subscriptions/delivery.d.ts +101 -0
- package/dist/subscriptions/delivery.d.ts.map +1 -0
- package/dist/subscriptions/delivery.js +165 -0
- package/dist/subscriptions/delivery.js.map +1 -0
- package/dist/subscriptions/evaluate.d.ts +119 -0
- package/dist/subscriptions/evaluate.d.ts.map +1 -0
- package/dist/subscriptions/evaluate.js +326 -0
- package/dist/subscriptions/evaluate.js.map +1 -0
- package/dist/subscriptions/scheduler.d.ts +97 -0
- package/dist/subscriptions/scheduler.d.ts.map +1 -0
- package/dist/subscriptions/scheduler.js +332 -0
- package/dist/subscriptions/scheduler.js.map +1 -0
- package/dist/subscriptions/stream.d.ts +40 -0
- package/dist/subscriptions/stream.d.ts.map +1 -0
- package/dist/subscriptions/stream.js +38 -0
- package/dist/subscriptions/stream.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +25 -0
- package/dist/version.js.map +1 -0
- package/dist/webhookSignature.d.ts +64 -0
- package/dist/webhookSignature.d.ts.map +1 -0
- package/dist/webhookSignature.js +91 -0
- package/dist/webhookSignature.js.map +1 -0
- package/llms.txt +38 -1
- package/package.json +17 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/routes/insights.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/live.d.ts
CHANGED
|
@@ -2,10 +2,18 @@ import type { FastifyPluginAsync } from "fastify";
|
|
|
2
2
|
import type { CollectorConfig } from "../config.js";
|
|
3
3
|
import type { CollectorStore } from "../store.js";
|
|
4
4
|
import type { LiveBus } from "../liveBus.js";
|
|
5
|
+
import { type ConnectionLimiter } from "../connectionLimiter.js";
|
|
5
6
|
interface Options {
|
|
6
7
|
store: CollectorStore;
|
|
7
8
|
config: CollectorConfig;
|
|
8
9
|
liveBus: LiveBus;
|
|
10
|
+
/**
|
|
11
|
+
* The collector-wide SSE connection budget (ADR §6). Shared with the
|
|
12
|
+
* conditional-subscription stream (#311), which is the same kind of
|
|
13
|
+
* held-open socket — one counter, so `LIVE_MAX_CONNECTIONS` means what it
|
|
14
|
+
* says. Omitted in tests that build this plugin alone.
|
|
15
|
+
*/
|
|
16
|
+
connections?: ConnectionLimiter;
|
|
9
17
|
}
|
|
10
18
|
/**
|
|
11
19
|
* Live SSE endpoints (ADR 0032 §3): presence (aggregate, always on), the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/routes/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAGhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/routes/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAGhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,UAAU,OAAO;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AA6ED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,kBAAkB,CAAC,OAAO,CA6HlD,CAAC"}
|
package/dist/routes/live.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { mintLiveToken, verifyLiveToken } from "../liveToken.js";
|
|
3
3
|
import { requireCapability } from "../auth.js";
|
|
4
|
+
import { createConnectionLimiter } from "../connectionLimiter.js";
|
|
4
5
|
const HEARTBEAT_MS = 15_000;
|
|
5
6
|
const tokenQuery = z.object({ token: z.string().min(1).optional() });
|
|
6
7
|
const streamQuery = tokenQuery.extend({
|
|
@@ -72,16 +73,16 @@ function openSse(request, reply, config) {
|
|
|
72
73
|
* live-follow tail (gated by raw-session retention, like replay). All fan out
|
|
73
74
|
* from the in-process bus and are bounded (ADR §6).
|
|
74
75
|
*/
|
|
75
|
-
export const liveRoutes = async (app,
|
|
76
|
+
export const liveRoutes = async (app, options) => {
|
|
77
|
+
const { store, config, liveBus } = options;
|
|
76
78
|
const r = app.withTypeProvider();
|
|
77
|
-
|
|
79
|
+
const connections = options.connections ?? createConnectionLimiter(config.liveMaxConnections);
|
|
78
80
|
/** Reserve a live connection slot, or send 503 when at capacity (ADR §6). */
|
|
79
81
|
function acquireSlot(reply) {
|
|
80
|
-
if (connections
|
|
82
|
+
if (!connections.acquire()) {
|
|
81
83
|
void reply.code(503).send({ error: "live connection limit reached" });
|
|
82
84
|
return false;
|
|
83
85
|
}
|
|
84
|
-
connections += 1;
|
|
85
86
|
return true;
|
|
86
87
|
}
|
|
87
88
|
// Server-to-server: exchange an API key for a short-lived live token (ADR §7).
|
|
@@ -110,7 +111,7 @@ export const liveRoutes = async (app, { store, config, liveBus }) => {
|
|
|
110
111
|
const timer = setInterval(push, config.livePresenceIntervalMs);
|
|
111
112
|
req.raw.on("close", () => {
|
|
112
113
|
clearInterval(timer);
|
|
113
|
-
connections
|
|
114
|
+
connections.release();
|
|
114
115
|
});
|
|
115
116
|
});
|
|
116
117
|
// Project firehose: every arriving event (optionally filtered by type). Drives
|
|
@@ -140,7 +141,7 @@ export const liveRoutes = async (app, { store, config, liveBus }) => {
|
|
|
140
141
|
req.raw.on("close", () => {
|
|
141
142
|
clearInterval(heartbeat);
|
|
142
143
|
sub.close();
|
|
143
|
-
connections
|
|
144
|
+
connections.release();
|
|
144
145
|
});
|
|
145
146
|
});
|
|
146
147
|
// Per-session live-follow tail for live replay. Raw per-session data, so it
|
|
@@ -177,7 +178,7 @@ export const liveRoutes = async (app, { store, config, liveBus }) => {
|
|
|
177
178
|
req.raw.on("close", () => {
|
|
178
179
|
clearInterval(heartbeat);
|
|
179
180
|
sub.close();
|
|
180
|
-
connections
|
|
181
|
+
connections.release();
|
|
181
182
|
});
|
|
182
183
|
});
|
|
183
184
|
};
|
package/dist/routes/live.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/routes/live.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAwB,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/routes/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { CollectorConfig } from "../config.js";
|
|
3
|
+
import type { CollectorStore } from "../store.js";
|
|
4
|
+
interface Options {
|
|
5
|
+
store: CollectorStore;
|
|
6
|
+
config: CollectorConfig;
|
|
7
|
+
/** Per-process token marking the collector's in-process reads (see `internalDispatch.ts`). */
|
|
8
|
+
internalDispatchToken: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Collector-hosted MCP over Streamable HTTP (ADR 0051 §7, design sketch §G.1),
|
|
12
|
+
* resolving the transport ADR 0050 §7 deferred pending auth.
|
|
13
|
+
*
|
|
14
|
+
* `POST /mcp` carries JSON-RPC, `GET /mcp` opens the server→client SSE stream,
|
|
15
|
+
* and `DELETE /mcp` ends a session — the three verbs of the Streamable HTTP
|
|
16
|
+
* specification, all on one route so the SDK transport can dispatch them.
|
|
17
|
+
*
|
|
18
|
+
* What this route adds around the transport:
|
|
19
|
+
*
|
|
20
|
+
* - **Auth on every request**, not just on `initialize`: `x-api-key` (or the
|
|
21
|
+
* `Authorization: Bearer` alias normalised in `auth.ts`) must resolve to a key
|
|
22
|
+
* holding `query`. Missing/unknown key → `401`, wrong capability → `403`. A
|
|
23
|
+
* session may only be driven by the key that opened it, so a leaked session id
|
|
24
|
+
* is worth nothing on its own.
|
|
25
|
+
* - **One `McpServer` per session**, built by `@uptimizr/mcp`'s shared factory
|
|
26
|
+
* with that key's capability set, so the hosted surface is the same catalog
|
|
27
|
+
* the stdio package serves and write tools stay gated on the key.
|
|
28
|
+
* - **Bounded sessions**: a global cap (`COLLECTOR_MCP_MAX_SESSIONS` → `503`)
|
|
29
|
+
* and an idle TTL, the `/mcp` counterpart of the live-SSE connection cap.
|
|
30
|
+
*
|
|
31
|
+
* The plugin is only registered when `COLLECTOR_MCP_HTTP` is on; otherwise
|
|
32
|
+
* `/mcp` does not exist.
|
|
33
|
+
*/
|
|
34
|
+
export declare const mcpRoutes: FastifyPluginAsync<Options>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAMjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,UAAU,OAAO;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,8FAA8F;IAC9F,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AA4FD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,CAAC,OAAO,CA6KjD,CAAC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
3
|
+
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { CollectorError, createMcpServer } from "@uptimizr/mcp";
|
|
5
|
+
import { MCP_ROUTE_URL, requireCapability } from "../auth.js";
|
|
6
|
+
import { INTERNAL_DISPATCH_HEADER } from "../internalDispatch.js";
|
|
7
|
+
/** How often idle sessions are swept. Cheap; the TTL does the real work. */
|
|
8
|
+
const SWEEP_INTERVAL_MS = 60_000;
|
|
9
|
+
/** Only the collector's own read API may be reached by an in-process tool call. */
|
|
10
|
+
const API_PREFIX = "/api/v1/";
|
|
11
|
+
/** Placeholder origin used to normalise a tool's relative path. Never dialled. */
|
|
12
|
+
const NORMALIZE_BASE = "http://collector.invalid";
|
|
13
|
+
/** A JSON-RPC error body, so a refusal is still something an MCP client parses. */
|
|
14
|
+
function jsonRpcError(code, message) {
|
|
15
|
+
return { jsonrpc: "2.0", error: { code, message }, id: null };
|
|
16
|
+
}
|
|
17
|
+
/** Read a header that must be a single string value. */
|
|
18
|
+
function headerValue(value) {
|
|
19
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build the **in-process** collector client a session's tools read through.
|
|
23
|
+
*
|
|
24
|
+
* It re-enters this same Fastify app with `app.inject()` instead of opening a
|
|
25
|
+
* loopback socket: no port, no self-URL configuration, no TLS hop, and nothing
|
|
26
|
+
* a request can influence is ever turned into a network destination. The
|
|
27
|
+
* injected request runs the complete request lifecycle — key resolution,
|
|
28
|
+
* capability check, project scoping, Zod validation, the result-envelope hook
|
|
29
|
+
* and the audit hook — so a tool call and the equivalent `curl` are answered by
|
|
30
|
+
* the same code and recorded in the same log.
|
|
31
|
+
*
|
|
32
|
+
* The tool catalog builds paths from the metric registry and URL-encodes every
|
|
33
|
+
* path parameter, but this is the boundary where an agent-supplied value becomes
|
|
34
|
+
* a request, so the assembled path is normalised and required to stay inside the
|
|
35
|
+
* collector's own read API.
|
|
36
|
+
*/
|
|
37
|
+
function createInProcessClient(app, keyRef, internalDispatchToken) {
|
|
38
|
+
return {
|
|
39
|
+
async get(path, params = {}) {
|
|
40
|
+
const url = new URL(path, NORMALIZE_BASE);
|
|
41
|
+
for (const [key, value] of Object.entries(params)) {
|
|
42
|
+
if (value != null)
|
|
43
|
+
url.searchParams.set(key, String(value));
|
|
44
|
+
}
|
|
45
|
+
if (!url.pathname.startsWith(API_PREFIX)) {
|
|
46
|
+
throw new CollectorError(`refusing to dispatch outside ${API_PREFIX}`, 400);
|
|
47
|
+
}
|
|
48
|
+
const response = await app.inject({
|
|
49
|
+
method: "GET",
|
|
50
|
+
url: `${url.pathname}${url.search}`,
|
|
51
|
+
headers: {
|
|
52
|
+
"x-api-key": keyRef.current,
|
|
53
|
+
[INTERNAL_DISPATCH_HEADER]: internalDispatchToken,
|
|
54
|
+
accept: "application/json",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
if (response.statusCode < 200 || response.statusCode >= 300) {
|
|
58
|
+
throw new CollectorError(response.body || `HTTP ${response.statusCode}`, response.statusCode);
|
|
59
|
+
}
|
|
60
|
+
return response.json();
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Collector-hosted MCP over Streamable HTTP (ADR 0051 §7, design sketch §G.1),
|
|
66
|
+
* resolving the transport ADR 0050 §7 deferred pending auth.
|
|
67
|
+
*
|
|
68
|
+
* `POST /mcp` carries JSON-RPC, `GET /mcp` opens the server→client SSE stream,
|
|
69
|
+
* and `DELETE /mcp` ends a session — the three verbs of the Streamable HTTP
|
|
70
|
+
* specification, all on one route so the SDK transport can dispatch them.
|
|
71
|
+
*
|
|
72
|
+
* What this route adds around the transport:
|
|
73
|
+
*
|
|
74
|
+
* - **Auth on every request**, not just on `initialize`: `x-api-key` (or the
|
|
75
|
+
* `Authorization: Bearer` alias normalised in `auth.ts`) must resolve to a key
|
|
76
|
+
* holding `query`. Missing/unknown key → `401`, wrong capability → `403`. A
|
|
77
|
+
* session may only be driven by the key that opened it, so a leaked session id
|
|
78
|
+
* is worth nothing on its own.
|
|
79
|
+
* - **One `McpServer` per session**, built by `@uptimizr/mcp`'s shared factory
|
|
80
|
+
* with that key's capability set, so the hosted surface is the same catalog
|
|
81
|
+
* the stdio package serves and write tools stay gated on the key.
|
|
82
|
+
* - **Bounded sessions**: a global cap (`COLLECTOR_MCP_MAX_SESSIONS` → `503`)
|
|
83
|
+
* and an idle TTL, the `/mcp` counterpart of the live-SSE connection cap.
|
|
84
|
+
*
|
|
85
|
+
* The plugin is only registered when `COLLECTOR_MCP_HTTP` is on; otherwise
|
|
86
|
+
* `/mcp` does not exist.
|
|
87
|
+
*/
|
|
88
|
+
export const mcpRoutes = async (app, { store, config, internalDispatchToken }) => {
|
|
89
|
+
const sessions = new Map();
|
|
90
|
+
/**
|
|
91
|
+
* Sessions whose `initialize` is in flight and has not yet claimed an id.
|
|
92
|
+
* They count against the cap, so two concurrent `initialize` requests cannot
|
|
93
|
+
* both pass a check the other has not yet been counted by.
|
|
94
|
+
*/
|
|
95
|
+
const opening = new Set();
|
|
96
|
+
/** Close a session's transport and server, and drop it from the map. */
|
|
97
|
+
async function closeSession(id, session) {
|
|
98
|
+
if (id != null)
|
|
99
|
+
sessions.delete(id);
|
|
100
|
+
try {
|
|
101
|
+
await session.transport.close();
|
|
102
|
+
await session.server.close();
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
app.log.warn({ err }, "failed to close mcp session");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const sweep = setInterval(() => {
|
|
109
|
+
const cutoff = Date.now() - config.mcpSessionTtlMs;
|
|
110
|
+
for (const [id, session] of sessions) {
|
|
111
|
+
if (session.lastSeenMs <= cutoff)
|
|
112
|
+
void closeSession(id, session);
|
|
113
|
+
}
|
|
114
|
+
}, SWEEP_INTERVAL_MS);
|
|
115
|
+
sweep.unref?.();
|
|
116
|
+
app.addHook("onClose", async () => {
|
|
117
|
+
clearInterval(sweep);
|
|
118
|
+
const open = [...sessions.entries()];
|
|
119
|
+
sessions.clear();
|
|
120
|
+
await Promise.all(open.map(([id, session]) => closeSession(id, session)));
|
|
121
|
+
});
|
|
122
|
+
/**
|
|
123
|
+
* Create a session for `resolved`. Registration in the map happens in
|
|
124
|
+
* `onsessioninitialized`, which the transport fires while it is still handling
|
|
125
|
+
* the `initialize` POST — before its response (an SSE stream that stays open)
|
|
126
|
+
* completes, so the session is addressable by the time the client sees its id.
|
|
127
|
+
*/
|
|
128
|
+
function createSession(resolved, key) {
|
|
129
|
+
const keyRef = { current: key };
|
|
130
|
+
// The transport's callbacks need the session the transport is part of, so
|
|
131
|
+
// they close over a holder the session is dropped into a few lines below —
|
|
132
|
+
// always before any callback can fire, which only happens once the request
|
|
133
|
+
// handler calls `handleRequest`.
|
|
134
|
+
const holder = {};
|
|
135
|
+
const transport = new StreamableHTTPServerTransport({
|
|
136
|
+
sessionIdGenerator: () => randomUUID(),
|
|
137
|
+
onsessioninitialized: (id) => {
|
|
138
|
+
if (holder.session == null)
|
|
139
|
+
return;
|
|
140
|
+
// Promote from "opening" to a real session the moment the id exists.
|
|
141
|
+
// This fires while the transport is still writing the `initialize`
|
|
142
|
+
// response, which for an SSE answer outlives the handler — so the slot
|
|
143
|
+
// must be moved here rather than after `handleRequest` resolves.
|
|
144
|
+
opening.delete(holder.session);
|
|
145
|
+
sessions.set(id, holder.session);
|
|
146
|
+
},
|
|
147
|
+
onsessionclosed: (id) => {
|
|
148
|
+
sessions.delete(id);
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const server = createMcpServer(createInProcessClient(app, keyRef, internalDispatchToken), {
|
|
152
|
+
capabilities: resolved.capabilities,
|
|
153
|
+
});
|
|
154
|
+
// Note: `transport.onclose` is deliberately not used here — `server.connect()`
|
|
155
|
+
// claims it for the protocol's own teardown. The map is kept honest by
|
|
156
|
+
// `onsessionclosed` (a client's DELETE) and by `closeSession` on the idle
|
|
157
|
+
// sweep, the orphan path and shutdown, which are the only other ways a
|
|
158
|
+
// session ends.
|
|
159
|
+
const session = {
|
|
160
|
+
transport,
|
|
161
|
+
server,
|
|
162
|
+
keyId: resolved.keyId,
|
|
163
|
+
keyRef,
|
|
164
|
+
lastSeenMs: Date.now(),
|
|
165
|
+
};
|
|
166
|
+
holder.session = session;
|
|
167
|
+
return session;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Mirror the CORS decision onto the raw socket. The transport writes its
|
|
171
|
+
* response with `writeHead`, bypassing Fastify's send path (exactly like the
|
|
172
|
+
* live SSE routes), so headers set by the CORS plugin would never be flushed.
|
|
173
|
+
* `Mcp-Session-Id` has to be *exposed* as well, or a browser-based MCP client
|
|
174
|
+
* cannot read the session id it must echo back.
|
|
175
|
+
*/
|
|
176
|
+
function applyCorsHeaders(request, reply) {
|
|
177
|
+
const origin = request.headers.origin;
|
|
178
|
+
if (typeof origin !== "string" || !config.corsOrigins.includes(origin))
|
|
179
|
+
return;
|
|
180
|
+
reply.raw.setHeader("access-control-allow-origin", origin);
|
|
181
|
+
reply.raw.setHeader("access-control-expose-headers", "Mcp-Session-Id");
|
|
182
|
+
reply.raw.setHeader("vary", "Origin");
|
|
183
|
+
}
|
|
184
|
+
app.route({
|
|
185
|
+
method: ["POST", "GET", "DELETE"],
|
|
186
|
+
url: MCP_ROUTE_URL,
|
|
187
|
+
handler: async (request, reply) => {
|
|
188
|
+
// Re-authenticate on every request: Streamable HTTP is stateless on the
|
|
189
|
+
// wire, so a session id alone must never be a credential.
|
|
190
|
+
const key = headerValue(request.headers["x-api-key"]);
|
|
191
|
+
if (key == null) {
|
|
192
|
+
await reply.code(401).send(jsonRpcError(-32001, "missing api key"));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const resolved = await requireCapability(request, reply, store, "query");
|
|
196
|
+
if (!resolved)
|
|
197
|
+
return;
|
|
198
|
+
const sessionId = headerValue(request.headers["mcp-session-id"]);
|
|
199
|
+
let session = sessionId != null ? sessions.get(sessionId) : undefined;
|
|
200
|
+
if (sessionId != null && session == null) {
|
|
201
|
+
await reply.code(404).send(jsonRpcError(-32001, "Session not found"));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (session != null) {
|
|
205
|
+
if (session.keyId !== resolved.keyId) {
|
|
206
|
+
await reply.code(403).send(jsonRpcError(-32001, "session belongs to a different key"));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
session.keyRef.current = key;
|
|
210
|
+
session.lastSeenMs = Date.now();
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
// No session id: only an `initialize` POST may open one. Everything else
|
|
214
|
+
// gets the transport's own "session id required" answer, stated here
|
|
215
|
+
// because there is no transport to ask yet.
|
|
216
|
+
if (request.method !== "POST" || !isInitializeRequest(request.body)) {
|
|
217
|
+
await reply
|
|
218
|
+
.code(400)
|
|
219
|
+
.send(jsonRpcError(-32000, "Bad Request: Mcp-Session-Id header is required"));
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (sessions.size + opening.size >= config.mcpMaxSessions) {
|
|
223
|
+
await reply.code(503).send(jsonRpcError(-32000, "mcp session limit reached"));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
session = createSession(resolved, key);
|
|
227
|
+
opening.add(session);
|
|
228
|
+
try {
|
|
229
|
+
await session.server.connect(session.transport);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
opening.delete(session);
|
|
233
|
+
await closeSession(undefined, session);
|
|
234
|
+
request.log.error({ err }, "failed to start mcp session");
|
|
235
|
+
await reply.code(500).send(jsonRpcError(-32603, "failed to start mcp session"));
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const opened = session;
|
|
240
|
+
applyCorsHeaders(request, reply);
|
|
241
|
+
// The transport owns the response from here: it writes the status, the
|
|
242
|
+
// headers and (for an SSE answer) a stream that outlives this handler.
|
|
243
|
+
reply.hijack();
|
|
244
|
+
try {
|
|
245
|
+
await opened.transport.handleRequest(request.raw, reply.raw, request.body);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
request.log.error({ err }, "mcp request failed");
|
|
249
|
+
if (!reply.raw.headersSent)
|
|
250
|
+
reply.raw.writeHead(500).end();
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
// A POST that looked like `initialize` but was refused by the transport
|
|
254
|
+
// never reached `onsessioninitialized`, so it is still "opening" and has
|
|
255
|
+
// no session id — drop the orphan rather than leak its slot.
|
|
256
|
+
if (opening.delete(opened))
|
|
257
|
+
await closeSession(undefined, opened);
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/meta.d.ts
CHANGED
|
@@ -22,10 +22,24 @@
|
|
|
22
22
|
* in `app.ts`).
|
|
23
23
|
*
|
|
24
24
|
* Routes that are not registry metrics are described only when they are trivial
|
|
25
|
-
* and honest to describe (`/health`, this route,
|
|
26
|
-
* listing
|
|
25
|
+
* and honest to describe (`/health`, this route, the scene-representation
|
|
26
|
+
* listing, and the `metadata` group of #310 — annotations, glossary, saved
|
|
27
|
+
* analyses — whose bodies are converted from the Zod contracts that validate
|
|
28
|
+
* them). Ingestion (`POST /api/v1/collect`), the scene-proxy write
|
|
27
29
|
* (`PUT …/representation`), the retention-gated raw event stream and the live
|
|
28
30
|
* SSE surface are deliberately omitted rather than half-described.
|
|
31
|
+
* listing, and the conditional-subscription resource). Ingestion
|
|
32
|
+
* (`POST /api/v1/collect`), the scene-proxy write (`PUT …/representation`), the
|
|
33
|
+
* retention-gated raw event stream and every SSE surface — the live endpoints
|
|
34
|
+
* and `GET /api/v1/subscriptions/stream` alike — are deliberately omitted rather
|
|
35
|
+
* than half-described: a hijacked `text/event-stream` response is not an
|
|
36
|
+
* operation with a JSON body, and pretending otherwise misleads a generated
|
|
37
|
+
* client.
|
|
38
|
+
*
|
|
39
|
+
* Conditional subscriptions (#311) are the one **write** surface described here.
|
|
40
|
+
* They earn it: they are a CRUD resource rather than a query, and the only place
|
|
41
|
+
* a caller needs a written contract for a request *body* — a closed Zod union
|
|
42
|
+
* that cannot be inferred from a querystring.
|
|
29
43
|
*/
|
|
30
44
|
import type { FastifyInstance, FastifyPluginAsync } from "fastify";
|
|
31
45
|
import { z } from "zod";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/routes/meta.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/routes/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,wEAAwE;AACxE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC3C;AA4DD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAiB5E;AAy7BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,GAAE,SAAS,gBAAgB,EAAO,GAC7C,eAAe,CA4EjB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,kBAAkB,CAAC,iBAAiB,CAS5D,CAAC"}
|