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,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db-mcp - Main MCP Server
|
|
3
|
+
*
|
|
4
|
+
* SQLite MCP server with OAuth 2.1 authentication,
|
|
5
|
+
* HTTP/SSE transport, and dynamic tool filtering.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServerConfig, DatabaseConfig } from "../types/index.js";
|
|
8
|
+
import { type DatabaseAdapter } from "../adapters/DatabaseAdapter.js";
|
|
9
|
+
/**
|
|
10
|
+
* Main db-mcp server class
|
|
11
|
+
*
|
|
12
|
+
* Manages database adapters, tool registration, and MCP protocol handling.
|
|
13
|
+
*/
|
|
14
|
+
export declare class DbMcpServer {
|
|
15
|
+
private server;
|
|
16
|
+
private adapters;
|
|
17
|
+
private toolFilter;
|
|
18
|
+
private config;
|
|
19
|
+
constructor(config: McpServerConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Register a database adapter
|
|
22
|
+
*/
|
|
23
|
+
registerAdapter(adapter: DatabaseAdapter, config: DatabaseConfig): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get an adapter by ID
|
|
26
|
+
*/
|
|
27
|
+
getAdapter(adapterId: string): DatabaseAdapter | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get all registered adapters
|
|
30
|
+
*/
|
|
31
|
+
getAdapters(): Map<string, DatabaseAdapter>;
|
|
32
|
+
/**
|
|
33
|
+
* Register built-in server tools (health, info, etc.)
|
|
34
|
+
*/
|
|
35
|
+
private registerBuiltInTools;
|
|
36
|
+
/**
|
|
37
|
+
* Start the server with the configured transport
|
|
38
|
+
*/
|
|
39
|
+
start(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Start server with stdio transport
|
|
42
|
+
*/
|
|
43
|
+
private startStdio;
|
|
44
|
+
/**
|
|
45
|
+
* Start server with HTTP transport (Streamable HTTP with SSE support)
|
|
46
|
+
*/
|
|
47
|
+
private startHttp;
|
|
48
|
+
/**
|
|
49
|
+
* Gracefully shut down the server
|
|
50
|
+
*/
|
|
51
|
+
shutdown(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create and configure a db-mcp server instance
|
|
55
|
+
*/
|
|
56
|
+
export declare function createServer(config: McpServerConfig): DbMcpServer;
|
|
57
|
+
/**
|
|
58
|
+
* Default server configuration
|
|
59
|
+
*/
|
|
60
|
+
export declare const DEFAULT_CONFIG: Partial<McpServerConfig>;
|
|
61
|
+
//# sourceMappingURL=McpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpServer.d.ts","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAStE;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IA8CnC;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAmBhB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D;;OAEG;IACH,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAI3C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuG5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;YACW,UAAU;IAQxB;;OAEG;YACW,SAAS;IAmDvB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAoBhC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAEjE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,eAAe,CAKnD,CAAC"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db-mcp - Main MCP Server
|
|
3
|
+
*
|
|
4
|
+
* SQLite MCP server with OAuth 2.1 authentication,
|
|
5
|
+
* HTTP/SSE transport, and dynamic tool filtering.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
+
import { parseToolFilter, getFilterSummary, getToolFilterFromEnv, } from "../filtering/ToolFilter.js";
|
|
10
|
+
import { generateInstructions } from "../constants/ServerInstructions.js";
|
|
11
|
+
import { logger } from "../utils/logger.js";
|
|
12
|
+
/**
|
|
13
|
+
* Main db-mcp server class
|
|
14
|
+
*
|
|
15
|
+
* Manages database adapters, tool registration, and MCP protocol handling.
|
|
16
|
+
*/
|
|
17
|
+
export class DbMcpServer {
|
|
18
|
+
server;
|
|
19
|
+
adapters = new Map();
|
|
20
|
+
toolFilter;
|
|
21
|
+
config;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
// Initialize tool filter from config or environment (needed for instructions)
|
|
25
|
+
this.toolFilter = config.toolFilter
|
|
26
|
+
? parseToolFilter(config.toolFilter)
|
|
27
|
+
: getToolFilterFromEnv();
|
|
28
|
+
// Generate server instructions based on enabled tools
|
|
29
|
+
const enabledTools = new Set();
|
|
30
|
+
for (const group of this.toolFilter.enabledGroups) {
|
|
31
|
+
// Add all tools from enabled groups to the set
|
|
32
|
+
enabledTools.add(group);
|
|
33
|
+
}
|
|
34
|
+
const instructions = generateInstructions(enabledTools, [], []);
|
|
35
|
+
// Initialize MCP server with logging capability and instructions
|
|
36
|
+
this.server = new McpServer({
|
|
37
|
+
name: config.name,
|
|
38
|
+
version: config.version,
|
|
39
|
+
}, {
|
|
40
|
+
capabilities: {
|
|
41
|
+
logging: {},
|
|
42
|
+
},
|
|
43
|
+
instructions,
|
|
44
|
+
});
|
|
45
|
+
// Log filter summary
|
|
46
|
+
logger.info(getFilterSummary(this.toolFilter), { module: "FILTER" });
|
|
47
|
+
// Log server initialization with capabilities
|
|
48
|
+
logger.info("MCP Server initialized", {
|
|
49
|
+
module: "SERVER",
|
|
50
|
+
name: config.name,
|
|
51
|
+
version: config.version,
|
|
52
|
+
toolFilter: config.toolFilter ?? "none",
|
|
53
|
+
capabilities: ["logging"],
|
|
54
|
+
});
|
|
55
|
+
// Register built-in tools
|
|
56
|
+
this.registerBuiltInTools();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Register a database adapter
|
|
60
|
+
*/
|
|
61
|
+
async registerAdapter(adapter, config) {
|
|
62
|
+
const adapterId = `${adapter.type}:${config.database ?? "default"}`;
|
|
63
|
+
// Connect to database
|
|
64
|
+
await adapter.connect(config);
|
|
65
|
+
// Store adapter
|
|
66
|
+
this.adapters.set(adapterId, adapter);
|
|
67
|
+
// Register adapter's tools with filtering
|
|
68
|
+
adapter.registerTools(this.server, this.toolFilter);
|
|
69
|
+
adapter.registerResources(this.server);
|
|
70
|
+
adapter.registerPrompts(this.server);
|
|
71
|
+
logger.info(`Registered adapter: ${adapter.name} (${adapterId})`, {
|
|
72
|
+
module: "SERVER",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get an adapter by ID
|
|
77
|
+
*/
|
|
78
|
+
getAdapter(adapterId) {
|
|
79
|
+
return this.adapters.get(adapterId);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get all registered adapters
|
|
83
|
+
*/
|
|
84
|
+
getAdapters() {
|
|
85
|
+
return this.adapters;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register built-in server tools (health, info, etc.)
|
|
89
|
+
*/
|
|
90
|
+
registerBuiltInTools() {
|
|
91
|
+
// Server info tool
|
|
92
|
+
this.server.registerTool("server_info", {
|
|
93
|
+
description: "Get information about the db-mcp server and registered adapters",
|
|
94
|
+
}, () => {
|
|
95
|
+
const adapterInfo = [];
|
|
96
|
+
for (const [id, adapter] of this.adapters) {
|
|
97
|
+
adapterInfo.push({
|
|
98
|
+
id,
|
|
99
|
+
...adapter.getInfo(),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
content: [
|
|
104
|
+
{
|
|
105
|
+
type: "text",
|
|
106
|
+
text: JSON.stringify({
|
|
107
|
+
name: this.config.name,
|
|
108
|
+
version: this.config.version,
|
|
109
|
+
transport: this.config.transport,
|
|
110
|
+
adapters: adapterInfo,
|
|
111
|
+
toolFilter: {
|
|
112
|
+
raw: this.toolFilter.raw,
|
|
113
|
+
enabledGroups: [...this.toolFilter.enabledGroups],
|
|
114
|
+
},
|
|
115
|
+
}, null, 2),
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
// Health check tool
|
|
121
|
+
this.server.registerTool("server_health", { description: "Check health status of all database connections" }, async () => {
|
|
122
|
+
const health = {
|
|
123
|
+
server: "healthy",
|
|
124
|
+
timestamp: new Date().toISOString(),
|
|
125
|
+
adapters: {},
|
|
126
|
+
};
|
|
127
|
+
for (const [id, adapter] of this.adapters) {
|
|
128
|
+
try {
|
|
129
|
+
const adapterHealth = await adapter.getHealth();
|
|
130
|
+
health["adapters"][id] = adapterHealth;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
health["adapters"][id] = {
|
|
134
|
+
connected: false,
|
|
135
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
content: [
|
|
141
|
+
{
|
|
142
|
+
type: "text",
|
|
143
|
+
text: JSON.stringify(health, null, 2),
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
// List adapters tool
|
|
149
|
+
this.server.registerTool("list_adapters", { description: "List all registered database adapters" }, () => {
|
|
150
|
+
const adapters = [];
|
|
151
|
+
for (const [id, adapter] of this.adapters) {
|
|
152
|
+
adapters.push({
|
|
153
|
+
id,
|
|
154
|
+
type: adapter.type,
|
|
155
|
+
name: adapter.name,
|
|
156
|
+
version: adapter.version,
|
|
157
|
+
connected: adapter.isConnected(),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: "text",
|
|
164
|
+
text: JSON.stringify(adapters, null, 2),
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Start the server with the configured transport
|
|
172
|
+
*/
|
|
173
|
+
async start() {
|
|
174
|
+
switch (this.config.transport) {
|
|
175
|
+
case "stdio":
|
|
176
|
+
await this.startStdio();
|
|
177
|
+
break;
|
|
178
|
+
case "http":
|
|
179
|
+
await this.startHttp();
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
throw new Error(`Unsupported transport: ${this.config.transport}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Start server with stdio transport
|
|
187
|
+
*/
|
|
188
|
+
async startStdio() {
|
|
189
|
+
const transport = new StdioServerTransport();
|
|
190
|
+
await this.server.connect(transport);
|
|
191
|
+
logger.info(`db-mcp server started (stdio transport)`, {
|
|
192
|
+
module: "SERVER",
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start server with HTTP transport (Streamable HTTP with SSE support)
|
|
197
|
+
*/
|
|
198
|
+
async startHttp() {
|
|
199
|
+
const { HttpTransport } = await import("../transports/http.js");
|
|
200
|
+
// Build OAuth config, only including defined optional properties
|
|
201
|
+
const oauthConfig = {
|
|
202
|
+
enabled: this.config.oauth?.enabled ?? false,
|
|
203
|
+
authorizationServerUrl: this.config.oauth?.authorizationServerUrl ?? "",
|
|
204
|
+
audience: this.config.oauth?.audience ?? this.config.name,
|
|
205
|
+
};
|
|
206
|
+
// Only add optional properties if they are defined
|
|
207
|
+
if (this.config.oauth?.issuer !== undefined) {
|
|
208
|
+
oauthConfig.issuer = this.config.oauth.issuer;
|
|
209
|
+
}
|
|
210
|
+
if (this.config.oauth?.jwksUri !== undefined) {
|
|
211
|
+
oauthConfig.jwksUri = this.config.oauth.jwksUri;
|
|
212
|
+
}
|
|
213
|
+
if (this.config.oauth?.clockTolerance !== undefined) {
|
|
214
|
+
oauthConfig.clockTolerance = this.config.oauth.clockTolerance;
|
|
215
|
+
}
|
|
216
|
+
if (this.config.oauth?.publicPaths !== undefined) {
|
|
217
|
+
oauthConfig.publicPaths = this.config.oauth.publicPaths;
|
|
218
|
+
}
|
|
219
|
+
const transport = new HttpTransport({
|
|
220
|
+
port: this.config.port ?? 3000,
|
|
221
|
+
oauth: oauthConfig,
|
|
222
|
+
stateless: this.config.statelessHttp ?? false,
|
|
223
|
+
});
|
|
224
|
+
// Initialize transport with the MCP server reference
|
|
225
|
+
// In stateful mode, transport manages sessions internally
|
|
226
|
+
// In stateless mode, transport creates a single shared connection
|
|
227
|
+
await transport.initialize(this.server);
|
|
228
|
+
await transport.start();
|
|
229
|
+
const mode = this.config.statelessHttp ? "stateless" : "stateful";
|
|
230
|
+
logger.info(`db-mcp server started (HTTP transport on port ${String(this.config.port ?? 3000)}, ${mode} mode)`, { module: "TRANSPORT", mode });
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Gracefully shut down the server
|
|
234
|
+
*/
|
|
235
|
+
async shutdown() {
|
|
236
|
+
logger.info("Shutting down db-mcp server...", { module: "SERVER" });
|
|
237
|
+
// Disconnect all adapters
|
|
238
|
+
for (const [id, adapter] of this.adapters) {
|
|
239
|
+
try {
|
|
240
|
+
await adapter.disconnect();
|
|
241
|
+
logger.info(`Disconnected adapter: ${id}`, { module: "SERVER" });
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
logger.error(`Error disconnecting adapter ${id}`, {
|
|
245
|
+
module: "SERVER",
|
|
246
|
+
error: error instanceof Error ? error : undefined,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Close MCP server
|
|
251
|
+
await this.server.close();
|
|
252
|
+
logger.info("Server shutdown complete", { module: "SERVER" });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create and configure a db-mcp server instance
|
|
257
|
+
*/
|
|
258
|
+
export function createServer(config) {
|
|
259
|
+
return new DbMcpServer(config);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Default server configuration
|
|
263
|
+
*/
|
|
264
|
+
export const DEFAULT_CONFIG = {
|
|
265
|
+
name: "db-mcp",
|
|
266
|
+
version: "0.1.0",
|
|
267
|
+
transport: "stdio",
|
|
268
|
+
databases: [],
|
|
269
|
+
};
|
|
270
|
+
//# sourceMappingURL=McpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpServer.js","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
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 { type Express } from "express";
|
|
13
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
|
+
import { OAuthResourceServer } from "../auth/OAuthResourceServer.js";
|
|
15
|
+
/**
|
|
16
|
+
* HTTP transport configuration
|
|
17
|
+
*/
|
|
18
|
+
export interface HttpTransportConfig {
|
|
19
|
+
/** Port to listen on */
|
|
20
|
+
port: number;
|
|
21
|
+
/** Host to bind to (default: '0.0.0.0') */
|
|
22
|
+
host?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Enable stateless HTTP mode (no session management, no SSE streaming).
|
|
25
|
+
* Ideal for serverless deployments (Lambda, Workers, Vercel).
|
|
26
|
+
* Default: false (stateful mode with session management and SSE support)
|
|
27
|
+
*/
|
|
28
|
+
stateless?: boolean;
|
|
29
|
+
/** OAuth configuration */
|
|
30
|
+
oauth: {
|
|
31
|
+
/** Enable OAuth authentication */
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
/** Authorization server URL */
|
|
34
|
+
authorizationServerUrl: string;
|
|
35
|
+
/** Expected audience in tokens */
|
|
36
|
+
audience: string;
|
|
37
|
+
/** Expected issuer (defaults to authorizationServerUrl) */
|
|
38
|
+
issuer?: string;
|
|
39
|
+
/** JWKS URI (auto-discovered if not provided) */
|
|
40
|
+
jwksUri?: string;
|
|
41
|
+
/** Clock tolerance in seconds (default: 60) */
|
|
42
|
+
clockTolerance?: number;
|
|
43
|
+
/** Paths that bypass authentication */
|
|
44
|
+
publicPaths?: string[];
|
|
45
|
+
};
|
|
46
|
+
/** CORS configuration */
|
|
47
|
+
cors?: {
|
|
48
|
+
/** Allowed origins */
|
|
49
|
+
origin?: string | string[] | boolean;
|
|
50
|
+
/** Allowed methods */
|
|
51
|
+
methods?: string[];
|
|
52
|
+
/** Allowed headers */
|
|
53
|
+
allowedHeaders?: string[];
|
|
54
|
+
/** Exposed headers */
|
|
55
|
+
exposedHeaders?: string[];
|
|
56
|
+
/** Allow credentials */
|
|
57
|
+
credentials?: boolean;
|
|
58
|
+
};
|
|
59
|
+
/** Resource URI (defaults to http://localhost:{port}) */
|
|
60
|
+
resourceUri?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* HTTP Transport for MCP with OAuth 2.0 integration and SSE support.
|
|
64
|
+
*
|
|
65
|
+
* Supports two modes:
|
|
66
|
+
* - Stateful (default): Multi-session management with SSE streaming for notifications
|
|
67
|
+
* - Stateless: Single transport, no session management - ideal for serverless
|
|
68
|
+
*/
|
|
69
|
+
export declare class HttpTransport {
|
|
70
|
+
private readonly config;
|
|
71
|
+
private app;
|
|
72
|
+
private httpServer;
|
|
73
|
+
private transports;
|
|
74
|
+
private statelessTransport;
|
|
75
|
+
private resourceServer;
|
|
76
|
+
private authServerDiscovery;
|
|
77
|
+
private tokenValidator;
|
|
78
|
+
private mcpServer;
|
|
79
|
+
constructor(config: HttpTransportConfig);
|
|
80
|
+
/**
|
|
81
|
+
* Initialize the transport with the MCP server.
|
|
82
|
+
*
|
|
83
|
+
* For stateful mode, the server reference is stored to connect new sessions.
|
|
84
|
+
* For stateless mode, a single transport is created and connected.
|
|
85
|
+
*
|
|
86
|
+
* @param server - The MCP server instance
|
|
87
|
+
*/
|
|
88
|
+
initialize(server: McpServer): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Configure CORS with SSE-compatible headers
|
|
91
|
+
*/
|
|
92
|
+
private setupCors;
|
|
93
|
+
/**
|
|
94
|
+
* Set up stateless mode endpoints (serverless-compatible)
|
|
95
|
+
*/
|
|
96
|
+
private setupStatelessEndpoints;
|
|
97
|
+
/**
|
|
98
|
+
* Set up stateful mode endpoints with session management and SSE
|
|
99
|
+
*/
|
|
100
|
+
private setupStatefulEndpoints;
|
|
101
|
+
/**
|
|
102
|
+
* Apply OAuth authentication middleware if enabled
|
|
103
|
+
*/
|
|
104
|
+
private applyAuthMiddleware;
|
|
105
|
+
/**
|
|
106
|
+
* Set up OAuth 2.0 components
|
|
107
|
+
*/
|
|
108
|
+
private setupOAuth;
|
|
109
|
+
/**
|
|
110
|
+
* Start listening on the configured port
|
|
111
|
+
*/
|
|
112
|
+
start(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Stop the server and close all active sessions
|
|
115
|
+
*/
|
|
116
|
+
stop(): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Get the underlying Express app
|
|
119
|
+
*/
|
|
120
|
+
getApp(): Express | null;
|
|
121
|
+
/**
|
|
122
|
+
* Get the number of active sessions (stateful mode only)
|
|
123
|
+
*/
|
|
124
|
+
getActiveSessionCount(): number;
|
|
125
|
+
/**
|
|
126
|
+
* Get the OAuth Resource Server
|
|
127
|
+
*/
|
|
128
|
+
getResourceServer(): OAuthResourceServer | null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create an HTTP transport instance
|
|
132
|
+
*/
|
|
133
|
+
export declare function createHttpTransport(config: HttpTransportConfig): HttpTransport;
|
|
134
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAAuB,MAAM,SAAS,CAAC;AAMrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAcrE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,0BAA0B;IAC1B,KAAK,EAAE;QACL,kCAAkC;QAClC,OAAO,EAAE,OAAO,CAAC;QAEjB,+BAA+B;QAC/B,sBAAsB,EAAE,MAAM,CAAC;QAE/B,kCAAkC;QAClC,QAAQ,EAAE,MAAM,CAAC;QAEjB,2DAA2D;QAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,iDAAiD;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,+CAA+C;QAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,uCAAuC;QACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IAEF,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACL,sBAAsB;QACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;QAErC,sBAAsB;QACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAEnB,sBAAsB;QACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAE1B,sBAAsB;QACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAE1B,wBAAwB;QACxB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IAEF,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,UAAU,CAA4B;IAG9C,OAAO,CAAC,UAAU,CAAoD;IAGtE,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,mBAAmB,CAA6C;IACxE,OAAO,CAAC,cAAc,CAA+B;IAGrD,OAAO,CAAC,SAAS,CAA0B;gBAE/B,MAAM,EAAE,mBAAmB;IAQvC;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA2ElD;;OAEG;IACH,OAAO,CAAC,SAAS;IAwDjB;;OAEG;YACW,uBAAuB;IA2DrC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8J9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,UAAU;IA6DxB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD3B;;OAEG;IACH,MAAM,IAAI,OAAO,GAAG,IAAI;IAIxB;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;OAEG;IACH,iBAAiB,IAAI,mBAAmB,GAAG,IAAI;CAGhD;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAC1B,aAAa,CAEf"}
|