@crypto512/jicon-mcp 2.2.1 → 2.3.19
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/PROMPT.md +10 -28
- package/README.md +39 -6
- package/TOOL_LIST.md +542 -407
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +34 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +12 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +49 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +18 -0
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +7 -2
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/formatters.d.ts +20 -0
- package/dist/confluence/formatters.d.ts.map +1 -1
- package/dist/confluence/formatters.js +74 -8
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +16 -20
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +71 -68
- package/dist/confluence/tools.js.map +1 -1
- package/dist/credentials/extractor.d.ts +15 -5
- package/dist/credentials/extractor.d.ts.map +1 -1
- package/dist/credentials/extractor.js +99 -12
- package/dist/credentials/extractor.js.map +1 -1
- package/dist/credentials/index.d.ts +4 -3
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +3 -2
- package/dist/credentials/index.js.map +1 -1
- package/dist/credentials/types.d.ts +22 -0
- package/dist/credentials/types.d.ts.map +1 -1
- package/dist/credentials/types.js.map +1 -1
- package/dist/index.js +211 -176
- package/dist/index.js.map +1 -1
- package/dist/jira/activity-tools.d.ts +8 -15
- package/dist/jira/activity-tools.d.ts.map +1 -1
- package/dist/jira/activity-tools.js +131 -90
- package/dist/jira/activity-tools.js.map +1 -1
- package/dist/jira/client.d.ts +24 -0
- package/dist/jira/client.d.ts.map +1 -1
- package/dist/jira/client.js +65 -6
- package/dist/jira/client.js.map +1 -1
- package/dist/jira/formatters.d.ts +61 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +83 -11
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +78 -26
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +293 -130
- package/dist/jira/tools.js.map +1 -1
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +8 -4
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +15 -13
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +19 -10
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/session/context.d.ts +81 -0
- package/dist/session/context.d.ts.map +1 -0
- package/dist/session/context.js +107 -0
- package/dist/session/context.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +22 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +186 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +383 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/tempo/client.d.ts +14 -0
- package/dist/tempo/client.d.ts.map +1 -1
- package/dist/tempo/client.js +57 -0
- package/dist/tempo/client.js.map +1 -1
- package/dist/tempo/formatters.d.ts +13 -0
- package/dist/tempo/formatters.d.ts.map +1 -1
- package/dist/tempo/formatters.js +106 -20
- package/dist/tempo/formatters.js.map +1 -1
- package/dist/tempo/tools.d.ts +14 -13
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +203 -33
- package/dist/tempo/tools.js.map +1 -1
- package/dist/tempo/types.d.ts +20 -6
- package/dist/tempo/types.d.ts.map +1 -1
- package/dist/transport/http.d.ts +21 -5
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +193 -22
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/index.d.ts +7 -2
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +10 -4
- package/dist/transport/index.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +48 -724
- package/dist/utils/buffer-tools.d.ts.map +1 -1
- package/dist/utils/buffer-tools.js +337 -170
- package/dist/utils/buffer-tools.js.map +1 -1
- package/dist/utils/content-buffer.d.ts +10 -31
- package/dist/utils/content-buffer.d.ts.map +1 -1
- package/dist/utils/content-buffer.js +12 -86
- package/dist/utils/content-buffer.js.map +1 -1
- package/dist/utils/http-client.d.ts.map +1 -1
- package/dist/utils/http-client.js +99 -2
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/jicon-help.d.ts +3 -3
- package/dist/utils/jicon-help.d.ts.map +1 -1
- package/dist/utils/jicon-help.js +164 -312
- package/dist/utils/jicon-help.js.map +1 -1
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +102 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/plantuml/tools.d.ts.map +1 -1
- package/dist/utils/plantuml/tools.js +10 -9
- package/dist/utils/plantuml/tools.js.map +1 -1
- package/dist/utils/response-formatter.d.ts +20 -2
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +147 -17
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/sandbox/formatters.d.ts +25 -0
- package/dist/utils/sandbox/formatters.d.ts.map +1 -0
- package/dist/utils/sandbox/formatters.js +690 -0
- package/dist/utils/sandbox/formatters.js.map +1 -0
- package/dist/utils/sandbox/helpers.d.ts +16 -0
- package/dist/utils/sandbox/helpers.d.ts.map +1 -0
- package/dist/utils/sandbox/helpers.js +252 -0
- package/dist/utils/sandbox/helpers.js.map +1 -0
- package/dist/utils/sandbox/index.d.ts +19 -0
- package/dist/utils/sandbox/index.d.ts.map +1 -0
- package/dist/utils/sandbox/index.js +269 -0
- package/dist/utils/sandbox/index.js.map +1 -0
- package/dist/utils/sandbox/schema.d.ts +55 -0
- package/dist/utils/sandbox/schema.d.ts.map +1 -0
- package/dist/utils/sandbox/schema.js +39 -0
- package/dist/utils/sandbox/schema.js.map +1 -0
- package/dist/utils/sandbox/types.d.ts +179 -0
- package/dist/utils/sandbox/types.d.ts.map +1 -0
- package/dist/utils/sandbox/types.js +8 -0
- package/dist/utils/sandbox/types.js.map +1 -0
- package/dist/utils/schemas/confluence.d.ts +41 -0
- package/dist/utils/schemas/confluence.d.ts.map +1 -0
- package/dist/utils/schemas/confluence.js +105 -0
- package/dist/utils/schemas/confluence.js.map +1 -0
- package/dist/utils/schemas/index.d.ts +77 -0
- package/dist/utils/schemas/index.d.ts.map +1 -0
- package/dist/utils/schemas/index.js +107 -0
- package/dist/utils/schemas/index.js.map +1 -0
- package/dist/utils/schemas/jira.d.ts +49 -0
- package/dist/utils/schemas/jira.d.ts.map +1 -0
- package/dist/utils/schemas/jira.js +153 -0
- package/dist/utils/schemas/jira.js.map +1 -0
- package/dist/utils/schemas/tempo.d.ts +29 -0
- package/dist/utils/schemas/tempo.d.ts.map +1 -0
- package/dist/utils/schemas/tempo.js +72 -0
- package/dist/utils/schemas/tempo.js.map +1 -0
- package/dist/utils/whoami-tools.d.ts +17 -0
- package/dist/utils/whoami-tools.d.ts.map +1 -0
- package/dist/utils/whoami-tools.js +90 -0
- package/dist/utils/whoami-tools.js.map +1 -0
- package/dist/utils/xhtml/error-locator.js +5 -5
- package/dist/utils/xhtml/error-locator.js.map +1 -1
- package/package.json +10 -9
- package/dist/credentials/client-factory.d.ts +0 -64
- package/dist/credentials/client-factory.d.ts.map +0 -1
- package/dist/credentials/client-factory.js +0 -110
- package/dist/credentials/client-factory.js.map +0 -1
- package/dist/credentials/context.d.ts +0 -25
- package/dist/credentials/context.d.ts.map +0 -1
- package/dist/credentials/context.js +0 -35
- package/dist/credentials/context.js.map +0 -1
- package/dist/utils/buffer-pipeline/index.d.ts +0 -30
- package/dist/utils/buffer-pipeline/index.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/index.js +0 -317
- package/dist/utils/buffer-pipeline/index.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/csv.d.ts +0 -20
- package/dist/utils/buffer-pipeline/output/csv.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/csv.js +0 -117
- package/dist/utils/buffer-pipeline/output/csv.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/json.d.ts +0 -16
- package/dist/utils/buffer-pipeline/output/json.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/json.js +0 -48
- package/dist/utils/buffer-pipeline/output/json.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/markdown.d.ts +0 -15
- package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/markdown.js +0 -105
- package/dist/utils/buffer-pipeline/output/markdown.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +0 -16
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-list.js +0 -81
- package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +0 -15
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-table.js +0 -176
- package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +0 -1
- package/dist/utils/buffer-pipeline/schema.d.ts +0 -1878
- package/dist/utils/buffer-pipeline/schema.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/schema.js +0 -168
- package/dist/utils/buffer-pipeline/schema.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/filter.d.ts +0 -32
- package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/filter.js +0 -208
- package/dist/utils/buffer-pipeline/stages/filter.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/format.d.ts +0 -45
- package/dist/utils/buffer-pipeline/stages/format.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/format.js +0 -160
- package/dist/utils/buffer-pipeline/stages/format.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts +0 -25
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/group-by.js +0 -190
- package/dist/utils/buffer-pipeline/stages/group-by.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/select.d.ts +0 -54
- package/dist/utils/buffer-pipeline/stages/select.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/select.js +0 -228
- package/dist/utils/buffer-pipeline/stages/select.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/sort.d.ts +0 -20
- package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/sort.js +0 -96
- package/dist/utils/buffer-pipeline/stages/sort.js.map +0 -1
- package/dist/utils/buffer-pipeline/types.d.ts +0 -277
- package/dist/utils/buffer-pipeline/types.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/types.js +0 -8
- package/dist/utils/buffer-pipeline/types.js.map +0 -1
- package/dist/utils/plantuml/docker-manager.d.ts +0 -37
- package/dist/utils/plantuml/docker-manager.d.ts.map +0 -1
- package/dist/utils/plantuml/docker-manager.js +0 -284
- package/dist/utils/plantuml/docker-manager.js.map +0 -1
package/dist/transport/http.d.ts
CHANGED
|
@@ -1,18 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HTTP transport using StreamableHTTPServerTransport
|
|
2
|
+
* HTTP transport using StreamableHTTPServerTransport with per-session Server instances
|
|
3
|
+
*
|
|
4
|
+
* Architecture (following MCP SDK example pattern):
|
|
5
|
+
* - Each MCP session gets its own Transport AND Server instance
|
|
6
|
+
* - Transports are stored in a map by session ID
|
|
7
|
+
* - On initialization: create new transport + new server, connect them
|
|
8
|
+
* - On subsequent requests: reuse existing transport
|
|
9
|
+
* - Sessions are cleaned up after inactivity timeout (default: 1 hour)
|
|
3
10
|
*/
|
|
4
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
5
11
|
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
12
|
import type { Express } from "express";
|
|
7
13
|
import type { HttpTransportConfig } from "./types.js";
|
|
8
14
|
export interface HttpServer {
|
|
9
15
|
app: Express;
|
|
10
|
-
transport: StreamableHTTPServerTransport;
|
|
11
16
|
start: () => Promise<void>;
|
|
12
17
|
close: () => Promise<void>;
|
|
13
18
|
}
|
|
14
19
|
/**
|
|
15
|
-
*
|
|
20
|
+
* Factory function type for creating new Server instances
|
|
21
|
+
* Each session gets its own Server instance with all tools registered
|
|
16
22
|
*/
|
|
17
|
-
export
|
|
23
|
+
export type ServerFactory = () => Server;
|
|
24
|
+
/**
|
|
25
|
+
* Creates an HTTP server with per-session StreamableHTTPServerTransport instances
|
|
26
|
+
*
|
|
27
|
+
* Session management:
|
|
28
|
+
* - Each session gets its own Transport + Server pair (required by MCP SDK)
|
|
29
|
+
* - Transports are stored by session ID for request routing
|
|
30
|
+
* - Per-session state (buffers, clients) is managed by SessionManager
|
|
31
|
+
* - Sessions are automatically cleaned up after inactivity timeout
|
|
32
|
+
*/
|
|
33
|
+
export declare function createHttpServer(createServer: ServerFactory, config: HttpTransportConfig): HttpServer;
|
|
18
34
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,aAAa,EAC3B,MAAM,EAAE,mBAAmB,GAC1B,UAAU,CA2OZ"}
|
package/dist/transport/http.js
CHANGED
|
@@ -1,55 +1,226 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HTTP transport using StreamableHTTPServerTransport
|
|
2
|
+
* HTTP transport using StreamableHTTPServerTransport with per-session Server instances
|
|
3
|
+
*
|
|
4
|
+
* Architecture (following MCP SDK example pattern):
|
|
5
|
+
* - Each MCP session gets its own Transport AND Server instance
|
|
6
|
+
* - Transports are stored in a map by session ID
|
|
7
|
+
* - On initialization: create new transport + new server, connect them
|
|
8
|
+
* - On subsequent requests: reuse existing transport
|
|
9
|
+
* - Sessions are cleaned up after inactivity timeout (default: 1 hour)
|
|
3
10
|
*/
|
|
11
|
+
import { randomUUID } from "crypto";
|
|
4
12
|
import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
|
|
5
13
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
14
|
+
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
15
|
+
import { getSessionManager, runWithSession } from "../session/index.js";
|
|
16
|
+
import { extractCredentials } from "../credentials/extractor.js";
|
|
17
|
+
import { log, debug, error as logError } from "../utils/logger.js";
|
|
6
18
|
/**
|
|
7
|
-
* Creates an HTTP server with StreamableHTTPServerTransport
|
|
19
|
+
* Creates an HTTP server with per-session StreamableHTTPServerTransport instances
|
|
20
|
+
*
|
|
21
|
+
* Session management:
|
|
22
|
+
* - Each session gets its own Transport + Server pair (required by MCP SDK)
|
|
23
|
+
* - Transports are stored by session ID for request routing
|
|
24
|
+
* - Per-session state (buffers, clients) is managed by SessionManager
|
|
25
|
+
* - Sessions are automatically cleaned up after inactivity timeout
|
|
8
26
|
*/
|
|
9
|
-
export function createHttpServer(
|
|
27
|
+
export function createHttpServer(createServer, config) {
|
|
10
28
|
const { port, host, basePath } = config;
|
|
11
|
-
//
|
|
29
|
+
// Store transports by session ID (following SDK example pattern)
|
|
30
|
+
const transports = new Map();
|
|
31
|
+
// Get session manager
|
|
32
|
+
const sessionManager = getSessionManager();
|
|
33
|
+
/**
|
|
34
|
+
* Clean up a session and its transport
|
|
35
|
+
*/
|
|
36
|
+
function destroySession(sessionId) {
|
|
37
|
+
const transport = transports.get(sessionId);
|
|
38
|
+
if (transport) {
|
|
39
|
+
transport.close().catch((err) => {
|
|
40
|
+
logError(`Error closing transport for session ${sessionId}`, err);
|
|
41
|
+
});
|
|
42
|
+
transports.delete(sessionId);
|
|
43
|
+
}
|
|
44
|
+
sessionManager.destroySession(sessionId);
|
|
45
|
+
log(`Session destroyed: ${sessionId} (remaining: ${transports.size})`);
|
|
46
|
+
}
|
|
47
|
+
// Register cleanup callback with session manager
|
|
48
|
+
sessionManager.setSessionDestroyedCallback((sessionId) => {
|
|
49
|
+
transports.delete(sessionId);
|
|
50
|
+
});
|
|
51
|
+
// Create Express app
|
|
12
52
|
const app = createMcpExpressApp({
|
|
13
53
|
host,
|
|
14
|
-
// When binding to 0.0.0.0, allow any host header for container deployments
|
|
15
54
|
allowedHosts: host === "0.0.0.0" ? undefined : [host, "localhost"],
|
|
16
55
|
});
|
|
17
56
|
// Health check endpoint
|
|
18
57
|
app.get("/health", (_req, res) => {
|
|
19
|
-
res.json({
|
|
58
|
+
res.json({
|
|
59
|
+
status: "ok",
|
|
60
|
+
sessions: sessionManager.getSessionCount(),
|
|
61
|
+
transports: transports.size,
|
|
62
|
+
});
|
|
20
63
|
});
|
|
21
|
-
// Readiness endpoint
|
|
64
|
+
// Readiness endpoint
|
|
22
65
|
app.get("/ready", (_req, res) => {
|
|
23
66
|
res.json({ status: "ready" });
|
|
24
67
|
});
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
68
|
+
// Handle POST requests (initialization and tool calls)
|
|
69
|
+
app.post(basePath, async (req, res) => {
|
|
70
|
+
// Extract credentials from HTTP headers
|
|
71
|
+
const credentials = extractCredentials(req.headers);
|
|
72
|
+
// Get session ID from MCP session header
|
|
73
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
74
|
+
try {
|
|
75
|
+
let transport;
|
|
76
|
+
if (sessionId && transports.has(sessionId)) {
|
|
77
|
+
// Reuse existing transport for this session
|
|
78
|
+
transport = transports.get(sessionId);
|
|
79
|
+
debug(`Request for existing session: ${sessionId}`);
|
|
80
|
+
// Get or update session data (handles credential changes)
|
|
81
|
+
const session = sessionManager.getOrCreateSession(sessionId, credentials);
|
|
82
|
+
// Run request within session context
|
|
83
|
+
await runWithSession({
|
|
84
|
+
sessionId,
|
|
85
|
+
credentials: session.credentials,
|
|
86
|
+
buffer: session.buffer,
|
|
87
|
+
jiraClient: session.clients.jira,
|
|
88
|
+
confluenceClient: session.clients.confluence,
|
|
89
|
+
tempoClient: session.clients.tempo,
|
|
90
|
+
writeHomeValidator: session.writeHomeValidator,
|
|
91
|
+
}, async () => {
|
|
92
|
+
await transport.handleRequest(req, res, req.body);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else if (!sessionId && isInitializeRequest(req.body)) {
|
|
96
|
+
// New initialization request - create new transport and server
|
|
97
|
+
debug(`Initialization request from ${req.ip}`);
|
|
98
|
+
transport = new StreamableHTTPServerTransport({
|
|
99
|
+
sessionIdGenerator: () => randomUUID(),
|
|
100
|
+
onsessioninitialized: (newSessionId) => {
|
|
101
|
+
// Store transport by session ID when session is initialized
|
|
102
|
+
transports.set(newSessionId, transport);
|
|
103
|
+
log(`MCP session initialized: ${newSessionId} (total: ${transports.size})`);
|
|
104
|
+
},
|
|
105
|
+
enableJsonResponse: true,
|
|
106
|
+
});
|
|
107
|
+
// Set up onclose handler to clean up when transport closes
|
|
108
|
+
transport.onclose = () => {
|
|
109
|
+
const sid = transport.sessionId;
|
|
110
|
+
if (sid && transports.has(sid)) {
|
|
111
|
+
log(`Transport closed for session ${sid}, cleaning up`);
|
|
112
|
+
destroySession(sid);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
transport.onerror = (error) => {
|
|
116
|
+
logError(`Transport error for session ${transport.sessionId || "unknown"}`, error);
|
|
117
|
+
};
|
|
118
|
+
// Create new server instance and connect transport to it
|
|
119
|
+
const server = createServer();
|
|
120
|
+
await server.connect(transport);
|
|
121
|
+
// Handle the initialization request
|
|
122
|
+
await transport.handleRequest(req, res, req.body);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Invalid request - no session ID or not initialization request
|
|
126
|
+
res.status(400).json({
|
|
127
|
+
jsonrpc: "2.0",
|
|
128
|
+
error: {
|
|
129
|
+
code: -32600,
|
|
130
|
+
message: "Bad Request: No valid session ID provided",
|
|
131
|
+
},
|
|
132
|
+
id: null,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
logError("Error handling MCP request", error);
|
|
138
|
+
if (!res.headersSent) {
|
|
139
|
+
res.status(500).json({
|
|
140
|
+
jsonrpc: "2.0",
|
|
141
|
+
error: { code: -32603, message: "Internal server error" },
|
|
142
|
+
id: null,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
29
146
|
});
|
|
30
|
-
//
|
|
31
|
-
app.
|
|
32
|
-
|
|
147
|
+
// Handle GET requests for SSE streams
|
|
148
|
+
app.get(basePath, async (req, res) => {
|
|
149
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
150
|
+
if (!sessionId || !transports.has(sessionId)) {
|
|
151
|
+
res.status(400).json({
|
|
152
|
+
jsonrpc: "2.0",
|
|
153
|
+
error: { code: -32600, message: "Invalid or missing session ID" },
|
|
154
|
+
id: null,
|
|
155
|
+
});
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const lastEventId = req.headers["last-event-id"];
|
|
159
|
+
if (lastEventId) {
|
|
160
|
+
debug(`Client reconnecting with Last-Event-ID: ${lastEventId}`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
debug(`Establishing new SSE stream for session ${sessionId}`);
|
|
164
|
+
}
|
|
165
|
+
const transport = transports.get(sessionId);
|
|
166
|
+
await transport.handleRequest(req, res);
|
|
167
|
+
});
|
|
168
|
+
// Handle DELETE requests for session termination
|
|
169
|
+
app.delete(basePath, async (req, res) => {
|
|
170
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
171
|
+
if (!sessionId || !transports.has(sessionId)) {
|
|
172
|
+
res.status(400).json({
|
|
173
|
+
jsonrpc: "2.0",
|
|
174
|
+
error: { code: -32600, message: "Invalid or missing session ID" },
|
|
175
|
+
id: null,
|
|
176
|
+
});
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
log(`Session termination request for session ${sessionId}`);
|
|
180
|
+
try {
|
|
181
|
+
const transport = transports.get(sessionId);
|
|
182
|
+
await transport.handleRequest(req, res);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logError("Error handling session termination", error);
|
|
186
|
+
if (!res.headersSent) {
|
|
187
|
+
res.status(500).send("Error processing session termination");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
33
190
|
});
|
|
34
191
|
let httpServer = null;
|
|
35
192
|
return {
|
|
36
193
|
app,
|
|
37
|
-
transport,
|
|
38
194
|
start: async () => {
|
|
39
|
-
//
|
|
40
|
-
await server.connect(transport);
|
|
41
|
-
// Start HTTP server
|
|
195
|
+
// Start HTTP server (no transport created here - transports are per-session)
|
|
42
196
|
return new Promise((resolve) => {
|
|
43
197
|
httpServer = app.listen(port, host, () => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
198
|
+
// Configure HTTP server timeouts for SSE
|
|
199
|
+
httpServer.setTimeout(0);
|
|
200
|
+
httpServer.keepAliveTimeout = 24 * 60 * 60 * 1000;
|
|
201
|
+
httpServer.headersTimeout = 60000;
|
|
202
|
+
httpServer.requestTimeout = 0;
|
|
203
|
+
log(`HTTP server listening on http://${host}:${port}`);
|
|
204
|
+
log(`MCP endpoint: http://${host}:${port}${basePath}`);
|
|
205
|
+
log(`Health check: http://${host}:${port}/health`);
|
|
206
|
+
log(`Session management: per-session transport + server`);
|
|
47
207
|
resolve();
|
|
48
208
|
});
|
|
49
209
|
});
|
|
50
210
|
},
|
|
51
211
|
close: async () => {
|
|
52
|
-
|
|
212
|
+
// Close all transports
|
|
213
|
+
for (const [sessionId, transport] of transports) {
|
|
214
|
+
try {
|
|
215
|
+
await transport.close();
|
|
216
|
+
log(`Transport closed for session ${sessionId}`);
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
logError(`Error closing transport for session ${sessionId}`, err);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
transports.clear();
|
|
223
|
+
// Close HTTP server
|
|
53
224
|
if (httpServer) {
|
|
54
225
|
return new Promise((resolve, reject) => {
|
|
55
226
|
httpServer.close((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transport module - factory for creating stdio or HTTP transports
|
|
3
3
|
*/
|
|
4
|
-
import type
|
|
4
|
+
import { type ServerFactory } from "./http.js";
|
|
5
5
|
import type { TransportConfig } from "./types.js";
|
|
6
6
|
export type { TransportMode, HttpTransportConfig, TransportConfig } from "./types.js";
|
|
7
7
|
export { DEFAULT_TRANSPORT_CONFIG } from "./types.js";
|
|
8
|
+
export type { ServerFactory } from "./http.js";
|
|
8
9
|
export interface TransportResult {
|
|
9
10
|
mode: "stdio" | "http";
|
|
10
11
|
start: () => Promise<void>;
|
|
@@ -12,6 +13,10 @@ export interface TransportResult {
|
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* Creates and starts a transport based on configuration
|
|
16
|
+
*
|
|
17
|
+
* @param createServer - Factory function to create Server instances
|
|
18
|
+
* For HTTP mode: called once per session (each session gets its own Server)
|
|
19
|
+
* For stdio mode: called once at startup
|
|
15
20
|
*/
|
|
16
|
-
export declare function createTransport(
|
|
21
|
+
export declare function createTransport(createServer: ServerFactory, config: TransportConfig): TransportResult;
|
|
17
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,aAAa,EAC3B,MAAM,EAAE,eAAe,GACtB,eAAe,CAuBjB"}
|
package/dist/transport/index.js
CHANGED
|
@@ -3,26 +3,32 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { createHttpServer } from "./http.js";
|
|
6
|
+
import { log } from "../utils/logger.js";
|
|
6
7
|
export { DEFAULT_TRANSPORT_CONFIG } from "./types.js";
|
|
7
8
|
/**
|
|
8
9
|
* Creates and starts a transport based on configuration
|
|
10
|
+
*
|
|
11
|
+
* @param createServer - Factory function to create Server instances
|
|
12
|
+
* For HTTP mode: called once per session (each session gets its own Server)
|
|
13
|
+
* For stdio mode: called once at startup
|
|
9
14
|
*/
|
|
10
|
-
export function createTransport(
|
|
15
|
+
export function createTransport(createServer, config) {
|
|
11
16
|
if (config.mode === "http") {
|
|
12
|
-
const httpServer = createHttpServer(
|
|
17
|
+
const httpServer = createHttpServer(createServer, config.http);
|
|
13
18
|
return {
|
|
14
19
|
mode: "http",
|
|
15
20
|
start: httpServer.start,
|
|
16
21
|
close: httpServer.close,
|
|
17
22
|
};
|
|
18
23
|
}
|
|
19
|
-
// Default: stdio transport
|
|
24
|
+
// Default: stdio transport - create single server instance
|
|
25
|
+
const server = createServer();
|
|
20
26
|
const transport = new StdioServerTransport();
|
|
21
27
|
return {
|
|
22
28
|
mode: "stdio",
|
|
23
29
|
start: async () => {
|
|
24
30
|
await server.connect(transport);
|
|
25
|
-
|
|
31
|
+
log("Jicon MCP Server running on stdio");
|
|
26
32
|
},
|
|
27
33
|
close: async () => {
|
|
28
34
|
await transport.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAStD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,YAA2B,EAC3B,MAAuB;IAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
|