@grafema/mcp 0.3.20 → 0.3.22
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/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/state.d.ts +12 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +46 -3
- package/dist/state.js.map +1 -1
- package/package.json +4 -4
- package/src/server.ts +3 -1
- package/src/state.ts +49 -4
package/dist/server.js
CHANGED
|
@@ -29,6 +29,7 @@ import { PROMPTS, getPrompt } from './prompts.js';
|
|
|
29
29
|
import { TOOLS } from './definitions/index.js';
|
|
30
30
|
import { initializeFromArgs, setupLogging, getProjectPath } from './state.js';
|
|
31
31
|
import { textResult, errorResult, log } from './utils.js';
|
|
32
|
+
import { getSocketPathOverride } from './state.js';
|
|
32
33
|
import { discoverServices } from './analysis.js';
|
|
33
34
|
import { handleQueryGraph, handleFindCalls, handleFindNodes, handleTraceAlias, handleTraceDataFlow, handleCheckInvariant, handleAnalyzeProject, handleGetAnalysisStatus, handleGetStats, handleGetSchema, handleCreateGuarantee, handleListGuarantees, handleCheckGuarantees, handleDeleteGuarantee, handleGetCoverage, handleGetDocumentation, handleFindGuards, handleReportIssue, handleGetFunctionDetails, handleGetContext, handleReadProjectStructure, handleWriteConfig, handleGetFileOverview, handleGetNode, handleGetNeighbors, handleTraverseGraph, handleAddKnowledge, handleQueryKnowledge, handleQueryDecisions, handleSupersedeFact, handleGetKnowledgeStats,
|
|
34
35
|
// Disabled: requires git-ingest (US-17). See US-17 in AI-AGENT-STORIES.md
|
|
@@ -49,7 +50,8 @@ function asArgs(args) {
|
|
|
49
50
|
initializeFromArgs();
|
|
50
51
|
setupLogging();
|
|
51
52
|
const projectPath = getProjectPath();
|
|
52
|
-
|
|
53
|
+
const socketOverride = getSocketPathOverride();
|
|
54
|
+
log(`[Grafema MCP] Starting server for project: ${projectPath}${socketOverride ? ` socket=${socketOverride}` : ''}`);
|
|
53
55
|
// Create MCP server
|
|
54
56
|
const server = new Server({
|
|
55
57
|
name: 'grafema-mcp',
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB;AACvB,0EAA0E;AAC1E,kBAAkB;AAClB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;AACxB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAwC7B;;;;GAIG;AACH,SAAS,MAAM,CAAI,IAAyC;IAC1D,OAAO,CAAC,IAAI,IAAI,EAAE,CAAM,CAAC;AAC3B,CAAC;AAED,oCAAoC;AACpC,kBAAkB,EAAE,CAAC;AACrB,YAAY,EAAE,CAAC;AAEf,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;AACrC,GAAG,CAAC,8CAA8C,WAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -4,7 +4,19 @@
|
|
|
4
4
|
import { GuaranteeManager, GuaranteeAPI, KnowledgeBase } from '@grafema/util';
|
|
5
5
|
import type { AnalysisStatus } from './types.js';
|
|
6
6
|
import type { GraphBackend } from '@grafema/types';
|
|
7
|
+
/**
|
|
8
|
+
* Walk up from startDir to find a Grafema project root.
|
|
9
|
+
*
|
|
10
|
+
* A directory is treated as a project root when it contains:
|
|
11
|
+
* - grafema.yaml (explicit config)
|
|
12
|
+
* - .grafema/ (analysis artefacts already created)
|
|
13
|
+
*
|
|
14
|
+
* Returns the absolute path of the first matching ancestor, or null if
|
|
15
|
+
* nothing is found before the filesystem root.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findProjectRoot(startDir: string): string | null;
|
|
7
18
|
export declare function getProjectPath(): string;
|
|
19
|
+
export declare function getSocketPathOverride(): string | null;
|
|
8
20
|
export declare function getIsAnalyzed(): boolean;
|
|
9
21
|
export declare function getAnalysisStatus(): AnalysisStatus;
|
|
10
22
|
export declare function getBackgroundPid(): number | null;
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAqB,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAqB,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW/D;AAmFD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAEvD;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAEvE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEzD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAEvF;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CA8B/D;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrD;AAGD,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA0ChE;AA6BD,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAExD;AAGD,wBAAgB,YAAY,IAAI,IAAI,CAMnC;AAGD;;;;GAIG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,aAAa,CAAC,CAevE;AAGD,wBAAgB,kBAAkB,IAAI,IAAI,CAwBzC;AAGD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI7C"}
|
package/dist/state.js
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server State Management
|
|
3
3
|
*/
|
|
4
|
-
import { join } from 'path';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
5
|
import { existsSync, mkdirSync } from 'fs';
|
|
6
6
|
import { RFDBServerBackend, GuaranteeManager, GuaranteeAPI, KnowledgeBase } from '@grafema/util';
|
|
7
7
|
import { loadConfig } from './config.js';
|
|
8
8
|
import { log, initLogger } from './utils.js';
|
|
9
|
+
/**
|
|
10
|
+
* Walk up from startDir to find a Grafema project root.
|
|
11
|
+
*
|
|
12
|
+
* A directory is treated as a project root when it contains:
|
|
13
|
+
* - grafema.yaml (explicit config)
|
|
14
|
+
* - .grafema/ (analysis artefacts already created)
|
|
15
|
+
*
|
|
16
|
+
* Returns the absolute path of the first matching ancestor, or null if
|
|
17
|
+
* nothing is found before the filesystem root.
|
|
18
|
+
*/
|
|
19
|
+
export function findProjectRoot(startDir) {
|
|
20
|
+
let dir = startDir;
|
|
21
|
+
while (true) {
|
|
22
|
+
if (existsSync(join(dir, 'grafema.yaml')) || existsSync(join(dir, '.grafema'))) {
|
|
23
|
+
return dir;
|
|
24
|
+
}
|
|
25
|
+
const parent = dirname(dir);
|
|
26
|
+
if (parent === dir)
|
|
27
|
+
break; // filesystem root
|
|
28
|
+
dir = parent;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
9
32
|
// === GLOBAL STATE ===
|
|
10
33
|
let projectPath = process.cwd();
|
|
34
|
+
let socketPathOverride = null;
|
|
11
35
|
let backend = null;
|
|
12
36
|
let isAnalyzed = false;
|
|
13
37
|
let backgroundPid = null;
|
|
@@ -83,6 +107,9 @@ const LOCK_TIMEOUT_MS = 10 * 60 * 1000;
|
|
|
83
107
|
export function getProjectPath() {
|
|
84
108
|
return projectPath;
|
|
85
109
|
}
|
|
110
|
+
export function getSocketPathOverride() {
|
|
111
|
+
return socketPathOverride;
|
|
112
|
+
}
|
|
86
113
|
export function getIsAnalyzed() {
|
|
87
114
|
return isAnalyzed;
|
|
88
115
|
}
|
|
@@ -214,8 +241,8 @@ export async function getOrCreateBackend() {
|
|
|
214
241
|
mkdirSync(grafemaDir, { recursive: true });
|
|
215
242
|
}
|
|
216
243
|
const config = loadConfig(projectPath);
|
|
217
|
-
// Socket path
|
|
218
|
-
const socketPath = config.
|
|
244
|
+
// Socket path priority: --socket CLI arg > config rfdb_socket > auto-derive from dbPath
|
|
245
|
+
const socketPath = socketPathOverride || config.rfdb_socket || undefined;
|
|
219
246
|
log(`[Grafema MCP] Using RFDB server backend: socket=${socketPath || 'auto'}, db=${dbPath}`);
|
|
220
247
|
const rfdbBackend = new RFDBServerBackend({ socketPath, dbPath, clientName: 'mcp' });
|
|
221
248
|
await rfdbBackend.connect();
|
|
@@ -291,12 +318,28 @@ export async function getOrCreateKnowledgeBase() {
|
|
|
291
318
|
// === INITIALIZATION ===
|
|
292
319
|
export function initializeFromArgs() {
|
|
293
320
|
const args = process.argv.slice(2);
|
|
321
|
+
let projectArgProvided = false;
|
|
294
322
|
for (let i = 0; i < args.length; i++) {
|
|
295
323
|
if (args[i] === '--project' && args[i + 1]) {
|
|
296
324
|
projectPath = args[i + 1];
|
|
325
|
+
projectArgProvided = true;
|
|
326
|
+
i++;
|
|
327
|
+
}
|
|
328
|
+
else if (args[i] === '--socket' && args[i + 1]) {
|
|
329
|
+
socketPathOverride = args[i + 1];
|
|
297
330
|
i++;
|
|
298
331
|
}
|
|
299
332
|
}
|
|
333
|
+
// Auto-detect project root from CWD when --project is not supplied.
|
|
334
|
+
// Claude Code (and other MCP hosts) spawn the server with CWD = workspace root,
|
|
335
|
+
// so this makes the server workspace-aware without any config change.
|
|
336
|
+
if (!projectArgProvided) {
|
|
337
|
+
const detected = findProjectRoot(process.cwd());
|
|
338
|
+
if (detected) {
|
|
339
|
+
projectPath = detected;
|
|
340
|
+
}
|
|
341
|
+
// else: keep process.cwd() as fallback
|
|
342
|
+
}
|
|
300
343
|
}
|
|
301
344
|
// === CLEANUP ===
|
|
302
345
|
export async function cleanup() {
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafema/mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.22",
|
|
4
4
|
"description": "MCP server for Grafema code analysis toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/server.js",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
40
40
|
"ajv": "^8.17.1",
|
|
41
41
|
"yaml": "^2.8.2",
|
|
42
|
-
"@grafema/
|
|
43
|
-
"@grafema/
|
|
44
|
-
"@grafema/
|
|
42
|
+
"@grafema/api": "0.3.22",
|
|
43
|
+
"@grafema/util": "0.3.22",
|
|
44
|
+
"@grafema/types": "0.3.22"
|
|
45
45
|
},
|
|
46
46
|
"optionalDependencies": {
|
|
47
47
|
"@grafema/grafema-darwin-arm64": "0.3.16",
|
package/src/server.ts
CHANGED
|
@@ -36,6 +36,7 @@ import { PROMPTS, getPrompt } from './prompts.js';
|
|
|
36
36
|
import { TOOLS } from './definitions/index.js';
|
|
37
37
|
import { initializeFromArgs, setupLogging, getProjectPath } from './state.js';
|
|
38
38
|
import { textResult, errorResult, log } from './utils.js';
|
|
39
|
+
import { getSocketPathOverride } from './state.js';
|
|
39
40
|
import { discoverServices } from './analysis.js';
|
|
40
41
|
import {
|
|
41
42
|
handleQueryGraph,
|
|
@@ -131,7 +132,8 @@ initializeFromArgs();
|
|
|
131
132
|
setupLogging();
|
|
132
133
|
|
|
133
134
|
const projectPath = getProjectPath();
|
|
134
|
-
|
|
135
|
+
const socketOverride = getSocketPathOverride();
|
|
136
|
+
log(`[Grafema MCP] Starting server for project: ${projectPath}${socketOverride ? ` socket=${socketOverride}` : ''}`);
|
|
135
137
|
|
|
136
138
|
// Create MCP server
|
|
137
139
|
const server = new Server(
|
package/src/state.ts
CHANGED
|
@@ -2,17 +2,42 @@
|
|
|
2
2
|
* MCP Server State Management
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { join } from 'path';
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
6
|
import { existsSync, mkdirSync } from 'fs';
|
|
7
7
|
import { RFDBServerBackend, GuaranteeManager, GuaranteeAPI, KnowledgeBase } from '@grafema/util';
|
|
8
8
|
import type { GuaranteeGraphBackend, GuaranteeGraph, ResolverBackend } from '@grafema/util';
|
|
9
9
|
import { loadConfig } from './config.js';
|
|
10
|
+
import type { MCPConfig } from './config.js';
|
|
10
11
|
import { log, initLogger } from './utils.js';
|
|
11
12
|
import type { AnalysisStatus } from './types.js';
|
|
12
13
|
import type { GraphBackend } from '@grafema/types';
|
|
13
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Walk up from startDir to find a Grafema project root.
|
|
17
|
+
*
|
|
18
|
+
* A directory is treated as a project root when it contains:
|
|
19
|
+
* - grafema.yaml (explicit config)
|
|
20
|
+
* - .grafema/ (analysis artefacts already created)
|
|
21
|
+
*
|
|
22
|
+
* Returns the absolute path of the first matching ancestor, or null if
|
|
23
|
+
* nothing is found before the filesystem root.
|
|
24
|
+
*/
|
|
25
|
+
export function findProjectRoot(startDir: string): string | null {
|
|
26
|
+
let dir = startDir;
|
|
27
|
+
while (true) {
|
|
28
|
+
if (existsSync(join(dir, 'grafema.yaml')) || existsSync(join(dir, '.grafema'))) {
|
|
29
|
+
return dir;
|
|
30
|
+
}
|
|
31
|
+
const parent = dirname(dir);
|
|
32
|
+
if (parent === dir) break; // filesystem root
|
|
33
|
+
dir = parent;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
14
38
|
// === GLOBAL STATE ===
|
|
15
39
|
let projectPath: string = process.cwd();
|
|
40
|
+
let socketPathOverride: string | null = null;
|
|
16
41
|
let backend: GraphBackend | null = null;
|
|
17
42
|
let isAnalyzed: boolean = false;
|
|
18
43
|
let backgroundPid: number | null = null;
|
|
@@ -95,6 +120,10 @@ export function getProjectPath(): string {
|
|
|
95
120
|
return projectPath;
|
|
96
121
|
}
|
|
97
122
|
|
|
123
|
+
export function getSocketPathOverride(): string | null {
|
|
124
|
+
return socketPathOverride;
|
|
125
|
+
}
|
|
126
|
+
|
|
98
127
|
export function getIsAnalyzed(): boolean {
|
|
99
128
|
return isAnalyzed;
|
|
100
129
|
}
|
|
@@ -250,9 +279,9 @@ export async function getOrCreateBackend(): Promise<GraphBackend> {
|
|
|
250
279
|
mkdirSync(grafemaDir, { recursive: true });
|
|
251
280
|
}
|
|
252
281
|
|
|
253
|
-
const config = loadConfig(projectPath);
|
|
254
|
-
// Socket path
|
|
255
|
-
const socketPath =
|
|
282
|
+
const config = loadConfig(projectPath) as MCPConfig;
|
|
283
|
+
// Socket path priority: --socket CLI arg > config rfdb_socket > auto-derive from dbPath
|
|
284
|
+
const socketPath = socketPathOverride || config.rfdb_socket || undefined;
|
|
256
285
|
|
|
257
286
|
log(`[Grafema MCP] Using RFDB server backend: socket=${socketPath || 'auto'}, db=${dbPath}`);
|
|
258
287
|
|
|
@@ -340,12 +369,28 @@ export async function getOrCreateKnowledgeBase(): Promise<KnowledgeBase> {
|
|
|
340
369
|
// === INITIALIZATION ===
|
|
341
370
|
export function initializeFromArgs(): void {
|
|
342
371
|
const args = process.argv.slice(2);
|
|
372
|
+
let projectArgProvided = false;
|
|
343
373
|
for (let i = 0; i < args.length; i++) {
|
|
344
374
|
if (args[i] === '--project' && args[i + 1]) {
|
|
345
375
|
projectPath = args[i + 1];
|
|
376
|
+
projectArgProvided = true;
|
|
377
|
+
i++;
|
|
378
|
+
} else if (args[i] === '--socket' && args[i + 1]) {
|
|
379
|
+
socketPathOverride = args[i + 1];
|
|
346
380
|
i++;
|
|
347
381
|
}
|
|
348
382
|
}
|
|
383
|
+
|
|
384
|
+
// Auto-detect project root from CWD when --project is not supplied.
|
|
385
|
+
// Claude Code (and other MCP hosts) spawn the server with CWD = workspace root,
|
|
386
|
+
// so this makes the server workspace-aware without any config change.
|
|
387
|
+
if (!projectArgProvided) {
|
|
388
|
+
const detected = findProjectRoot(process.cwd());
|
|
389
|
+
if (detected) {
|
|
390
|
+
projectPath = detected;
|
|
391
|
+
}
|
|
392
|
+
// else: keep process.cwd() as fallback
|
|
393
|
+
}
|
|
349
394
|
}
|
|
350
395
|
|
|
351
396
|
// === CLEANUP ===
|