omnibase-mcp 0.0.2 → 0.1.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.

Potentially problematic release.


This version of omnibase-mcp might be problematic. Click here for more details.

Files changed (67) hide show
  1. package/dist/src/config.d.ts +5 -0
  2. package/dist/src/config.js +99 -0
  3. package/dist/src/config.js.map +1 -0
  4. package/dist/src/connection-manager.d.ts +22 -0
  5. package/dist/src/connection-manager.js +93 -0
  6. package/dist/src/connection-manager.js.map +1 -0
  7. package/dist/src/index.d.ts +2 -0
  8. package/dist/src/index.js +290 -0
  9. package/dist/src/index.js.map +1 -0
  10. package/dist/src/output-formatter.d.ts +12 -0
  11. package/dist/src/output-formatter.js +127 -0
  12. package/dist/src/output-formatter.js.map +1 -0
  13. package/dist/src/permission-enforcer.d.ts +2 -0
  14. package/dist/src/permission-enforcer.js +16 -0
  15. package/dist/src/permission-enforcer.js.map +1 -0
  16. package/dist/src/query-analyzer.d.ts +3 -0
  17. package/dist/src/query-analyzer.js +108 -0
  18. package/dist/src/query-analyzer.js.map +1 -0
  19. package/dist/src/sidecar-client.d.ts +28 -0
  20. package/dist/src/sidecar-client.js +185 -0
  21. package/dist/src/sidecar-client.js.map +1 -0
  22. package/dist/src/sql-dialect.d.ts +20 -0
  23. package/dist/src/sql-dialect.js +42 -0
  24. package/dist/src/sql-dialect.js.map +1 -0
  25. package/dist/src/tools/execute-sql.d.ts +7 -0
  26. package/dist/src/tools/execute-sql.js +159 -0
  27. package/dist/src/tools/execute-sql.js.map +1 -0
  28. package/dist/src/tools/explain-query.d.ts +10 -0
  29. package/dist/src/tools/explain-query.js +101 -0
  30. package/dist/src/tools/explain-query.js.map +1 -0
  31. package/dist/src/tools/get-distinct-values.d.ts +18 -0
  32. package/dist/src/tools/get-distinct-values.js +43 -0
  33. package/dist/src/tools/get-distinct-values.js.map +1 -0
  34. package/dist/src/tools/get-indexes.d.ts +13 -0
  35. package/dist/src/tools/get-indexes.js +32 -0
  36. package/dist/src/tools/get-indexes.js.map +1 -0
  37. package/dist/src/tools/get-relationships.d.ts +21 -0
  38. package/dist/src/tools/get-relationships.js +56 -0
  39. package/dist/src/tools/get-relationships.js.map +1 -0
  40. package/dist/src/tools/get-sample.d.ts +7 -0
  41. package/dist/src/tools/get-sample.js +25 -0
  42. package/dist/src/tools/get-sample.js.map +1 -0
  43. package/dist/src/tools/get-schema.d.ts +12 -0
  44. package/dist/src/tools/get-schema.js +31 -0
  45. package/dist/src/tools/get-schema.js.map +1 -0
  46. package/dist/src/tools/get-table-stats.d.ts +28 -0
  47. package/dist/src/tools/get-table-stats.js +84 -0
  48. package/dist/src/tools/get-table-stats.js.map +1 -0
  49. package/dist/src/tools/list-connections.d.ts +3 -0
  50. package/dist/src/tools/list-connections.js +12 -0
  51. package/dist/src/tools/list-connections.js.map +1 -0
  52. package/dist/src/tools/list-tables.d.ts +9 -0
  53. package/dist/src/tools/list-tables.js +14 -0
  54. package/dist/src/tools/list-tables.js.map +1 -0
  55. package/dist/src/tools/search-schema.d.ts +6 -0
  56. package/dist/src/tools/search-schema.js +15 -0
  57. package/dist/src/tools/search-schema.js.map +1 -0
  58. package/dist/src/tools/test-connection.d.ts +15 -0
  59. package/dist/src/tools/test-connection.js +27 -0
  60. package/dist/src/tools/test-connection.js.map +1 -0
  61. package/dist/src/tools/validate-query.d.ts +15 -0
  62. package/dist/src/tools/validate-query.js +388 -0
  63. package/dist/src/tools/validate-query.js.map +1 -0
  64. package/dist/src/types.d.ts +133 -0
  65. package/dist/src/types.js +33 -0
  66. package/dist/src/types.js.map +1 -0
  67. package/package.json +13 -4
@@ -0,0 +1,5 @@
1
+ import { OmnibaseConfig, ConnectionConfig } from "./types.js";
2
+ export declare function parseConfig(yamlContent: string): OmnibaseConfig;
3
+ export declare function getConnection(config: OmnibaseConfig, name: string): ConnectionConfig;
4
+ export declare function loadConfig(configPath: string): OmnibaseConfig;
5
+ export declare function resolveConfigPath(cwd: string): string | null;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseConfig = parseConfig;
4
+ exports.getConnection = getConnection;
5
+ exports.loadConfig = loadConfig;
6
+ exports.resolveConfigPath = resolveConfigPath;
7
+ const yaml_1 = require("yaml");
8
+ const fs_1 = require("fs");
9
+ const path_1 = require("path");
10
+ const types_js_1 = require("./types.js");
11
+ const VALID_PERMISSIONS = ["read-only", "read-write", "admin"];
12
+ function parseConfig(yamlContent) {
13
+ const raw = (0, yaml_1.parse)(yamlContent);
14
+ if (!raw.defaults) {
15
+ throw new Error("Config must have a 'defaults' section");
16
+ }
17
+ const defaults = {
18
+ permission: validatePermission(raw.defaults.permission),
19
+ timeout: raw.defaults.timeout,
20
+ maxRows: raw.defaults.max_rows,
21
+ };
22
+ const connections = {};
23
+ for (const [name, rawConn] of Object.entries(raw.connections || {})) {
24
+ if (!rawConn.dsn) {
25
+ throw new Error(`Connection '${name}' is missing 'dsn'`);
26
+ }
27
+ const dsn = resolveDsn(rawConn.dsn);
28
+ const permission = rawConn.permission
29
+ ? validatePermission(rawConn.permission)
30
+ : defaults.permission;
31
+ connections[name] = {
32
+ name,
33
+ dsn,
34
+ permission,
35
+ timeout: rawConn.timeout ?? defaults.timeout,
36
+ maxRows: rawConn.max_rows ?? defaults.maxRows,
37
+ schemaFilter: rawConn.schema_filter
38
+ ? {
39
+ schemas: rawConn.schema_filter.schemas,
40
+ tables: rawConn.schema_filter.tables,
41
+ }
42
+ : undefined,
43
+ allowAllPragmas: rawConn.allow_all_pragmas ?? false,
44
+ maxValueLength: rawConn.max_value_length,
45
+ readOnlyTables: rawConn.read_only_tables,
46
+ };
47
+ }
48
+ return { connections, defaults };
49
+ }
50
+ function getConnection(config, name) {
51
+ // Case-insensitive connection name lookup
52
+ const conn = config.connections[name] ??
53
+ Object.values(config.connections).find((c) => c.name.toLowerCase() === name.toLowerCase());
54
+ if (!conn) {
55
+ throw new types_js_1.OmnibaseError(`Unknown connection: '${name}'`, "UNKNOWN_CONNECTION");
56
+ }
57
+ return conn;
58
+ }
59
+ function loadConfig(configPath) {
60
+ const content = (0, fs_1.readFileSync)(configPath, "utf-8");
61
+ return parseConfig(content);
62
+ }
63
+ function resolveConfigPath(cwd) {
64
+ // 1. OMNIBASE_CONFIG env var (highest priority)
65
+ const envPath = process.env.OMNIBASE_CONFIG;
66
+ if (envPath && (0, fs_1.existsSync)(envPath)) {
67
+ return envPath;
68
+ }
69
+ // 2. Project-local
70
+ const localPath = (0, path_1.join)(cwd, "omnibase.config.yaml");
71
+ if ((0, fs_1.existsSync)(localPath)) {
72
+ return localPath;
73
+ }
74
+ // 3. User-global
75
+ const home = process.env.HOME || process.env.USERPROFILE || "";
76
+ const globalPath = (0, path_1.join)(home, ".config", "omnibase", "config.yaml");
77
+ if ((0, fs_1.existsSync)(globalPath)) {
78
+ return globalPath;
79
+ }
80
+ return null;
81
+ }
82
+ function resolveDsn(dsn) {
83
+ if (!dsn.startsWith("$")) {
84
+ return dsn;
85
+ }
86
+ const envName = dsn.slice(1);
87
+ const value = process.env[envName];
88
+ if (!value) {
89
+ throw new Error(`Environment variable '${envName}' is not set (referenced in DSN)`);
90
+ }
91
+ return value;
92
+ }
93
+ function validatePermission(value) {
94
+ if (!VALID_PERMISSIONS.includes(value)) {
95
+ throw new Error(`Invalid permission level '${value}'. Must be one of: ${VALID_PERMISSIONS.join(", ")}`);
96
+ }
97
+ return value;
98
+ }
99
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;AA+BA,kCA4CC;AAED,sCASC;AAED,gCAGC;AAED,8CAqBC;AAlHD,+BAA0C;AAC1C,2BAA8C;AAC9C,+BAA4B;AAC5B,yCAA8F;AAE9F,MAAM,iBAAiB,GAAsB,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AA0BlF,SAAgB,WAAW,CAAC,WAAmB;IAC7C,MAAM,GAAG,GAAG,IAAA,YAAS,EAAC,WAAW,CAAc,CAAC;IAEhD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvD,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO;QAC7B,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ;KAC/B,CAAC;IAEF,MAAM,WAAW,GAAqC,EAAE,CAAC;IAEzD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,oBAAoB,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;YACnC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC;YACxC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAExB,WAAW,CAAC,IAAI,CAAC,GAAG;YAClB,IAAI;YACJ,GAAG;YACH,UAAU;YACV,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;YAC5C,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO;YAC7C,YAAY,EAAE,OAAO,CAAC,aAAa;gBACjC,CAAC,CAAC;oBACE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO;oBACtC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM;iBACrC;gBACH,CAAC,CAAC,SAAS;YACb,eAAe,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;YACnD,cAAc,EAAE,OAAO,CAAC,gBAAgB;YACxC,cAAc,EAAE,OAAO,CAAC,gBAAgB;SACzC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAsB,EAAE,IAAY;IAChE,0CAA0C;IAC1C,MAAM,IAAI,GACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7F,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,wBAAa,CAAC,wBAAwB,IAAI,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,UAAU,CAAC,UAAkB;IAC3C,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,gDAAgD;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,OAAO,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mBAAmB;IACnB,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACpD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,kCAAkC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAwB,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,sBAAsB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,KAAwB,CAAC;AAClC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ConnectionConfig, ConnectionStatus, DatabaseBackend, QueryResult, SchemaInfo, ExecuteOptions } from "./types.js";
2
+ export declare class ConnectionManager {
3
+ private backend;
4
+ private connectedIds;
5
+ private schemaCache;
6
+ private statusMap;
7
+ constructor(backend: DatabaseBackend);
8
+ ensureConnected(config: ConnectionConfig): Promise<void>;
9
+ execute(config: ConnectionConfig, query: string, params?: unknown[], options?: ExecuteOptions): Promise<QueryResult>;
10
+ getSchema(config: ConnectionConfig, forceRefresh?: boolean): Promise<SchemaInfo>;
11
+ explainQuery(config: ConnectionConfig, query: string): Promise<QueryResult>;
12
+ validateQuery(config: ConnectionConfig, query: string): Promise<{
13
+ valid: boolean;
14
+ error?: string;
15
+ }>;
16
+ invalidateSchemaCache(connectionName: string): void;
17
+ getStatus(connectionName: string): ConnectionStatus;
18
+ ping(config: ConnectionConfig): Promise<void>;
19
+ disconnect(config: ConnectionConfig): Promise<void>;
20
+ handleSidecarCrash(): void;
21
+ disconnectAll(configs: ConnectionConfig[]): Promise<void>;
22
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionManager = void 0;
4
+ class ConnectionManager {
5
+ backend;
6
+ connectedIds = new Set();
7
+ schemaCache = new Map();
8
+ statusMap = new Map();
9
+ constructor(backend) {
10
+ this.backend = backend;
11
+ }
12
+ async ensureConnected(config) {
13
+ if (this.connectedIds.has(config.name))
14
+ return;
15
+ try {
16
+ await this.backend.connect(config.name, config.dsn);
17
+ this.connectedIds.add(config.name);
18
+ this.statusMap.set(config.name, "connected");
19
+ }
20
+ catch (err) {
21
+ this.statusMap.set(config.name, "error");
22
+ throw err;
23
+ }
24
+ }
25
+ async execute(config, query, params, options) {
26
+ await this.ensureConnected(config);
27
+ return this.backend.execute(config.name, query, params, {
28
+ maxRows: options?.maxRows ?? config.maxRows,
29
+ timeoutMs: options?.timeoutMs ?? config.timeout,
30
+ });
31
+ }
32
+ async getSchema(config, forceRefresh = false) {
33
+ await this.ensureConnected(config);
34
+ if (!forceRefresh && this.schemaCache.has(config.name)) {
35
+ return this.schemaCache.get(config.name);
36
+ }
37
+ const schema = await this.backend.getSchema(config.name, config.schemaFilter
38
+ ? {
39
+ schemas: config.schemaFilter.schemas,
40
+ tables: config.schemaFilter.tables,
41
+ }
42
+ : undefined);
43
+ this.schemaCache.set(config.name, schema);
44
+ return schema;
45
+ }
46
+ async explainQuery(config, query) {
47
+ await this.ensureConnected(config);
48
+ return this.backend.explainQuery(config.name, query);
49
+ }
50
+ async validateQuery(config, query) {
51
+ await this.ensureConnected(config);
52
+ return this.backend.validateQuery(config.name, query);
53
+ }
54
+ invalidateSchemaCache(connectionName) {
55
+ this.schemaCache.delete(connectionName);
56
+ }
57
+ getStatus(connectionName) {
58
+ return this.statusMap.get(connectionName) ?? "available";
59
+ }
60
+ async ping(config) {
61
+ await this.ensureConnected(config);
62
+ await this.backend.ping(config.name);
63
+ }
64
+ async disconnect(config) {
65
+ await this.backend.disconnect(config.name);
66
+ this.connectedIds.delete(config.name);
67
+ this.schemaCache.delete(config.name);
68
+ this.statusMap.set(config.name, "available");
69
+ }
70
+ // Called by SidecarClient when the sidecar process crashes.
71
+ // Clears connection state so ensureConnected will re-establish on next use.
72
+ // Schema cache is preserved (it lives here, not in the sidecar).
73
+ handleSidecarCrash() {
74
+ this.connectedIds.clear();
75
+ for (const [name] of this.statusMap) {
76
+ this.statusMap.set(name, "available");
77
+ }
78
+ }
79
+ async disconnectAll(configs) {
80
+ for (const config of configs) {
81
+ if (this.connectedIds.has(config.name)) {
82
+ try {
83
+ await this.disconnect(config);
84
+ }
85
+ catch {
86
+ // Best effort on shutdown
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ exports.ConnectionManager = ConnectionManager;
93
+ //# sourceMappingURL=connection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/connection-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,290 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const zod_1 = require("zod");
7
+ const path_1 = require("path");
8
+ const fs_1 = require("fs");
9
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, "..", "..", "package.json"), "utf-8"));
10
+ const VERSION = pkg.version;
11
+ const config_js_1 = require("./config.js");
12
+ const sidecar_client_js_1 = require("./sidecar-client.js");
13
+ const connection_manager_js_1 = require("./connection-manager.js");
14
+ const list_connections_js_1 = require("./tools/list-connections.js");
15
+ const get_schema_js_1 = require("./tools/get-schema.js");
16
+ const execute_sql_js_1 = require("./tools/execute-sql.js");
17
+ const explain_query_js_1 = require("./tools/explain-query.js");
18
+ const get_sample_js_1 = require("./tools/get-sample.js");
19
+ const search_schema_js_1 = require("./tools/search-schema.js");
20
+ const list_tables_js_1 = require("./tools/list-tables.js");
21
+ const get_relationships_js_1 = require("./tools/get-relationships.js");
22
+ const get_indexes_js_1 = require("./tools/get-indexes.js");
23
+ const validate_query_js_1 = require("./tools/validate-query.js");
24
+ const get_table_stats_js_1 = require("./tools/get-table-stats.js");
25
+ const get_distinct_values_js_1 = require("./tools/get-distinct-values.js");
26
+ const test_connection_js_1 = require("./tools/test-connection.js");
27
+ const types_js_1 = require("./types.js");
28
+ const STARTER_CONFIG = `# Omnibase configuration
29
+ # Docs: https://github.com/itsJeremyMax/omnibase
30
+
31
+ connections:
32
+ my-db:
33
+ dsn: "sqlite:./my-database.db" # or pg://user:pass@host/db, my://user:pass@host/db
34
+ permission: read-write # read-only | read-write | admin
35
+
36
+ defaults:
37
+ permission: read-only
38
+ timeout: 30000
39
+ max_rows: 500
40
+ `;
41
+ function handleInit() {
42
+ const configPath = (0, path_1.resolve)(process.cwd(), "omnibase.config.yaml");
43
+ if ((0, fs_1.existsSync)(configPath)) {
44
+ console.log(`omnibase.config.yaml already exists at ${configPath}`);
45
+ process.exit(0);
46
+ }
47
+ (0, fs_1.writeFileSync)(configPath, STARTER_CONFIG);
48
+ console.log(`Created omnibase.config.yaml`);
49
+ console.log(`\nNext steps:`);
50
+ console.log(` 1. Edit omnibase.config.yaml with your database connection`);
51
+ console.log(` 2. Add to Claude Code: claude mcp add omnibase -- npx -y omnibase-mcp`);
52
+ process.exit(0);
53
+ }
54
+ // Handle CLI commands
55
+ if (process.argv[2] === "init") {
56
+ handleInit();
57
+ }
58
+ async function main() {
59
+ // Load config
60
+ const configPath = (0, config_js_1.resolveConfigPath)(process.cwd());
61
+ if (!configPath) {
62
+ // Don't exit — start the server and return a helpful error on every tool call.
63
+ // This lets the MCP client connect and see the error instead of a silent failure.
64
+ console.error("omnibase: no config file found. Create omnibase.config.yaml in your project directory.");
65
+ const server = new mcp_js_1.McpServer({ name: "omnibase", version: VERSION });
66
+ server.tool("list_connections", "List all configured database connections", {}, async () => ({
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: JSON.stringify({
71
+ error: true,
72
+ message: "No omnibase.config.yaml found. Create one in your project directory, set OMNIBASE_CONFIG env var, or copy an example from https://github.com/itsJeremyMax/omnibase/tree/main/examples",
73
+ }),
74
+ },
75
+ ],
76
+ isError: true,
77
+ }));
78
+ const transport = new stdio_js_1.StdioServerTransport();
79
+ await server.connect(transport);
80
+ return;
81
+ }
82
+ const config = (0, config_js_1.loadConfig)(configPath);
83
+ // Start sidecar
84
+ const sidecarPath = process.env.OMNIBASE_SIDECAR_PATH ||
85
+ (0, path_1.resolve)(__dirname, "..", "..", "sidecar", "omnibase-sidecar");
86
+ const sidecar = new sidecar_client_js_1.SidecarClient(sidecarPath);
87
+ await sidecar.start();
88
+ const cm = new connection_manager_js_1.ConnectionManager(sidecar);
89
+ // Auto-recover: when sidecar crashes, reset connection state so
90
+ // lazy reconnection works on the next tool call
91
+ sidecar.setCrashHandler(() => {
92
+ cm.handleSidecarCrash();
93
+ });
94
+ // Create MCP server
95
+ const server = new mcp_js_1.McpServer({
96
+ name: "omnibase",
97
+ version: VERSION,
98
+ });
99
+ // Register tools
100
+ server.tool("list_connections", "List all configured database connections with their status and permission levels", {}, async () => {
101
+ try {
102
+ const result = (0, list_connections_js_1.handleListConnections)(config, cm);
103
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
104
+ }
105
+ catch (err) {
106
+ return errorResponse(err);
107
+ }
108
+ });
109
+ server.tool("test_connection", "Test a specific database connection. Returns status, latency, and the actual driver error on failure. Use this to diagnose connection issues.", {
110
+ connection: zod_1.z.string().describe("Connection name from config"),
111
+ }, async ({ connection }) => {
112
+ try {
113
+ const result = await (0, test_connection_js_1.handleTestConnection)(config, cm, { connection });
114
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
115
+ }
116
+ catch (err) {
117
+ return errorResponse(err);
118
+ }
119
+ });
120
+ server.tool("get_schema", "Get database schema. Without tables param: returns summary (table names, column counts, PKs). With tables param: returns full column details for specified tables.", {
121
+ connection: zod_1.z.string().describe("Connection name from config"),
122
+ tables: zod_1.z.array(zod_1.z.string()).optional().describe("Specific tables for detailed schema"),
123
+ force_refresh: zod_1.z.boolean().optional().describe("Force refresh cached schema"),
124
+ }, async ({ connection, tables, force_refresh }) => {
125
+ try {
126
+ const result = await (0, get_schema_js_1.handleGetSchema)(config, cm, { connection, tables, force_refresh });
127
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
128
+ }
129
+ catch (err) {
130
+ return errorResponse(err);
131
+ }
132
+ });
133
+ server.tool("execute_sql", "Execute a SQL query. Permission level of the connection determines what's allowed (read-only, read-write, admin). Supports parameterized queries.", {
134
+ connection: zod_1.z.string().describe("Connection name from config"),
135
+ query: zod_1.z.string().describe("SQL query to execute"),
136
+ params: zod_1.z
137
+ .array(zod_1.z.unknown())
138
+ .optional()
139
+ .describe("Query parameters for parameterized queries"),
140
+ }, async ({ connection, query, params }) => {
141
+ try {
142
+ const result = await (0, execute_sql_js_1.handleExecuteSql)(config, cm, { connection, query, params });
143
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
144
+ }
145
+ catch (err) {
146
+ return errorResponse(err);
147
+ }
148
+ });
149
+ server.tool("explain_query", "Show the query execution plan without executing the query. Always allowed regardless of permission level.", {
150
+ connection: zod_1.z.string().describe("Connection name from config"),
151
+ query: zod_1.z.string().describe("SQL query to explain"),
152
+ }, async ({ connection, query }) => {
153
+ try {
154
+ const result = await (0, explain_query_js_1.handleExplainQuery)(config, cm, { connection, query });
155
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
156
+ }
157
+ catch (err) {
158
+ return errorResponse(err);
159
+ }
160
+ });
161
+ server.tool("get_sample", "Preview rows from a table. Table name is validated against schema to prevent injection.", {
162
+ connection: zod_1.z.string().describe("Connection name from config"),
163
+ table: zod_1.z.string().describe("Table name to sample"),
164
+ limit: zod_1.z.number().optional().describe("Number of rows to return (default 10)"),
165
+ }, async ({ connection, table, limit }) => {
166
+ try {
167
+ const result = await (0, get_sample_js_1.handleGetSample)(config, cm, { connection, table, limit });
168
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
169
+ }
170
+ catch (err) {
171
+ return errorResponse(err);
172
+ }
173
+ });
174
+ server.tool("search_schema", "Search for tables and columns by keyword. Searches names and comments. Returns up to 20 results ranked by relevance.", {
175
+ connection: zod_1.z.string().describe("Connection name from config"),
176
+ query: zod_1.z.string().describe("Search keyword"),
177
+ }, async ({ connection, query }) => {
178
+ try {
179
+ const result = await (0, search_schema_js_1.handleSearchSchema)(config, cm, { connection, query });
180
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
181
+ }
182
+ catch (err) {
183
+ return errorResponse(err);
184
+ }
185
+ });
186
+ server.tool("list_tables", "List all tables with row counts. Faster than get_schema for a quick overview of what's in the database.", {
187
+ connection: zod_1.z.string().describe("Connection name from config"),
188
+ }, async ({ connection }) => {
189
+ try {
190
+ const result = await (0, list_tables_js_1.handleListTables)(config, cm, { connection });
191
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
192
+ }
193
+ catch (err) {
194
+ return errorResponse(err);
195
+ }
196
+ });
197
+ server.tool("get_relationships", "Map foreign key relationships across the database. Returns a list of relationships and a graph showing what each table references and what references it. Optionally filter to a specific table.", {
198
+ connection: zod_1.z.string().describe("Connection name from config"),
199
+ table: zod_1.z.string().optional().describe("Filter to relationships involving this table"),
200
+ }, async ({ connection, table }) => {
201
+ try {
202
+ const result = await (0, get_relationships_js_1.handleGetRelationships)(config, cm, { connection, table });
203
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
204
+ }
205
+ catch (err) {
206
+ return errorResponse(err);
207
+ }
208
+ });
209
+ server.tool("get_indexes", "List indexes across the database or for a specific table. Shows index name, columns, and uniqueness.", {
210
+ connection: zod_1.z.string().describe("Connection name from config"),
211
+ table: zod_1.z.string().optional().describe("Filter to indexes on this table"),
212
+ }, async ({ connection, table }) => {
213
+ try {
214
+ const result = await (0, get_indexes_js_1.handleGetIndexes)(config, cm, { connection, table });
215
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
216
+ }
217
+ catch (err) {
218
+ return errorResponse(err);
219
+ }
220
+ });
221
+ server.tool("validate_query", "Check if a SQL query is syntactically valid and would be allowed by the connection's permission level, without executing it. Note: only checks syntax and permissions, not whether referenced tables/columns exist.", {
222
+ connection: zod_1.z.string().describe("Connection name from config"),
223
+ query: zod_1.z.string().describe("SQL query to validate"),
224
+ }, async ({ connection, query }) => {
225
+ try {
226
+ const result = await (0, validate_query_js_1.handleValidateQuery)(config, cm, { connection, query });
227
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
228
+ }
229
+ catch (err) {
230
+ return errorResponse(err);
231
+ }
232
+ });
233
+ server.tool("get_table_stats", "Column-level statistics for a table: null counts/percentages, distinct values, min/max. Uses a sample (default 10,000 rows) to avoid full table scans on large databases.", {
234
+ connection: zod_1.z.string().describe("Connection name from config"),
235
+ table: zod_1.z.string().describe("Table name"),
236
+ sample_size: zod_1.z.number().optional().describe("Max rows to sample (default 10000)"),
237
+ }, async ({ connection, table, sample_size }) => {
238
+ try {
239
+ const result = await (0, get_table_stats_js_1.handleGetTableStats)(config, cm, { connection, table, sample_size });
240
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
241
+ }
242
+ catch (err) {
243
+ return errorResponse(err);
244
+ }
245
+ });
246
+ server.tool("get_distinct_values", "Show distinct values and their counts for a column. Useful for understanding enums, statuses, categories, and other low-cardinality columns.", {
247
+ connection: zod_1.z.string().describe("Connection name from config"),
248
+ table: zod_1.z.string().describe("Table name"),
249
+ column: zod_1.z.string().describe("Column name"),
250
+ limit: zod_1.z.number().optional().describe("Max distinct values to return (default 50)"),
251
+ }, async ({ connection, table, column, limit }) => {
252
+ try {
253
+ const result = await (0, get_distinct_values_js_1.handleGetDistinctValues)(config, cm, {
254
+ connection,
255
+ table,
256
+ column,
257
+ limit,
258
+ });
259
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
260
+ }
261
+ catch (err) {
262
+ return errorResponse(err);
263
+ }
264
+ });
265
+ // Graceful shutdown
266
+ process.on("SIGINT", async () => {
267
+ await cm.disconnectAll(Object.values(config.connections));
268
+ await sidecar.stop();
269
+ process.exit(0);
270
+ });
271
+ // Start server
272
+ const transport = new stdio_js_1.StdioServerTransport();
273
+ await server.connect(transport);
274
+ }
275
+ function errorResponse(err) {
276
+ const message = err instanceof types_js_1.OmnibaseError
277
+ ? `${err.code}: ${err.message}${err.detail ? ` (${err.detail})` : ""}`
278
+ : err instanceof Error
279
+ ? err.message
280
+ : String(err);
281
+ return {
282
+ content: [{ type: "text", text: JSON.stringify({ error: true, message }) }],
283
+ isError: true,
284
+ };
285
+ }
286
+ main().catch((err) => {
287
+ console.error("Failed to start omnibase:", err);
288
+ process.exit(1);
289
+ });
290
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { QueryResult, FormattedQueryResult, SchemaInfo, TableInfo } from "./types.js";
2
+ export declare function formatQueryResult(result: QueryResult, maxRows: number, maxValueLength?: number): FormattedQueryResult;
3
+ export declare function formatSchemaResult(schema: SchemaInfo, detailed: boolean): {
4
+ tables: unknown[];
5
+ };
6
+ export interface SearchResult {
7
+ tableName: string;
8
+ columnName?: string;
9
+ columnType?: string;
10
+ matchType: "table_exact" | "table_prefix" | "table_contains" | "column_exact" | "column_prefix" | "column_contains";
11
+ }
12
+ export declare function formatSearchResults(tables: TableInfo[], query: string): SearchResult[];