db-mcp 1.0.1
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/LICENSE +21 -0
- package/README.md +860 -0
- package/dist/adapters/DatabaseAdapter.d.ts +141 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +131 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.js +187 -0
- package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
- package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.js +8 -0
- package/dist/adapters/sqlite/index.js.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.js +274 -0
- package/dist/adapters/sqlite/json-utils.js.map +1 -0
- package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
- package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/output-schemas.js +1337 -0
- package/dist/adapters/sqlite/output-schemas.js.map +1 -0
- package/dist/adapters/sqlite/prompts.d.ts +13 -0
- package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts.js +605 -0
- package/dist/adapters/sqlite/prompts.js.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.js +251 -0
- package/dist/adapters/sqlite/resources.js.map +1 -0
- package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
- package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin.js +788 -0
- package/dist/adapters/sqlite/tools/admin.js.map +1 -0
- package/dist/adapters/sqlite/tools/core.d.ts +25 -0
- package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core.js +359 -0
- package/dist/adapters/sqlite/tools/core.js.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.js +347 -0
- package/dist/adapters/sqlite/tools/fts.js.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.js +252 -0
- package/dist/adapters/sqlite/tools/geo.js.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +30 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.js +61 -0
- package/dist/adapters/sqlite/tools/index.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
- package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.js +839 -0
- package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
- package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats.js +1219 -0
- package/dist/adapters/sqlite/tools/stats.js.map +1 -0
- package/dist/adapters/sqlite/tools/text.d.ts +14 -0
- package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text.js +1141 -0
- package/dist/adapters/sqlite/tools/text.js.map +1 -0
- package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector.js +613 -0
- package/dist/adapters/sqlite/tools/vector.js.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.js +930 -0
- package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +207 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.js +186 -0
- package/dist/adapters/sqlite/types.js.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.js +11 -0
- package/dist/adapters/sqlite-native/index.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
- package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.js +370 -0
- package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +204 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +65 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +121 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +60 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +235 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +133 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +81 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +291 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +136 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +349 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +45 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +356 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +34 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +174 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +82 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +296 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/server/McpServer.d.ts +61 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +270 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +134 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +516 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +5 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +5 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/index.d.ts +380 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +68 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/annotations.d.ts +44 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +77 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/errors.d.ts +155 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +329 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +319 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/insightsManager.d.ts +39 -0
- package/dist/utils/insightsManager.d.ts.map +1 -0
- package/dist/utils/insightsManager.js +63 -0
- package/dist/utils/insightsManager.js.map +1 -0
- package/dist/utils/logger.d.ts +189 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +394 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/progress-utils.js +74 -0
- package/dist/utils/progress-utils.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/dist/utils/where-clause.d.ts +41 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/utils/where-clause.js +116 -0
- package/dist/utils/where-clause.js.map +1 -0
- package/package.json +83 -0
- package/server.json +53 -0
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db-mcp - HTTP Transport
|
|
3
|
+
*
|
|
4
|
+
* Streamable HTTP transport with OAuth 2.0 integration and SSE support.
|
|
5
|
+
* Provides secure HTTP endpoints for MCP communication with optional
|
|
6
|
+
* session management and server-sent events for notifications.
|
|
7
|
+
*
|
|
8
|
+
* Modes:
|
|
9
|
+
* - Stateful (default): Multi-session management with SSE streaming
|
|
10
|
+
* - Stateless (opt-in): Lightweight serverless-compatible mode
|
|
11
|
+
*/
|
|
12
|
+
import express from "express";
|
|
13
|
+
import cors from "cors";
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
16
|
+
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
17
|
+
import { OAuthResourceServer } from "../auth/OAuthResourceServer.js";
|
|
18
|
+
import { AuthorizationServerDiscovery } from "../auth/AuthorizationServerDiscovery.js";
|
|
19
|
+
import { TokenValidator } from "../auth/TokenValidator.js";
|
|
20
|
+
import { createAuthMiddleware, oauthErrorHandler } from "../auth/middleware.js";
|
|
21
|
+
import { SUPPORTED_SCOPES } from "../auth/scopes.js";
|
|
22
|
+
import { createModuleLogger, ERROR_CODES } from "../utils/logger.js";
|
|
23
|
+
const logger = createModuleLogger("HTTP");
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// HTTP Transport
|
|
26
|
+
// =============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* HTTP Transport for MCP with OAuth 2.0 integration and SSE support.
|
|
29
|
+
*
|
|
30
|
+
* Supports two modes:
|
|
31
|
+
* - Stateful (default): Multi-session management with SSE streaming for notifications
|
|
32
|
+
* - Stateless: Single transport, no session management - ideal for serverless
|
|
33
|
+
*/
|
|
34
|
+
export class HttpTransport {
|
|
35
|
+
config;
|
|
36
|
+
app = null;
|
|
37
|
+
httpServer = null;
|
|
38
|
+
// Session storage for stateful mode
|
|
39
|
+
transports = new Map();
|
|
40
|
+
// Single transport for stateless mode
|
|
41
|
+
statelessTransport = null;
|
|
42
|
+
// OAuth components
|
|
43
|
+
resourceServer = null;
|
|
44
|
+
authServerDiscovery = null;
|
|
45
|
+
tokenValidator = null;
|
|
46
|
+
// Reference to the MCP server for stateful connections
|
|
47
|
+
mcpServer = null;
|
|
48
|
+
constructor(config) {
|
|
49
|
+
this.config = {
|
|
50
|
+
...config,
|
|
51
|
+
host: config.host ?? "0.0.0.0",
|
|
52
|
+
stateless: config.stateless ?? false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Initialize the transport with the MCP server.
|
|
57
|
+
*
|
|
58
|
+
* For stateful mode, the server reference is stored to connect new sessions.
|
|
59
|
+
* For stateless mode, a single transport is created and connected.
|
|
60
|
+
*
|
|
61
|
+
* @param server - The MCP server instance
|
|
62
|
+
*/
|
|
63
|
+
async initialize(server) {
|
|
64
|
+
logger.info("Initializing HTTP transport...", {
|
|
65
|
+
code: "HTTP_INIT",
|
|
66
|
+
stateless: this.config.stateless,
|
|
67
|
+
});
|
|
68
|
+
this.mcpServer = server;
|
|
69
|
+
// Create Express app
|
|
70
|
+
this.app = express();
|
|
71
|
+
// Configure CORS with SSE-compatible headers
|
|
72
|
+
this.setupCors();
|
|
73
|
+
// Parse JSON bodies
|
|
74
|
+
this.app.use(express.json());
|
|
75
|
+
// Determine resource URI
|
|
76
|
+
const resourceUri = this.config.resourceUri ?? `http://localhost:${String(this.config.port)}`;
|
|
77
|
+
// Set up OAuth if enabled
|
|
78
|
+
if (this.config.oauth.enabled) {
|
|
79
|
+
await this.setupOAuth(resourceUri);
|
|
80
|
+
}
|
|
81
|
+
// Health check endpoint (always public)
|
|
82
|
+
this.app.get("/health", (_req, res) => {
|
|
83
|
+
res.json({
|
|
84
|
+
status: "healthy",
|
|
85
|
+
timestamp: new Date().toISOString(),
|
|
86
|
+
oauth: this.config.oauth.enabled,
|
|
87
|
+
mode: this.config.stateless ? "stateless" : "stateful",
|
|
88
|
+
activeSessions: this.transports.size,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
// Root endpoint - helpful information for browser visitors
|
|
92
|
+
this.app.get("/", (_req, res) => {
|
|
93
|
+
res.json({
|
|
94
|
+
name: "db-mcp",
|
|
95
|
+
description: "SQLite MCP Server with HTTP/SSE transport",
|
|
96
|
+
mode: this.config.stateless ? "stateless" : "stateful",
|
|
97
|
+
endpoints: {
|
|
98
|
+
"POST /mcp": "JSON-RPC requests (MCP protocol)",
|
|
99
|
+
"GET /mcp": this.config.stateless === true
|
|
100
|
+
? "Not available in stateless mode"
|
|
101
|
+
: "SSE stream for server-to-client notifications",
|
|
102
|
+
"DELETE /mcp": "Session termination",
|
|
103
|
+
"GET /health": "Health check",
|
|
104
|
+
},
|
|
105
|
+
documentation: "https://github.com/neverinfamous/db-mcp",
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
// Set up MCP endpoints based on mode
|
|
109
|
+
if (this.config.stateless) {
|
|
110
|
+
await this.setupStatelessEndpoints();
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.setupStatefulEndpoints();
|
|
114
|
+
}
|
|
115
|
+
// Error handler
|
|
116
|
+
this.app.use(oauthErrorHandler);
|
|
117
|
+
logger.info("HTTP transport initialized", {
|
|
118
|
+
code: "HTTP_INIT_COMPLETE",
|
|
119
|
+
port: this.config.port,
|
|
120
|
+
oauth: this.config.oauth.enabled,
|
|
121
|
+
mode: this.config.stateless ? "stateless" : "stateful",
|
|
122
|
+
resourceUri,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Configure CORS with SSE-compatible headers
|
|
127
|
+
*/
|
|
128
|
+
setupCors() {
|
|
129
|
+
if (!this.app)
|
|
130
|
+
return;
|
|
131
|
+
// Manual CORS middleware for browser-based clients (e.g., MCP Inspector)
|
|
132
|
+
this.app.use((req, res, next) => {
|
|
133
|
+
// Set CORS headers on all responses
|
|
134
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
135
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
136
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, mcp-session-id, Last-Event-ID, mcp-protocol-version");
|
|
137
|
+
res.setHeader("Access-Control-Expose-Headers", "mcp-session-id");
|
|
138
|
+
// Handle OPTIONS preflight requests
|
|
139
|
+
if (req.method === "OPTIONS") {
|
|
140
|
+
res.status(204).end();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
next();
|
|
144
|
+
});
|
|
145
|
+
// Additional CORS config if provided
|
|
146
|
+
if (this.config.cors) {
|
|
147
|
+
this.app.use(cors(this.config.cors));
|
|
148
|
+
}
|
|
149
|
+
// Explicit OPTIONS handler for /mcp - MUST be before other /mcp routes
|
|
150
|
+
this.app.all("/mcp", (req, res, next) => {
|
|
151
|
+
// Set CORS headers on ALL responses
|
|
152
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
153
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
154
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, mcp-session-id, Last-Event-ID, mcp-protocol-version");
|
|
155
|
+
res.setHeader("Access-Control-Expose-Headers", "mcp-session-id");
|
|
156
|
+
// For OPTIONS, respond immediately with CORS headers
|
|
157
|
+
if (req.method === "OPTIONS") {
|
|
158
|
+
res.status(204).end();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// For other methods, continue to next handler
|
|
162
|
+
next();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Set up stateless mode endpoints (serverless-compatible)
|
|
167
|
+
*/
|
|
168
|
+
async setupStatelessEndpoints() {
|
|
169
|
+
if (!this.app || !this.mcpServer) {
|
|
170
|
+
throw new Error("Transport or server not initialized");
|
|
171
|
+
}
|
|
172
|
+
// Apply auth middleware if OAuth is enabled
|
|
173
|
+
this.applyAuthMiddleware();
|
|
174
|
+
// Create single stateless transport
|
|
175
|
+
// Note: omitting sessionIdGenerator signals stateless mode (no sessions)
|
|
176
|
+
this.statelessTransport = new StreamableHTTPServerTransport({
|
|
177
|
+
enableJsonResponse: true,
|
|
178
|
+
});
|
|
179
|
+
// Ensure transport has onclose handler (required by SDK 1.25.2+)
|
|
180
|
+
this.statelessTransport.onclose ??= () => {
|
|
181
|
+
logger.debug("Stateless transport closed", {
|
|
182
|
+
code: "HTTP_STATELESS_CLOSE",
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
// Connect transport to server (type assertion for SDK 1.25.2+ exact types)
|
|
186
|
+
await this.mcpServer.connect(this.statelessTransport);
|
|
187
|
+
logger.info("Stateless transport connected", { code: "HTTP_STATELESS" });
|
|
188
|
+
// POST /mcp - All requests go to the same transport (no session validation)
|
|
189
|
+
this.app.post("/mcp", (req, res) => {
|
|
190
|
+
if (!this.statelessTransport) {
|
|
191
|
+
res.status(500).json({ error: "Transport not initialized" });
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
void this.statelessTransport.handleRequest(req, res, req.body);
|
|
195
|
+
});
|
|
196
|
+
// GET /mcp - SSE not available in stateless mode
|
|
197
|
+
this.app.get("/mcp", (_req, res) => {
|
|
198
|
+
res.status(405).json({
|
|
199
|
+
jsonrpc: "2.0",
|
|
200
|
+
error: {
|
|
201
|
+
code: -32000,
|
|
202
|
+
message: "SSE streaming not available in stateless mode",
|
|
203
|
+
},
|
|
204
|
+
id: null,
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
// DELETE /mcp - No-op in stateless mode (no sessions to terminate)
|
|
208
|
+
this.app.delete("/mcp", (_req, res) => {
|
|
209
|
+
res.status(204).end();
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set up stateful mode endpoints with session management and SSE
|
|
214
|
+
*/
|
|
215
|
+
setupStatefulEndpoints() {
|
|
216
|
+
if (!this.app || !this.mcpServer) {
|
|
217
|
+
throw new Error("Transport or server not initialized");
|
|
218
|
+
}
|
|
219
|
+
// Apply auth middleware if OAuth is enabled
|
|
220
|
+
this.applyAuthMiddleware();
|
|
221
|
+
const server = this.mcpServer;
|
|
222
|
+
// POST /mcp - Handle JSON-RPC requests with session management
|
|
223
|
+
this.app.post("/mcp", (req, res) => {
|
|
224
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
225
|
+
// Helper: Check if this is an initialize request (single or in batch)
|
|
226
|
+
const isNewSessionRequest = (body) => {
|
|
227
|
+
// Single request
|
|
228
|
+
if (isInitializeRequest(body)) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// Batch request - check if first item is initialize
|
|
232
|
+
if (Array.isArray(body) && body.length > 0) {
|
|
233
|
+
return isInitializeRequest(body[0]);
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
};
|
|
237
|
+
void (async () => {
|
|
238
|
+
try {
|
|
239
|
+
let httpTransport;
|
|
240
|
+
if (sessionId && this.transports.has(sessionId)) {
|
|
241
|
+
// Reuse existing transport
|
|
242
|
+
httpTransport = this.transports.get(sessionId);
|
|
243
|
+
}
|
|
244
|
+
else if (sessionId === undefined && isNewSessionRequest(req.body)) {
|
|
245
|
+
// New initialization request - create transport
|
|
246
|
+
const newTransport = new StreamableHTTPServerTransport({
|
|
247
|
+
sessionIdGenerator: () => randomUUID(),
|
|
248
|
+
onsessioninitialized: (sid) => {
|
|
249
|
+
logger.info("HTTP session initialized", {
|
|
250
|
+
code: "HTTP_SESSION_INIT",
|
|
251
|
+
sessionId: sid,
|
|
252
|
+
});
|
|
253
|
+
this.transports.set(sid, newTransport);
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
// Clean up on transport close
|
|
257
|
+
newTransport.onclose = () => {
|
|
258
|
+
const sid = newTransport.sessionId;
|
|
259
|
+
if (sid !== undefined && this.transports.has(sid)) {
|
|
260
|
+
logger.info("HTTP transport closed", {
|
|
261
|
+
code: "HTTP_SESSION_CLOSE",
|
|
262
|
+
sessionId: sid,
|
|
263
|
+
});
|
|
264
|
+
this.transports.delete(sid);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
// Connect transport to server before handling request
|
|
268
|
+
// Type assertion for SDK 1.25.2+ exact optional types
|
|
269
|
+
await server.connect(newTransport);
|
|
270
|
+
await newTransport.handleRequest(req, res, req.body);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// Invalid request - no session ID or not initialization
|
|
275
|
+
res.status(400).json({
|
|
276
|
+
jsonrpc: "2.0",
|
|
277
|
+
error: {
|
|
278
|
+
code: -32000,
|
|
279
|
+
message: "Bad Request: No valid session ID provided",
|
|
280
|
+
},
|
|
281
|
+
id: null,
|
|
282
|
+
});
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Handle request with existing transport
|
|
286
|
+
if (httpTransport !== undefined) {
|
|
287
|
+
await httpTransport.handleRequest(req, res, req.body);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
logger.error("Error handling MCP request", {
|
|
292
|
+
code: ERROR_CODES.SERVER.TRANSPORT_ERROR.full,
|
|
293
|
+
error: error instanceof Error ? error : undefined,
|
|
294
|
+
});
|
|
295
|
+
if (!res.headersSent) {
|
|
296
|
+
res.status(500).json({
|
|
297
|
+
jsonrpc: "2.0",
|
|
298
|
+
error: { code: -32603, message: "Internal server error" },
|
|
299
|
+
id: null,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
})();
|
|
304
|
+
});
|
|
305
|
+
// GET /mcp - SSE stream for server-to-client notifications
|
|
306
|
+
this.app.get("/mcp", (req, res) => {
|
|
307
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
308
|
+
if (sessionId === undefined || !this.transports.has(sessionId)) {
|
|
309
|
+
res.status(400).send("Invalid or missing session ID");
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const lastEventId = req.headers["last-event-id"];
|
|
313
|
+
if (lastEventId !== undefined) {
|
|
314
|
+
logger.debug("Client reconnecting with Last-Event-ID", {
|
|
315
|
+
code: "HTTP_SSE_RECONNECT",
|
|
316
|
+
sessionId,
|
|
317
|
+
lastEventId,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
const httpTransport = this.transports.get(sessionId);
|
|
321
|
+
if (httpTransport !== undefined) {
|
|
322
|
+
void httpTransport.handleRequest(req, res);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
// DELETE /mcp - Session termination
|
|
326
|
+
this.app.delete("/mcp", (req, res) => {
|
|
327
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
328
|
+
if (sessionId === undefined || !this.transports.has(sessionId)) {
|
|
329
|
+
res.status(400).send("Invalid or missing session ID");
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
logger.info("Session termination requested", {
|
|
333
|
+
code: "HTTP_SESSION_DELETE",
|
|
334
|
+
sessionId,
|
|
335
|
+
});
|
|
336
|
+
const httpTransport = this.transports.get(sessionId);
|
|
337
|
+
if (httpTransport !== undefined) {
|
|
338
|
+
void httpTransport.handleRequest(req, res);
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Apply OAuth authentication middleware if enabled
|
|
344
|
+
*/
|
|
345
|
+
applyAuthMiddleware() {
|
|
346
|
+
if (this.config.oauth.enabled &&
|
|
347
|
+
this.tokenValidator &&
|
|
348
|
+
this.resourceServer &&
|
|
349
|
+
this.app) {
|
|
350
|
+
const authMiddleware = createAuthMiddleware({
|
|
351
|
+
tokenValidator: this.tokenValidator,
|
|
352
|
+
resourceServer: this.resourceServer,
|
|
353
|
+
publicPaths: ["/health", ...(this.config.oauth.publicPaths ?? [])],
|
|
354
|
+
});
|
|
355
|
+
this.app.use(authMiddleware);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Set up OAuth 2.0 components
|
|
360
|
+
*/
|
|
361
|
+
async setupOAuth(resourceUri) {
|
|
362
|
+
logger.info("Setting up OAuth 2.0...", { code: "HTTP_OAUTH_SETUP" });
|
|
363
|
+
// Create Resource Server
|
|
364
|
+
this.resourceServer = new OAuthResourceServer({
|
|
365
|
+
resource: resourceUri,
|
|
366
|
+
authorizationServers: [this.config.oauth.authorizationServerUrl],
|
|
367
|
+
scopesSupported: [...SUPPORTED_SCOPES],
|
|
368
|
+
});
|
|
369
|
+
// Serve Protected Resource Metadata endpoint
|
|
370
|
+
this.app?.get("/.well-known/oauth-protected-resource", this.resourceServer.getMetadataHandler());
|
|
371
|
+
// Discover authorization server metadata
|
|
372
|
+
this.authServerDiscovery = new AuthorizationServerDiscovery({
|
|
373
|
+
authServerUrl: this.config.oauth.authorizationServerUrl,
|
|
374
|
+
});
|
|
375
|
+
try {
|
|
376
|
+
const metadata = await this.authServerDiscovery.discover();
|
|
377
|
+
// Create Token Validator
|
|
378
|
+
this.tokenValidator = new TokenValidator({
|
|
379
|
+
jwksUri: this.config.oauth.jwksUri ?? metadata.jwks_uri ?? "",
|
|
380
|
+
issuer: this.config.oauth.issuer ?? metadata.issuer,
|
|
381
|
+
audience: this.config.oauth.audience,
|
|
382
|
+
clockTolerance: this.config.oauth.clockTolerance,
|
|
383
|
+
});
|
|
384
|
+
logger.info("OAuth 2.0 setup complete", { code: "HTTP_OAUTH_READY" });
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
// If discovery fails, we can still start without OAuth validation
|
|
388
|
+
logger.warning("Authorization server discovery failed. OAuth validation disabled.", {
|
|
389
|
+
code: ERROR_CODES.AUTH.DISCOVERY_FAILED.full,
|
|
390
|
+
error: error instanceof Error ? error : undefined,
|
|
391
|
+
});
|
|
392
|
+
if (!this.config.oauth.jwksUri) {
|
|
393
|
+
logger.error("No JWKS URI available. Please provide oauth.jwksUri in config.", { code: ERROR_CODES.AUTH.DISCOVERY_FAILED.full });
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
396
|
+
this.tokenValidator = new TokenValidator({
|
|
397
|
+
jwksUri: this.config.oauth.jwksUri,
|
|
398
|
+
issuer: this.config.oauth.issuer ?? this.config.oauth.authorizationServerUrl,
|
|
399
|
+
audience: this.config.oauth.audience,
|
|
400
|
+
clockTolerance: this.config.oauth.clockTolerance,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Start listening on the configured port
|
|
406
|
+
*/
|
|
407
|
+
async start() {
|
|
408
|
+
if (!this.app) {
|
|
409
|
+
throw new Error("Transport not initialized. Call initialize() first.");
|
|
410
|
+
}
|
|
411
|
+
return new Promise((resolve, reject) => {
|
|
412
|
+
try {
|
|
413
|
+
this.httpServer =
|
|
414
|
+
this.app?.listen(this.config.port, this.config.host ?? "0.0.0.0", () => {
|
|
415
|
+
logger.info(`HTTP server listening on ${this.config.host ?? "0.0.0.0"}:${String(this.config.port)}`, {
|
|
416
|
+
code: "HTTP_SERVER_STARTED",
|
|
417
|
+
mode: this.config.stateless ? "stateless" : "stateful",
|
|
418
|
+
});
|
|
419
|
+
resolve();
|
|
420
|
+
}) ?? null;
|
|
421
|
+
this.httpServer?.on("error", (error) => {
|
|
422
|
+
logger.error("Failed to start HTTP server", {
|
|
423
|
+
code: ERROR_CODES.SERVER.START_FAILED.full,
|
|
424
|
+
error,
|
|
425
|
+
});
|
|
426
|
+
reject(error);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Stop the server and close all active sessions
|
|
436
|
+
*/
|
|
437
|
+
async stop() {
|
|
438
|
+
// Close all active transports in stateful mode
|
|
439
|
+
for (const [sessionId, transport] of this.transports) {
|
|
440
|
+
try {
|
|
441
|
+
logger.debug("Closing transport", {
|
|
442
|
+
code: "HTTP_SESSION_CLEANUP",
|
|
443
|
+
sessionId,
|
|
444
|
+
});
|
|
445
|
+
await transport.close();
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
logger.error("Error closing transport", {
|
|
449
|
+
code: ERROR_CODES.SERVER.SHUTDOWN_FAILED.full,
|
|
450
|
+
sessionId,
|
|
451
|
+
error: error instanceof Error ? error : undefined,
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
this.transports.clear();
|
|
456
|
+
// Close stateless transport if in use
|
|
457
|
+
if (this.statelessTransport) {
|
|
458
|
+
try {
|
|
459
|
+
await this.statelessTransport.close();
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
logger.error("Error closing stateless transport", {
|
|
463
|
+
code: ERROR_CODES.SERVER.SHUTDOWN_FAILED.full,
|
|
464
|
+
error: error instanceof Error ? error : undefined,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return new Promise((resolve, reject) => {
|
|
469
|
+
if (!this.httpServer) {
|
|
470
|
+
resolve();
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
this.httpServer.close((error) => {
|
|
474
|
+
if (error) {
|
|
475
|
+
logger.error("Error stopping HTTP server", {
|
|
476
|
+
code: ERROR_CODES.SERVER.SHUTDOWN_FAILED.full,
|
|
477
|
+
error,
|
|
478
|
+
});
|
|
479
|
+
reject(error);
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
logger.info("HTTP server stopped", { code: "HTTP_SERVER_STOPPED" });
|
|
483
|
+
resolve();
|
|
484
|
+
}
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Get the underlying Express app
|
|
490
|
+
*/
|
|
491
|
+
getApp() {
|
|
492
|
+
return this.app;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Get the number of active sessions (stateful mode only)
|
|
496
|
+
*/
|
|
497
|
+
getActiveSessionCount() {
|
|
498
|
+
return this.transports.size;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Get the OAuth Resource Server
|
|
502
|
+
*/
|
|
503
|
+
getResourceServer() {
|
|
504
|
+
return this.resourceServer;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
// =============================================================================
|
|
508
|
+
// Factory Function
|
|
509
|
+
// =============================================================================
|
|
510
|
+
/**
|
|
511
|
+
* Create an HTTP transport instance
|
|
512
|
+
*/
|
|
513
|
+
export function createHttpTransport(config) {
|
|
514
|
+
return new HttpTransport(config);
|
|
515
|
+
}
|
|
516
|
+
//# 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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,GAEpB,MAAM,WAAW,CAAC"}
|