@agentbrain/mcp-server 1.4.37 → 1.4.41

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.
@@ -7,6 +7,7 @@ export interface SaveContextInput {
7
7
  export interface SaveContextOutput {
8
8
  success: boolean;
9
9
  files_written: string[];
10
+ agent_detected: 'cursor' | 'windsurf' | 'claude' | 'unknown';
10
11
  message: string;
11
12
  }
12
13
  export declare function saveContext(input: SaveContextInput): Promise<SaveContextOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiErF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CA0B7B,CAAA"}
1
+ {"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC5D,OAAO,EAAE,MAAM,CAAA;CAChB;AAgGD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4HrF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CA0B7B,CAAA"}
@@ -1,9 +1,9 @@
1
1
  // MCP tool: save_context - save agent-generated context to disk
2
- import { writeFile, mkdir } from 'node:fs/promises';
2
+ import { writeFile, mkdir, readFile } from 'node:fs/promises';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { join, resolve } from 'node:path';
5
5
  import { homedir } from 'node:os';
6
- import { getGitHash, injectIntoAllAgents } from '@agentbrain/core';
6
+ import { getGitHash, ensureGitignore } from '@agentbrain/core';
7
7
  /**
8
8
  * Expand path: handles ~, relative paths, etc.
9
9
  */
@@ -13,25 +13,109 @@ function expandPath(path) {
13
13
  }
14
14
  return resolve(path);
15
15
  }
16
+ /**
17
+ * Detect agent type from filesystem
18
+ */
19
+ function detectAgentType(repoPath) {
20
+ if (existsSync(join(repoPath, '.cursor'))) {
21
+ return 'cursor';
22
+ }
23
+ if (existsSync(join(repoPath, '.windsurf'))) {
24
+ return 'windsurf';
25
+ }
26
+ if (existsSync(join(repoPath, 'CLAUDE.md'))) {
27
+ return 'claude';
28
+ }
29
+ return 'unknown';
30
+ }
31
+ /**
32
+ * Get agent file content
33
+ */
34
+ function getAgentFileContent(isModernFormat) {
35
+ const baseContent = `## AgentBrain Context
36
+ @.agentbrain/context.md
37
+ @.agentbrain/patterns.md
38
+ @.agentbrain/dependency-map.md
39
+
40
+ ## Workflow
41
+ - Always read context at session start via load_context()
42
+ - Before any task: load_spec() or agentbrain spec "task"
43
+ - After commits: context auto-updates via git hook
44
+ - If stuck in a loop: detect_doom_loop() or agentbrain doom
45
+ - End of session: save_handoff() or agentbrain handoff
46
+ - If context feels stale: agentbrain init
47
+
48
+ ## MCP Tools
49
+ - load_context() — full codebase context
50
+ - load_spec() — spec for current task
51
+ - detect_doom_loop() — check for stuck patterns
52
+ - save_handoff() — end of session handoff
53
+ - setup_repo() — first time MCP setup
54
+ - save_context() — save agent-generated context`;
55
+ if (isModernFormat) {
56
+ return `---
57
+ description: AgentBrain codebase context and workflow
58
+ alwaysApply: true
59
+ ---
60
+
61
+ ${baseContent}`;
62
+ }
63
+ return baseContent;
64
+ }
65
+ /**
66
+ * Check if agent file already contains AgentBrain section
67
+ */
68
+ async function hasAgentBrainSection(filePath) {
69
+ if (!existsSync(filePath)) {
70
+ return false;
71
+ }
72
+ const content = await readFile(filePath, 'utf-8');
73
+ return content.includes('── AgentBrain ──');
74
+ }
75
+ /**
76
+ * Update or append AgentBrain section to agent file
77
+ */
78
+ async function updateOrAppendAgentSection(filePath, content) {
79
+ const marker = '# ── AgentBrain ──────────────────────────────';
80
+ const endMarker = '# ── End AgentBrain ──────────────────────────';
81
+ let existingContent = '';
82
+ if (existsSync(filePath)) {
83
+ existingContent = await readFile(filePath, 'utf-8');
84
+ }
85
+ // Check if AgentBrain section already exists
86
+ if (existingContent.includes(marker)) {
87
+ // Replace existing section
88
+ const beforeMarker = existingContent.substring(0, existingContent.indexOf(marker));
89
+ const afterMarker = existingContent.substring(existingContent.indexOf(endMarker) + endMarker.length);
90
+ const newContent = `${beforeMarker}${marker}\n${content}\n${endMarker}${afterMarker}`;
91
+ await writeFile(filePath, newContent, 'utf-8');
92
+ }
93
+ else {
94
+ // Append new section
95
+ const agentBrainSection = `\n${marker}\n${content}\n${endMarker}\n`;
96
+ await writeFile(filePath, existingContent + agentBrainSection, 'utf-8');
97
+ }
98
+ }
16
99
  export async function saveContext(input) {
17
100
  const { repo_path, context, dependency_map, patterns } = input;
18
101
  // Expand path to handle ~, relative paths, etc.
19
102
  const expandedPath = expandPath(repo_path);
20
103
  const contextDir = join(expandedPath, '.agentbrain');
21
- // Create .agentbrain directory if it doesn't exist
104
+ const filesWritten = [];
105
+ // Step 1: Create .agentbrain directory if it doesn't exist
22
106
  if (!existsSync(contextDir)) {
23
107
  await mkdir(contextDir, { recursive: true });
24
108
  }
25
- // Write the three context files
109
+ // Step 2: Write the three context files
26
110
  const contextPath = join(contextDir, 'context.md');
27
111
  const depMapPath = join(contextDir, 'dependency-map.md');
28
112
  const patternsPath = join(contextDir, 'patterns.md');
29
113
  await writeFile(contextPath, context, 'utf-8');
30
114
  await writeFile(depMapPath, dependency_map, 'utf-8');
31
115
  await writeFile(patternsPath, patterns, 'utf-8');
32
- // Get current git hash
116
+ filesWritten.push('.agentbrain/context.md', '.agentbrain/dependency-map.md', '.agentbrain/patterns.md');
117
+ // Step 3: Get current git hash and write cache.json
33
118
  const gitHash = await getGitHash(expandedPath);
34
- // Create basic cache.json with git hash
35
119
  const cachePath = join(contextDir, 'cache.json');
36
120
  const cache = {
37
121
  gitHash,
@@ -55,17 +139,77 @@ export async function saveContext(input) {
55
139
  savedAt: new Date().toISOString(),
56
140
  };
57
141
  await writeFile(cachePath, JSON.stringify(cache, null, 2), 'utf-8');
58
- // Inject references into agent files if they exist
59
- await injectIntoAllAgents(expandedPath, gitHash);
142
+ filesWritten.push('.agentbrain/cache.json');
143
+ // Step 4: Update .gitignore
144
+ await ensureGitignore(expandedPath);
145
+ // Step 5 & 6: Create agent files based on directory detection
146
+ const modernContent = getAgentFileContent(true);
147
+ const legacyContent = getAgentFileContent(false);
148
+ let message = '';
149
+ // CURSOR: Check if .cursor/ directory exists
150
+ const cursorDirExists = existsSync(join(expandedPath, '.cursor'));
151
+ if (cursorDirExists) {
152
+ // Modern Cursor: ONLY create .cursor/rules/agentbrain.mdc
153
+ const modernPath = join(expandedPath, '.cursor', 'rules', 'agentbrain.mdc');
154
+ const modernDir = join(expandedPath, '.cursor', 'rules');
155
+ if (!existsSync(modernDir)) {
156
+ await mkdir(modernDir, { recursive: true });
157
+ }
158
+ await updateOrAppendAgentSection(modernPath, modernContent);
159
+ filesWritten.push('.cursor/rules/agentbrain.mdc');
160
+ message = 'Detected Cursor (.cursor/ directory found). Created/updated .cursor/rules/agentbrain.mdc';
161
+ }
162
+ else {
163
+ // Legacy Cursor: ONLY create .cursorrules
164
+ const legacyPath = join(expandedPath, '.cursorrules');
165
+ await updateOrAppendAgentSection(legacyPath, legacyContent);
166
+ filesWritten.push('.cursorrules');
167
+ message = 'Created/updated .cursorrules';
168
+ }
169
+ // WINDSURF: Check if .windsurf/ directory exists
170
+ const windsurfDirExists = existsSync(join(expandedPath, '.windsurf'));
171
+ if (windsurfDirExists) {
172
+ // Modern Windsurf: ONLY create .windsurf/rules/agentbrain.md
173
+ const modernPath = join(expandedPath, '.windsurf', 'rules', 'agentbrain.md');
174
+ const modernDir = join(expandedPath, '.windsurf', 'rules');
175
+ if (!existsSync(modernDir)) {
176
+ await mkdir(modernDir, { recursive: true });
177
+ }
178
+ await updateOrAppendAgentSection(modernPath, legacyContent); // Windsurf uses plain markdown
179
+ filesWritten.push('.windsurf/rules/agentbrain.md');
180
+ if (message)
181
+ message += '; ';
182
+ message += 'Detected Windsurf (.windsurf/ directory found). Created/updated .windsurf/rules/agentbrain.md';
183
+ }
184
+ else {
185
+ // Legacy Windsurf: ONLY create .windsurfrules
186
+ const legacyPath = join(expandedPath, '.windsurfrules');
187
+ await updateOrAppendAgentSection(legacyPath, legacyContent);
188
+ filesWritten.push('.windsurfrules');
189
+ if (message)
190
+ message += '; ';
191
+ message += 'Created/updated .windsurfrules';
192
+ }
193
+ // CLAUDE: Always create/update CLAUDE.md
194
+ const claudePath = join(expandedPath, 'CLAUDE.md');
195
+ await updateOrAppendAgentSection(claudePath, legacyContent);
196
+ filesWritten.push('CLAUDE.md');
197
+ if (message)
198
+ message += '; ';
199
+ message += 'Created/updated CLAUDE.md';
200
+ // Determine agent type for response
201
+ let detectedAgent = 'unknown';
202
+ if (cursorDirExists)
203
+ detectedAgent = 'cursor';
204
+ else if (windsurfDirExists)
205
+ detectedAgent = 'windsurf';
206
+ else if (existsSync(join(expandedPath, 'CLAUDE.md')))
207
+ detectedAgent = 'claude';
60
208
  return {
61
209
  success: true,
62
- files_written: [
63
- '.agentbrain/context.md',
64
- '.agentbrain/dependency-map.md',
65
- '.agentbrain/patterns.md',
66
- '.agentbrain/cache.json',
67
- ],
68
- message: 'Context saved successfully. load_context will now work without an API key.',
210
+ files_written: filesWritten,
211
+ agent_detected: detectedAgent,
212
+ message: `Context saved successfully. ${message}`,
69
213
  };
70
214
  }
71
215
  export const saveContextSchema = {
@@ -1 +1 @@
1
- {"version":3,"file":"save-context.js","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save-context.js","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface SetupRepoOutput {
8
8
  path: string;
9
9
  content: string;
10
10
  }>;
11
+ hook_installed: boolean;
11
12
  instructions: string;
12
13
  }
13
14
  export declare function setupRepo(input: SetupRepoInput): Promise<SetupRepoOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"setup-repo.d.ts","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IACF,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAmD/E;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAc3B,CAAA"}
1
+ {"version":3,"file":"setup-repo.d.ts","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IACF,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAoE/E;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAc3B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  // MCP tool: setup_repo - scan repo and return data for agent to generate context
2
- import { scanRepository, readFileContent } from '@agentbrain/core';
2
+ import { scanRepository, readFileContent, installPostCommitHook, isGitRepository } from '@agentbrain/core';
3
3
  import { resolve } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  /**
@@ -32,7 +32,22 @@ export async function setupRepo(input) {
32
32
  });
33
33
  }
34
34
  }
35
- // Instructions for the agent
35
+ // Install git hook if in a git repository
36
+ let hookInstalled = false;
37
+ if (isGitRepository(expandedPath)) {
38
+ try {
39
+ await installPostCommitHook(expandedPath);
40
+ hookInstalled = true;
41
+ }
42
+ catch {
43
+ // Hook installation failed silently — not critical
44
+ hookInstalled = false;
45
+ }
46
+ }
47
+ // Instructions for the agent - vary based on hook installation
48
+ const hookNote = hookInstalled
49
+ ? '\n\nGit hook installed. Context will auto-refresh after every commit — no manual updates needed.'
50
+ : '\n\nGit hook could not be installed. You can manually refresh context by calling setup_repo() again.';
36
51
  const instructions = `Based on the file tree and key files above, generate:
37
52
 
38
53
  1. context.md — Architecture overview, key modules, entry points, what the codebase does, tech stack
@@ -48,11 +63,12 @@ Guidelines:
48
63
  - Focus on what's unique to this codebase
49
64
  - Include specific file paths and module names
50
65
  - Identify the main entry points and core business logic
51
- - Note any important patterns or conventions used consistently`;
66
+ - Note any important patterns or conventions used consistently${hookNote}`;
52
67
  return {
53
68
  repo_path: expandedPath,
54
69
  file_tree: fileTree,
55
70
  key_files: keyFiles,
71
+ hook_installed: hookInstalled,
56
72
  instructions,
57
73
  };
58
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-repo.js","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;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,SAAS,CAAC,KAAqB;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE3B,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE1C,4CAA4C;IAC5C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IAEvE,gCAAgC;IAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC;SACvC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,kDAAkD;IAClD,MAAM,QAAQ,GAA6C,EAAE,CAAA;IAE7D,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;+DAewC,CAAA;IAE7D,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,QAAQ;QACnB,YAAY;KACb,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,+LAA+L;IACjM,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAA"}
1
+ {"version":3,"file":"setup-repo.js","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;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;AAiBD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE3B,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE1C,4CAA4C;IAC5C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IAEvE,gCAAgC;IAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC;SACvC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,kDAAkD;IAClD,MAAM,QAAQ,GAA6C,EAAE,CAAA;IAE7D,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAA;YACzC,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,aAAa,GAAG,KAAK,CAAA;QACvB,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,kGAAkG;QACpG,CAAC,CAAC,sGAAsG,CAAA;IAE1G,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;gEAeyC,QAAQ,EAAE,CAAA;IAExE,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,aAAa;QAC7B,YAAY;KACb,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,+LAA+L;IACjM,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentbrain/mcp-server",
3
- "version": "1.4.37",
3
+ "version": "1.4.41",
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",