@hellocrossman/mcp-sdk 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +99 -28
  2. package/dist/cjs/cli.d.ts +3 -0
  3. package/dist/cjs/cli.d.ts.map +1 -0
  4. package/dist/cjs/cli.js +182 -0
  5. package/dist/cjs/cli.js.map +1 -0
  6. package/dist/cjs/db-executor.d.ts +4 -0
  7. package/dist/cjs/db-executor.d.ts.map +1 -0
  8. package/dist/cjs/db-executor.js +152 -0
  9. package/dist/cjs/db-executor.js.map +1 -0
  10. package/dist/cjs/db-introspect.d.ts +18 -0
  11. package/dist/cjs/db-introspect.d.ts.map +1 -0
  12. package/dist/cjs/db-introspect.js +145 -0
  13. package/dist/cjs/db-introspect.js.map +1 -0
  14. package/dist/cjs/db-tool-generator.d.ts +9 -0
  15. package/dist/cjs/db-tool-generator.d.ts.map +1 -0
  16. package/dist/cjs/db-tool-generator.js +167 -0
  17. package/dist/cjs/db-tool-generator.js.map +1 -0
  18. package/dist/cjs/enrichment.d.ts +13 -0
  19. package/dist/cjs/enrichment.d.ts.map +1 -0
  20. package/dist/cjs/enrichment.js +36 -0
  21. package/dist/cjs/enrichment.js.map +1 -0
  22. package/dist/cjs/index.d.ts +2 -0
  23. package/dist/cjs/index.d.ts.map +1 -1
  24. package/dist/cjs/index.js +4 -1
  25. package/dist/cjs/index.js.map +1 -1
  26. package/dist/cjs/introspect.d.ts.map +1 -1
  27. package/dist/cjs/introspect.js +10 -4
  28. package/dist/cjs/introspect.js.map +1 -1
  29. package/dist/cjs/server.d.ts +1 -0
  30. package/dist/cjs/server.d.ts.map +1 -1
  31. package/dist/cjs/server.js +113 -15
  32. package/dist/cjs/server.js.map +1 -1
  33. package/dist/cjs/types.d.ts +6 -0
  34. package/dist/cjs/types.d.ts.map +1 -1
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +177 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/db-executor.d.ts +4 -0
  40. package/dist/db-executor.d.ts.map +1 -0
  41. package/dist/db-executor.js +125 -0
  42. package/dist/db-executor.js.map +1 -0
  43. package/dist/db-introspect.d.ts +18 -0
  44. package/dist/db-introspect.d.ts.map +1 -0
  45. package/dist/db-introspect.js +118 -0
  46. package/dist/db-introspect.js.map +1 -0
  47. package/dist/db-tool-generator.d.ts +9 -0
  48. package/dist/db-tool-generator.d.ts.map +1 -0
  49. package/dist/db-tool-generator.js +163 -0
  50. package/dist/db-tool-generator.js.map +1 -0
  51. package/dist/enrichment.d.ts +13 -0
  52. package/dist/enrichment.d.ts.map +1 -0
  53. package/dist/enrichment.js +33 -0
  54. package/dist/enrichment.js.map +1 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/introspect.d.ts.map +1 -1
  60. package/dist/introspect.js +10 -4
  61. package/dist/introspect.js.map +1 -1
  62. package/dist/server.d.ts +1 -0
  63. package/dist/server.d.ts.map +1 -1
  64. package/dist/server.js +113 -15
  65. package/dist/server.js.map +1 -1
  66. package/dist/types.d.ts +6 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +13 -3
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.detectDatabaseUrl = detectDatabaseUrl;
27
+ exports.introspectDatabase = introspectDatabase;
28
+ const DB_ENV_KEYS = [
29
+ "DATABASE_URL",
30
+ "DB_URL",
31
+ "POSTGRES_URL",
32
+ "PG_CONNECTION_STRING",
33
+ "PGDATABASE",
34
+ ];
35
+ function detectDatabaseUrl() {
36
+ for (const key of DB_ENV_KEYS) {
37
+ const val = process.env[key];
38
+ if (val && val.length > 0) {
39
+ return val;
40
+ }
41
+ }
42
+ if (process.env.PGHOST && process.env.PGDATABASE) {
43
+ const host = process.env.PGHOST;
44
+ const port = process.env.PGPORT || "5432";
45
+ const db = process.env.PGDATABASE;
46
+ const user = process.env.PGUSER || "postgres";
47
+ const pass = process.env.PGPASSWORD || "";
48
+ return `postgresql://${user}:${pass}@${host}:${port}/${db}`;
49
+ }
50
+ return null;
51
+ }
52
+ function mapPgType(pgType) {
53
+ const t = pgType.toLowerCase();
54
+ if (t.includes("int") ||
55
+ t === "serial" ||
56
+ t === "bigserial" ||
57
+ t === "smallserial" ||
58
+ t === "numeric" ||
59
+ t === "decimal" ||
60
+ t === "real" ||
61
+ t === "double precision" ||
62
+ t === "float") {
63
+ return "number";
64
+ }
65
+ if (t === "boolean" || t === "bool") {
66
+ return "boolean";
67
+ }
68
+ if (t === "jsonb" || t === "json") {
69
+ return "object";
70
+ }
71
+ if (t.includes("timestamp") || t === "date") {
72
+ return "string";
73
+ }
74
+ if (t === "uuid") {
75
+ return "string";
76
+ }
77
+ if (t.startsWith("_") || t.includes("[]")) {
78
+ return "array";
79
+ }
80
+ return "string";
81
+ }
82
+ async function introspectDatabase(connectionUrl) {
83
+ let pg;
84
+ try {
85
+ pg = await Promise.resolve().then(() => __importStar(require("pg")));
86
+ }
87
+ catch {
88
+ throw new Error("[mcp-sdk] 'pg' package is required for database introspection. Install it with: npm install pg");
89
+ }
90
+ const Pool = pg.default?.Pool || pg.Pool;
91
+ const pool = new Pool({
92
+ connectionString: connectionUrl,
93
+ max: 2,
94
+ connectionTimeoutMillis: 5000,
95
+ idleTimeoutMillis: 10000,
96
+ });
97
+ try {
98
+ const tablesResult = await pool.query(`
99
+ SELECT table_name
100
+ FROM information_schema.tables
101
+ WHERE table_schema = 'public'
102
+ AND table_type = 'BASE TABLE'
103
+ ORDER BY table_name
104
+ `);
105
+ const tables = [];
106
+ for (const row of tablesResult.rows) {
107
+ const tableName = row.table_name;
108
+ const colsResult = await pool.query(`
109
+ SELECT
110
+ c.column_name,
111
+ c.data_type,
112
+ c.udt_name,
113
+ c.is_nullable,
114
+ c.column_default,
115
+ CASE WHEN pk.column_name IS NOT NULL THEN true ELSE false END as is_primary
116
+ FROM information_schema.columns c
117
+ LEFT JOIN (
118
+ SELECT ku.column_name
119
+ FROM information_schema.table_constraints tc
120
+ JOIN information_schema.key_column_usage ku
121
+ ON tc.constraint_name = ku.constraint_name
122
+ WHERE tc.table_name = $1
123
+ AND tc.constraint_type = 'PRIMARY KEY'
124
+ AND tc.table_schema = 'public'
125
+ ) pk ON pk.column_name = c.column_name
126
+ WHERE c.table_name = $1
127
+ AND c.table_schema = 'public'
128
+ ORDER BY c.ordinal_position
129
+ `, [tableName]);
130
+ const columns = colsResult.rows.map((col) => ({
131
+ name: col.column_name,
132
+ type: mapPgType(col.udt_name || col.data_type),
133
+ nullable: col.is_nullable === "YES",
134
+ isPrimary: col.is_primary,
135
+ hasDefault: col.column_default !== null,
136
+ }));
137
+ tables.push({ name: tableName, columns });
138
+ }
139
+ return { tables, connectionSource: "auto-detected" };
140
+ }
141
+ finally {
142
+ await pool.end();
143
+ }
144
+ }
145
+ //# sourceMappingURL=db-introspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-introspect.js","sourceRoot":"","sources":["../../src/db-introspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { DbTable } from "./db-introspect.js";
2
+ import type { DiscoveredTool } from "./types.js";
3
+ export declare function isSensitiveTable(tableName: string): boolean;
4
+ export declare function generateToolsFromTables(tables: DbTable[], options?: {
5
+ excludeTables?: string[];
6
+ includeTables?: string[];
7
+ includeWrites?: boolean;
8
+ }): DiscoveredTool[];
9
+ //# sourceMappingURL=db-tool-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-tool-generator.d.ts","sourceRoot":"","sources":["../../src/db-tool-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkDjD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG3D;AA2DD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,cAAc,EAAE,CA0ElB"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSensitiveTable = isSensitiveTable;
4
+ exports.generateToolsFromTables = generateToolsFromTables;
5
+ const SENSITIVE_TABLES = [
6
+ "users",
7
+ "user",
8
+ "accounts",
9
+ "account",
10
+ "sessions",
11
+ "session",
12
+ "passwords",
13
+ "password_resets",
14
+ "tokens",
15
+ "access_tokens",
16
+ "refresh_tokens",
17
+ "api_keys",
18
+ "secrets",
19
+ "credentials",
20
+ "auth",
21
+ "authentication",
22
+ "oauth",
23
+ "oauth_tokens",
24
+ "migrations",
25
+ "schema_migrations",
26
+ "drizzle",
27
+ "__drizzle_migrations",
28
+ "knex_migrations",
29
+ "knex_migrations_lock",
30
+ "typeorm_metadata",
31
+ "prisma_migrations",
32
+ "_prisma_migrations",
33
+ "pgmigrations",
34
+ ];
35
+ const SENSITIVE_COLUMNS = [
36
+ "password",
37
+ "password_hash",
38
+ "hashed_password",
39
+ "secret",
40
+ "api_key",
41
+ "api_secret",
42
+ "token",
43
+ "access_token",
44
+ "refresh_token",
45
+ "private_key",
46
+ "ssn",
47
+ "social_security",
48
+ "credit_card",
49
+ "card_number",
50
+ ];
51
+ function isSensitiveTable(tableName) {
52
+ const lower = tableName.toLowerCase();
53
+ return SENSITIVE_TABLES.includes(lower);
54
+ }
55
+ function filterSensitiveColumns(columns) {
56
+ return columns.filter((col) => !SENSITIVE_COLUMNS.includes(col.name.toLowerCase()));
57
+ }
58
+ function formatTableName(name) {
59
+ return name
60
+ .replace(/_/g, " ")
61
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
62
+ .toLowerCase();
63
+ }
64
+ function buildInputSchema(columns, mode) {
65
+ const properties = {};
66
+ const required = [];
67
+ if (mode === "get_by_id") {
68
+ const pk = columns.find((c) => c.isPrimary);
69
+ if (pk) {
70
+ properties[pk.name] = {
71
+ type: pk.type === "number" ? "number" : "string",
72
+ description: `The ${pk.name} of the record`,
73
+ };
74
+ required.push(pk.name);
75
+ }
76
+ }
77
+ else {
78
+ properties["limit"] = {
79
+ type: "number",
80
+ description: "Maximum number of results to return (default: 50)",
81
+ };
82
+ properties["offset"] = {
83
+ type: "number",
84
+ description: "Number of results to skip for pagination",
85
+ };
86
+ const filterableCols = columns.filter((c) => !c.isPrimary && (c.type === "string" || c.type === "number" || c.type === "boolean"));
87
+ for (const col of filterableCols.slice(0, 5)) {
88
+ properties[`filter_${col.name}`] = {
89
+ type: col.type,
90
+ description: `Filter by ${col.name.replace(/_/g, " ")}`,
91
+ };
92
+ }
93
+ }
94
+ return {
95
+ type: "object",
96
+ properties,
97
+ required: required.length > 0 ? required : undefined,
98
+ };
99
+ }
100
+ function generateToolsFromTables(tables, options = {}) {
101
+ const tools = [];
102
+ for (const table of tables) {
103
+ if (options.includeTables && options.includeTables.length > 0) {
104
+ if (!options.includeTables.includes(table.name))
105
+ continue;
106
+ }
107
+ else {
108
+ if (isSensitiveTable(table.name))
109
+ continue;
110
+ if (options.excludeTables &&
111
+ options.excludeTables.includes(table.name))
112
+ continue;
113
+ }
114
+ const safeColumns = filterSensitiveColumns(table.columns);
115
+ const pk = table.columns.find((c) => c.isPrimary);
116
+ const readableName = formatTableName(table.name);
117
+ tools.push({
118
+ name: `list_${table.name}`,
119
+ description: `List all ${readableName} records with optional filtering and pagination`,
120
+ method: "DB_QUERY",
121
+ path: `db://${table.name}`,
122
+ inputSchema: buildInputSchema(safeColumns, "list"),
123
+ params: [],
124
+ dbOperation: "list",
125
+ });
126
+ if (pk) {
127
+ tools.push({
128
+ name: `get_${table.name}_by_${pk.name}`,
129
+ description: `Get a specific ${readableName} record by its ${pk.name}`,
130
+ method: "DB_QUERY",
131
+ path: `db://${table.name}/${pk.name}`,
132
+ inputSchema: buildInputSchema(safeColumns, "get_by_id"),
133
+ params: [pk.name],
134
+ dbOperation: "get_by_id",
135
+ });
136
+ }
137
+ if (options.includeWrites) {
138
+ const insertCols = safeColumns.filter((c) => !c.isPrimary && !c.hasDefault);
139
+ const insertProps = {};
140
+ const insertRequired = [];
141
+ for (const col of insertCols) {
142
+ insertProps[col.name] = {
143
+ type: col.type,
144
+ description: `The ${col.name.replace(/_/g, " ")} value`,
145
+ };
146
+ if (!col.nullable) {
147
+ insertRequired.push(col.name);
148
+ }
149
+ }
150
+ tools.push({
151
+ name: `create_${table.name}`,
152
+ description: `Create a new ${readableName} record`,
153
+ method: "DB_INSERT",
154
+ path: `db://${table.name}`,
155
+ inputSchema: {
156
+ type: "object",
157
+ properties: insertProps,
158
+ required: insertRequired.length > 0 ? insertRequired : undefined,
159
+ },
160
+ params: [],
161
+ dbOperation: "insert",
162
+ });
163
+ }
164
+ }
165
+ return tools;
166
+ }
167
+ //# sourceMappingURL=db-tool-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-tool-generator.js","sourceRoot":"","sources":["../../src/db-tool-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { DiscoveredTool } from "./types.js";
2
+ interface EnrichmentOptions {
3
+ name?: string;
4
+ description?: string;
5
+ endpoint?: string;
6
+ }
7
+ interface EnrichedTool {
8
+ name?: string;
9
+ description?: string;
10
+ }
11
+ export declare function enrichTools(tools: DiscoveredTool[], options?: EnrichmentOptions): Promise<EnrichedTool[]>;
12
+ export {};
13
+ //# sourceMappingURL=enrichment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment.d.ts","sourceRoot":"","sources":["../../src/enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC,CAkCzB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enrichTools = enrichTools;
4
+ const DEFAULT_ENRICHMENT_URL = "https://mcp-skill-scanner.replit.app/api/enrich";
5
+ async function enrichTools(tools, options = {}) {
6
+ const endpoint = options.endpoint || DEFAULT_ENRICHMENT_URL;
7
+ const toolSummaries = tools.map((t) => ({
8
+ name: t.name,
9
+ description: t.description,
10
+ method: t.method,
11
+ path: t.path,
12
+ }));
13
+ const controller = new AbortController();
14
+ const timeout = setTimeout(() => controller.abort(), 15000);
15
+ try {
16
+ const res = await fetch(endpoint, {
17
+ method: "POST",
18
+ headers: { "Content-Type": "application/json" },
19
+ body: JSON.stringify({
20
+ serverName: options.name,
21
+ serverDescription: options.description,
22
+ tools: toolSummaries,
23
+ }),
24
+ signal: controller.signal,
25
+ });
26
+ if (!res.ok) {
27
+ throw new Error(`Enrichment API returned ${res.status}`);
28
+ }
29
+ const data = (await res.json());
30
+ return data.tools || [];
31
+ }
32
+ finally {
33
+ clearTimeout(timeout);
34
+ }
35
+ }
36
+ //# sourceMappingURL=enrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../../src/enrichment.ts"],"names":[],"mappings":";;AAeA,kCAqCC;AAlDD,MAAM,sBAAsB,GAAG,iDAAiD,CAAC;AAa1E,KAAK,UAAU,WAAW,CAC/B,KAAuB,EACvB,UAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,sBAAsB,CAAC;IAE5D,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEJ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,OAAO,CAAC,IAAI;gBACxB,iBAAiB,EAAE,OAAO,CAAC,WAAW;gBACtC,KAAK,EAAE,aAAa;aACrB,CAAC;YACF,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA8B,CAAC;QAC7D,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC1B,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { createMcpServer } from "./server.js";
2
2
  export type { McpServerOptions, DiscoveredRoute, DiscoveredTool } from "./types.js";
3
+ export { detectDatabaseUrl, introspectDatabase } from "./db-introspect.js";
4
+ export type { DbTable, DbColumn, DbIntrospectionResult } from "./db-introspect.js";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMcpServer = void 0;
3
+ exports.introspectDatabase = exports.detectDatabaseUrl = exports.createMcpServer = void 0;
4
4
  var server_js_1 = require("./server.js");
5
5
  Object.defineProperty(exports, "createMcpServer", { enumerable: true, get: function () { return server_js_1.createMcpServer; } });
6
+ var db_introspect_js_1 = require("./db-introspect.js");
7
+ Object.defineProperty(exports, "detectDatabaseUrl", { enumerable: true, get: function () { return db_introspect_js_1.detectDatabaseUrl; } });
8
+ Object.defineProperty(exports, "introspectDatabase", { enumerable: true, get: function () { return db_introspect_js_1.introspectDatabase; } });
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AAArC,4GAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AAExB,uDAA2E;AAAlE,qHAAA,iBAAiB,OAAA;AAAE,sHAAA,kBAAkB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/introspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,WAAW,SAAS,GACnB,eAAe,EAAE,CAkEnB"}
1
+ {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/introspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,WAAW,SAAS,GACnB,eAAe,EAAE,CAyEnB"}
@@ -45,16 +45,22 @@ function introspectExpressRoutes(app, routePrefix = "/api") {
45
45
  }
46
46
  const a = app;
47
47
  let router = null;
48
- if (typeof a.router === "function" && a.router.stack) {
49
- router = a.router;
50
- }
51
- else if (a._router && a._router.stack) {
48
+ if (a._router && a._router.stack) {
52
49
  router = a._router;
53
50
  }
54
51
  else if (typeof a.lazyrouter === "function") {
55
52
  a.lazyrouter();
56
53
  router = a._router;
57
54
  }
55
+ if (!router) {
56
+ try {
57
+ const r = a.router;
58
+ if (r && r.stack) {
59
+ router = r;
60
+ }
61
+ }
62
+ catch (_) { }
63
+ }
58
64
  if (router && router.stack) {
59
65
  extractRoutes(router.stack);
60
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/introspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/introspect.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ import type { McpServerOptions, DiscoveredTool } from "./types.js";
2
2
  export declare function createMcpServer(options: McpServerOptions): {
3
3
  readonly tools: DiscoveredTool[];
4
4
  readonly routes: import("./types.js").DiscoveredRoute[];
5
+ ready: Promise<void>;
5
6
  };
6
7
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB;;;EA8KxD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB;;;;EAoRxD"}