claude-brain 0.30.2 → 0.30.3

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.
Files changed (236) hide show
  1. package/README.md +241 -191
  2. package/VERSION +1 -1
  3. package/assets/CLAUDE-unified.md +11 -11
  4. package/assets/CLAUDE.md +29 -29
  5. package/package.json +7 -3
  6. package/packs/backend/node.json +173 -173
  7. package/packs/core/javascript.json +176 -176
  8. package/packs/core/typescript.json +222 -222
  9. package/packs/frontend/react.json +254 -254
  10. package/packs/meta/testing.json +172 -172
  11. package/scripts/postinstall.mjs +531 -531
  12. package/src/automation/decision-detector.ts +452 -452
  13. package/src/automation/phase12-manager.ts +456 -456
  14. package/src/automation/proactive-recall.ts +373 -373
  15. package/src/automation/project-detector.ts +310 -310
  16. package/src/automation/repo-scanner.ts +210 -205
  17. package/src/cli/auto-setup.ts +75 -75
  18. package/src/cli/auto-start.ts +266 -266
  19. package/src/cli/bin.ts +264 -264
  20. package/src/cli/commands/autostart.ts +90 -90
  21. package/src/cli/commands/chroma.ts +578 -577
  22. package/src/cli/commands/export-training.ts +70 -70
  23. package/src/cli/commands/export.ts +130 -130
  24. package/src/cli/commands/git-hook.ts +183 -183
  25. package/src/cli/commands/hooks.ts +217 -217
  26. package/src/cli/commands/init.ts +123 -123
  27. package/src/cli/commands/install-mcp.ts +122 -111
  28. package/src/cli/commands/models.ts +979 -979
  29. package/src/cli/commands/pack.ts +200 -200
  30. package/src/cli/commands/refresh.ts +344 -339
  31. package/src/cli/commands/reindex.ts +120 -120
  32. package/src/cli/commands/serve.ts +466 -463
  33. package/src/cli/commands/start.ts +44 -44
  34. package/src/cli/commands/status.ts +220 -203
  35. package/src/cli/commands/uninstall-mcp.ts +45 -41
  36. package/src/cli/commands/update.ts +130 -124
  37. package/src/cli/migrate-chroma.ts +106 -106
  38. package/src/cli/ui/animations.ts +80 -80
  39. package/src/cli/ui/components.ts +82 -82
  40. package/src/cli/ui/index.ts +4 -4
  41. package/src/cli/ui/logo.ts +36 -36
  42. package/src/cli/ui/theme.ts +55 -55
  43. package/src/code-intelligence/indexer.ts +352 -352
  44. package/src/code-intelligence/linker.ts +178 -178
  45. package/src/code-intelligence/parser.ts +484 -484
  46. package/src/code-intelligence/query.ts +291 -291
  47. package/src/code-intelligence/schema.ts +83 -83
  48. package/src/code-intelligence/types.ts +95 -95
  49. package/src/config/defaults.ts +52 -52
  50. package/src/config/home.ts +56 -56
  51. package/src/config/index.ts +5 -5
  52. package/src/config/loader.ts +192 -192
  53. package/src/config/schema.ts +446 -415
  54. package/src/config/validator.ts +182 -182
  55. package/src/context/assembler.ts +407 -400
  56. package/src/context/index.ts +79 -79
  57. package/src/context/progress-tracker.ts +174 -174
  58. package/src/context/standards-manager.ts +287 -287
  59. package/src/context/validator.ts +58 -58
  60. package/src/diagnostics/index.ts +122 -121
  61. package/src/health/index.ts +233 -232
  62. package/src/hooks/brain-hook.ts +134 -131
  63. package/src/hooks/capture.ts +168 -168
  64. package/src/hooks/claude-code-mastery.md +112 -112
  65. package/src/hooks/context-hook.ts +260 -245
  66. package/src/hooks/deduplicator.ts +72 -72
  67. package/src/hooks/git-capture.ts +109 -109
  68. package/src/hooks/git-hook-installer.ts +211 -207
  69. package/src/hooks/index.ts +20 -20
  70. package/src/hooks/installer.ts +306 -288
  71. package/src/hooks/interceptor-hook.ts +204 -201
  72. package/src/hooks/passive-classifier.ts +397 -397
  73. package/src/hooks/queue.ts +160 -129
  74. package/src/hooks/session-tracker.ts +312 -312
  75. package/src/hooks/types.ts +52 -52
  76. package/src/index.ts +7 -7
  77. package/src/intelligence/cross-project/generalizer.ts +283 -283
  78. package/src/intelligence/cross-project/index.ts +7 -7
  79. package/src/intelligence/hf-downloader.ts +222 -222
  80. package/src/intelligence/hf-manifest.json +78 -78
  81. package/src/intelligence/index.ts +24 -24
  82. package/src/intelligence/inference-router.ts +762 -762
  83. package/src/intelligence/model-manager.ts +263 -245
  84. package/src/intelligence/optimization/index.ts +10 -10
  85. package/src/intelligence/optimization/precompute.ts +202 -202
  86. package/src/intelligence/optimization/semantic-cache.ts +213 -207
  87. package/src/intelligence/prediction/index.ts +7 -7
  88. package/src/intelligence/prediction/recommender.ts +276 -268
  89. package/src/intelligence/reasoning/chain-retrieval.ts +243 -247
  90. package/src/intelligence/reasoning/index.ts +7 -7
  91. package/src/intelligence/temporal/evolution.ts +193 -197
  92. package/src/intelligence/temporal/index.ts +16 -16
  93. package/src/intelligence/temporal/query-processor.ts +190 -190
  94. package/src/intelligence/temporal/timeline.ts +272 -259
  95. package/src/intelligence/temporal/trends.ts +263 -263
  96. package/src/intelligence/tokenizer.ts +118 -118
  97. package/src/knowledge/entity-extractor.ts +447 -443
  98. package/src/knowledge/graph/builder.ts +185 -185
  99. package/src/knowledge/graph/linker.ts +201 -201
  100. package/src/knowledge/graph/memory-graph.ts +359 -359
  101. package/src/knowledge/graph/schema.ts +99 -99
  102. package/src/knowledge/graph/search.ts +166 -166
  103. package/src/knowledge/relationship-extractor.ts +108 -108
  104. package/src/memory/chroma/client.ts +211 -192
  105. package/src/memory/chroma/collection-manager.ts +92 -92
  106. package/src/memory/chroma/config.ts +57 -57
  107. package/src/memory/chroma/embeddings.ts +177 -175
  108. package/src/memory/chroma/index.ts +82 -82
  109. package/src/memory/chroma/migration.ts +270 -270
  110. package/src/memory/chroma/schemas.ts +69 -69
  111. package/src/memory/chroma/search.ts +319 -315
  112. package/src/memory/chroma/store.ts +755 -747
  113. package/src/memory/compression.ts +121 -121
  114. package/src/memory/consolidation/archiver.ts +162 -165
  115. package/src/memory/consolidation/merger.ts +182 -186
  116. package/src/memory/consolidation/scorer.ts +136 -136
  117. package/src/memory/database.ts +9 -0
  118. package/src/memory/dual-write.ts +145 -0
  119. package/src/memory/embeddings.ts +226 -226
  120. package/src/memory/episodic/detector.ts +108 -108
  121. package/src/memory/episodic/manager.ts +347 -351
  122. package/src/memory/episodic/summarizer.ts +179 -179
  123. package/src/memory/episodic/types.ts +52 -52
  124. package/src/memory/fts5-search.ts +692 -633
  125. package/src/memory/index.ts +943 -1060
  126. package/src/memory/migrations/add-fts5.ts +118 -108
  127. package/src/memory/patterns.ts +438 -438
  128. package/src/memory/pruning.ts +60 -60
  129. package/src/memory/schema.ts +88 -88
  130. package/src/memory/store.ts +911 -787
  131. package/src/orchestrator/handlers/decision-handler.ts +204 -204
  132. package/src/packs/index.ts +9 -9
  133. package/src/packs/loader.ts +134 -134
  134. package/src/packs/manager.ts +204 -204
  135. package/src/packs/ranker.ts +78 -78
  136. package/src/packs/types.ts +81 -81
  137. package/src/phase12/index.ts +5 -5
  138. package/src/retrieval/bm25/index.ts +300 -297
  139. package/src/retrieval/bm25/tokenizer.ts +184 -184
  140. package/src/retrieval/feedback/adaptive.ts +221 -221
  141. package/src/retrieval/feedback/index.ts +16 -16
  142. package/src/retrieval/feedback/metrics.ts +221 -221
  143. package/src/retrieval/feedback/store.ts +283 -283
  144. package/src/retrieval/fusion/index.ts +194 -194
  145. package/src/retrieval/fusion/rrf.ts +165 -165
  146. package/src/retrieval/index.ts +12 -12
  147. package/src/retrieval/pipeline.ts +375 -375
  148. package/src/retrieval/query/expander.ts +203 -203
  149. package/src/retrieval/query/index.ts +27 -27
  150. package/src/retrieval/query/intent-classifier.ts +252 -252
  151. package/src/retrieval/query/temporal-parser.ts +295 -295
  152. package/src/retrieval/reranker/index.ts +189 -188
  153. package/src/retrieval/reranker/model.ts +99 -95
  154. package/src/retrieval/service.ts +125 -125
  155. package/src/retrieval/types.ts +162 -162
  156. package/src/routing/entity-extractor.ts +454 -454
  157. package/src/routing/handlers/exploration-handler.ts +369 -0
  158. package/src/routing/handlers/index.ts +19 -0
  159. package/src/routing/handlers/memory-handler.ts +273 -0
  160. package/src/routing/handlers/mutation-handler.ts +241 -0
  161. package/src/routing/handlers/recall-handler.ts +642 -0
  162. package/src/routing/handlers/shared.ts +515 -0
  163. package/src/routing/handlers/types.ts +48 -0
  164. package/src/routing/intent-classifier.ts +552 -552
  165. package/src/routing/response-filter.ts +399 -391
  166. package/src/routing/router.ts +245 -2193
  167. package/src/routing/search-engine.ts +521 -514
  168. package/src/routing/types.ts +104 -94
  169. package/src/scripts/health-check.ts +118 -118
  170. package/src/scripts/setup.ts +122 -122
  171. package/src/server/auto-updater.ts +283 -276
  172. package/src/server/handlers/call-tool.ts +159 -159
  173. package/src/server/handlers/list-tools.ts +35 -35
  174. package/src/server/handlers/tools/auto-remember.ts +165 -165
  175. package/src/server/handlers/tools/brain.ts +86 -86
  176. package/src/server/handlers/tools/create-project.ts +135 -135
  177. package/src/server/handlers/tools/get-code-standards.ts +123 -123
  178. package/src/server/handlers/tools/get-corrections.ts +152 -152
  179. package/src/server/handlers/tools/get-patterns.ts +156 -156
  180. package/src/server/handlers/tools/get-project-context.ts +75 -75
  181. package/src/server/handlers/tools/index.ts +30 -30
  182. package/src/server/handlers/tools/init-project.ts +756 -756
  183. package/src/server/handlers/tools/list-projects.ts +126 -126
  184. package/src/server/handlers/tools/recall-similar.ts +87 -87
  185. package/src/server/handlers/tools/recognize-pattern.ts +132 -132
  186. package/src/server/handlers/tools/record-correction.ts +131 -131
  187. package/src/server/handlers/tools/remember-decision.ts +168 -168
  188. package/src/server/handlers/tools/schemas.ts +179 -179
  189. package/src/server/handlers/tools/search-code.ts +122 -122
  190. package/src/server/handlers/tools/smart-context.ts +146 -146
  191. package/src/server/handlers/tools/update-progress.ts +131 -131
  192. package/src/server/http-api.ts +215 -1229
  193. package/src/server/mcp-proxy.ts +85 -84
  194. package/src/server/mcp-server.ts +285 -284
  195. package/src/server/middleware/auth.ts +39 -0
  196. package/src/server/middleware/error-handler.ts +37 -0
  197. package/src/server/middleware/rate-limit.ts +53 -0
  198. package/src/server/middleware/validate.ts +42 -0
  199. package/src/server/pid-manager.ts +137 -136
  200. package/src/server/providers/resources.ts +581 -581
  201. package/src/server/routes/code.ts +228 -0
  202. package/src/server/routes/context.ts +26 -0
  203. package/src/server/routes/health.ts +19 -0
  204. package/src/server/routes/helpers.ts +100 -0
  205. package/src/server/routes/hooks.ts +197 -0
  206. package/src/server/routes/mcp.ts +47 -0
  207. package/src/server/routes/memory.ts +397 -0
  208. package/src/server/routes/models.ts +96 -0
  209. package/src/server/routes/projects.ts +89 -0
  210. package/src/server/routes/types.ts +21 -0
  211. package/src/server/schemas/api-schemas.ts +202 -0
  212. package/src/server/services.ts +720 -720
  213. package/src/server/utils/memory-indicator.ts +84 -84
  214. package/src/server/utils/response-formatter.ts +129 -129
  215. package/src/server/web-viewer.ts +1145 -1115
  216. package/src/setup/index.ts +38 -38
  217. package/src/tools/registry.ts +115 -115
  218. package/src/tools/schemas.ts +666 -666
  219. package/src/tools/types.ts +412 -412
  220. package/src/training/data-store.ts +320 -298
  221. package/src/training/retrain-pipeline.ts +399 -394
  222. package/src/utils/error-handler.ts +136 -136
  223. package/src/utils/index.ts +58 -58
  224. package/src/utils/kill-port.ts +55 -53
  225. package/src/utils/phase12-helper.ts +56 -56
  226. package/src/utils/safe-path.ts +43 -0
  227. package/src/utils/timing.ts +47 -47
  228. package/src/utils/transaction.ts +63 -63
  229. package/src/vault/index.ts +4 -3
  230. package/src/vault/paths.ts +106 -106
  231. package/src/vault/query.ts +4 -1
  232. package/src/vault/reader.ts +44 -1
  233. package/src/vault/watcher.ts +24 -1
  234. package/src/vault/writer.ts +487 -413
  235. package/skills/persistent-memory/SKILL.md +0 -148
  236. package/skills/persistent-memory/references/tool-reference.md +0 -90
@@ -1,666 +1,666 @@
1
- /**
2
- * MCP Tool Schemas
3
- * Defines all available tools that Claude Code can call
4
- *
5
- * Each tool has:
6
- * - name: Unique identifier for the tool
7
- * - description: Explains when and how to use the tool
8
- * - inputSchema: JSON Schema for validating input parameters
9
- */
10
-
11
- /** Tool definition type */
12
- export interface ToolDefinition {
13
- name: string
14
- description: string
15
- inputSchema: {
16
- type: 'object'
17
- properties: Record<string, unknown>
18
- required?: string[]
19
- }
20
- }
21
-
22
- /**
23
- * All available tools for Claude Brain MCP server
24
- */
25
- export const TOOLS = {
26
- /**
27
- * GET_PROJECT_CONTEXT
28
- * Primary tool for retrieving complete project context
29
- *
30
- * Use this when:
31
- * - Starting work on a project
32
- * - Need to understand project standards and conventions
33
- * - Want to see recent decisions and progress
34
- *
35
- * Returns: Project description, standards, progress, and optionally relevant memories
36
- */
37
- GET_PROJECT_CONTEXT: {
38
- name: 'get_project_context',
39
- description: 'Retrieves complete project context including standards, progress, past decisions, and relevant memories. This is the primary tool for getting context about a project.',
40
- inputSchema: {
41
- type: 'object' as const,
42
- properties: {
43
- project_name: {
44
- type: 'string',
45
- description: 'Name of the project to get context for'
46
- },
47
- include_memories: {
48
- type: 'boolean',
49
- description: 'Whether to include similar past decisions from semantic memory',
50
- default: true
51
- },
52
- memory_limit: {
53
- type: 'number',
54
- description: 'Maximum number of relevant memories to include',
55
- default: 5
56
- }
57
- },
58
- required: ['project_name']
59
- }
60
- },
61
-
62
- /**
63
- * UPDATE_PROGRESS
64
- * Track project progress and completed work
65
- *
66
- * Use this when:
67
- * - Completing a task or milestone
68
- * - Making significant progress
69
- * - Updating what should happen next
70
- *
71
- * Returns: Confirmation of progress update
72
- */
73
- UPDATE_PROGRESS: {
74
- name: 'update_progress',
75
- description: 'Updates project progress tracking with completed tasks and next steps. Use this when you complete a task or make significant progress.',
76
- inputSchema: {
77
- type: 'object' as const,
78
- properties: {
79
- project_name: {
80
- type: 'string',
81
- description: 'Name of the project'
82
- },
83
- completed_task: {
84
- type: 'string',
85
- description: 'Description of what was just completed'
86
- },
87
- next_steps: {
88
- type: 'string',
89
- description: 'What should be done next'
90
- },
91
- notes: {
92
- type: 'string',
93
- description: 'Optional additional notes or context'
94
- }
95
- },
96
- required: ['project_name', 'completed_task', 'next_steps']
97
- }
98
- },
99
-
100
- /**
101
- * REMEMBER_DECISION
102
- * Store important decisions in long-term memory
103
- *
104
- * Use this when:
105
- * - Making architectural decisions
106
- * - Choosing between alternatives
107
- * - Establishing patterns that should persist
108
- *
109
- * Returns: Confirmation with memory ID
110
- */
111
- REMEMBER_DECISION: {
112
- name: 'remember_decision',
113
- description: 'Stores an important architectural or technical decision in long-term memory. Use this for decisions that should influence future development.',
114
- inputSchema: {
115
- type: 'object' as const,
116
- properties: {
117
- project_name: {
118
- type: 'string',
119
- description: 'Project this decision relates to'
120
- },
121
- context: {
122
- type: 'string',
123
- description: 'What situation or problem led to this decision'
124
- },
125
- decision: {
126
- type: 'string',
127
- description: 'The decision that was made'
128
- },
129
- reasoning: {
130
- type: 'string',
131
- description: 'Why this decision was made'
132
- },
133
- alternatives_considered: {
134
- type: 'string',
135
- description: 'Other options that were considered'
136
- },
137
- tags: {
138
- type: 'array',
139
- items: { type: 'string' },
140
- description: 'Tags for categorizing this decision (e.g., "architecture", "performance", "security")'
141
- }
142
- },
143
- required: ['project_name', 'context', 'decision', 'reasoning']
144
- }
145
- },
146
-
147
- /**
148
- * RECALL_SIMILAR
149
- * Semantic search through past decisions and context
150
- *
151
- * Use this when:
152
- * - Facing a similar situation to past work
153
- * - Want to learn from previous decisions
154
- * - Need context from related work
155
- *
156
- * Returns: Array of similar decisions with similarity scores
157
- */
158
- RECALL_SIMILAR: {
159
- name: 'recall_similar',
160
- description: 'Finds past decisions and context similar to the current situation using semantic search. Helps learn from past experience.',
161
- inputSchema: {
162
- type: 'object' as const,
163
- properties: {
164
- query: {
165
- type: 'string',
166
- description: 'Description of current situation or question'
167
- },
168
- project_filter: {
169
- type: 'string',
170
- description: 'Optional: only search within specific project'
171
- },
172
- limit: {
173
- type: 'number',
174
- description: 'Maximum number of results to return',
175
- default: 5
176
- },
177
- min_similarity: {
178
- type: 'number',
179
- description: 'Minimum similarity score (0-1)',
180
- default: 0.7
181
- }
182
- },
183
- required: ['query']
184
- }
185
- },
186
-
187
- /**
188
- * GET_CODE_STANDARDS
189
- * Retrieve coding standards and conventions
190
- *
191
- * Use this when:
192
- * - Need to follow project coding style
193
- * - Want to ensure consistency
194
- * - Starting to write new code
195
- *
196
- * Returns: Merged global and project-specific standards
197
- */
198
- GET_CODE_STANDARDS: {
199
- name: 'get_code_standards',
200
- description: 'Retrieves coding standards, patterns, and conventions for a project. Includes global standards merged with project-specific rules.',
201
- inputSchema: {
202
- type: 'object' as const,
203
- properties: {
204
- project_name: {
205
- type: 'string',
206
- description: 'Name of the project'
207
- },
208
- language: {
209
- type: 'string',
210
- description: 'Optional: filter standards by programming language (e.g., "typescript", "python")'
211
- }
212
- },
213
- required: ['project_name']
214
- }
215
- },
216
-
217
- /**
218
- * LIST_PROJECTS
219
- * Get available projects from the vault
220
- *
221
- * Use this when:
222
- * - Need to see what projects exist
223
- * - Want project metadata and status
224
- * - Looking for active vs archived projects
225
- *
226
- * Returns: Array of project summaries with metadata
227
- */
228
- LIST_PROJECTS: {
229
- name: 'list_projects',
230
- description: 'Lists all available projects in the Obsidian vault with their metadata and status.',
231
- inputSchema: {
232
- type: 'object' as const,
233
- properties: {
234
- status_filter: {
235
- type: 'string',
236
- enum: ['active', 'archived', 'planning', 'all'],
237
- description: 'Filter projects by status',
238
- default: 'active'
239
- }
240
- }
241
- }
242
- },
243
-
244
- /**
245
- * SMART_CONTEXT
246
- * Intelligent context with proactive memory recall
247
- *
248
- * Use this when:
249
- * - Starting work and want automatic relevant memory recall
250
- * - Asking a question and want past decisions automatically searched
251
- * - Need context + relevant memories in one call
252
- */
253
- SMART_CONTEXT: {
254
- name: 'smart_context',
255
- description: 'Gets project context AND automatically searches for relevant past decisions based on your current question or task. More intelligent than get_project_context - use this when you have a specific question or task.',
256
- inputSchema: {
257
- type: 'object' as const,
258
- properties: {
259
- project_name: {
260
- type: 'string',
261
- description: 'Name of the project'
262
- },
263
- current_task: {
264
- type: 'string',
265
- description: 'What you are currently working on or asking about. This triggers proactive memory recall.'
266
- },
267
- min_similarity: {
268
- type: 'number',
269
- description: 'Minimum similarity for memory recall (0-1). Lower = more results.',
270
- default: 0.3
271
- }
272
- },
273
- required: ['project_name', 'current_task']
274
- }
275
- },
276
-
277
- /**
278
- * AUTO_REMEMBER
279
- * Automatically detects and saves decisions from text
280
- *
281
- * Use this when:
282
- * - Claude made a recommendation and wants to auto-save it
283
- * - Processing a response that might contain decisions
284
- * - Want Claude Brain to detect decisions automatically
285
- */
286
- AUTO_REMEMBER: {
287
- name: 'auto_remember',
288
- description: 'Automatically detects decisions in text and saves them. Pass any text containing recommendations like "I recommend X because Y" or "We should use X". Decisions with >70% confidence are auto-saved.',
289
- inputSchema: {
290
- type: 'object' as const,
291
- properties: {
292
- project_name: {
293
- type: 'string',
294
- description: 'Project to associate the decision with'
295
- },
296
- text: {
297
- type: 'string',
298
- description: 'Text to analyze for decisions (e.g., Claude\'s response containing recommendations)'
299
- },
300
- confidence_threshold: {
301
- type: 'number',
302
- description: 'Minimum confidence to auto-save (0-1)',
303
- default: 0.7
304
- }
305
- },
306
- required: ['project_name', 'text']
307
- }
308
- },
309
-
310
- /**
311
- * GET_PHASE12_STATUS
312
- * Get status of intelligent automation features
313
- */
314
- GET_PHASE12_STATUS: {
315
- name: 'get_phase12_status',
316
- description: 'Shows status of Claude Brain\'s intelligent automation: current project, patterns detected, learning insights, and recall statistics.',
317
- inputSchema: {
318
- type: 'object' as const,
319
- properties: {}
320
- }
321
- },
322
-
323
- /**
324
- * CREATE_PROJECT
325
- * Create a new project in the vault with all necessary files
326
- *
327
- * Use this when:
328
- * - Starting a brand new project
329
- * - User wants to track a project with Claude Brain
330
- * - Need to set up project structure automatically
331
- */
332
- CREATE_PROJECT: {
333
- name: 'create_project',
334
- description: 'Creates a new project in the Obsidian vault with all necessary files (context.md, progress.md, decisions.md, standards.md). Use this when starting a new project.',
335
- inputSchema: {
336
- type: 'object' as const,
337
- properties: {
338
- project_name: {
339
- type: 'string',
340
- description: 'Name of the project (lowercase with hyphens, e.g., "my-awesome-app")'
341
- },
342
- description: {
343
- type: 'string',
344
- description: 'Brief description of the project'
345
- },
346
- tech_stack: {
347
- type: 'array',
348
- items: { type: 'string' },
349
- description: 'Technologies used (e.g., ["typescript", "react", "node"])'
350
- },
351
- status: {
352
- type: 'string',
353
- enum: ['planning', 'active', 'on-hold', 'completed'],
354
- description: 'Initial project status',
355
- default: 'planning'
356
- },
357
- tags: {
358
- type: 'array',
359
- items: { type: 'string' },
360
- description: 'Tags for categorizing the project (e.g., ["web", "frontend", "personal"])'
361
- }
362
- },
363
- required: ['project_name']
364
- }
365
- },
366
-
367
- /**
368
- * INIT_PROJECT
369
- * Analyze existing codebase and initialize in Claude Brain
370
- *
371
- * Use this when:
372
- * - Opening Claude Code in an existing project
373
- * - Want to auto-detect tech stack, structure, conventions
374
- * - Similar to `claude init` but for Claude Brain
375
- *
376
- * LOW USAGE: Pure file reading, no LLM calls
377
- */
378
- INIT_PROJECT: {
379
- name: 'init_project',
380
- description: 'Analyzes an existing codebase and creates/updates project in Claude Brain. Reads package.json, config files, and structure to auto-detect tech stack, frameworks, and conventions. Similar to `claude init`. Use this when starting work on an existing project.',
381
- inputSchema: {
382
- type: 'object' as const,
383
- properties: {
384
- project_path: {
385
- type: 'string',
386
- description: 'Path to be project directory. Defaults to current working directory.'
387
- },
388
- project_name: {
389
- type: 'string',
390
- description: 'Override project name (otherwise detected from package.json or folder name)'
391
- },
392
- save_to_memory: {
393
- type: 'boolean',
394
- description: 'Whether to save project context to semantic memory for future recall',
395
- default: true
396
- }
397
- }
398
- }
399
- },
400
-
401
- /**
402
- * RECOGNIZE_PATTERN
403
- * Save a recognized pattern to ChromaDB
404
- *
405
- * Use this when:
406
- * - You notice a recurring solution approach
407
- * - You identify an anti-pattern
408
- * - You find a best practice that should be documented
409
- *
410
- * Patterns are stored in ChromaDB patterns collection for semantic recall
411
- */
412
- RECOGNIZE_PATTERN: {
413
- name: 'recognize_pattern',
414
- description: 'Saves a recognized pattern (solution, anti-pattern, best-practice, or common-issue) to ChromaDB semantic memory. Patterns help identify recurring approaches and avoid mistakes.',
415
- inputSchema: {
416
- type: 'object' as const,
417
- properties: {
418
- project_name: {
419
- type: 'string',
420
- description: 'Project this pattern relates to'
421
- },
422
- pattern_type: {
423
- type: 'string',
424
- enum: ['solution', 'anti-pattern', 'best-practice', 'common-issue'],
425
- description: 'Type of pattern'
426
- },
427
- description: {
428
- type: 'string',
429
- description: 'Detailed description of the pattern'
430
- },
431
- example: {
432
- type: 'string',
433
- description: 'Code example illustrating the pattern (optional)'
434
- },
435
- confidence: {
436
- type: 'number',
437
- minimum: 0,
438
- maximum: 1,
439
- description: 'Confidence in this pattern (0-1, default 0.8)'
440
- },
441
- context: {
442
- type: 'string',
443
- description: 'When this pattern was observed or applicable'
444
- }
445
- },
446
- required: ['project_name', 'pattern_type', 'description']
447
- }
448
- },
449
-
450
- /**
451
- * RECORD_CORRECTION
452
- * Save a correction/lesson learned to ChromaDB
453
- *
454
- * Use this when:
455
- * - You made a mistake that should be documented
456
- * - You learned a better approach after an error
457
- * - You want to track lessons learned
458
- *
459
- * Corrections are stored in ChromaDB corrections collection for learning from mistakes
460
- */
461
- RECORD_CORRECTION: {
462
- name: 'record_correction',
463
- description: 'Saves a correction or lesson learned to ChromaDB semantic memory. Use this when you made a mistake, learned something new, or want to document what NOT to do.',
464
- inputSchema: {
465
- type: 'object' as const,
466
- properties: {
467
- project_name: {
468
- type: 'string',
469
- description: 'Project this correction relates to'
470
- },
471
- original: {
472
- type: 'string',
473
- description: 'What was wrong or the mistake that was made'
474
- },
475
- correction: {
476
- type: 'string',
477
- description: 'What should have been done instead'
478
- },
479
- reasoning: {
480
- type: 'string',
481
- description: 'Why the correction is better than the original approach'
482
- },
483
- context: {
484
- type: 'string',
485
- description: 'When this correction was identified or applicable'
486
- },
487
- confidence: {
488
- type: 'number',
489
- minimum: 0,
490
- maximum: 1,
491
- description: 'Confidence in this correction (0-1, default 0.9)'
492
- }
493
- },
494
- required: ['project_name', 'original', 'correction', 'reasoning']
495
- }
496
- },
497
-
498
- /**
499
- * GET_PATTERNS
500
- * Retrieve recognized patterns from ChromaDB
501
- *
502
- * Use this when:
503
- * - You want to review documented patterns
504
- * - You need to know what solutions have worked before
505
- * - You want to avoid known anti-patterns
506
- *
507
- * Results are ranked by similarity to your query
508
- */
509
- GET_PATTERNS: {
510
- name: 'get_patterns',
511
- description: 'Retrieves recognized patterns from ChromaDB semantic memory. Use this to review documented solutions, best practices, anti-patterns, and common issues. Patterns are returned ranked by semantic similarity.',
512
- inputSchema: {
513
- type: 'object' as const,
514
- properties: {
515
- project_name: {
516
- type: 'string',
517
- description: 'Project to retrieve patterns from (optional, returns all projects if not specified)'
518
- },
519
- pattern_type: {
520
- type: 'string',
521
- enum: ['solution', 'anti-pattern', 'best-practice', 'common-issue'],
522
- description: 'Filter by pattern type (optional)'
523
- },
524
- limit: {
525
- type: 'number',
526
- minimum: 1,
527
- description: 'Maximum number of patterns to return (default 10)'
528
- },
529
- query: {
530
- type: 'string',
531
- description: 'Search query to find relevant patterns (optional, uses semantic search if not provided)'
532
- }
533
- }
534
- }
535
- },
536
-
537
- /**
538
- * GET_CORRECTIONS
539
- * Retrieve corrections/lessons learned from ChromaDB
540
- *
541
- * Use this when:
542
- * - You want to review past mistakes and lessons learned
543
- * - You need to know what corrections have been documented
544
- * - You want to avoid repeating previous errors
545
- *
546
- * Results are ranked by similarity to your query
547
- */
548
- GET_CORRECTIONS: {
549
- name: 'get_corrections',
550
- description: 'Retrieves corrections and lessons learned from ChromaDB semantic memory. Use this to review past mistakes, what was fixed, and why it was better. Corrections are returned ranked by semantic similarity.',
551
- inputSchema: {
552
- type: 'object' as const,
553
- properties: {
554
- project_name: {
555
- type: 'string',
556
- description: 'Project to retrieve corrections from (optional, returns all projects if not specified)'
557
- },
558
- limit: {
559
- type: 'number',
560
- minimum: 1,
561
- description: 'Maximum number of corrections to return (default 10)'
562
- },
563
- query: {
564
- type: 'string',
565
- description: 'Search query to find relevant corrections (optional, uses semantic search if not provided)'
566
- }
567
- }
568
- }
569
- },
570
-
571
- // =========================================================================
572
- // Phase 16 - Unified Brain Tool
573
- // =========================================================================
574
- // Phase 19: Removed 9 redundant MCP tools whose functionality is now
575
- // absorbed into brain(). Removed: rate_memory, search_knowledge_graph,
576
- // get_episode, list_episodes, get_decision_timeline,
577
- // analyze_decision_evolution, detect_trends, what_if_analysis,
578
- // get_recommendations, find_cross_project_patterns.
579
- // The underlying modules are still available internally.
580
-
581
- /**
582
- * BRAIN
583
- * Unified intelligent tool that replaces all 25 tools
584
- *
585
- * Use this when:
586
- * - You want a single tool for all Claude Brain interactions
587
- * - Enabled via unifiedToolMode config flag
588
- *
589
- * The server classifies intent and routes internally
590
- */
591
- BRAIN: {
592
- name: 'brain',
593
- description: 'Your persistent memory. Tell it decisions, ask it questions, or update/delete past notes. Most context is captured automatically — only call this for intentional storage or recall. Search returns compact summaries — use brain("details {ID}") for full context.',
594
- inputSchema: {
595
- type: 'object' as const,
596
- properties: {
597
- message: {
598
- type: 'string',
599
- description: 'What you are doing, decided, learned, or need. Natural language.'
600
- },
601
- project: {
602
- type: 'string',
603
- description: 'Project name (IMPORTANT: pass this to scope memories correctly, e.g. "my-app"). Auto-detected from message if omitted, defaults to "general".'
604
- },
605
- action: {
606
- type: 'string',
607
- enum: ['auto', 'store', 'recall', 'update', 'delete'],
608
- description: 'Force a specific action instead of auto-detecting intent. "store" = always save, "recall" = always search, "update" = modify last stored, "delete" = remove. Default: auto (use intent classifier).'
609
- }
610
- },
611
- required: ['message']
612
- }
613
- },
614
-
615
- /**
616
- * SEARCH_CODE
617
- * Search indexed code symbols, files, and dependencies
618
- *
619
- * Use this when:
620
- * - Looking for a function, class, or type definition
621
- * - Need to find which file contains a symbol
622
- * - Want to see imports/dependencies of a file
623
- * - Faster than grep for known symbol names
624
- */
625
- SEARCH_CODE: {
626
- name: 'search_code',
627
- description: 'Search indexed code for symbols (functions, classes, types), files, or dependencies. Faster than grep when the project is indexed. Run `claude-brain reindex` first if no results.',
628
- inputSchema: {
629
- type: 'object' as const,
630
- properties: {
631
- query: {
632
- type: 'string',
633
- description: 'Symbol name, file name, or search term'
634
- },
635
- project: {
636
- type: 'string',
637
- description: 'Project name (usually the directory name, e.g. "claude-brain")'
638
- },
639
- type: {
640
- type: 'string',
641
- enum: ['symbols', 'files', 'dependencies'],
642
- description: 'What to search for: symbols (functions/classes/types), files, or dependencies of a file',
643
- default: 'symbols'
644
- },
645
- file_path: {
646
- type: 'string',
647
- description: 'File path (required when type is "dependencies")'
648
- },
649
- limit: {
650
- type: 'number',
651
- description: 'Maximum results to return',
652
- default: 20
653
- }
654
- },
655
- required: ['query', 'project']
656
- }
657
- }
658
- } as const satisfies Record<string, ToolDefinition>
659
-
660
- /** Tool names as a union type */
661
- export type ToolName = typeof TOOLS[keyof typeof TOOLS]['name']
662
-
663
- /** Get all tool names as an array */
664
- export function getToolNames(): ToolName[] {
665
- return Object.values(TOOLS).map(tool => tool.name)
666
- }
1
+ /**
2
+ * MCP Tool Schemas
3
+ * Defines all available tools that Claude Code can call
4
+ *
5
+ * Each tool has:
6
+ * - name: Unique identifier for the tool
7
+ * - description: Explains when and how to use the tool
8
+ * - inputSchema: JSON Schema for validating input parameters
9
+ */
10
+
11
+ /** Tool definition type */
12
+ export interface ToolDefinition {
13
+ name: string
14
+ description: string
15
+ inputSchema: {
16
+ type: 'object'
17
+ properties: Record<string, unknown>
18
+ required?: string[]
19
+ }
20
+ }
21
+
22
+ /**
23
+ * All available tools for Claude Brain MCP server
24
+ */
25
+ export const TOOLS = {
26
+ /**
27
+ * GET_PROJECT_CONTEXT
28
+ * Primary tool for retrieving complete project context
29
+ *
30
+ * Use this when:
31
+ * - Starting work on a project
32
+ * - Need to understand project standards and conventions
33
+ * - Want to see recent decisions and progress
34
+ *
35
+ * Returns: Project description, standards, progress, and optionally relevant memories
36
+ */
37
+ GET_PROJECT_CONTEXT: {
38
+ name: 'get_project_context',
39
+ description: 'Retrieves complete project context including standards, progress, past decisions, and relevant memories. This is the primary tool for getting context about a project.',
40
+ inputSchema: {
41
+ type: 'object' as const,
42
+ properties: {
43
+ project_name: {
44
+ type: 'string',
45
+ description: 'Name of the project to get context for'
46
+ },
47
+ include_memories: {
48
+ type: 'boolean',
49
+ description: 'Whether to include similar past decisions from semantic memory',
50
+ default: true
51
+ },
52
+ memory_limit: {
53
+ type: 'number',
54
+ description: 'Maximum number of relevant memories to include',
55
+ default: 5
56
+ }
57
+ },
58
+ required: ['project_name']
59
+ }
60
+ },
61
+
62
+ /**
63
+ * UPDATE_PROGRESS
64
+ * Track project progress and completed work
65
+ *
66
+ * Use this when:
67
+ * - Completing a task or milestone
68
+ * - Making significant progress
69
+ * - Updating what should happen next
70
+ *
71
+ * Returns: Confirmation of progress update
72
+ */
73
+ UPDATE_PROGRESS: {
74
+ name: 'update_progress',
75
+ description: 'Updates project progress tracking with completed tasks and next steps. Use this when you complete a task or make significant progress.',
76
+ inputSchema: {
77
+ type: 'object' as const,
78
+ properties: {
79
+ project_name: {
80
+ type: 'string',
81
+ description: 'Name of the project'
82
+ },
83
+ completed_task: {
84
+ type: 'string',
85
+ description: 'Description of what was just completed'
86
+ },
87
+ next_steps: {
88
+ type: 'string',
89
+ description: 'What should be done next'
90
+ },
91
+ notes: {
92
+ type: 'string',
93
+ description: 'Optional additional notes or context'
94
+ }
95
+ },
96
+ required: ['project_name', 'completed_task', 'next_steps']
97
+ }
98
+ },
99
+
100
+ /**
101
+ * REMEMBER_DECISION
102
+ * Store important decisions in long-term memory
103
+ *
104
+ * Use this when:
105
+ * - Making architectural decisions
106
+ * - Choosing between alternatives
107
+ * - Establishing patterns that should persist
108
+ *
109
+ * Returns: Confirmation with memory ID
110
+ */
111
+ REMEMBER_DECISION: {
112
+ name: 'remember_decision',
113
+ description: 'Stores an important architectural or technical decision in long-term memory. Use this for decisions that should influence future development.',
114
+ inputSchema: {
115
+ type: 'object' as const,
116
+ properties: {
117
+ project_name: {
118
+ type: 'string',
119
+ description: 'Project this decision relates to'
120
+ },
121
+ context: {
122
+ type: 'string',
123
+ description: 'What situation or problem led to this decision'
124
+ },
125
+ decision: {
126
+ type: 'string',
127
+ description: 'The decision that was made'
128
+ },
129
+ reasoning: {
130
+ type: 'string',
131
+ description: 'Why this decision was made'
132
+ },
133
+ alternatives_considered: {
134
+ type: 'string',
135
+ description: 'Other options that were considered'
136
+ },
137
+ tags: {
138
+ type: 'array',
139
+ items: { type: 'string' },
140
+ description: 'Tags for categorizing this decision (e.g., "architecture", "performance", "security")'
141
+ }
142
+ },
143
+ required: ['project_name', 'context', 'decision', 'reasoning']
144
+ }
145
+ },
146
+
147
+ /**
148
+ * RECALL_SIMILAR
149
+ * Semantic search through past decisions and context
150
+ *
151
+ * Use this when:
152
+ * - Facing a similar situation to past work
153
+ * - Want to learn from previous decisions
154
+ * - Need context from related work
155
+ *
156
+ * Returns: Array of similar decisions with similarity scores
157
+ */
158
+ RECALL_SIMILAR: {
159
+ name: 'recall_similar',
160
+ description: 'Finds past decisions and context similar to the current situation using semantic search. Helps learn from past experience.',
161
+ inputSchema: {
162
+ type: 'object' as const,
163
+ properties: {
164
+ query: {
165
+ type: 'string',
166
+ description: 'Description of current situation or question'
167
+ },
168
+ project_filter: {
169
+ type: 'string',
170
+ description: 'Optional: only search within specific project'
171
+ },
172
+ limit: {
173
+ type: 'number',
174
+ description: 'Maximum number of results to return',
175
+ default: 5
176
+ },
177
+ min_similarity: {
178
+ type: 'number',
179
+ description: 'Minimum similarity score (0-1)',
180
+ default: 0.7
181
+ }
182
+ },
183
+ required: ['query']
184
+ }
185
+ },
186
+
187
+ /**
188
+ * GET_CODE_STANDARDS
189
+ * Retrieve coding standards and conventions
190
+ *
191
+ * Use this when:
192
+ * - Need to follow project coding style
193
+ * - Want to ensure consistency
194
+ * - Starting to write new code
195
+ *
196
+ * Returns: Merged global and project-specific standards
197
+ */
198
+ GET_CODE_STANDARDS: {
199
+ name: 'get_code_standards',
200
+ description: 'Retrieves coding standards, patterns, and conventions for a project. Includes global standards merged with project-specific rules.',
201
+ inputSchema: {
202
+ type: 'object' as const,
203
+ properties: {
204
+ project_name: {
205
+ type: 'string',
206
+ description: 'Name of the project'
207
+ },
208
+ language: {
209
+ type: 'string',
210
+ description: 'Optional: filter standards by programming language (e.g., "typescript", "python")'
211
+ }
212
+ },
213
+ required: ['project_name']
214
+ }
215
+ },
216
+
217
+ /**
218
+ * LIST_PROJECTS
219
+ * Get available projects from the vault
220
+ *
221
+ * Use this when:
222
+ * - Need to see what projects exist
223
+ * - Want project metadata and status
224
+ * - Looking for active vs archived projects
225
+ *
226
+ * Returns: Array of project summaries with metadata
227
+ */
228
+ LIST_PROJECTS: {
229
+ name: 'list_projects',
230
+ description: 'Lists all available projects in the Obsidian vault with their metadata and status.',
231
+ inputSchema: {
232
+ type: 'object' as const,
233
+ properties: {
234
+ status_filter: {
235
+ type: 'string',
236
+ enum: ['active', 'archived', 'planning', 'all'],
237
+ description: 'Filter projects by status',
238
+ default: 'active'
239
+ }
240
+ }
241
+ }
242
+ },
243
+
244
+ /**
245
+ * SMART_CONTEXT
246
+ * Intelligent context with proactive memory recall
247
+ *
248
+ * Use this when:
249
+ * - Starting work and want automatic relevant memory recall
250
+ * - Asking a question and want past decisions automatically searched
251
+ * - Need context + relevant memories in one call
252
+ */
253
+ SMART_CONTEXT: {
254
+ name: 'smart_context',
255
+ description: 'Gets project context AND automatically searches for relevant past decisions based on your current question or task. More intelligent than get_project_context - use this when you have a specific question or task.',
256
+ inputSchema: {
257
+ type: 'object' as const,
258
+ properties: {
259
+ project_name: {
260
+ type: 'string',
261
+ description: 'Name of the project'
262
+ },
263
+ current_task: {
264
+ type: 'string',
265
+ description: 'What you are currently working on or asking about. This triggers proactive memory recall.'
266
+ },
267
+ min_similarity: {
268
+ type: 'number',
269
+ description: 'Minimum similarity for memory recall (0-1). Lower = more results.',
270
+ default: 0.3
271
+ }
272
+ },
273
+ required: ['project_name', 'current_task']
274
+ }
275
+ },
276
+
277
+ /**
278
+ * AUTO_REMEMBER
279
+ * Automatically detects and saves decisions from text
280
+ *
281
+ * Use this when:
282
+ * - Claude made a recommendation and wants to auto-save it
283
+ * - Processing a response that might contain decisions
284
+ * - Want Claude Brain to detect decisions automatically
285
+ */
286
+ AUTO_REMEMBER: {
287
+ name: 'auto_remember',
288
+ description: 'Automatically detects decisions in text and saves them. Pass any text containing recommendations like "I recommend X because Y" or "We should use X". Decisions with >70% confidence are auto-saved.',
289
+ inputSchema: {
290
+ type: 'object' as const,
291
+ properties: {
292
+ project_name: {
293
+ type: 'string',
294
+ description: 'Project to associate the decision with'
295
+ },
296
+ text: {
297
+ type: 'string',
298
+ description: 'Text to analyze for decisions (e.g., Claude\'s response containing recommendations)'
299
+ },
300
+ confidence_threshold: {
301
+ type: 'number',
302
+ description: 'Minimum confidence to auto-save (0-1)',
303
+ default: 0.7
304
+ }
305
+ },
306
+ required: ['project_name', 'text']
307
+ }
308
+ },
309
+
310
+ /**
311
+ * GET_PHASE12_STATUS
312
+ * Get status of intelligent automation features
313
+ */
314
+ GET_PHASE12_STATUS: {
315
+ name: 'get_phase12_status',
316
+ description: 'Shows status of Claude Brain\'s intelligent automation: current project, patterns detected, learning insights, and recall statistics.',
317
+ inputSchema: {
318
+ type: 'object' as const,
319
+ properties: {}
320
+ }
321
+ },
322
+
323
+ /**
324
+ * CREATE_PROJECT
325
+ * Create a new project in the vault with all necessary files
326
+ *
327
+ * Use this when:
328
+ * - Starting a brand new project
329
+ * - User wants to track a project with Claude Brain
330
+ * - Need to set up project structure automatically
331
+ */
332
+ CREATE_PROJECT: {
333
+ name: 'create_project',
334
+ description: 'Creates a new project in the Obsidian vault with all necessary files (context.md, progress.md, decisions.md, standards.md). Use this when starting a new project.',
335
+ inputSchema: {
336
+ type: 'object' as const,
337
+ properties: {
338
+ project_name: {
339
+ type: 'string',
340
+ description: 'Name of the project (lowercase with hyphens, e.g., "my-awesome-app")'
341
+ },
342
+ description: {
343
+ type: 'string',
344
+ description: 'Brief description of the project'
345
+ },
346
+ tech_stack: {
347
+ type: 'array',
348
+ items: { type: 'string' },
349
+ description: 'Technologies used (e.g., ["typescript", "react", "node"])'
350
+ },
351
+ status: {
352
+ type: 'string',
353
+ enum: ['planning', 'active', 'on-hold', 'completed'],
354
+ description: 'Initial project status',
355
+ default: 'planning'
356
+ },
357
+ tags: {
358
+ type: 'array',
359
+ items: { type: 'string' },
360
+ description: 'Tags for categorizing the project (e.g., ["web", "frontend", "personal"])'
361
+ }
362
+ },
363
+ required: ['project_name']
364
+ }
365
+ },
366
+
367
+ /**
368
+ * INIT_PROJECT
369
+ * Analyze existing codebase and initialize in Claude Brain
370
+ *
371
+ * Use this when:
372
+ * - Opening Claude Code in an existing project
373
+ * - Want to auto-detect tech stack, structure, conventions
374
+ * - Similar to `claude init` but for Claude Brain
375
+ *
376
+ * LOW USAGE: Pure file reading, no LLM calls
377
+ */
378
+ INIT_PROJECT: {
379
+ name: 'init_project',
380
+ description: 'Analyzes an existing codebase and creates/updates project in Claude Brain. Reads package.json, config files, and structure to auto-detect tech stack, frameworks, and conventions. Similar to `claude init`. Use this when starting work on an existing project.',
381
+ inputSchema: {
382
+ type: 'object' as const,
383
+ properties: {
384
+ project_path: {
385
+ type: 'string',
386
+ description: 'Path to be project directory. Defaults to current working directory.'
387
+ },
388
+ project_name: {
389
+ type: 'string',
390
+ description: 'Override project name (otherwise detected from package.json or folder name)'
391
+ },
392
+ save_to_memory: {
393
+ type: 'boolean',
394
+ description: 'Whether to save project context to semantic memory for future recall',
395
+ default: true
396
+ }
397
+ }
398
+ }
399
+ },
400
+
401
+ /**
402
+ * RECOGNIZE_PATTERN
403
+ * Save a recognized pattern to ChromaDB
404
+ *
405
+ * Use this when:
406
+ * - You notice a recurring solution approach
407
+ * - You identify an anti-pattern
408
+ * - You find a best practice that should be documented
409
+ *
410
+ * Patterns are stored in ChromaDB patterns collection for semantic recall
411
+ */
412
+ RECOGNIZE_PATTERN: {
413
+ name: 'recognize_pattern',
414
+ description: 'Saves a recognized pattern (solution, anti-pattern, best-practice, or common-issue) to ChromaDB semantic memory. Patterns help identify recurring approaches and avoid mistakes.',
415
+ inputSchema: {
416
+ type: 'object' as const,
417
+ properties: {
418
+ project_name: {
419
+ type: 'string',
420
+ description: 'Project this pattern relates to'
421
+ },
422
+ pattern_type: {
423
+ type: 'string',
424
+ enum: ['solution', 'anti-pattern', 'best-practice', 'common-issue'],
425
+ description: 'Type of pattern'
426
+ },
427
+ description: {
428
+ type: 'string',
429
+ description: 'Detailed description of the pattern'
430
+ },
431
+ example: {
432
+ type: 'string',
433
+ description: 'Code example illustrating the pattern (optional)'
434
+ },
435
+ confidence: {
436
+ type: 'number',
437
+ minimum: 0,
438
+ maximum: 1,
439
+ description: 'Confidence in this pattern (0-1, default 0.8)'
440
+ },
441
+ context: {
442
+ type: 'string',
443
+ description: 'When this pattern was observed or applicable'
444
+ }
445
+ },
446
+ required: ['project_name', 'pattern_type', 'description']
447
+ }
448
+ },
449
+
450
+ /**
451
+ * RECORD_CORRECTION
452
+ * Save a correction/lesson learned to ChromaDB
453
+ *
454
+ * Use this when:
455
+ * - You made a mistake that should be documented
456
+ * - You learned a better approach after an error
457
+ * - You want to track lessons learned
458
+ *
459
+ * Corrections are stored in ChromaDB corrections collection for learning from mistakes
460
+ */
461
+ RECORD_CORRECTION: {
462
+ name: 'record_correction',
463
+ description: 'Saves a correction or lesson learned to ChromaDB semantic memory. Use this when you made a mistake, learned something new, or want to document what NOT to do.',
464
+ inputSchema: {
465
+ type: 'object' as const,
466
+ properties: {
467
+ project_name: {
468
+ type: 'string',
469
+ description: 'Project this correction relates to'
470
+ },
471
+ original: {
472
+ type: 'string',
473
+ description: 'What was wrong or the mistake that was made'
474
+ },
475
+ correction: {
476
+ type: 'string',
477
+ description: 'What should have been done instead'
478
+ },
479
+ reasoning: {
480
+ type: 'string',
481
+ description: 'Why the correction is better than the original approach'
482
+ },
483
+ context: {
484
+ type: 'string',
485
+ description: 'When this correction was identified or applicable'
486
+ },
487
+ confidence: {
488
+ type: 'number',
489
+ minimum: 0,
490
+ maximum: 1,
491
+ description: 'Confidence in this correction (0-1, default 0.9)'
492
+ }
493
+ },
494
+ required: ['project_name', 'original', 'correction', 'reasoning']
495
+ }
496
+ },
497
+
498
+ /**
499
+ * GET_PATTERNS
500
+ * Retrieve recognized patterns from ChromaDB
501
+ *
502
+ * Use this when:
503
+ * - You want to review documented patterns
504
+ * - You need to know what solutions have worked before
505
+ * - You want to avoid known anti-patterns
506
+ *
507
+ * Results are ranked by similarity to your query
508
+ */
509
+ GET_PATTERNS: {
510
+ name: 'get_patterns',
511
+ description: 'Retrieves recognized patterns from ChromaDB semantic memory. Use this to review documented solutions, best practices, anti-patterns, and common issues. Patterns are returned ranked by semantic similarity.',
512
+ inputSchema: {
513
+ type: 'object' as const,
514
+ properties: {
515
+ project_name: {
516
+ type: 'string',
517
+ description: 'Project to retrieve patterns from (optional, returns all projects if not specified)'
518
+ },
519
+ pattern_type: {
520
+ type: 'string',
521
+ enum: ['solution', 'anti-pattern', 'best-practice', 'common-issue'],
522
+ description: 'Filter by pattern type (optional)'
523
+ },
524
+ limit: {
525
+ type: 'number',
526
+ minimum: 1,
527
+ description: 'Maximum number of patterns to return (default 10)'
528
+ },
529
+ query: {
530
+ type: 'string',
531
+ description: 'Search query to find relevant patterns (optional, uses semantic search if not provided)'
532
+ }
533
+ }
534
+ }
535
+ },
536
+
537
+ /**
538
+ * GET_CORRECTIONS
539
+ * Retrieve corrections/lessons learned from ChromaDB
540
+ *
541
+ * Use this when:
542
+ * - You want to review past mistakes and lessons learned
543
+ * - You need to know what corrections have been documented
544
+ * - You want to avoid repeating previous errors
545
+ *
546
+ * Results are ranked by similarity to your query
547
+ */
548
+ GET_CORRECTIONS: {
549
+ name: 'get_corrections',
550
+ description: 'Retrieves corrections and lessons learned from ChromaDB semantic memory. Use this to review past mistakes, what was fixed, and why it was better. Corrections are returned ranked by semantic similarity.',
551
+ inputSchema: {
552
+ type: 'object' as const,
553
+ properties: {
554
+ project_name: {
555
+ type: 'string',
556
+ description: 'Project to retrieve corrections from (optional, returns all projects if not specified)'
557
+ },
558
+ limit: {
559
+ type: 'number',
560
+ minimum: 1,
561
+ description: 'Maximum number of corrections to return (default 10)'
562
+ },
563
+ query: {
564
+ type: 'string',
565
+ description: 'Search query to find relevant corrections (optional, uses semantic search if not provided)'
566
+ }
567
+ }
568
+ }
569
+ },
570
+
571
+ // =========================================================================
572
+ // Phase 16 - Unified Brain Tool
573
+ // =========================================================================
574
+ // Phase 19: Removed 9 redundant MCP tools whose functionality is now
575
+ // absorbed into brain(). Removed: rate_memory, search_knowledge_graph,
576
+ // get_episode, list_episodes, get_decision_timeline,
577
+ // analyze_decision_evolution, detect_trends, what_if_analysis,
578
+ // get_recommendations, find_cross_project_patterns.
579
+ // The underlying modules are still available internally.
580
+
581
+ /**
582
+ * BRAIN
583
+ * Unified intelligent tool that replaces all 25 tools
584
+ *
585
+ * Use this when:
586
+ * - You want a single tool for all Claude Brain interactions
587
+ * - Enabled via unifiedToolMode config flag
588
+ *
589
+ * The server classifies intent and routes internally
590
+ */
591
+ BRAIN: {
592
+ name: 'brain',
593
+ description: 'Your persistent memory. Tell it decisions, ask it questions, or update/delete past notes. Most context is captured automatically — only call this for intentional storage or recall. Search returns compact summaries — use brain("details {ID}") for full context.',
594
+ inputSchema: {
595
+ type: 'object' as const,
596
+ properties: {
597
+ message: {
598
+ type: 'string',
599
+ description: 'What you are doing, decided, learned, or need. Natural language.'
600
+ },
601
+ project: {
602
+ type: 'string',
603
+ description: 'Project name (IMPORTANT: pass this to scope memories correctly, e.g. "my-app"). Auto-detected from message if omitted, defaults to "general".'
604
+ },
605
+ action: {
606
+ type: 'string',
607
+ enum: ['auto', 'store', 'recall', 'update', 'delete'],
608
+ description: 'Force a specific action instead of auto-detecting intent. "store" = always save, "recall" = always search, "update" = modify last stored, "delete" = remove. Default: auto (use intent classifier).'
609
+ }
610
+ },
611
+ required: ['message']
612
+ }
613
+ },
614
+
615
+ /**
616
+ * SEARCH_CODE
617
+ * Search indexed code symbols, files, and dependencies
618
+ *
619
+ * Use this when:
620
+ * - Looking for a function, class, or type definition
621
+ * - Need to find which file contains a symbol
622
+ * - Want to see imports/dependencies of a file
623
+ * - Faster than grep for known symbol names
624
+ */
625
+ SEARCH_CODE: {
626
+ name: 'search_code',
627
+ description: 'Search indexed code for symbols (functions, classes, types), files, or dependencies. Faster than grep when the project is indexed. Run `claude-brain reindex` first if no results.',
628
+ inputSchema: {
629
+ type: 'object' as const,
630
+ properties: {
631
+ query: {
632
+ type: 'string',
633
+ description: 'Symbol name, file name, or search term'
634
+ },
635
+ project: {
636
+ type: 'string',
637
+ description: 'Project name (usually the directory name, e.g. "claude-brain")'
638
+ },
639
+ type: {
640
+ type: 'string',
641
+ enum: ['symbols', 'files', 'dependencies'],
642
+ description: 'What to search for: symbols (functions/classes/types), files, or dependencies of a file',
643
+ default: 'symbols'
644
+ },
645
+ file_path: {
646
+ type: 'string',
647
+ description: 'File path (required when type is "dependencies")'
648
+ },
649
+ limit: {
650
+ type: 'number',
651
+ description: 'Maximum results to return',
652
+ default: 20
653
+ }
654
+ },
655
+ required: ['query', 'project']
656
+ }
657
+ }
658
+ } as const satisfies Record<string, ToolDefinition>
659
+
660
+ /** Tool names as a union type */
661
+ export type ToolName = typeof TOOLS[keyof typeof TOOLS]['name']
662
+
663
+ /** Get all tool names as an array */
664
+ export function getToolNames(): ToolName[] {
665
+ return Object.values(TOOLS).map(tool => tool.name)
666
+ }