@agentbrain/mcp-server 1.4.7 → 1.4.8
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/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/__tests__/load-task-context.test.d.ts +2 -0
- package/dist/tools/__tests__/load-task-context.test.d.ts.map +1 -0
- package/dist/tools/__tests__/load-task-context.test.js +71 -0
- package/dist/tools/__tests__/load-task-context.test.js.map +1 -0
- package/dist/tools/load-task-context.d.ts +36 -0
- package/dist/tools/load-task-context.d.ts.map +1 -0
- package/dist/tools/load-task-context.js +57 -0
- package/dist/tools/load-task-context.js.map +1 -0
- package/package.json +9 -2
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { scanRepo, scanRepoSchema } from './tools/scan-repo.js';
|
|
|
7
7
|
import { loadStandards, loadStandardsSchema } from './tools/load-standards.js';
|
|
8
8
|
import { loadContext, loadContextSchema } from './tools/load-context.js';
|
|
9
9
|
import { saveHandoff, saveHandoffSchema } from './tools/save-handoff.js';
|
|
10
|
+
import { loadTaskContext, loadTaskContextSchema } from './tools/load-task-context.js';
|
|
10
11
|
// Create MCP server
|
|
11
12
|
const server = new Server({
|
|
12
13
|
name: 'agentbrain',
|
|
@@ -19,7 +20,13 @@ const server = new Server({
|
|
|
19
20
|
// Register tools
|
|
20
21
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
21
22
|
return {
|
|
22
|
-
tools: [
|
|
23
|
+
tools: [
|
|
24
|
+
scanRepoSchema,
|
|
25
|
+
loadStandardsSchema,
|
|
26
|
+
loadContextSchema,
|
|
27
|
+
loadTaskContextSchema,
|
|
28
|
+
saveHandoffSchema,
|
|
29
|
+
],
|
|
23
30
|
};
|
|
24
31
|
});
|
|
25
32
|
// Handle tool calls
|
|
@@ -61,6 +68,18 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
61
68
|
],
|
|
62
69
|
};
|
|
63
70
|
}
|
|
71
|
+
case 'load_task_context': {
|
|
72
|
+
const typedArgs = args;
|
|
73
|
+
const result = await loadTaskContext(typedArgs);
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: 'text',
|
|
78
|
+
text: `${result.content}\n\n---\n\n[Task: "${typedArgs.task}", Scored ${result.totalFilesScored} files, Selected top ${result.selectedFiles}, Tokens: ${result.tokensUsed}, Cost: ~$${result.cost.toFixed(4)}]`,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
64
83
|
default:
|
|
65
84
|
throw new Error(`Unknown tool: ${name}`);
|
|
66
85
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,wBAAwB;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-task-context.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/load-task-context.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { loadTaskContextSchema } from '../load-task-context.js';
|
|
3
|
+
// Simple unit tests for MCP tool schema and basic validation
|
|
4
|
+
// Full integration tests would require mocking the entire core module
|
|
5
|
+
describe('loadTaskContextSchema', () => {
|
|
6
|
+
it('has correct tool name', () => {
|
|
7
|
+
expect(loadTaskContextSchema.name).toBe('load_task_context');
|
|
8
|
+
});
|
|
9
|
+
it('has valid input schema structure', () => {
|
|
10
|
+
expect(loadTaskContextSchema.inputSchema).toBeDefined();
|
|
11
|
+
expect(loadTaskContextSchema.inputSchema.type).toBe('object');
|
|
12
|
+
expect(loadTaskContextSchema.inputSchema.properties).toBeDefined();
|
|
13
|
+
expect(loadTaskContextSchema.inputSchema.required).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
it('has required fields in schema', () => {
|
|
16
|
+
const required = loadTaskContextSchema.inputSchema.required;
|
|
17
|
+
expect(Array.isArray(required)).toBe(true);
|
|
18
|
+
expect(required).toContain('repo_path');
|
|
19
|
+
expect(required).toContain('task');
|
|
20
|
+
});
|
|
21
|
+
it('has optional max_files parameter', () => {
|
|
22
|
+
const properties = loadTaskContextSchema.inputSchema.properties;
|
|
23
|
+
expect(properties).toHaveProperty('max_files');
|
|
24
|
+
expect(properties.max_files.type).toBe('number');
|
|
25
|
+
const required = loadTaskContextSchema.inputSchema.required;
|
|
26
|
+
expect(required).not.toContain('max_files');
|
|
27
|
+
});
|
|
28
|
+
it('has repo_path parameter with correct type', () => {
|
|
29
|
+
const properties = loadTaskContextSchema.inputSchema.properties;
|
|
30
|
+
expect(properties.repo_path).toBeDefined();
|
|
31
|
+
expect(properties.repo_path.type).toBe('string');
|
|
32
|
+
expect(properties.repo_path.description).toBeDefined();
|
|
33
|
+
});
|
|
34
|
+
it('has task parameter with correct type', () => {
|
|
35
|
+
const properties = loadTaskContextSchema.inputSchema.properties;
|
|
36
|
+
expect(properties.task).toBeDefined();
|
|
37
|
+
expect(properties.task.type).toBe('string');
|
|
38
|
+
expect(properties.task.description).toBeDefined();
|
|
39
|
+
});
|
|
40
|
+
it('describes near-zero cost feature', () => {
|
|
41
|
+
expect(loadTaskContextSchema.description).toContain('cached summaries');
|
|
42
|
+
});
|
|
43
|
+
it('mentions re-use of cached data', () => {
|
|
44
|
+
expect(loadTaskContextSchema.description.toLowerCase()).toContain('re-use');
|
|
45
|
+
});
|
|
46
|
+
it('has clear description', () => {
|
|
47
|
+
expect(loadTaskContextSchema.description.length).toBeGreaterThan(20);
|
|
48
|
+
expect(loadTaskContextSchema.description).toContain('task');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('load-task-context module exports', () => {
|
|
52
|
+
it('exports loadTaskContext function', async () => {
|
|
53
|
+
const module = await import('../load-task-context.js');
|
|
54
|
+
expect(module.loadTaskContext).toBeDefined();
|
|
55
|
+
expect(typeof module.loadTaskContext).toBe('function');
|
|
56
|
+
});
|
|
57
|
+
it('exports loadTaskContextSchema object', async () => {
|
|
58
|
+
const module = await import('../load-task-context.js');
|
|
59
|
+
expect(module.loadTaskContextSchema).toBeDefined();
|
|
60
|
+
expect(typeof module.loadTaskContextSchema).toBe('object');
|
|
61
|
+
});
|
|
62
|
+
it('exports LoadTaskContextInput type', async () => {
|
|
63
|
+
const module = await import('../load-task-context.js');
|
|
64
|
+
expect(module).toBeDefined();
|
|
65
|
+
});
|
|
66
|
+
it('exports LoadTaskContextOutput type', async () => {
|
|
67
|
+
const module = await import('../load-task-context.js');
|
|
68
|
+
expect(module).toBeDefined();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=load-task-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-task-context.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/load-task-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface LoadTaskContextInput {
|
|
2
|
+
repo_path: string;
|
|
3
|
+
task: string;
|
|
4
|
+
max_files?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface LoadTaskContextOutput {
|
|
7
|
+
content: string;
|
|
8
|
+
selectedFiles: number;
|
|
9
|
+
totalFilesScored: number;
|
|
10
|
+
tokensUsed: number;
|
|
11
|
+
cost: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadTaskContext(input: LoadTaskContextInput): Promise<LoadTaskContextOutput>;
|
|
14
|
+
export declare const loadTaskContextSchema: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: string;
|
|
19
|
+
properties: {
|
|
20
|
+
repo_path: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
task: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
max_files: {
|
|
29
|
+
type: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
required: string[];
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=load-task-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-task-context.d.ts","sourceRoot":"","sources":["../../src/tools/load-task-context.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAwBhC;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAuBjC,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// MCP tool: load_task_context - load task-focused context
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { loadAIConfig, generateTaskContext } from '@agentbrain/core';
|
|
5
|
+
/**
|
|
6
|
+
* Expand path: handles ~, relative paths, etc.
|
|
7
|
+
*/
|
|
8
|
+
function expandPath(path) {
|
|
9
|
+
if (path.startsWith('~/') || path === '~') {
|
|
10
|
+
return path.replace('~', homedir());
|
|
11
|
+
}
|
|
12
|
+
return resolve(path);
|
|
13
|
+
}
|
|
14
|
+
export async function loadTaskContext(input) {
|
|
15
|
+
const { repo_path, task, max_files = 20 } = input;
|
|
16
|
+
// Expand path to handle ~, relative paths, etc.
|
|
17
|
+
const expandedPath = expandPath(repo_path);
|
|
18
|
+
// Load AI config
|
|
19
|
+
const aiConfig = await loadAIConfig();
|
|
20
|
+
// Generate task-focused context
|
|
21
|
+
const result = await generateTaskContext({
|
|
22
|
+
repoPath: expandedPath,
|
|
23
|
+
aiConfig,
|
|
24
|
+
task,
|
|
25
|
+
maxFiles: max_files,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
content: result.content,
|
|
29
|
+
selectedFiles: result.selectedFiles.length,
|
|
30
|
+
totalFilesScored: result.totalFilesScored,
|
|
31
|
+
tokensUsed: result.tokens,
|
|
32
|
+
cost: result.cost,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export const loadTaskContextSchema = {
|
|
36
|
+
name: 'load_task_context',
|
|
37
|
+
description: 'Generate task-focused context by scoring cached file summaries against a specific task. Near-zero cost on repeat calls since it re-uses cached summaries.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
repo_path: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Absolute path to the repository',
|
|
44
|
+
},
|
|
45
|
+
task: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Description of the task (e.g., "add OAuth login to auth module", "fix bug in payment processing")',
|
|
48
|
+
},
|
|
49
|
+
max_files: {
|
|
50
|
+
type: 'number',
|
|
51
|
+
description: 'Maximum number of relevant files to include (default: 20)',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
required: ['repo_path', 'task'],
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=load-task-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-task-context.js","sourceRoot":"","sources":["../../src/tools/load-task-context.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEpE;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B;IAE3B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,CAAA;IAEjD,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE1C,iBAAiB;IACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IAErC,gCAAgC;IAChC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,QAAQ,EAAE,YAAY;QACtB,QAAQ;QACR,IAAI;QACJ,QAAQ,EAAE,SAAS;KACpB,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;QAC1C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,2JAA2J;IAC7J,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mGAAmG;aACtG;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;KAChC;CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentbrain/mcp-server",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.8",
|
|
4
4
|
"description": "Model Context Protocol server for AgentBrain - connect Claude, Cursor, and Windsurf to repository intelligence",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,14 +35,21 @@
|
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "tsc -p tsconfig.json",
|
|
37
37
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
38
|
-
"clean": "rm -rf dist"
|
|
38
|
+
"clean": "rm -rf dist",
|
|
39
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
40
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
|
|
41
|
+
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage"
|
|
39
42
|
},
|
|
40
43
|
"dependencies": {
|
|
41
44
|
"@agentbrain/core": "*",
|
|
42
45
|
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
43
46
|
},
|
|
44
47
|
"devDependencies": {
|
|
48
|
+
"@jest/globals": "^30.3.0",
|
|
49
|
+
"@types/jest": "^30.0.0",
|
|
45
50
|
"@types/node": "^22.10.7",
|
|
51
|
+
"jest": "^30.3.0",
|
|
52
|
+
"ts-jest": "^29.4.6",
|
|
46
53
|
"typescript": "^5.7.2"
|
|
47
54
|
}
|
|
48
55
|
}
|