dbgraph 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.
- package/LICENSE +21 -0
- package/README.md +347 -0
- package/dist/bin/dbgraph.d.ts +8 -0
- package/dist/bin/dbgraph.d.ts.map +1 -0
- package/dist/bin/dbgraph.js +382 -0
- package/dist/bin/dbgraph.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +158 -0
- package/dist/config.js.map +1 -0
- package/dist/context/formatter.d.ts +94 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +288 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +77 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +458 -0
- package/dist/context/index.js.map +1 -0
- package/dist/db/index.d.ts +26 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +127 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +8 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +39 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +46 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +436 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.sql +113 -0
- package/dist/db/sqlite-adapter.d.ts +30 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.js +78 -0
- package/dist/db/sqlite-adapter.js.map +1 -0
- package/dist/directory.d.ts +37 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +160 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +46 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +90 -0
- package/dist/errors.js.map +1 -0
- package/dist/graph/traversal.d.ts +157 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +531 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +435 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect/base.d.ts +62 -0
- package/dist/introspect/base.d.ts.map +1 -0
- package/dist/introspect/base.js +107 -0
- package/dist/introspect/base.js.map +1 -0
- package/dist/introspect/connection.d.ts +30 -0
- package/dist/introspect/connection.d.ts.map +1 -0
- package/dist/introspect/connection.js +232 -0
- package/dist/introspect/connection.js.map +1 -0
- package/dist/introspect/index.d.ts +23 -0
- package/dist/introspect/index.d.ts.map +1 -0
- package/dist/introspect/index.js +46 -0
- package/dist/introspect/index.js.map +1 -0
- package/dist/introspect/mysql.d.ts +64 -0
- package/dist/introspect/mysql.d.ts.map +1 -0
- package/dist/introspect/mysql.js +360 -0
- package/dist/introspect/mysql.js.map +1 -0
- package/dist/introspect/postgres.d.ts +55 -0
- package/dist/introspect/postgres.d.ts.map +1 -0
- package/dist/introspect/postgres.js +372 -0
- package/dist/introspect/postgres.js.map +1 -0
- package/dist/introspect/sqlite.d.ts +33 -0
- package/dist/introspect/sqlite.d.ts.map +1 -0
- package/dist/introspect/sqlite.js +207 -0
- package/dist/introspect/sqlite.js.map +1 -0
- package/dist/mcp/engine.d.ts +92 -0
- package/dist/mcp/engine.d.ts.map +1 -0
- package/dist/mcp/engine.js +261 -0
- package/dist/mcp/engine.js.map +1 -0
- package/dist/mcp/index.d.ts +33 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +119 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +9 -0
- package/dist/mcp/server-instructions.d.ts.map +1 -0
- package/dist/mcp/server-instructions.js +71 -0
- package/dist/mcp/server-instructions.js.map +1 -0
- package/dist/mcp/session.d.ts +35 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +140 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +99 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +499 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +78 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +182 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/search/query-parser.d.ts +66 -0
- package/dist/search/query-parser.d.ts.map +1 -0
- package/dist/search/query-parser.js +163 -0
- package/dist/search/query-parser.js.map +1 -0
- package/dist/search/query-utils.d.ts +78 -0
- package/dist/search/query-utils.d.ts.map +1 -0
- package/dist/search/query-utils.js +203 -0
- package/dist/search/query-utils.js.map +1 -0
- package/dist/types.d.ts +279 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +47 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +190 -0
- package/dist/utils.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Session
|
|
4
|
+
*
|
|
5
|
+
* Manages a single MCP session — handles initialization, tool listing,
|
|
6
|
+
* and tool call dispatching.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MCPSession = void 0;
|
|
10
|
+
const transport_1 = require("./transport");
|
|
11
|
+
class MCPSession {
|
|
12
|
+
transport;
|
|
13
|
+
engine;
|
|
14
|
+
clientSupportsRoots = false;
|
|
15
|
+
rootsAttempted = false;
|
|
16
|
+
explicitProjectPath;
|
|
17
|
+
watchConfig;
|
|
18
|
+
constructor(transport, engine, opts = {}) {
|
|
19
|
+
this.transport = transport;
|
|
20
|
+
this.engine = engine;
|
|
21
|
+
this.explicitProjectPath = opts.explicitProjectPath ?? null;
|
|
22
|
+
this.watchConfig = opts.autoRefresh ?? false;
|
|
23
|
+
}
|
|
24
|
+
start() {
|
|
25
|
+
this.transport.start(this.handleMessage.bind(this));
|
|
26
|
+
}
|
|
27
|
+
stop() {
|
|
28
|
+
this.transport.stop();
|
|
29
|
+
}
|
|
30
|
+
getTransport() {
|
|
31
|
+
return this.transport;
|
|
32
|
+
}
|
|
33
|
+
async handleMessage(message) {
|
|
34
|
+
const isRequest = 'id' in message;
|
|
35
|
+
switch (message.method) {
|
|
36
|
+
case 'initialize':
|
|
37
|
+
if (isRequest)
|
|
38
|
+
await this.handleInitialize(message);
|
|
39
|
+
break;
|
|
40
|
+
case 'initialized':
|
|
41
|
+
break;
|
|
42
|
+
case 'tools/list':
|
|
43
|
+
if (isRequest)
|
|
44
|
+
await this.handleToolsList(message);
|
|
45
|
+
break;
|
|
46
|
+
case 'tools/call':
|
|
47
|
+
if (isRequest)
|
|
48
|
+
await this.handleToolsCall(message);
|
|
49
|
+
break;
|
|
50
|
+
case 'ping':
|
|
51
|
+
if (isRequest)
|
|
52
|
+
this.transport.sendResult(message.id, {});
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
if (isRequest) {
|
|
56
|
+
this.transport.sendError(message.id, transport_1.ErrorCodes.MethodNotFound, `Method not found: ${message.method}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async retryInitIfNeeded() {
|
|
61
|
+
if (!this.engine.isReady()) {
|
|
62
|
+
await this.engine.ensureInitialized();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Before each tool call, lazily check if the database schema changed
|
|
67
|
+
* and re-index if needed. Zero overhead when idle.
|
|
68
|
+
*/
|
|
69
|
+
async refreshIfSchemaChanged() {
|
|
70
|
+
if (!this.watchConfig || !this.engine.isReady())
|
|
71
|
+
return;
|
|
72
|
+
try {
|
|
73
|
+
const { changed, currentFingerprint } = await this.engine.checkSchemaChanged();
|
|
74
|
+
if (changed) {
|
|
75
|
+
process.stderr.write(`[DBGraph MCP] Schema changed, re-indexing...\n`);
|
|
76
|
+
const result = await this.engine.executeReindex(currentFingerprint);
|
|
77
|
+
process.stderr.write(`[DBGraph MCP] Re-indexed: ${result.sourcesIndexed} source(s), ` +
|
|
78
|
+
`${result.nodesCreated} node(s), ${result.edgesCreated} edge(s)\n`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
process.stderr.write(`[DBGraph MCP] Schema refresh failed: ${msg}\n`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async handleInitialize(request) {
|
|
87
|
+
const params = request.params;
|
|
88
|
+
const clientInfo = params?.clientInfo;
|
|
89
|
+
const clientName = clientInfo?.name ?? 'unknown';
|
|
90
|
+
// Forward roots capability
|
|
91
|
+
if (params?.capabilities) {
|
|
92
|
+
const caps = params.capabilities;
|
|
93
|
+
this.clientSupportsRoots = !!caps.roots?.listChanged;
|
|
94
|
+
}
|
|
95
|
+
// Do NOT block init on engine readiness — start it in background and
|
|
96
|
+
// retry on first tool call. Unresponsive daemon is worse than stale.
|
|
97
|
+
this.engine.startBackgroundInit(this.explicitProjectPath ?? undefined);
|
|
98
|
+
const instructions = this.engine.getServerInstructions();
|
|
99
|
+
this.transport.sendResult(request.id, {
|
|
100
|
+
protocolVersion: '2024-11-05',
|
|
101
|
+
serverInfo: { name: 'dbgraph', version: '0.1.0' },
|
|
102
|
+
capabilities: {
|
|
103
|
+
tools: {},
|
|
104
|
+
...(this.clientSupportsRoots ? {} : { roots: { listChanged: false } }),
|
|
105
|
+
},
|
|
106
|
+
instructions,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async handleToolsList(request) {
|
|
110
|
+
this.transport.sendResult(request.id, {
|
|
111
|
+
tools: this.engine.getTools(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async handleToolsCall(request) {
|
|
115
|
+
const params = request.params;
|
|
116
|
+
if (!params || !params.name) {
|
|
117
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.InvalidParams, 'Missing tool name');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const toolName = params.name;
|
|
121
|
+
const toolArgs = params.arguments || {};
|
|
122
|
+
const tool = this.engine.getTools().find((t) => t.name === toolName);
|
|
123
|
+
if (!tool) {
|
|
124
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.MethodNotFound, `Unknown tool: ${toolName}`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
await this.retryInitIfNeeded();
|
|
129
|
+
await this.refreshIfSchemaChanged();
|
|
130
|
+
const result = await this.engine.executeTool(toolName, toolArgs);
|
|
131
|
+
this.transport.sendResult(request.id, result);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
135
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.InternalError, msg);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.MCPSession = MCPSession;
|
|
140
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Definitions & Handlers
|
|
3
|
+
*
|
|
4
|
+
* Defines the tools exposed by the DBGraph MCP server and implements their
|
|
5
|
+
* execution against a DBGraph knowledge graph instance.
|
|
6
|
+
*/
|
|
7
|
+
import { DBGraph } from '../index';
|
|
8
|
+
export interface ToolDefinition {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: 'object';
|
|
13
|
+
properties: Record<string, PropertySchema>;
|
|
14
|
+
required?: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
interface PropertySchema {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
enum?: string[];
|
|
21
|
+
default?: unknown;
|
|
22
|
+
}
|
|
23
|
+
export interface ToolResult {
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: 'text';
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
isError?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Executes dbgraph MCP tools against a DBGraph instance.
|
|
32
|
+
*
|
|
33
|
+
* The handler does NOT own the DBGraph lifecycle — the caller (MCPEngine)
|
|
34
|
+
* provides a getter so the handler always uses the current (possibly
|
|
35
|
+
* lazily-initialized) instance.
|
|
36
|
+
*/
|
|
37
|
+
export declare class DBGraphToolHandler {
|
|
38
|
+
private readonly getDBGraph;
|
|
39
|
+
private readonly formatter;
|
|
40
|
+
constructor(getDBGraph: () => DBGraph);
|
|
41
|
+
/**
|
|
42
|
+
* Return the tool definitions, optionally enriched with dynamic context
|
|
43
|
+
* (e.g. stats) from the live graph.
|
|
44
|
+
*/
|
|
45
|
+
getTools(): ToolDefinition[];
|
|
46
|
+
/**
|
|
47
|
+
* Execute a tool by name.
|
|
48
|
+
*/
|
|
49
|
+
execute(name: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
50
|
+
/**
|
|
51
|
+
* dbgraph_search — Search schema objects by name. Delegates to
|
|
52
|
+
* QueryBuilder.searchNodes with optional kind filter and limit, then
|
|
53
|
+
* formats via SchemaFormatter.
|
|
54
|
+
*/
|
|
55
|
+
private handleSearch;
|
|
56
|
+
/**
|
|
57
|
+
* dbgraph_context — Get full schema context for a table or view.
|
|
58
|
+
*
|
|
59
|
+
* Resolves the name (simple, qualified, or fully qualified) via
|
|
60
|
+
* ContextBuilder.buildContext, which searches the graph and returns a
|
|
61
|
+
* complete markdown description.
|
|
62
|
+
*/
|
|
63
|
+
private handleContext;
|
|
64
|
+
/**
|
|
65
|
+
* dbgraph_trace — Trace FK join path between two tables.
|
|
66
|
+
*
|
|
67
|
+
* Resolves both names to nodes, then runs GraphTraverser.findPath over
|
|
68
|
+
* 'references', 'foreign_key', and 'contains' edges. Formats the
|
|
69
|
+
* resulting path as a readable join chain.
|
|
70
|
+
*/
|
|
71
|
+
private handleTrace;
|
|
72
|
+
/**
|
|
73
|
+
* dbgraph_explore — Fetch schema context for multiple objects in one call.
|
|
74
|
+
*
|
|
75
|
+
* Splits the space-separated names, finds each table/view node, and calls
|
|
76
|
+
* ContextBuilder.getTableSchema for each. Assembles a single markdown
|
|
77
|
+
* document.
|
|
78
|
+
*/
|
|
79
|
+
private handleExplore;
|
|
80
|
+
/**
|
|
81
|
+
* dbgraph_sources — List all database sources.
|
|
82
|
+
*/
|
|
83
|
+
private handleSources;
|
|
84
|
+
/**
|
|
85
|
+
* dbgraph_status — Show graph statistics.
|
|
86
|
+
*/
|
|
87
|
+
private handleStatus;
|
|
88
|
+
/**
|
|
89
|
+
* Resolve a table or view name to graph nodes.
|
|
90
|
+
*
|
|
91
|
+
* Attempts, in order:
|
|
92
|
+
* 1. Exact node ID lookup
|
|
93
|
+
* 2. Qualified name lookup
|
|
94
|
+
* 3. FTS5 search for table/view kind
|
|
95
|
+
*/
|
|
96
|
+
private resolveTableNodes;
|
|
97
|
+
}
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAenC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAwHD;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAEtB,UAAU,EAAE,MAAM,OAAO;IAEtD;;;OAGG;IACH,QAAQ,IAAI,cAAc,EAAE;IAI5B;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IA6B/E;;;;OAIG;YACW,YAAY;IA4B1B;;;;;;OAMG;YACW,aAAa;IAS3B;;;;;;OAMG;YACW,WAAW;IAkFzB;;;;;;OAMG;YACW,aAAa;IAkD3B;;OAEG;YACW,aAAa;IAa3B;;OAEG;YACW,YAAY;IAkF1B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAqB1B"}
|