mcp-adr-analysis-server 2.0.21 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/README.md +94 -839
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/config/ai-config.d.ts.map +1 -1
  4. package/dist/src/config/ai-config.js +9 -9
  5. package/dist/src/config/ai-config.js.map +1 -1
  6. package/dist/src/index.d.ts +15 -0
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +1594 -837
  9. package/dist/src/index.js.map +1 -1
  10. package/dist/src/prompts/analysis-prompts.d.ts +4 -1
  11. package/dist/src/prompts/analysis-prompts.d.ts.map +1 -1
  12. package/dist/src/prompts/analysis-prompts.js +61 -30
  13. package/dist/src/prompts/analysis-prompts.js.map +1 -1
  14. package/dist/src/prompts/index.d.ts +17 -1
  15. package/dist/src/prompts/index.d.ts.map +1 -1
  16. package/dist/src/prompts/index.js +325 -1
  17. package/dist/src/prompts/index.js.map +1 -1
  18. package/dist/src/prompts/rule-generation-prompts.d.ts +5 -1
  19. package/dist/src/prompts/rule-generation-prompts.d.ts.map +1 -1
  20. package/dist/src/prompts/rule-generation-prompts.js +5 -1
  21. package/dist/src/prompts/rule-generation-prompts.js.map +1 -1
  22. package/dist/src/prompts/security-prompts.d.ts +6 -1
  23. package/dist/src/prompts/security-prompts.d.ts.map +1 -1
  24. package/dist/src/prompts/security-prompts.js +6 -1
  25. package/dist/src/prompts/security-prompts.js.map +1 -1
  26. package/dist/src/prompts/todo-prompts.d.ts +49 -0
  27. package/dist/src/prompts/todo-prompts.d.ts.map +1 -0
  28. package/dist/src/prompts/todo-prompts.js +824 -0
  29. package/dist/src/prompts/todo-prompts.js.map +1 -0
  30. package/dist/src/resources/index.d.ts.map +1 -1
  31. package/dist/src/resources/index.js +9 -7
  32. package/dist/src/resources/index.js.map +1 -1
  33. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts +47 -0
  34. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -0
  35. package/dist/src/tools/adr-bootstrap-validation-tool.js +979 -0
  36. package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -0
  37. package/dist/src/tools/adr-suggestion-tool.d.ts +1 -0
  38. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  39. package/dist/src/tools/adr-suggestion-tool.js +330 -32
  40. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  41. package/dist/src/tools/content-masking-tool.d.ts +5 -0
  42. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  43. package/dist/src/tools/content-masking-tool.js +631 -28
  44. package/dist/src/tools/content-masking-tool.js.map +1 -1
  45. package/dist/src/tools/deployment-readiness-tool.d.ts +8 -5
  46. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  47. package/dist/src/tools/deployment-readiness-tool.js +1017 -93
  48. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  49. package/dist/src/tools/environment-analysis-tool.d.ts +4 -0
  50. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  51. package/dist/src/tools/environment-analysis-tool.js +568 -24
  52. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  53. package/dist/src/tools/interactive-adr-planning-tool.d.ts.map +1 -1
  54. package/dist/src/tools/interactive-adr-planning-tool.js +270 -108
  55. package/dist/src/tools/interactive-adr-planning-tool.js.map +1 -1
  56. package/dist/src/tools/mcp-planning-tool.d.ts.map +1 -1
  57. package/dist/src/tools/mcp-planning-tool.js +316 -183
  58. package/dist/src/tools/mcp-planning-tool.js.map +1 -1
  59. package/dist/src/tools/memory-loading-tool.d.ts +60 -0
  60. package/dist/src/tools/memory-loading-tool.d.ts.map +1 -0
  61. package/dist/src/tools/memory-loading-tool.js +457 -0
  62. package/dist/src/tools/memory-loading-tool.js.map +1 -0
  63. package/dist/src/tools/research-integration-tool.d.ts +4 -1
  64. package/dist/src/tools/research-integration-tool.d.ts.map +1 -1
  65. package/dist/src/tools/research-integration-tool.js +5 -1
  66. package/dist/src/tools/research-integration-tool.js.map +1 -1
  67. package/dist/src/tools/review-existing-adrs-tool.d.ts +19 -0
  68. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -0
  69. package/dist/src/tools/review-existing-adrs-tool.js +1204 -0
  70. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -0
  71. package/dist/src/tools/rule-generation-tool.d.ts +2 -0
  72. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  73. package/dist/src/tools/rule-generation-tool.js +274 -33
  74. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  75. package/dist/src/tools/smart-git-push-tool-v2.d.ts +4 -0
  76. package/dist/src/tools/smart-git-push-tool-v2.d.ts.map +1 -1
  77. package/dist/src/tools/smart-git-push-tool-v2.js +423 -229
  78. package/dist/src/tools/smart-git-push-tool-v2.js.map +1 -1
  79. package/dist/src/tools/smart-git-push-tool.d.ts +3 -0
  80. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -1
  81. package/dist/src/tools/smart-git-push-tool.js +241 -235
  82. package/dist/src/tools/smart-git-push-tool.js.map +1 -1
  83. package/dist/src/tools/tool-chain-orchestrator.d.ts +2 -2
  84. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  85. package/dist/src/tools/tool-chain-orchestrator.js +152 -93
  86. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  87. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +22 -13
  88. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  89. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +660 -28
  90. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  91. package/dist/src/types/ape-framework.d.ts +93 -0
  92. package/dist/src/types/ape-framework.d.ts.map +1 -1
  93. package/dist/src/types/ape-framework.js +10 -10
  94. package/dist/src/types/ape-framework.js.map +1 -1
  95. package/dist/src/types/enhanced-errors.d.ts +173 -0
  96. package/dist/src/types/enhanced-errors.d.ts.map +1 -0
  97. package/dist/src/types/enhanced-errors.js +668 -0
  98. package/dist/src/types/enhanced-errors.js.map +1 -0
  99. package/dist/src/types/index.d.ts +129 -3
  100. package/dist/src/types/index.d.ts.map +1 -1
  101. package/dist/src/types/index.js +15 -0
  102. package/dist/src/types/index.js.map +1 -1
  103. package/dist/src/types/knowledge-generation.d.ts +78 -0
  104. package/dist/src/types/knowledge-generation.d.ts.map +1 -1
  105. package/dist/src/types/knowledge-generation.js +10 -6
  106. package/dist/src/types/knowledge-generation.js.map +1 -1
  107. package/dist/src/types/knowledge-graph-schemas.d.ts +92 -0
  108. package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -1
  109. package/dist/src/types/knowledge-graph-schemas.js +45 -17
  110. package/dist/src/types/knowledge-graph-schemas.js.map +1 -1
  111. package/dist/src/types/memory-entities.d.ts +7209 -0
  112. package/dist/src/types/memory-entities.d.ts.map +1 -0
  113. package/dist/src/types/memory-entities.js +395 -0
  114. package/dist/src/types/memory-entities.js.map +1 -0
  115. package/dist/src/types/reflexion-framework.d.ts +44 -0
  116. package/dist/src/types/reflexion-framework.d.ts.map +1 -1
  117. package/dist/src/types/reflexion-framework.js +7 -7
  118. package/dist/src/types/reflexion-framework.js.map +1 -1
  119. package/dist/src/types/todo-json-schemas.d.ts +7 -653
  120. package/dist/src/types/todo-json-schemas.d.ts.map +1 -1
  121. package/dist/src/types/todo-json-schemas.js +6 -110
  122. package/dist/src/types/todo-json-schemas.js.map +1 -1
  123. package/dist/src/types/tool-arguments.d.ts +224 -0
  124. package/dist/src/types/tool-arguments.d.ts.map +1 -0
  125. package/dist/src/types/tool-arguments.js +6 -0
  126. package/dist/src/types/tool-arguments.js.map +1 -0
  127. package/dist/src/utils/actual-file-operations.d.ts.map +1 -1
  128. package/dist/src/utils/actual-file-operations.js +25 -9
  129. package/dist/src/utils/actual-file-operations.js.map +1 -1
  130. package/dist/src/utils/adr-discovery.d.ts +33 -1
  131. package/dist/src/utils/adr-discovery.d.ts.map +1 -1
  132. package/dist/src/utils/adr-discovery.js +14 -9
  133. package/dist/src/utils/adr-discovery.js.map +1 -1
  134. package/dist/src/utils/adr-suggestions.d.ts +72 -0
  135. package/dist/src/utils/adr-suggestions.d.ts.map +1 -1
  136. package/dist/src/utils/adr-suggestions.js +6 -0
  137. package/dist/src/utils/adr-suggestions.js.map +1 -1
  138. package/dist/src/utils/cache.d.ts.map +1 -1
  139. package/dist/src/utils/cache.js +22 -19
  140. package/dist/src/utils/cache.js.map +1 -1
  141. package/dist/src/utils/chain-of-thought-template.d.ts +13 -1
  142. package/dist/src/utils/chain-of-thought-template.d.ts.map +1 -1
  143. package/dist/src/utils/chain-of-thought-template.js +31 -22
  144. package/dist/src/utils/chain-of-thought-template.js.map +1 -1
  145. package/dist/src/utils/config.d.ts.map +1 -1
  146. package/dist/src/utils/config.js +1 -0
  147. package/dist/src/utils/config.js.map +1 -1
  148. package/dist/src/utils/directory-compat.js +1 -1
  149. package/dist/src/utils/directory-compat.js.map +1 -1
  150. package/dist/src/utils/enhanced-logging.d.ts +195 -0
  151. package/dist/src/utils/enhanced-logging.d.ts.map +1 -0
  152. package/dist/src/utils/enhanced-logging.js +449 -0
  153. package/dist/src/utils/enhanced-logging.js.map +1 -0
  154. package/dist/src/utils/file-system.d.ts +182 -34
  155. package/dist/src/utils/file-system.d.ts.map +1 -1
  156. package/dist/src/utils/file-system.js +648 -774
  157. package/dist/src/utils/file-system.js.map +1 -1
  158. package/dist/src/utils/gitleaks-detector.d.ts +50 -0
  159. package/dist/src/utils/gitleaks-detector.d.ts.map +1 -0
  160. package/dist/src/utils/gitleaks-detector.js +334 -0
  161. package/dist/src/utils/gitleaks-detector.js.map +1 -0
  162. package/dist/src/utils/interactive-approval.d.ts +1 -1
  163. package/dist/src/utils/interactive-approval.d.ts.map +1 -1
  164. package/dist/src/utils/interactive-approval.js +22 -17
  165. package/dist/src/utils/interactive-approval.js.map +1 -1
  166. package/dist/src/utils/json-safe.d.ts.map +1 -1
  167. package/dist/src/utils/json-safe.js +9 -6
  168. package/dist/src/utils/json-safe.js.map +1 -1
  169. package/dist/src/utils/knowledge-graph-manager.d.ts +37 -1
  170. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  171. package/dist/src/utils/knowledge-graph-manager.js +315 -70
  172. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  173. package/dist/src/utils/location-filter.d.ts +35 -10
  174. package/dist/src/utils/location-filter.d.ts.map +1 -1
  175. package/dist/src/utils/location-filter.js +360 -94
  176. package/dist/src/utils/location-filter.js.map +1 -1
  177. package/dist/src/utils/mcp-response-validator.d.ts.map +1 -1
  178. package/dist/src/utils/mcp-response-validator.js +34 -19
  179. package/dist/src/utils/mcp-response-validator.js.map +1 -1
  180. package/dist/src/utils/memory-entity-manager.d.ts +134 -0
  181. package/dist/src/utils/memory-entity-manager.d.ts.map +1 -0
  182. package/dist/src/utils/memory-entity-manager.js +851 -0
  183. package/dist/src/utils/memory-entity-manager.js.map +1 -0
  184. package/dist/src/utils/memory-health-scoring.d.ts +125 -0
  185. package/dist/src/utils/memory-health-scoring.d.ts.map +1 -0
  186. package/dist/src/utils/memory-health-scoring.js +277 -0
  187. package/dist/src/utils/memory-health-scoring.js.map +1 -0
  188. package/dist/src/utils/memory-migration-manager.d.ts +93 -0
  189. package/dist/src/utils/memory-migration-manager.d.ts.map +1 -0
  190. package/dist/src/utils/memory-migration-manager.js +842 -0
  191. package/dist/src/utils/memory-migration-manager.js.map +1 -0
  192. package/dist/src/utils/memory-relationship-mapper.d.ts +87 -0
  193. package/dist/src/utils/memory-relationship-mapper.d.ts.map +1 -0
  194. package/dist/src/utils/memory-relationship-mapper.js +482 -0
  195. package/dist/src/utils/memory-relationship-mapper.js.map +1 -0
  196. package/dist/src/utils/memory-rollback-manager.d.ts +105 -0
  197. package/dist/src/utils/memory-rollback-manager.d.ts.map +1 -0
  198. package/dist/src/utils/memory-rollback-manager.js +575 -0
  199. package/dist/src/utils/memory-rollback-manager.js.map +1 -0
  200. package/dist/src/utils/memory-transformation.d.ts +59 -0
  201. package/dist/src/utils/memory-transformation.d.ts.map +1 -0
  202. package/dist/src/utils/memory-transformation.js +742 -0
  203. package/dist/src/utils/memory-transformation.js.map +1 -0
  204. package/dist/src/utils/output-masking.d.ts +12 -0
  205. package/dist/src/utils/output-masking.d.ts.map +1 -1
  206. package/dist/src/utils/output-masking.js +5 -0
  207. package/dist/src/utils/output-masking.js.map +1 -1
  208. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  209. package/dist/src/utils/prompt-execution.js +72 -51
  210. package/dist/src/utils/prompt-execution.js.map +1 -1
  211. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -1
  212. package/dist/src/utils/release-readiness-detector.js +43 -42
  213. package/dist/src/utils/release-readiness-detector.js.map +1 -1
  214. package/dist/src/utils/research-integration.d.ts.map +1 -1
  215. package/dist/src/utils/research-integration.js +73 -44
  216. package/dist/src/utils/research-integration.js.map +1 -1
  217. package/dist/src/utils/research-questions.d.ts.map +1 -1
  218. package/dist/src/utils/research-questions.js +40 -14
  219. package/dist/src/utils/research-questions.js.map +1 -1
  220. package/dist/src/utils/ripgrep-wrapper.d.ts +84 -0
  221. package/dist/src/utils/ripgrep-wrapper.d.ts.map +1 -0
  222. package/dist/src/utils/ripgrep-wrapper.js +255 -0
  223. package/dist/src/utils/ripgrep-wrapper.js.map +1 -0
  224. package/dist/src/utils/rule-generation.d.ts.map +1 -1
  225. package/dist/src/utils/rule-generation.js +26 -15
  226. package/dist/src/utils/rule-generation.js.map +1 -1
  227. package/dist/src/utils/todo-file-watcher.d.ts +11 -23
  228. package/dist/src/utils/todo-file-watcher.d.ts.map +1 -1
  229. package/dist/src/utils/todo-file-watcher.js +18 -156
  230. package/dist/src/utils/todo-file-watcher.js.map +1 -1
  231. package/dist/src/utils/tree-sitter-analyzer.d.ts +185 -0
  232. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -0
  233. package/dist/src/utils/tree-sitter-analyzer.js +885 -0
  234. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -0
  235. package/package.json +51 -10
  236. package/dist/src/tools/smart-score-tool.d.ts +0 -173
  237. package/dist/src/tools/smart-score-tool.d.ts.map +0 -1
  238. package/dist/src/tools/smart-score-tool.js +0 -681
  239. package/dist/src/tools/smart-score-tool.js.map +0 -1
  240. package/dist/src/tools/todo-management-tool-v2.d.ts +0 -368
  241. package/dist/src/tools/todo-management-tool-v2.d.ts.map +0 -1
  242. package/dist/src/tools/todo-management-tool-v2.js +0 -922
  243. package/dist/src/tools/todo-management-tool-v2.js.map +0 -1
  244. package/dist/src/utils/enhanced-sensitive-detector.d.ts +0 -61
  245. package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +0 -1
  246. package/dist/src/utils/enhanced-sensitive-detector.js +0 -437
  247. package/dist/src/utils/enhanced-sensitive-detector.js.map +0 -1
  248. package/dist/src/utils/project-health-scoring.d.ts +0 -177
  249. package/dist/src/utils/project-health-scoring.d.ts.map +0 -1
  250. package/dist/src/utils/project-health-scoring.js +0 -370
  251. package/dist/src/utils/project-health-scoring.js.map +0 -1
  252. package/dist/src/utils/todo-json-manager.d.ts +0 -71
  253. package/dist/src/utils/todo-json-manager.d.ts.map +0 -1
  254. package/dist/src/utils/todo-json-manager.js +0 -396
  255. package/dist/src/utils/todo-json-manager.js.map +0 -1
  256. package/dist/src/utils/todo-markdown-converter.d.ts +0 -16
  257. package/dist/src/utils/todo-markdown-converter.d.ts.map +0 -1
  258. package/dist/src/utils/todo-markdown-converter.js +0 -362
  259. package/dist/src/utils/todo-markdown-converter.js.map +0 -1
  260. package/dist/src/utils/todo-migration.d.ts +0 -47
  261. package/dist/src/utils/todo-migration.d.ts.map +0 -1
  262. package/dist/src/utils/todo-migration.js +0 -261
  263. package/dist/src/utils/todo-migration.js.map +0 -1
package/dist/src/index.js CHANGED
@@ -8,14 +8,14 @@
8
8
  */
9
9
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
10
10
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
11
- import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema } from '@modelcontextprotocol/sdk/types.js';
11
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
12
12
  import { readFileSync } from 'fs';
13
13
  import { join } from 'path';
14
14
  import { getCurrentDirCompat } from './utils/directory-compat.js';
15
15
  import { McpAdrError } from './types/index.js';
16
16
  import { CONVERSATION_CONTEXT_SCHEMA } from './types/conversation-context.js';
17
- import { maskMcpResponse, createMaskingConfig } from './utils/output-masking.js';
18
- import { loadConfig, validateProjectPath, createLogger, printConfigSummary } from './utils/config.js';
17
+ import { maskMcpResponse, createMaskingConfig, } from './utils/output-masking.js';
18
+ import { loadConfig, validateProjectPath, createLogger, printConfigSummary, } from './utils/config.js';
19
19
  import { KnowledgeGraphManager } from './utils/knowledge-graph-manager.js';
20
20
  /**
21
21
  * Get version from package.json
@@ -29,7 +29,7 @@ function getPackageVersion() {
29
29
  join(currentDir, 'package.json'),
30
30
  join(currentDir, '..', 'package.json'),
31
31
  join(currentDir, '..', '..', 'package.json'),
32
- join(process.cwd(), 'package.json')
32
+ join(process.cwd(), 'package.json'),
33
33
  ];
34
34
  for (const packageJsonPath of possiblePaths) {
35
35
  try {
@@ -61,7 +61,7 @@ function getPackageVersion() {
61
61
  const SERVER_INFO = {
62
62
  name: 'mcp-adr-analysis-server',
63
63
  version: getPackageVersion(),
64
- description: 'MCP server for analyzing Architectural Decision Records and project architecture'
64
+ description: 'MCP server for analyzing Architectural Decision Records and project architecture',
65
65
  };
66
66
  /**
67
67
  * Main server class
@@ -84,8 +84,8 @@ export class McpAdrAnalysisServer {
84
84
  capabilities: {
85
85
  tools: {},
86
86
  resources: {},
87
- prompts: {}
88
- }
87
+ prompts: {},
88
+ },
89
89
  });
90
90
  this.maskingConfig = createMaskingConfig();
91
91
  this.setupHandlers();
@@ -99,7 +99,8 @@ export class McpAdrAnalysisServer {
99
99
  this.logger.info(`Project path validated: ${this.config.projectPath}`);
100
100
  }
101
101
  catch (error) {
102
- this.logger.error(`Configuration validation failed: ${error.message}`);
102
+ const errorMessage = error instanceof Error ? error.message : String(error);
103
+ this.logger.error(`Configuration validation failed: ${errorMessage}`);
103
104
  throw error;
104
105
  }
105
106
  }
@@ -126,59 +127,59 @@ export class McpAdrAnalysisServer {
126
127
  properties: {
127
128
  projectPath: {
128
129
  type: 'string',
129
- description: 'Path to the project directory to analyze (optional, uses configured PROJECT_PATH if not provided)'
130
+ description: 'Path to the project directory to analyze (optional, uses configured PROJECT_PATH if not provided)',
130
131
  },
131
132
  includePatterns: {
132
133
  type: 'array',
133
134
  items: { type: 'string' },
134
- description: 'File patterns to include in analysis'
135
+ description: 'File patterns to include in analysis',
135
136
  },
136
137
  enhancedMode: {
137
138
  type: 'boolean',
138
139
  description: 'Enable advanced prompting features (Knowledge Generation + Reflexion)',
139
- default: true
140
+ default: true,
140
141
  },
141
142
  knowledgeEnhancement: {
142
143
  type: 'boolean',
143
144
  description: 'Enable Knowledge Generation for technology-specific insights',
144
- default: true
145
+ default: true,
145
146
  },
146
147
  learningEnabled: {
147
148
  type: 'boolean',
148
149
  description: 'Enable Reflexion learning from past analysis outcomes',
149
- default: true
150
+ default: true,
150
151
  },
151
152
  technologyFocus: {
152
153
  type: 'array',
153
154
  items: { type: 'string' },
154
- description: 'Specific technologies to focus analysis on (auto-detected if not provided)'
155
+ description: 'Specific technologies to focus analysis on (auto-detected if not provided)',
155
156
  },
156
157
  analysisDepth: {
157
158
  type: 'string',
158
159
  enum: ['basic', 'detailed', 'comprehensive'],
159
160
  description: 'Depth of ecosystem analysis',
160
- default: 'comprehensive'
161
+ default: 'comprehensive',
161
162
  },
162
163
  includeEnvironment: {
163
164
  type: 'boolean',
164
165
  description: 'Automatically include comprehensive environment analysis (default: true)',
165
- default: true
166
+ default: true,
166
167
  },
167
168
  recursiveDepth: {
168
169
  type: 'string',
169
170
  description: 'Depth of recursive project analysis',
170
171
  enum: ['shallow', 'moderate', 'deep', 'comprehensive'],
171
- default: 'comprehensive'
172
+ default: 'comprehensive',
172
173
  },
173
174
  analysisScope: {
174
175
  type: 'array',
175
176
  items: { type: 'string' },
176
- description: 'Specific analysis areas to focus on (e.g., ["security", "performance", "architecture", "dependencies"])'
177
+ description: 'Specific analysis areas to focus on (e.g., ["security", "performance", "architecture", "dependencies"])',
177
178
  },
178
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
179
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
179
180
  },
180
- required: []
181
- }
181
+ required: [],
182
+ },
182
183
  },
183
184
  {
184
185
  name: 'get_architectural_context',
@@ -188,16 +189,16 @@ export class McpAdrAnalysisServer {
188
189
  properties: {
189
190
  filePath: {
190
191
  type: 'string',
191
- description: 'Specific file path to analyze (optional, analyzes entire project if not provided)'
192
+ description: 'Specific file path to analyze (optional, analyzes entire project if not provided)',
192
193
  },
193
194
  includeCompliance: {
194
195
  type: 'boolean',
195
196
  description: 'Include compliance checks in the analysis',
196
- default: true
197
+ default: true,
197
198
  },
198
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
199
- }
200
- }
199
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
200
+ },
201
+ },
201
202
  },
202
203
  {
203
204
  name: 'generate_adrs_from_prd',
@@ -207,37 +208,44 @@ export class McpAdrAnalysisServer {
207
208
  properties: {
208
209
  prdPath: {
209
210
  type: 'string',
210
- description: 'Path to the PRD.md file'
211
+ description: 'Path to the PRD.md file',
211
212
  },
212
213
  outputDirectory: {
213
214
  type: 'string',
214
- description: 'Directory to output generated ADRs (optional, uses configured ADR_DIRECTORY if not provided)'
215
+ description: 'Directory to output generated ADRs (optional, uses configured ADR_DIRECTORY if not provided)',
215
216
  },
216
217
  enhancedMode: {
217
218
  type: 'boolean',
218
219
  description: 'Enable advanced prompting features (APE + Knowledge Generation)',
219
- default: true
220
+ default: true,
220
221
  },
221
222
  promptOptimization: {
222
223
  type: 'boolean',
223
224
  description: 'Enable Automatic Prompt Engineering for optimized ADR generation',
224
- default: true
225
+ default: true,
225
226
  },
226
227
  knowledgeEnhancement: {
227
228
  type: 'boolean',
228
229
  description: 'Enable Knowledge Generation for domain-specific insights',
229
- default: true
230
+ default: true,
230
231
  },
231
232
  prdType: {
232
233
  type: 'string',
233
- enum: ['web-application', 'mobile-app', 'microservices', 'data-platform', 'api-service', 'general'],
234
+ enum: [
235
+ 'web-application',
236
+ 'mobile-app',
237
+ 'microservices',
238
+ 'data-platform',
239
+ 'api-service',
240
+ 'general',
241
+ ],
234
242
  description: 'Type of PRD for optimized knowledge generation',
235
- default: 'general'
243
+ default: 'general',
236
244
  },
237
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
245
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
238
246
  },
239
- required: ['prdPath']
240
- }
247
+ required: ['prdPath'],
248
+ },
241
249
  },
242
250
  {
243
251
  name: 'generate_adr_todo',
@@ -247,63 +255,63 @@ export class McpAdrAnalysisServer {
247
255
  properties: {
248
256
  adrDirectory: {
249
257
  type: 'string',
250
- description: 'Directory containing ADR files (optional, uses configured ADR_DIRECTORY if not provided)'
258
+ description: 'Directory containing ADR files (optional, uses configured ADR_DIRECTORY if not provided)',
251
259
  },
252
260
  scope: {
253
261
  type: 'string',
254
262
  enum: ['all', 'pending', 'in_progress'],
255
263
  description: 'Scope of tasks to include',
256
- default: 'all'
264
+ default: 'all',
257
265
  },
258
266
  phase: {
259
267
  type: 'string',
260
268
  enum: ['both', 'test', 'production'],
261
269
  description: 'TDD phase: both (default), test (mock test generation), production (implementation after tests)',
262
- default: 'both'
270
+ default: 'both',
263
271
  },
264
272
  linkAdrs: {
265
273
  type: 'boolean',
266
274
  description: 'Auto-detect and link ADR dependencies in task creation',
267
- default: true
275
+ default: true,
268
276
  },
269
277
  includeRules: {
270
278
  type: 'boolean',
271
279
  description: 'Include architectural rules validation in TDD tasks',
272
- default: true
280
+ default: true,
273
281
  },
274
282
  ruleSource: {
275
283
  type: 'string',
276
284
  enum: ['adrs', 'patterns', 'both'],
277
285
  description: 'Source for architectural rules (only used if includeRules is true)',
278
- default: 'both'
286
+ default: 'both',
279
287
  },
280
288
  todoPath: {
281
289
  type: 'string',
282
290
  description: 'Path to TODO.md file (relative to project root)',
283
- default: 'TODO.md'
291
+ default: 'TODO.md',
284
292
  },
285
293
  preserveExisting: {
286
294
  type: 'boolean',
287
295
  description: 'Preserve existing TODO.md content by merging instead of overwriting',
288
- default: true
296
+ default: true,
289
297
  },
290
298
  forceSyncToMarkdown: {
291
299
  type: 'boolean',
292
300
  description: 'Force sync JSON to markdown even if markdown is newer',
293
- default: false
301
+ default: false,
294
302
  },
295
303
  intentId: {
296
304
  type: 'string',
297
- description: 'Link generated tasks to specific knowledge graph intent'
305
+ description: 'Link generated tasks to specific knowledge graph intent',
298
306
  },
299
307
  createJsonBackup: {
300
308
  type: 'boolean',
301
309
  description: 'Create backup of existing JSON TODO data before import',
302
- default: true
310
+ default: true,
303
311
  },
304
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
305
- }
306
- }
312
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
313
+ },
314
+ },
307
315
  },
308
316
  {
309
317
  name: 'compare_adr_progress',
@@ -314,23 +322,23 @@ export class McpAdrAnalysisServer {
314
322
  todoPath: {
315
323
  type: 'string',
316
324
  description: 'Path to TODO.md file to analyze',
317
- default: 'TODO.md'
325
+ default: 'TODO.md',
318
326
  },
319
327
  adrDirectory: {
320
328
  type: 'string',
321
329
  description: 'Directory containing ADR files',
322
- default: 'docs/adrs'
330
+ default: 'docs/adrs',
323
331
  },
324
332
  projectPath: {
325
333
  type: 'string',
326
334
  description: 'Path to project root for environment analysis',
327
- default: '.'
335
+ default: '.',
328
336
  },
329
337
  environment: {
330
338
  type: 'string',
331
339
  enum: ['development', 'staging', 'production', 'testing', 'auto-detect'],
332
340
  description: 'Target environment context for validation (auto-detect will infer from project structure)',
333
- default: 'auto-detect'
341
+ default: 'auto-detect',
334
342
  },
335
343
  environmentConfig: {
336
344
  type: 'object',
@@ -339,87 +347,102 @@ export class McpAdrAnalysisServer {
339
347
  requiredFiles: {
340
348
  type: 'array',
341
349
  items: { type: 'string' },
342
- description: 'Files required for this environment'
350
+ description: 'Files required for this environment',
343
351
  },
344
352
  requiredServices: {
345
353
  type: 'array',
346
354
  items: { type: 'string' },
347
- description: 'Services that must be implemented for this environment'
355
+ description: 'Services that must be implemented for this environment',
348
356
  },
349
357
  securityLevel: {
350
358
  type: 'string',
351
359
  enum: ['low', 'medium', 'high', 'critical'],
352
- description: 'Required security level for this environment'
360
+ description: 'Required security level for this environment',
353
361
  },
354
362
  performanceRequirements: {
355
363
  type: 'object',
356
- description: 'Performance requirements for this environment'
357
- }
358
- }
364
+ description: 'Performance requirements for this environment',
365
+ },
366
+ },
359
367
  },
360
368
  validationType: {
361
369
  type: 'string',
362
370
  enum: ['full', 'todo-only', 'adr-only', 'environment-only'],
363
371
  description: 'Type of validation to perform',
364
- default: 'full'
372
+ default: 'full',
365
373
  },
366
374
  includeFileChecks: {
367
375
  type: 'boolean',
368
376
  description: 'Include file existence and implementation checks',
369
- default: true
377
+ default: true,
370
378
  },
371
379
  includeRuleValidation: {
372
380
  type: 'boolean',
373
381
  description: 'Include architectural rule compliance validation',
374
- default: true
382
+ default: true,
375
383
  },
376
384
  deepCodeAnalysis: {
377
385
  type: 'boolean',
378
386
  description: 'Perform deep code analysis to distinguish mock from production implementations',
379
- default: true
387
+ default: true,
380
388
  },
381
389
  functionalValidation: {
382
390
  type: 'boolean',
383
391
  description: 'Validate that code actually functions according to ADR goals, not just exists',
384
- default: true
392
+ default: true,
385
393
  },
386
394
  strictMode: {
387
395
  type: 'boolean',
388
396
  description: 'Enable strict validation mode with reality-check mechanisms against overconfident assessments',
389
- default: true
397
+ default: true,
390
398
  },
391
399
  environmentValidation: {
392
400
  type: 'boolean',
393
401
  description: 'Enable environment-specific validation rules and checks',
394
- default: true
395
- }
396
- }
397
- }
402
+ default: true,
403
+ },
404
+ },
405
+ },
398
406
  },
399
407
  {
400
408
  name: 'analyze_content_security',
401
- description: 'Analyze content for sensitive information using AI-powered detection',
409
+ description: 'Analyze content for sensitive information using AI-powered detection with optional memory integration for security pattern learning',
402
410
  inputSchema: {
403
411
  type: 'object',
404
412
  properties: {
405
413
  content: {
406
414
  type: 'string',
407
- description: 'Content to analyze for sensitive information'
415
+ description: 'Content to analyze for sensitive information',
408
416
  },
409
417
  contentType: {
410
418
  type: 'string',
411
419
  enum: ['code', 'documentation', 'configuration', 'logs', 'general'],
412
420
  description: 'Type of content being analyzed',
413
- default: 'general'
421
+ default: 'general',
414
422
  },
415
423
  userDefinedPatterns: {
416
424
  type: 'array',
417
425
  items: { type: 'string' },
418
- description: 'User-defined sensitive patterns to detect'
419
- }
426
+ description: 'User-defined sensitive patterns to detect',
427
+ },
428
+ enableMemoryIntegration: {
429
+ type: 'boolean',
430
+ description: 'Enable memory entity storage for security pattern learning and institutional knowledge building',
431
+ default: true,
432
+ },
433
+ knowledgeEnhancement: {
434
+ type: 'boolean',
435
+ description: 'Enable Generated Knowledge Prompting for security and privacy expertise',
436
+ default: true,
437
+ },
438
+ enhancedMode: {
439
+ type: 'boolean',
440
+ description: 'Enable advanced prompting features',
441
+ default: true,
442
+ },
420
443
  },
421
- required: ['content']
422
- }
444
+ required: ['content'],
445
+ },
423
446
  },
424
447
  {
425
448
  name: 'generate_content_masking',
@@ -429,7 +452,7 @@ export class McpAdrAnalysisServer {
429
452
  properties: {
430
453
  content: {
431
454
  type: 'string',
432
- description: 'Content to mask'
455
+ description: 'Content to mask',
433
456
  },
434
457
  detectedItems: {
435
458
  type: 'array',
@@ -440,20 +463,20 @@ export class McpAdrAnalysisServer {
440
463
  content: { type: 'string' },
441
464
  startPosition: { type: 'number' },
442
465
  endPosition: { type: 'number' },
443
- severity: { type: 'string' }
444
- }
466
+ severity: { type: 'string' },
467
+ },
445
468
  },
446
- description: 'Detected sensitive items to mask'
469
+ description: 'Detected sensitive items to mask',
447
470
  },
448
471
  maskingStrategy: {
449
472
  type: 'string',
450
473
  enum: ['full', 'partial', 'placeholder', 'environment'],
451
474
  description: 'Strategy for masking content',
452
- default: 'full'
453
- }
475
+ default: 'full',
476
+ },
454
477
  },
455
- required: ['content', 'detectedItems']
456
- }
478
+ required: ['content', 'detectedItems'],
479
+ },
457
480
  },
458
481
  {
459
482
  name: 'configure_custom_patterns',
@@ -463,16 +486,16 @@ export class McpAdrAnalysisServer {
463
486
  properties: {
464
487
  projectPath: {
465
488
  type: 'string',
466
- description: 'Path to the project directory'
489
+ description: 'Path to the project directory',
467
490
  },
468
491
  existingPatterns: {
469
492
  type: 'array',
470
493
  items: { type: 'string' },
471
- description: 'Existing patterns to consider'
472
- }
494
+ description: 'Existing patterns to consider',
495
+ },
473
496
  },
474
- required: ['projectPath']
475
- }
497
+ required: ['projectPath'],
498
+ },
476
499
  },
477
500
  {
478
501
  name: 'apply_basic_content_masking',
@@ -482,17 +505,17 @@ export class McpAdrAnalysisServer {
482
505
  properties: {
483
506
  content: {
484
507
  type: 'string',
485
- description: 'Content to mask'
508
+ description: 'Content to mask',
486
509
  },
487
510
  maskingStrategy: {
488
511
  type: 'string',
489
512
  enum: ['full', 'partial', 'placeholder'],
490
513
  description: 'Strategy for masking content',
491
- default: 'full'
492
- }
514
+ default: 'full',
515
+ },
493
516
  },
494
- required: ['content']
495
- }
517
+ required: ['content'],
518
+ },
496
519
  },
497
520
  {
498
521
  name: 'validate_content_masking',
@@ -502,15 +525,15 @@ export class McpAdrAnalysisServer {
502
525
  properties: {
503
526
  originalContent: {
504
527
  type: 'string',
505
- description: 'Original content before masking'
528
+ description: 'Original content before masking',
506
529
  },
507
530
  maskedContent: {
508
531
  type: 'string',
509
- description: 'Content after masking'
510
- }
532
+ description: 'Content after masking',
533
+ },
511
534
  },
512
- required: ['originalContent', 'maskedContent']
513
- }
535
+ required: ['originalContent', 'maskedContent'],
536
+ },
514
537
  },
515
538
  {
516
539
  name: 'manage_cache',
@@ -521,15 +544,15 @@ export class McpAdrAnalysisServer {
521
544
  action: {
522
545
  type: 'string',
523
546
  enum: ['clear', 'stats', 'cleanup', 'invalidate'],
524
- description: 'Cache management action to perform'
547
+ description: 'Cache management action to perform',
525
548
  },
526
549
  key: {
527
550
  type: 'string',
528
- description: 'Specific cache key to invalidate (for invalidate action)'
529
- }
551
+ description: 'Specific cache key to invalidate (for invalidate action)',
552
+ },
530
553
  },
531
- required: ['action']
532
- }
554
+ required: ['action'],
555
+ },
533
556
  },
534
557
  {
535
558
  name: 'configure_output_masking',
@@ -539,26 +562,26 @@ export class McpAdrAnalysisServer {
539
562
  properties: {
540
563
  enabled: {
541
564
  type: 'boolean',
542
- description: 'Enable or disable output masking'
565
+ description: 'Enable or disable output masking',
543
566
  },
544
567
  strategy: {
545
568
  type: 'string',
546
569
  enum: ['full', 'partial', 'placeholder', 'environment'],
547
- description: 'Masking strategy to use'
570
+ description: 'Masking strategy to use',
548
571
  },
549
572
  customPatterns: {
550
573
  type: 'array',
551
574
  items: { type: 'string' },
552
- description: 'Custom patterns to mask'
575
+ description: 'Custom patterns to mask',
553
576
  },
554
577
  action: {
555
578
  type: 'string',
556
579
  enum: ['get', 'set', 'reset'],
557
580
  description: 'Configuration action',
558
- default: 'get'
559
- }
560
- }
561
- }
581
+ default: 'get',
582
+ },
583
+ },
584
+ },
562
585
  },
563
586
  {
564
587
  name: 'suggest_adrs',
@@ -569,54 +592,54 @@ export class McpAdrAnalysisServer {
569
592
  projectPath: {
570
593
  type: 'string',
571
594
  description: 'Path to the project directory',
572
- default: '.'
595
+ default: '.',
573
596
  },
574
597
  analysisType: {
575
598
  type: 'string',
576
599
  enum: ['implicit_decisions', 'code_changes', 'comprehensive'],
577
600
  description: 'Type of analysis to perform',
578
- default: 'comprehensive'
601
+ default: 'comprehensive',
579
602
  },
580
603
  beforeCode: {
581
604
  type: 'string',
582
- description: 'Code before changes (for code_changes analysis)'
605
+ description: 'Code before changes (for code_changes analysis)',
583
606
  },
584
607
  afterCode: {
585
608
  type: 'string',
586
- description: 'Code after changes (for code_changes analysis)'
609
+ description: 'Code after changes (for code_changes analysis)',
587
610
  },
588
611
  changeDescription: {
589
612
  type: 'string',
590
- description: 'Description of the changes (for code_changes analysis)'
613
+ description: 'Description of the changes (for code_changes analysis)',
591
614
  },
592
615
  commitMessages: {
593
616
  type: 'array',
594
617
  items: { type: 'string' },
595
- description: 'Related commit messages (for code_changes analysis)'
618
+ description: 'Related commit messages (for code_changes analysis)',
596
619
  },
597
620
  existingAdrs: {
598
621
  type: 'array',
599
622
  items: { type: 'string' },
600
- description: 'List of existing ADR titles to avoid duplication'
623
+ description: 'List of existing ADR titles to avoid duplication',
601
624
  },
602
625
  enhancedMode: {
603
626
  type: 'boolean',
604
627
  description: 'Enable advanced prompting features (Knowledge Generation + Reflexion)',
605
- default: true
628
+ default: true,
606
629
  },
607
630
  learningEnabled: {
608
631
  type: 'boolean',
609
632
  description: 'Enable Reflexion learning from past experiences',
610
- default: true
633
+ default: true,
611
634
  },
612
635
  knowledgeEnhancement: {
613
636
  type: 'boolean',
614
637
  description: 'Enable Knowledge Generation for domain-specific insights',
615
- default: true
638
+ default: true,
616
639
  },
617
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
618
- }
619
- }
640
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
641
+ },
642
+ },
620
643
  },
621
644
  {
622
645
  name: 'generate_adr_from_decision',
@@ -634,35 +657,81 @@ export class McpAdrAnalysisServer {
634
657
  alternatives: {
635
658
  type: 'array',
636
659
  items: { type: 'string' },
637
- description: 'Alternative approaches considered'
660
+ description: 'Alternative approaches considered',
638
661
  },
639
662
  evidence: {
640
663
  type: 'array',
641
664
  items: { type: 'string' },
642
- description: 'Supporting evidence for the decision'
643
- }
665
+ description: 'Supporting evidence for the decision',
666
+ },
644
667
  },
645
- required: ['title', 'context', 'decision', 'consequences']
668
+ required: ['title', 'context', 'decision', 'consequences'],
646
669
  },
647
670
  templateFormat: {
648
671
  type: 'string',
649
672
  enum: ['nygard', 'madr', 'custom'],
650
673
  description: 'ADR template format to use',
651
- default: 'nygard'
674
+ default: 'nygard',
652
675
  },
653
676
  existingAdrs: {
654
677
  type: 'array',
655
678
  items: { type: 'string' },
656
- description: 'List of existing ADRs for numbering and references'
679
+ description: 'List of existing ADRs for numbering and references',
657
680
  },
658
681
  adrDirectory: {
659
682
  type: 'string',
660
683
  description: 'Directory where ADRs are stored',
661
- default: 'docs/adrs'
662
- }
684
+ default: 'docs/adrs',
685
+ },
663
686
  },
664
- required: ['decisionData']
665
- }
687
+ required: ['decisionData'],
688
+ },
689
+ },
690
+ {
691
+ name: 'generate_adr_bootstrap',
692
+ description: 'Generate bootstrap.sh and validate_bootstrap.sh scripts to ensure deployed code follows ADR requirements',
693
+ inputSchema: {
694
+ type: 'object',
695
+ properties: {
696
+ projectPath: {
697
+ type: 'string',
698
+ description: 'Path to the project directory',
699
+ default: '.',
700
+ },
701
+ adrDirectory: {
702
+ type: 'string',
703
+ description: 'Directory where ADRs are stored',
704
+ default: 'docs/adrs',
705
+ },
706
+ outputPath: {
707
+ type: 'string',
708
+ description: 'Directory where to generate scripts',
709
+ default: '.',
710
+ },
711
+ scriptType: {
712
+ type: 'string',
713
+ enum: ['bootstrap', 'validate', 'both'],
714
+ description: 'Which scripts to generate',
715
+ default: 'both',
716
+ },
717
+ includeTests: {
718
+ type: 'boolean',
719
+ description: 'Include test execution in bootstrap',
720
+ default: true,
721
+ },
722
+ includeDeployment: {
723
+ type: 'boolean',
724
+ description: 'Include deployment steps in bootstrap',
725
+ default: true,
726
+ },
727
+ customValidations: {
728
+ type: 'array',
729
+ items: { type: 'string' },
730
+ description: 'Custom validation commands to include',
731
+ },
732
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
733
+ },
734
+ },
666
735
  },
667
736
  {
668
737
  name: 'discover_existing_adrs',
@@ -673,15 +742,55 @@ export class McpAdrAnalysisServer {
673
742
  adrDirectory: {
674
743
  type: 'string',
675
744
  description: 'Directory to search for ADRs',
676
- default: 'docs/adrs'
745
+ default: 'docs/adrs',
677
746
  },
678
747
  includeContent: {
679
748
  type: 'boolean',
680
749
  description: 'Whether to include ADR content in analysis',
681
- default: false
682
- }
683
- }
684
- }
750
+ default: false,
751
+ },
752
+ },
753
+ },
754
+ },
755
+ {
756
+ name: 'review_existing_adrs',
757
+ description: 'Review existing ADRs against actual code implementation with cloud/DevOps expertise',
758
+ inputSchema: {
759
+ type: 'object',
760
+ properties: {
761
+ adrDirectory: {
762
+ type: 'string',
763
+ description: 'Directory containing ADR files',
764
+ default: 'docs/adrs',
765
+ },
766
+ projectPath: {
767
+ type: 'string',
768
+ description: 'Path to the project directory',
769
+ default: '.',
770
+ },
771
+ specificAdr: {
772
+ type: 'string',
773
+ description: 'Specific ADR filename or title to review (optional)',
774
+ },
775
+ analysisDepth: {
776
+ type: 'string',
777
+ enum: ['basic', 'detailed', 'comprehensive'],
778
+ description: 'Depth of analysis to perform',
779
+ default: 'detailed',
780
+ },
781
+ includeTreeSitter: {
782
+ type: 'boolean',
783
+ description: 'Use tree-sitter for enhanced code analysis',
784
+ default: true,
785
+ },
786
+ generateUpdatePlan: {
787
+ type: 'boolean',
788
+ description: 'Generate action plan for updating non-compliant ADRs',
789
+ default: true,
790
+ },
791
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
792
+ },
793
+ },
685
794
  },
686
795
  {
687
796
  name: 'incorporate_research',
@@ -692,23 +801,29 @@ export class McpAdrAnalysisServer {
692
801
  researchPath: {
693
802
  type: 'string',
694
803
  description: 'Path to research directory',
695
- default: 'docs/research'
804
+ default: 'docs/research',
696
805
  },
697
806
  adrDirectory: {
698
807
  type: 'string',
699
808
  description: 'Path to ADR directory',
700
- default: 'docs/adrs'
809
+ default: 'docs/adrs',
701
810
  },
702
811
  analysisType: {
703
812
  type: 'string',
704
- enum: ['monitor', 'extract_topics', 'evaluate_impact', 'generate_updates', 'comprehensive'],
813
+ enum: [
814
+ 'monitor',
815
+ 'extract_topics',
816
+ 'evaluate_impact',
817
+ 'generate_updates',
818
+ 'comprehensive',
819
+ ],
705
820
  description: 'Type of research analysis to perform',
706
- default: 'comprehensive'
821
+ default: 'comprehensive',
707
822
  },
708
823
  existingTopics: {
709
824
  type: 'array',
710
825
  items: { type: 'string' },
711
- description: 'Previously identified research topics'
826
+ description: 'Previously identified research topics',
712
827
  },
713
828
  researchTopics: {
714
829
  type: 'array',
@@ -719,19 +834,19 @@ export class McpAdrAnalysisServer {
719
834
  title: { type: 'string' },
720
835
  category: { type: 'string' },
721
836
  keyFindings: { type: 'array', items: { type: 'string' } },
722
- relevanceScore: { type: 'number' }
723
- }
837
+ relevanceScore: { type: 'number' },
838
+ },
724
839
  },
725
- description: 'Research topics for impact evaluation'
840
+ description: 'Research topics for impact evaluation',
726
841
  },
727
842
  adrId: {
728
843
  type: 'string',
729
- description: 'ADR ID for update generation'
844
+ description: 'ADR ID for update generation',
730
845
  },
731
846
  updateType: {
732
847
  type: 'string',
733
848
  enum: ['content', 'status', 'consequences', 'alternatives', 'deprecation'],
734
- description: 'Type of ADR update to generate'
849
+ description: 'Type of ADR update to generate',
735
850
  },
736
851
  researchFindings: {
737
852
  type: 'array',
@@ -740,13 +855,13 @@ export class McpAdrAnalysisServer {
740
855
  properties: {
741
856
  finding: { type: 'string' },
742
857
  evidence: { type: 'array', items: { type: 'string' } },
743
- impact: { type: 'string' }
744
- }
858
+ impact: { type: 'string' },
859
+ },
745
860
  },
746
- description: 'Research findings for update generation'
747
- }
748
- }
749
- }
861
+ description: 'Research findings for update generation',
862
+ },
863
+ },
864
+ },
750
865
  },
751
866
  {
752
867
  name: 'create_research_template',
@@ -756,21 +871,21 @@ export class McpAdrAnalysisServer {
756
871
  properties: {
757
872
  title: {
758
873
  type: 'string',
759
- description: 'Title of the research'
874
+ description: 'Title of the research',
760
875
  },
761
876
  category: {
762
877
  type: 'string',
763
878
  description: 'Research category',
764
- default: 'general'
879
+ default: 'general',
765
880
  },
766
881
  researchPath: {
767
882
  type: 'string',
768
883
  description: 'Path to research directory',
769
- default: 'docs/research'
770
- }
884
+ default: 'docs/research',
885
+ },
771
886
  },
772
- required: ['title']
773
- }
887
+ required: ['title'],
888
+ },
774
889
  },
775
890
  {
776
891
  name: 'request_action_confirmation',
@@ -780,21 +895,21 @@ export class McpAdrAnalysisServer {
780
895
  properties: {
781
896
  action: {
782
897
  type: 'string',
783
- description: 'Description of the action to be performed'
898
+ description: 'Description of the action to be performed',
784
899
  },
785
900
  details: {
786
901
  type: 'string',
787
- description: 'Detailed information about the action'
902
+ description: 'Detailed information about the action',
788
903
  },
789
904
  impact: {
790
905
  type: 'string',
791
906
  enum: ['low', 'medium', 'high', 'critical'],
792
907
  description: 'Impact level of the action',
793
- default: 'medium'
794
- }
908
+ default: 'medium',
909
+ },
795
910
  },
796
- required: ['action', 'details']
797
- }
911
+ required: ['action', 'details'],
912
+ },
798
913
  },
799
914
  {
800
915
  name: 'generate_rules',
@@ -806,17 +921,17 @@ export class McpAdrAnalysisServer {
806
921
  type: 'string',
807
922
  enum: ['adrs', 'patterns', 'both'],
808
923
  description: 'Source for rule generation',
809
- default: 'both'
924
+ default: 'both',
810
925
  },
811
926
  adrDirectory: {
812
927
  type: 'string',
813
928
  description: 'Directory containing ADR files',
814
- default: 'docs/adrs'
929
+ default: 'docs/adrs',
815
930
  },
816
931
  projectPath: {
817
932
  type: 'string',
818
933
  description: 'Path to project for pattern analysis',
819
- default: '.'
934
+ default: '.',
820
935
  },
821
936
  existingRules: {
822
937
  type: 'array',
@@ -825,19 +940,19 @@ export class McpAdrAnalysisServer {
825
940
  properties: {
826
941
  id: { type: 'string' },
827
942
  name: { type: 'string' },
828
- description: { type: 'string' }
829
- }
943
+ description: { type: 'string' },
944
+ },
830
945
  },
831
- description: 'Existing rules to avoid duplication'
946
+ description: 'Existing rules to avoid duplication',
832
947
  },
833
948
  outputFormat: {
834
949
  type: 'string',
835
950
  enum: ['json', 'yaml', 'both'],
836
951
  description: 'Output format for rules',
837
- default: 'json'
838
- }
839
- }
840
- }
952
+ default: 'json',
953
+ },
954
+ },
955
+ },
841
956
  },
842
957
  {
843
958
  name: 'validate_rules',
@@ -847,15 +962,15 @@ export class McpAdrAnalysisServer {
847
962
  properties: {
848
963
  filePath: {
849
964
  type: 'string',
850
- description: 'Path to file to validate'
965
+ description: 'Path to file to validate',
851
966
  },
852
967
  fileContent: {
853
968
  type: 'string',
854
- description: 'Content to validate (alternative to filePath)'
969
+ description: 'Content to validate (alternative to filePath)',
855
970
  },
856
971
  fileName: {
857
972
  type: 'string',
858
- description: 'Name of file being validated (when using fileContent)'
973
+ description: 'Name of file being validated (when using fileContent)',
859
974
  },
860
975
  rules: {
861
976
  type: 'array',
@@ -867,27 +982,27 @@ export class McpAdrAnalysisServer {
867
982
  description: { type: 'string' },
868
983
  pattern: { type: 'string' },
869
984
  severity: { type: 'string' },
870
- message: { type: 'string' }
985
+ message: { type: 'string' },
871
986
  },
872
- required: ['id', 'name', 'pattern', 'severity', 'message']
987
+ required: ['id', 'name', 'pattern', 'severity', 'message'],
873
988
  },
874
- description: 'Rules to validate against'
989
+ description: 'Rules to validate against',
875
990
  },
876
991
  validationType: {
877
992
  type: 'string',
878
993
  enum: ['file', 'function', 'component', 'module'],
879
994
  description: 'Type of validation to perform',
880
- default: 'file'
995
+ default: 'file',
881
996
  },
882
997
  reportFormat: {
883
998
  type: 'string',
884
999
  enum: ['summary', 'detailed', 'json'],
885
1000
  description: 'Format for validation report',
886
- default: 'detailed'
887
- }
1001
+ default: 'detailed',
1002
+ },
888
1003
  },
889
- required: ['rules']
890
- }
1004
+ required: ['rules'],
1005
+ },
891
1006
  },
892
1007
  {
893
1008
  name: 'create_rule_set',
@@ -897,80 +1012,96 @@ export class McpAdrAnalysisServer {
897
1012
  properties: {
898
1013
  name: {
899
1014
  type: 'string',
900
- description: 'Name of the rule set'
1015
+ description: 'Name of the rule set',
901
1016
  },
902
1017
  description: {
903
1018
  type: 'string',
904
1019
  description: 'Description of the rule set',
905
- default: 'Generated architectural rule set'
1020
+ default: 'Generated architectural rule set',
906
1021
  },
907
1022
  adrRules: {
908
1023
  type: 'array',
909
1024
  items: { type: 'object' },
910
- description: 'Rules extracted from ADRs'
1025
+ description: 'Rules extracted from ADRs',
911
1026
  },
912
1027
  patternRules: {
913
1028
  type: 'array',
914
1029
  items: { type: 'object' },
915
- description: 'Rules generated from code patterns'
1030
+ description: 'Rules generated from code patterns',
916
1031
  },
917
1032
  rules: {
918
1033
  type: 'array',
919
1034
  items: { type: 'object' },
920
- description: 'Additional rules to include'
1035
+ description: 'Additional rules to include',
921
1036
  },
922
1037
  outputFormat: {
923
1038
  type: 'string',
924
1039
  enum: ['json', 'yaml', 'both'],
925
1040
  description: 'Output format for rule set',
926
- default: 'json'
1041
+ default: 'json',
927
1042
  },
928
1043
  author: {
929
1044
  type: 'string',
930
1045
  description: 'Author of the rule set',
931
- default: 'MCP ADR Analysis Server'
932
- }
1046
+ default: 'MCP ADR Analysis Server',
1047
+ },
933
1048
  },
934
- required: ['name']
935
- }
1049
+ required: ['name'],
1050
+ },
936
1051
  },
937
1052
  {
938
1053
  name: 'analyze_environment',
939
- description: 'Analyze environment context and provide optimization recommendations',
1054
+ description: 'Analyze environment context and provide optimization recommendations with optional memory integration for environment snapshot tracking',
940
1055
  inputSchema: {
941
1056
  type: 'object',
942
1057
  properties: {
943
1058
  projectPath: {
944
1059
  type: 'string',
945
1060
  description: 'Path to project directory',
946
- default: '.'
1061
+ default: '.',
947
1062
  },
948
1063
  adrDirectory: {
949
1064
  type: 'string',
950
1065
  description: 'Directory containing ADR files',
951
- default: 'docs/adrs'
1066
+ default: 'docs/adrs',
952
1067
  },
953
1068
  analysisType: {
954
1069
  type: 'string',
955
- enum: ['specs', 'containerization', 'requirements', 'compliance', 'comprehensive'],
1070
+ enum: [
1071
+ 'specs',
1072
+ 'containerization',
1073
+ 'requirements',
1074
+ 'compliance',
1075
+ 'comprehensive',
1076
+ ],
956
1077
  description: 'Type of environment analysis to perform',
957
- default: 'comprehensive'
1078
+ default: 'comprehensive',
958
1079
  },
959
1080
  currentEnvironment: {
960
1081
  type: 'object',
961
- description: 'Current environment specifications (for compliance analysis)'
1082
+ description: 'Current environment specifications (for compliance analysis)',
962
1083
  },
963
1084
  requirements: {
964
1085
  type: 'object',
965
- description: 'Environment requirements (for compliance analysis)'
1086
+ description: 'Environment requirements (for compliance analysis)',
966
1087
  },
967
1088
  industryStandards: {
968
1089
  type: 'array',
969
1090
  items: { type: 'string' },
970
- description: 'Industry standards to assess compliance against'
971
- }
972
- }
973
- }
1091
+ description: 'Industry standards to assess compliance against',
1092
+ },
1093
+ enableMemoryIntegration: {
1094
+ type: 'boolean',
1095
+ description: 'Enable memory entity storage for environment snapshot tracking and historical analysis',
1096
+ default: true,
1097
+ },
1098
+ enableTrendAnalysis: {
1099
+ type: 'boolean',
1100
+ description: 'Enable analysis of environment changes over time using stored snapshots',
1101
+ default: true,
1102
+ },
1103
+ },
1104
+ },
974
1105
  },
975
1106
  {
976
1107
  name: 'generate_research_questions',
@@ -982,7 +1113,7 @@ export class McpAdrAnalysisServer {
982
1113
  type: 'string',
983
1114
  enum: ['correlation', 'relevance', 'questions', 'tracking', 'comprehensive'],
984
1115
  description: 'Type of research analysis to perform',
985
- default: 'comprehensive'
1116
+ default: 'comprehensive',
986
1117
  },
987
1118
  researchContext: {
988
1119
  type: 'object',
@@ -992,9 +1123,9 @@ export class McpAdrAnalysisServer {
992
1123
  scope: { type: 'string' },
993
1124
  objectives: { type: 'array', items: { type: 'string' } },
994
1125
  constraints: { type: 'array', items: { type: 'string' } },
995
- timeline: { type: 'string' }
1126
+ timeline: { type: 'string' },
996
1127
  },
997
- description: 'Research context and objectives'
1128
+ description: 'Research context and objectives',
998
1129
  },
999
1130
  problems: {
1000
1131
  type: 'array',
@@ -1005,10 +1136,10 @@ export class McpAdrAnalysisServer {
1005
1136
  description: { type: 'string' },
1006
1137
  category: { type: 'string' },
1007
1138
  severity: { type: 'string' },
1008
- context: { type: 'string' }
1009
- }
1139
+ context: { type: 'string' },
1140
+ },
1010
1141
  },
1011
- description: 'Problems to correlate with knowledge graph'
1142
+ description: 'Problems to correlate with knowledge graph',
1012
1143
  },
1013
1144
  knowledgeGraph: {
1014
1145
  type: 'object',
@@ -1016,9 +1147,9 @@ export class McpAdrAnalysisServer {
1016
1147
  technologies: { type: 'array', items: { type: 'object' } },
1017
1148
  patterns: { type: 'array', items: { type: 'object' } },
1018
1149
  adrs: { type: 'array', items: { type: 'object' } },
1019
- relationships: { type: 'array', items: { type: 'object' } }
1150
+ relationships: { type: 'array', items: { type: 'object' } },
1020
1151
  },
1021
- description: 'Architectural knowledge graph'
1152
+ description: 'Architectural knowledge graph',
1022
1153
  },
1023
1154
  relevantKnowledge: {
1024
1155
  type: 'object',
@@ -1026,9 +1157,9 @@ export class McpAdrAnalysisServer {
1026
1157
  adrs: { type: 'array', items: { type: 'object' } },
1027
1158
  patterns: { type: 'array', items: { type: 'object' } },
1028
1159
  gaps: { type: 'array', items: { type: 'object' } },
1029
- opportunities: { type: 'array', items: { type: 'object' } }
1160
+ opportunities: { type: 'array', items: { type: 'object' } },
1030
1161
  },
1031
- description: 'Relevant knowledge for question generation'
1162
+ description: 'Relevant knowledge for question generation',
1032
1163
  },
1033
1164
  researchQuestions: {
1034
1165
  type: 'array',
@@ -1040,10 +1171,10 @@ export class McpAdrAnalysisServer {
1040
1171
  type: { type: 'string' },
1041
1172
  priority: { type: 'string' },
1042
1173
  timeline: { type: 'string' },
1043
- methodology: { type: 'string' }
1044
- }
1174
+ methodology: { type: 'string' },
1175
+ },
1045
1176
  },
1046
- description: 'Research questions for task tracking'
1177
+ description: 'Research questions for task tracking',
1047
1178
  },
1048
1179
  currentProgress: {
1049
1180
  type: 'array',
@@ -1054,23 +1185,23 @@ export class McpAdrAnalysisServer {
1054
1185
  status: { type: 'string' },
1055
1186
  progress: { type: 'number' },
1056
1187
  findings: { type: 'array', items: { type: 'string' } },
1057
- blockers: { type: 'array', items: { type: 'string' } }
1058
- }
1188
+ blockers: { type: 'array', items: { type: 'string' } },
1189
+ },
1059
1190
  },
1060
- description: 'Current research progress'
1191
+ description: 'Current research progress',
1061
1192
  },
1062
1193
  projectPath: {
1063
1194
  type: 'string',
1064
1195
  description: 'Path to project directory',
1065
- default: '.'
1196
+ default: '.',
1066
1197
  },
1067
1198
  adrDirectory: {
1068
1199
  type: 'string',
1069
1200
  description: 'Directory containing ADR files',
1070
- default: 'docs/adrs'
1071
- }
1072
- }
1073
- }
1201
+ default: 'docs/adrs',
1202
+ },
1203
+ },
1204
+ },
1074
1205
  },
1075
1206
  {
1076
1207
  name: 'analyze_deployment_progress',
@@ -1082,25 +1213,25 @@ export class McpAdrAnalysisServer {
1082
1213
  type: 'string',
1083
1214
  enum: ['tasks', 'cicd', 'progress', 'completion', 'comprehensive'],
1084
1215
  description: 'Type of deployment analysis to perform',
1085
- default: 'comprehensive'
1216
+ default: 'comprehensive',
1086
1217
  },
1087
1218
  adrDirectory: {
1088
1219
  type: 'string',
1089
1220
  description: 'Directory containing ADR files',
1090
- default: 'docs/adrs'
1221
+ default: 'docs/adrs',
1091
1222
  },
1092
1223
  todoPath: {
1093
1224
  type: 'string',
1094
1225
  description: 'Path to TODO.md file for task identification',
1095
- default: 'TODO.md'
1226
+ default: 'TODO.md',
1096
1227
  },
1097
1228
  cicdLogs: {
1098
1229
  type: 'string',
1099
- description: 'CI/CD pipeline logs for analysis'
1230
+ description: 'CI/CD pipeline logs for analysis',
1100
1231
  },
1101
1232
  pipelineConfig: {
1102
1233
  type: 'string',
1103
- description: 'CI/CD pipeline configuration'
1234
+ description: 'CI/CD pipeline configuration',
1104
1235
  },
1105
1236
  deploymentTasks: {
1106
1237
  type: 'array',
@@ -1114,10 +1245,10 @@ export class McpAdrAnalysisServer {
1114
1245
  category: { type: 'string' },
1115
1246
  priority: { type: 'string' },
1116
1247
  verificationCriteria: { type: 'array', items: { type: 'string' } },
1117
- expectedOutcome: { type: 'string' }
1118
- }
1248
+ expectedOutcome: { type: 'string' },
1249
+ },
1119
1250
  },
1120
- description: 'Deployment tasks for progress calculation'
1251
+ description: 'Deployment tasks for progress calculation',
1121
1252
  },
1122
1253
  outcomeRules: {
1123
1254
  type: 'array',
@@ -1127,10 +1258,10 @@ export class McpAdrAnalysisServer {
1127
1258
  ruleId: { type: 'string' },
1128
1259
  description: { type: 'string' },
1129
1260
  criteria: { type: 'array', items: { type: 'string' } },
1130
- verificationMethod: { type: 'string' }
1131
- }
1261
+ verificationMethod: { type: 'string' },
1262
+ },
1132
1263
  },
1133
- description: 'Outcome rules for completion verification'
1264
+ description: 'Outcome rules for completion verification',
1134
1265
  },
1135
1266
  actualOutcomes: {
1136
1267
  type: 'array',
@@ -1140,21 +1271,21 @@ export class McpAdrAnalysisServer {
1140
1271
  taskId: { type: 'string' },
1141
1272
  outcome: { type: 'string' },
1142
1273
  evidence: { type: 'array', items: { type: 'string' } },
1143
- timestamp: { type: 'string' }
1144
- }
1274
+ timestamp: { type: 'string' },
1275
+ },
1145
1276
  },
1146
- description: 'Actual deployment outcomes'
1277
+ description: 'Actual deployment outcomes',
1147
1278
  },
1148
1279
  cicdStatus: {
1149
1280
  type: 'object',
1150
- description: 'CI/CD pipeline status data'
1281
+ description: 'CI/CD pipeline status data',
1151
1282
  },
1152
1283
  environmentStatus: {
1153
1284
  type: 'object',
1154
- description: 'Environment status data'
1155
- }
1156
- }
1157
- }
1285
+ description: 'Environment status data',
1286
+ },
1287
+ },
1288
+ },
1158
1289
  },
1159
1290
  {
1160
1291
  name: 'check_ai_execution_status',
@@ -1162,8 +1293,8 @@ export class McpAdrAnalysisServer {
1162
1293
  inputSchema: {
1163
1294
  type: 'object',
1164
1295
  properties: {},
1165
- required: []
1166
- }
1296
+ required: [],
1297
+ },
1167
1298
  },
1168
1299
  {
1169
1300
  name: 'get_workflow_guidance',
@@ -1173,31 +1304,44 @@ export class McpAdrAnalysisServer {
1173
1304
  properties: {
1174
1305
  goal: {
1175
1306
  type: 'string',
1176
- description: 'What you want to accomplish (e.g., "analyze new project", "document existing decisions", "security audit", "modernize legacy system")'
1307
+ description: 'What you want to accomplish (e.g., "analyze new project", "document existing decisions", "security audit", "modernize legacy system")',
1177
1308
  },
1178
1309
  projectContext: {
1179
1310
  type: 'string',
1180
1311
  description: 'Current state of your project (e.g., "new project", "existing project with ADRs", "legacy codebase", "greenfield development")',
1181
- enum: ['new_project', 'existing_with_adrs', 'existing_without_adrs', 'legacy_codebase', 'greenfield', 'maintenance_mode', 'unknown']
1312
+ enum: [
1313
+ 'new_project',
1314
+ 'existing_with_adrs',
1315
+ 'existing_without_adrs',
1316
+ 'legacy_codebase',
1317
+ 'greenfield',
1318
+ 'maintenance_mode',
1319
+ 'unknown',
1320
+ ],
1182
1321
  },
1183
1322
  availableAssets: {
1184
1323
  type: 'array',
1185
1324
  items: { type: 'string' },
1186
- description: 'What assets you already have (e.g., ["PRD.md", "existing ADRs", "codebase", "documentation", "test suite"])'
1325
+ description: 'What assets you already have (e.g., ["PRD.md", "existing ADRs", "codebase", "documentation", "test suite"])',
1187
1326
  },
1188
1327
  timeframe: {
1189
1328
  type: 'string',
1190
1329
  description: 'Available time/effort level',
1191
- enum: ['quick_analysis', 'thorough_review', 'comprehensive_audit', 'ongoing_process']
1330
+ enum: [
1331
+ 'quick_analysis',
1332
+ 'thorough_review',
1333
+ 'comprehensive_audit',
1334
+ 'ongoing_process',
1335
+ ],
1192
1336
  },
1193
1337
  primaryConcerns: {
1194
1338
  type: 'array',
1195
1339
  items: { type: 'string' },
1196
- description: 'Main areas of concern (e.g., ["security", "performance", "maintainability", "scalability", "compliance"])'
1197
- }
1340
+ description: 'Main areas of concern (e.g., ["security", "performance", "maintainability", "scalability", "compliance"])',
1341
+ },
1198
1342
  },
1199
- required: ['goal', 'projectContext']
1200
- }
1343
+ required: ['goal', 'projectContext'],
1344
+ },
1201
1345
  },
1202
1346
  {
1203
1347
  name: 'get_development_guidance',
@@ -1208,47 +1352,55 @@ export class McpAdrAnalysisServer {
1208
1352
  developmentPhase: {
1209
1353
  type: 'string',
1210
1354
  description: 'Current development phase',
1211
- enum: ['planning', 'setup', 'implementation', 'testing', 'deployment', 'maintenance', 'refactoring']
1355
+ enum: [
1356
+ 'planning',
1357
+ 'setup',
1358
+ 'implementation',
1359
+ 'testing',
1360
+ 'deployment',
1361
+ 'maintenance',
1362
+ 'refactoring',
1363
+ ],
1212
1364
  },
1213
1365
  adrsToImplement: {
1214
1366
  type: 'array',
1215
1367
  items: { type: 'string' },
1216
- description: 'List of ADR titles or file paths that need to be implemented in code'
1368
+ description: 'List of ADR titles or file paths that need to be implemented in code',
1217
1369
  },
1218
1370
  technologyStack: {
1219
1371
  type: 'array',
1220
1372
  items: { type: 'string' },
1221
- description: 'Current technology stack (e.g., ["TypeScript", "React", "Node.js", "PostgreSQL", "Docker"])'
1373
+ description: 'Current technology stack (e.g., ["TypeScript", "React", "Node.js", "PostgreSQL", "Docker"])',
1222
1374
  },
1223
1375
  currentProgress: {
1224
1376
  type: 'string',
1225
- description: 'What has already been implemented or current state of development'
1377
+ description: 'What has already been implemented or current state of development',
1226
1378
  },
1227
1379
  teamContext: {
1228
1380
  type: 'object',
1229
1381
  properties: {
1230
1382
  size: {
1231
1383
  type: 'string',
1232
- enum: ['solo', 'small_team', 'medium_team', 'large_team']
1384
+ enum: ['solo', 'small_team', 'medium_team', 'large_team'],
1233
1385
  },
1234
1386
  experienceLevel: {
1235
1387
  type: 'string',
1236
- enum: ['junior', 'mixed', 'senior', 'expert']
1237
- }
1238
- }
1388
+ enum: ['junior', 'mixed', 'senior', 'expert'],
1389
+ },
1390
+ },
1239
1391
  },
1240
1392
  timeline: {
1241
1393
  type: 'string',
1242
- description: 'Development timeline or deadline constraints'
1394
+ description: 'Development timeline or deadline constraints',
1243
1395
  },
1244
1396
  focusAreas: {
1245
1397
  type: 'array',
1246
1398
  items: { type: 'string' },
1247
- description: 'Specific areas to focus on (e.g., ["API design", "database schema", "testing strategy", "deployment pipeline"])'
1248
- }
1399
+ description: 'Specific areas to focus on (e.g., ["API design", "database schema", "testing strategy", "deployment pipeline"])',
1400
+ },
1249
1401
  },
1250
- required: ['developmentPhase']
1251
- }
1402
+ required: ['developmentPhase'],
1403
+ },
1252
1404
  },
1253
1405
  {
1254
1406
  name: 'read_file',
@@ -1258,11 +1410,11 @@ export class McpAdrAnalysisServer {
1258
1410
  properties: {
1259
1411
  path: {
1260
1412
  type: 'string',
1261
- description: 'Path to the file to read'
1262
- }
1413
+ description: 'Path to the file to read',
1414
+ },
1263
1415
  },
1264
- required: ['path']
1265
- }
1416
+ required: ['path'],
1417
+ },
1266
1418
  },
1267
1419
  {
1268
1420
  name: 'write_file',
@@ -1272,15 +1424,15 @@ export class McpAdrAnalysisServer {
1272
1424
  properties: {
1273
1425
  path: {
1274
1426
  type: 'string',
1275
- description: 'Path to the file to write'
1427
+ description: 'Path to the file to write',
1276
1428
  },
1277
1429
  content: {
1278
1430
  type: 'string',
1279
- description: 'Content to write to the file'
1280
- }
1431
+ description: 'Content to write to the file',
1432
+ },
1281
1433
  },
1282
- required: ['path', 'content']
1283
- }
1434
+ required: ['path', 'content'],
1435
+ },
1284
1436
  },
1285
1437
  {
1286
1438
  name: 'list_directory',
@@ -1290,11 +1442,11 @@ export class McpAdrAnalysisServer {
1290
1442
  properties: {
1291
1443
  path: {
1292
1444
  type: 'string',
1293
- description: 'Path to the directory to list'
1294
- }
1445
+ description: 'Path to the directory to list',
1446
+ },
1295
1447
  },
1296
- required: ['path']
1297
- }
1448
+ required: ['path'],
1449
+ },
1298
1450
  },
1299
1451
  {
1300
1452
  name: 'manage_todo_json',
@@ -1304,175 +1456,191 @@ export class McpAdrAnalysisServer {
1304
1456
  properties: {
1305
1457
  operation: {
1306
1458
  type: 'string',
1307
- enum: ['create_task', 'update_task', 'bulk_update', 'get_tasks', 'get_analytics', 'import_adr_tasks', 'sync_knowledge_graph', 'sync_to_markdown', 'import_from_markdown'],
1308
- description: 'Operation to perform on TODO JSON backend'
1459
+ enum: [
1460
+ 'create_task',
1461
+ 'update_task',
1462
+ 'bulk_update',
1463
+ 'get_tasks',
1464
+ 'get_analytics',
1465
+ 'import_adr_tasks',
1466
+ 'sync_knowledge_graph',
1467
+ 'sync_to_markdown',
1468
+ 'import_from_markdown',
1469
+ ],
1470
+ description: 'Operation to perform on TODO JSON backend',
1309
1471
  },
1310
1472
  projectPath: {
1311
1473
  type: 'string',
1312
- description: 'Project root path (uses configured PROJECT_PATH if not provided)'
1474
+ description: 'Project root path (uses configured PROJECT_PATH if not provided)',
1313
1475
  },
1314
1476
  taskId: {
1315
1477
  type: 'string',
1316
- description: 'Task ID for update operations'
1478
+ description: 'Task ID for update operations',
1317
1479
  },
1318
1480
  title: {
1319
1481
  type: 'string',
1320
- description: 'Task title for create operations'
1482
+ description: 'Task title for create operations',
1321
1483
  },
1322
1484
  description: {
1323
1485
  type: 'string',
1324
- description: 'Task description'
1486
+ description: 'Task description',
1325
1487
  },
1326
1488
  priority: {
1327
1489
  type: 'string',
1328
1490
  enum: ['low', 'medium', 'high', 'critical'],
1329
1491
  default: 'medium',
1330
- description: 'Task priority level'
1492
+ description: 'Task priority level',
1331
1493
  },
1332
1494
  assignee: {
1333
1495
  type: 'string',
1334
- description: 'Task assignee'
1496
+ description: 'Task assignee',
1335
1497
  },
1336
1498
  dueDate: {
1337
1499
  type: 'string',
1338
- description: 'Due date (ISO string format)'
1500
+ description: 'Due date (ISO string format)',
1339
1501
  },
1340
1502
  category: {
1341
1503
  type: 'string',
1342
- description: 'Task category'
1504
+ description: 'Task category',
1343
1505
  },
1344
1506
  tags: {
1345
1507
  type: 'array',
1346
1508
  items: { type: 'string' },
1347
- description: 'Task tags'
1509
+ description: 'Task tags',
1348
1510
  },
1349
1511
  dependencies: {
1350
1512
  type: 'array',
1351
1513
  items: { type: 'string' },
1352
- description: 'Task dependencies (task IDs)'
1514
+ description: 'Task dependencies (task IDs)',
1353
1515
  },
1354
1516
  intentId: {
1355
1517
  type: 'string',
1356
- description: 'Link to knowledge graph intent'
1518
+ description: 'Link to knowledge graph intent',
1357
1519
  },
1358
1520
  linkedAdrs: {
1359
1521
  type: 'array',
1360
1522
  items: { type: 'string' },
1361
- description: 'Related ADR files'
1523
+ description: 'Related ADR files',
1362
1524
  },
1363
1525
  autoComplete: {
1364
1526
  type: 'boolean',
1365
1527
  default: false,
1366
- description: 'Auto-complete when criteria are met'
1528
+ description: 'Auto-complete when criteria are met',
1367
1529
  },
1368
1530
  completionCriteria: {
1369
1531
  type: 'string',
1370
- description: 'Auto-completion rules'
1532
+ description: 'Auto-completion rules',
1371
1533
  },
1372
1534
  updates: {
1373
1535
  type: 'object',
1374
1536
  properties: {
1375
1537
  title: { type: 'string' },
1376
1538
  description: { type: 'string' },
1377
- status: { type: 'string', enum: ['pending', 'in_progress', 'completed', 'blocked', 'cancelled'] },
1539
+ status: {
1540
+ type: 'string',
1541
+ enum: ['pending', 'in_progress', 'completed', 'blocked', 'cancelled'],
1542
+ },
1378
1543
  priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
1379
1544
  assignee: { type: 'string' },
1380
1545
  dueDate: { type: 'string' },
1381
1546
  progressPercentage: { type: 'number', minimum: 0, maximum: 100 },
1382
1547
  notes: { type: 'string' },
1383
- tags: { type: 'array', items: { type: 'string' } }
1548
+ tags: { type: 'array', items: { type: 'string' } },
1384
1549
  },
1385
- description: 'Fields to update for update operations'
1550
+ description: 'Fields to update for update operations',
1386
1551
  },
1387
1552
  reason: {
1388
1553
  type: 'string',
1389
- description: 'Reason for update (for changelog)'
1554
+ description: 'Reason for update (for changelog)',
1390
1555
  },
1391
1556
  filters: {
1392
1557
  type: 'object',
1393
1558
  properties: {
1394
- status: { type: 'string', enum: ['pending', 'in_progress', 'completed', 'blocked', 'cancelled'] },
1559
+ status: {
1560
+ type: 'string',
1561
+ enum: ['pending', 'in_progress', 'completed', 'blocked', 'cancelled'],
1562
+ },
1395
1563
  priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
1396
1564
  assignee: { type: 'string' },
1397
1565
  category: { type: 'string' },
1398
1566
  hasDeadline: { type: 'boolean' },
1399
1567
  overdue: { type: 'boolean' },
1400
- tags: { type: 'array', items: { type: 'string' } }
1568
+ tags: { type: 'array', items: { type: 'string' } },
1401
1569
  },
1402
- description: 'Filter criteria for get_tasks operation'
1570
+ description: 'Filter criteria for get_tasks operation',
1403
1571
  },
1404
1572
  sortBy: {
1405
1573
  type: 'string',
1406
1574
  enum: ['priority', 'dueDate', 'createdAt', 'updatedAt'],
1407
1575
  default: 'priority',
1408
- description: 'Sort field for get_tasks operation'
1576
+ description: 'Sort field for get_tasks operation',
1409
1577
  },
1410
1578
  sortOrder: {
1411
1579
  type: 'string',
1412
1580
  enum: ['asc', 'desc'],
1413
1581
  default: 'desc',
1414
- description: 'Sort order for get_tasks operation'
1582
+ description: 'Sort order for get_tasks operation',
1415
1583
  },
1416
1584
  limit: {
1417
1585
  type: 'number',
1418
- description: 'Maximum number of tasks to return'
1586
+ description: 'Maximum number of tasks to return',
1419
1587
  },
1420
1588
  timeframe: {
1421
1589
  type: 'string',
1422
1590
  enum: ['day', 'week', 'month', 'all'],
1423
1591
  default: 'week',
1424
- description: 'Analysis timeframe for analytics'
1592
+ description: 'Analysis timeframe for analytics',
1425
1593
  },
1426
1594
  includeVelocity: {
1427
1595
  type: 'boolean',
1428
1596
  default: true,
1429
- description: 'Include velocity metrics in analytics'
1597
+ description: 'Include velocity metrics in analytics',
1430
1598
  },
1431
1599
  includeScoring: {
1432
1600
  type: 'boolean',
1433
1601
  default: true,
1434
- description: 'Include scoring metrics in analytics'
1602
+ description: 'Include scoring metrics in analytics',
1435
1603
  },
1436
1604
  adrDirectory: {
1437
1605
  type: 'string',
1438
1606
  default: 'docs/adrs',
1439
- description: 'ADR directory path for imports'
1607
+ description: 'ADR directory path for imports',
1440
1608
  },
1441
1609
  preserveExisting: {
1442
1610
  type: 'boolean',
1443
1611
  default: true,
1444
- description: 'Keep existing tasks during imports'
1612
+ description: 'Keep existing tasks during imports',
1445
1613
  },
1446
1614
  autoLinkDependencies: {
1447
1615
  type: 'boolean',
1448
1616
  default: true,
1449
- description: 'Auto-detect task dependencies'
1617
+ description: 'Auto-detect task dependencies',
1450
1618
  },
1451
1619
  direction: {
1452
1620
  type: 'string',
1453
1621
  enum: ['to_kg', 'from_kg', 'bidirectional'],
1454
1622
  default: 'bidirectional',
1455
- description: 'Knowledge graph sync direction'
1623
+ description: 'Knowledge graph sync direction',
1456
1624
  },
1457
1625
  force: {
1458
1626
  type: 'boolean',
1459
1627
  default: false,
1460
- description: 'Force operation even if conflicts exist'
1628
+ description: 'Force operation even if conflicts exist',
1461
1629
  },
1462
1630
  mergeStrategy: {
1463
1631
  type: 'string',
1464
1632
  enum: ['overwrite', 'merge', 'preserve_json'],
1465
1633
  default: 'merge',
1466
- description: 'Merge strategy for imports'
1634
+ description: 'Merge strategy for imports',
1467
1635
  },
1468
1636
  backupExisting: {
1469
1637
  type: 'boolean',
1470
1638
  default: true,
1471
- description: 'Create backup before destructive operations'
1472
- }
1639
+ description: 'Create backup before destructive operations',
1640
+ },
1473
1641
  },
1474
- required: ['operation']
1475
- }
1642
+ required: ['operation'],
1643
+ },
1476
1644
  },
1477
1645
  {
1478
1646
  name: 'generate_deployment_guidance',
@@ -1483,65 +1651,75 @@ export class McpAdrAnalysisServer {
1483
1651
  adrDirectory: {
1484
1652
  type: 'string',
1485
1653
  default: 'docs/adrs',
1486
- description: 'Directory containing ADR files'
1654
+ description: 'Directory containing ADR files',
1487
1655
  },
1488
1656
  environment: {
1489
1657
  type: 'string',
1490
1658
  enum: ['development', 'staging', 'production', 'all'],
1491
1659
  default: 'production',
1492
- description: 'Target deployment environment'
1660
+ description: 'Target deployment environment',
1493
1661
  },
1494
1662
  format: {
1495
1663
  type: 'string',
1496
1664
  enum: ['markdown', 'scripts', 'structured', 'all'],
1497
1665
  default: 'markdown',
1498
- description: 'Output format for guidance'
1666
+ description: 'Output format for guidance',
1499
1667
  },
1500
1668
  projectPath: {
1501
1669
  type: 'string',
1502
- description: 'Project root path (optional, uses configured PROJECT_PATH if not provided)'
1670
+ description: 'Project root path (optional, uses configured PROJECT_PATH if not provided)',
1503
1671
  },
1504
1672
  includeScripts: {
1505
1673
  type: 'boolean',
1506
1674
  default: true,
1507
- description: 'Generate deployment scripts'
1675
+ description: 'Generate deployment scripts',
1508
1676
  },
1509
1677
  includeConfigs: {
1510
1678
  type: 'boolean',
1511
1679
  default: true,
1512
- description: 'Generate configuration files'
1680
+ description: 'Generate configuration files',
1513
1681
  },
1514
1682
  includeValidation: {
1515
1683
  type: 'boolean',
1516
1684
  default: true,
1517
- description: 'Include validation and health checks'
1685
+ description: 'Include validation and health checks',
1518
1686
  },
1519
1687
  technologyFilter: {
1520
1688
  type: 'array',
1521
1689
  items: {
1522
1690
  type: 'string',
1523
- enum: ['containerization', 'database', 'web-server', 'cache', 'message-queue', 'monitoring', 'security', 'ci-cd', 'infrastructure']
1691
+ enum: [
1692
+ 'containerization',
1693
+ 'database',
1694
+ 'web-server',
1695
+ 'cache',
1696
+ 'message-queue',
1697
+ 'monitoring',
1698
+ 'security',
1699
+ 'ci-cd',
1700
+ 'infrastructure',
1701
+ ],
1524
1702
  },
1525
- description: 'Filter by specific technology categories'
1703
+ description: 'Filter by specific technology categories',
1526
1704
  },
1527
1705
  customRequirements: {
1528
1706
  type: 'array',
1529
1707
  items: { type: 'string' },
1530
- description: 'Additional custom requirements'
1708
+ description: 'Additional custom requirements',
1531
1709
  },
1532
1710
  includeRollback: {
1533
1711
  type: 'boolean',
1534
1712
  default: true,
1535
- description: 'Include rollback procedures'
1713
+ description: 'Include rollback procedures',
1536
1714
  },
1537
1715
  generateFiles: {
1538
1716
  type: 'boolean',
1539
1717
  default: false,
1540
- description: 'Actually generate files (vs just guidance)'
1541
- }
1718
+ description: 'Actually generate files (vs just guidance)',
1719
+ },
1542
1720
  },
1543
- required: []
1544
- }
1721
+ required: [],
1722
+ },
1545
1723
  },
1546
1724
  {
1547
1725
  name: 'smart_git_push',
@@ -1551,11 +1729,11 @@ export class McpAdrAnalysisServer {
1551
1729
  properties: {
1552
1730
  branch: {
1553
1731
  type: 'string',
1554
- description: 'Target branch for push (optional, uses current branch if not specified)'
1732
+ description: 'Target branch for push (optional, uses current branch if not specified)',
1555
1733
  },
1556
1734
  message: {
1557
1735
  type: 'string',
1558
- description: 'Commit message (optional, commits staged files if provided)'
1736
+ description: 'Commit message (optional, commits staged files if provided)',
1559
1737
  },
1560
1738
  testResults: {
1561
1739
  type: 'object',
@@ -1563,36 +1741,36 @@ export class McpAdrAnalysisServer {
1563
1741
  properties: {
1564
1742
  success: {
1565
1743
  type: 'boolean',
1566
- description: 'Whether all tests passed'
1744
+ description: 'Whether all tests passed',
1567
1745
  },
1568
1746
  testsRun: {
1569
1747
  type: 'number',
1570
- description: 'Total number of tests executed'
1748
+ description: 'Total number of tests executed',
1571
1749
  },
1572
1750
  testsPassed: {
1573
1751
  type: 'number',
1574
- description: 'Number of tests that passed'
1752
+ description: 'Number of tests that passed',
1575
1753
  },
1576
1754
  testsFailed: {
1577
1755
  type: 'number',
1578
- description: 'Number of tests that failed'
1756
+ description: 'Number of tests that failed',
1579
1757
  },
1580
1758
  duration: {
1581
1759
  type: 'number',
1582
- description: 'Test execution duration in seconds'
1760
+ description: 'Test execution duration in seconds',
1583
1761
  },
1584
1762
  command: {
1585
1763
  type: 'string',
1586
- description: 'Test command that was executed by AI'
1764
+ description: 'Test command that was executed by AI',
1587
1765
  },
1588
1766
  output: {
1589
1767
  type: 'string',
1590
- description: 'Test execution output'
1768
+ description: 'Test execution output',
1591
1769
  },
1592
1770
  failureDetails: {
1593
1771
  type: 'array',
1594
1772
  items: { type: 'string' },
1595
- description: 'Details of test failures'
1773
+ description: 'Details of test failures',
1596
1774
  },
1597
1775
  testTypes: {
1598
1776
  type: 'object',
@@ -1601,34 +1779,34 @@ export class McpAdrAnalysisServer {
1601
1779
  type: 'object',
1602
1780
  properties: {
1603
1781
  passed: { type: 'number' },
1604
- failed: { type: 'number' }
1605
- }
1606
- }
1607
- }
1782
+ failed: { type: 'number' },
1783
+ },
1784
+ },
1785
+ },
1608
1786
  },
1609
- required: ['success', 'testsRun', 'testsPassed', 'testsFailed']
1787
+ required: ['success', 'testsRun', 'testsPassed', 'testsFailed'],
1610
1788
  },
1611
1789
  skipSecurity: {
1612
1790
  type: 'boolean',
1613
1791
  default: false,
1614
- description: 'Skip security scanning (NOT RECOMMENDED)'
1792
+ description: 'Skip security scanning (NOT RECOMMENDED)',
1615
1793
  },
1616
1794
  dryRun: {
1617
1795
  type: 'boolean',
1618
1796
  default: false,
1619
- description: 'Show what would be pushed without actually pushing'
1797
+ description: 'Show what would be pushed without actually pushing',
1620
1798
  },
1621
1799
  projectPath: {
1622
1800
  type: 'string',
1623
- description: 'Path to project directory (defaults to current working directory)'
1801
+ description: 'Path to project directory (defaults to current working directory)',
1624
1802
  },
1625
1803
  forceUnsafe: {
1626
1804
  type: 'boolean',
1627
1805
  default: false,
1628
- description: 'Override security blocks and test failures (DANGEROUS)'
1629
- }
1630
- }
1631
- }
1806
+ description: 'Override security blocks and test failures (DANGEROUS)',
1807
+ },
1808
+ },
1809
+ },
1632
1810
  },
1633
1811
  {
1634
1812
  name: 'deployment_readiness',
@@ -1638,222 +1816,267 @@ export class McpAdrAnalysisServer {
1638
1816
  properties: {
1639
1817
  operation: {
1640
1818
  type: 'string',
1641
- enum: ['check_readiness', 'validate_production', 'test_validation', 'deployment_history', 'full_audit', 'emergency_override'],
1642
- description: 'Type of deployment readiness check to perform'
1819
+ enum: [
1820
+ 'check_readiness',
1821
+ 'validate_production',
1822
+ 'test_validation',
1823
+ 'deployment_history',
1824
+ 'full_audit',
1825
+ 'emergency_override',
1826
+ ],
1827
+ description: 'Type of deployment readiness check to perform',
1643
1828
  },
1644
1829
  projectPath: {
1645
1830
  type: 'string',
1646
- description: 'Path to project directory (defaults to current working directory)'
1831
+ description: 'Path to project directory (defaults to current working directory)',
1647
1832
  },
1648
1833
  targetEnvironment: {
1649
1834
  type: 'string',
1650
1835
  enum: ['staging', 'production', 'integration'],
1651
1836
  default: 'production',
1652
- description: 'Target deployment environment'
1837
+ description: 'Target deployment environment',
1653
1838
  },
1654
1839
  strictMode: {
1655
1840
  type: 'boolean',
1656
1841
  default: true,
1657
- description: 'Enable strict validation (recommended for production)'
1842
+ description: 'Enable strict validation (recommended for production)',
1658
1843
  },
1659
1844
  allowMockCode: {
1660
1845
  type: 'boolean',
1661
1846
  default: false,
1662
- description: 'Allow mock code in deployment (NOT RECOMMENDED)'
1847
+ description: 'Allow mock code in deployment (NOT RECOMMENDED)',
1663
1848
  },
1664
1849
  productionCodeThreshold: {
1665
1850
  type: 'number',
1666
1851
  default: 85,
1667
- description: 'Minimum production code quality score (0-100)'
1852
+ description: 'Minimum production code quality score (0-100)',
1668
1853
  },
1669
1854
  mockCodeMaxAllowed: {
1670
1855
  type: 'number',
1671
1856
  default: 0,
1672
- description: 'Maximum mock code indicators allowed'
1857
+ description: 'Maximum mock code indicators allowed',
1673
1858
  },
1674
1859
  maxTestFailures: {
1675
1860
  type: 'number',
1676
1861
  default: 0,
1677
- description: 'Maximum test failures allowed (0 = zero tolerance)'
1862
+ description: 'Maximum test failures allowed (0 = zero tolerance)',
1678
1863
  },
1679
1864
  requireTestCoverage: {
1680
1865
  type: 'number',
1681
1866
  default: 80,
1682
- description: 'Minimum test coverage percentage required'
1867
+ description: 'Minimum test coverage percentage required',
1683
1868
  },
1684
1869
  blockOnFailingTests: {
1685
1870
  type: 'boolean',
1686
1871
  default: true,
1687
- description: 'Block deployment if tests are failing'
1872
+ description: 'Block deployment if tests are failing',
1688
1873
  },
1689
1874
  testSuiteRequired: {
1690
1875
  type: 'array',
1691
1876
  items: { type: 'string' },
1692
1877
  default: [],
1693
- description: 'Required test suites that must pass'
1878
+ description: 'Required test suites that must pass',
1694
1879
  },
1695
1880
  maxRecentFailures: {
1696
1881
  type: 'number',
1697
1882
  default: 2,
1698
- description: 'Maximum recent deployment failures allowed'
1883
+ description: 'Maximum recent deployment failures allowed',
1699
1884
  },
1700
1885
  deploymentSuccessThreshold: {
1701
1886
  type: 'number',
1702
1887
  default: 80,
1703
- description: 'Minimum deployment success rate required (%)'
1888
+ description: 'Minimum deployment success rate required (%)',
1704
1889
  },
1705
1890
  blockOnRecentFailures: {
1706
1891
  type: 'boolean',
1707
1892
  default: true,
1708
- description: 'Block if recent deployments failed'
1893
+ description: 'Block if recent deployments failed',
1709
1894
  },
1710
1895
  rollbackFrequencyThreshold: {
1711
1896
  type: 'number',
1712
1897
  default: 20,
1713
- description: 'Maximum rollback frequency allowed (%)'
1898
+ description: 'Maximum rollback frequency allowed (%)',
1714
1899
  },
1715
1900
  requireAdrCompliance: {
1716
1901
  type: 'boolean',
1717
1902
  default: true,
1718
- description: 'Require ADR compliance validation'
1903
+ description: 'Require ADR compliance validation',
1719
1904
  },
1720
1905
  integrateTodoTasks: {
1721
1906
  type: 'boolean',
1722
1907
  default: true,
1723
- description: 'Auto-create blocking tasks for issues'
1908
+ description: 'Auto-create blocking tasks for issues',
1724
1909
  },
1725
1910
  updateHealthScoring: {
1726
1911
  type: 'boolean',
1727
1912
  default: true,
1728
- description: 'Update project health scores'
1913
+ description: 'Update project health scores',
1729
1914
  },
1730
1915
  triggerSmartGitPush: {
1731
1916
  type: 'boolean',
1732
1917
  default: false,
1733
- description: 'Trigger smart git push validation'
1918
+ description: 'Trigger smart git push validation',
1734
1919
  },
1735
1920
  emergencyBypass: {
1736
1921
  type: 'boolean',
1737
1922
  default: false,
1738
- description: 'Emergency bypass for critical fixes'
1923
+ description: 'Emergency bypass for critical fixes',
1739
1924
  },
1740
1925
  businessJustification: {
1741
1926
  type: 'string',
1742
- description: 'Business justification for overrides (required for emergency_override)'
1927
+ description: 'Business justification for overrides (required for emergency_override)',
1743
1928
  },
1744
1929
  approvalRequired: {
1745
1930
  type: 'boolean',
1746
1931
  default: true,
1747
- description: 'Require approval for overrides'
1748
- }
1932
+ description: 'Require approval for overrides',
1933
+ },
1934
+ enableMemoryIntegration: {
1935
+ type: 'boolean',
1936
+ description: 'Enable memory entity storage for deployment assessment tracking and historical analysis',
1937
+ default: true,
1938
+ },
1939
+ migrateExistingHistory: {
1940
+ type: 'boolean',
1941
+ description: 'Migrate existing JSON-based deployment history to memory entities',
1942
+ default: true,
1943
+ },
1749
1944
  },
1750
- required: ['operation']
1751
- }
1945
+ required: ['operation'],
1946
+ },
1752
1947
  },
1753
1948
  {
1754
1949
  name: 'troubleshoot_guided_workflow',
1755
- description: 'Structured failure analysis and test plan generation - provide JSON failure info to get specific test commands',
1950
+ description: 'Structured failure analysis and test plan generation with memory integration for troubleshooting session tracking and intelligent ADR/research suggestion capabilities - provide JSON failure info to get specific test commands',
1756
1951
  inputSchema: {
1757
1952
  type: 'object',
1758
1953
  properties: {
1759
1954
  operation: {
1760
1955
  type: 'string',
1761
1956
  enum: ['analyze_failure', 'generate_test_plan', 'full_workflow'],
1762
- description: 'Type of troubleshooting operation'
1957
+ description: 'Type of troubleshooting operation',
1763
1958
  },
1764
1959
  failure: {
1765
1960
  type: 'object',
1766
1961
  properties: {
1767
1962
  failureType: {
1768
1963
  type: 'string',
1769
- enum: ['test_failure', 'deployment_failure', 'build_failure', 'runtime_error', 'performance_issue', 'security_issue', 'other'],
1770
- description: 'Type of failure'
1964
+ enum: [
1965
+ 'test_failure',
1966
+ 'deployment_failure',
1967
+ 'build_failure',
1968
+ 'runtime_error',
1969
+ 'performance_issue',
1970
+ 'security_issue',
1971
+ 'other',
1972
+ ],
1973
+ description: 'Type of failure',
1771
1974
  },
1772
1975
  failureDetails: {
1773
1976
  type: 'object',
1774
1977
  properties: {
1775
1978
  command: {
1776
1979
  type: 'string',
1777
- description: 'Command that failed (optional)'
1980
+ description: 'Command that failed (optional)',
1778
1981
  },
1779
1982
  exitCode: {
1780
1983
  type: 'number',
1781
- description: 'Exit code of failed process (optional)'
1984
+ description: 'Exit code of failed process (optional)',
1782
1985
  },
1783
1986
  errorMessage: {
1784
1987
  type: 'string',
1785
- description: 'Primary error message'
1988
+ description: 'Primary error message',
1786
1989
  },
1787
1990
  stackTrace: {
1788
1991
  type: 'string',
1789
- description: 'Stack trace if available (optional)'
1992
+ description: 'Stack trace if available (optional)',
1790
1993
  },
1791
1994
  logOutput: {
1792
1995
  type: 'string',
1793
- description: 'Relevant log output (optional)'
1996
+ description: 'Relevant log output (optional)',
1794
1997
  },
1795
1998
  environment: {
1796
1999
  type: 'string',
1797
- description: 'Environment where failure occurred (optional)'
2000
+ description: 'Environment where failure occurred (optional)',
1798
2001
  },
1799
2002
  timestamp: {
1800
2003
  type: 'string',
1801
- description: 'When the failure occurred (optional)'
2004
+ description: 'When the failure occurred (optional)',
1802
2005
  },
1803
2006
  affectedFiles: {
1804
2007
  type: 'array',
1805
2008
  items: { type: 'string' },
1806
- description: 'Files involved in the failure (optional)'
1807
- }
2009
+ description: 'Files involved in the failure (optional)',
2010
+ },
1808
2011
  },
1809
2012
  required: ['errorMessage'],
1810
- description: 'Detailed failure information'
2013
+ description: 'Detailed failure information',
1811
2014
  },
1812
2015
  context: {
1813
2016
  type: 'object',
1814
2017
  properties: {
1815
2018
  recentChanges: {
1816
2019
  type: 'string',
1817
- description: 'Recent changes that might be related (optional)'
2020
+ description: 'Recent changes that might be related (optional)',
1818
2021
  },
1819
2022
  reproducible: {
1820
2023
  type: 'boolean',
1821
- description: 'Whether the failure is reproducible (optional)'
2024
+ description: 'Whether the failure is reproducible (optional)',
1822
2025
  },
1823
2026
  frequency: {
1824
2027
  type: 'string',
1825
- description: 'How often this failure occurs (optional)'
2028
+ description: 'How often this failure occurs (optional)',
1826
2029
  },
1827
2030
  impact: {
1828
2031
  type: 'string',
1829
2032
  enum: ['low', 'medium', 'high', 'critical'],
1830
- description: 'Impact level of the failure (optional)'
1831
- }
2033
+ description: 'Impact level of the failure (optional)',
2034
+ },
1832
2035
  },
1833
- description: 'Additional context about the failure (optional)'
1834
- }
2036
+ description: 'Additional context about the failure (optional)',
2037
+ },
1835
2038
  },
1836
2039
  required: ['failureType', 'failureDetails'],
1837
- description: 'Structured failure information (required for analyze_failure and generate_test_plan)'
2040
+ description: 'Structured failure information (required for analyze_failure and generate_test_plan)',
1838
2041
  },
1839
2042
  projectPath: {
1840
2043
  type: 'string',
1841
- description: 'Path to project directory (optional)'
2044
+ description: 'Path to project directory (optional)',
1842
2045
  },
1843
2046
  adrDirectory: {
1844
2047
  type: 'string',
1845
2048
  description: 'ADR directory path',
1846
- default: 'docs/adrs'
2049
+ default: 'docs/adrs',
1847
2050
  },
1848
2051
  todoPath: {
1849
2052
  type: 'string',
1850
2053
  description: 'Path to TODO.md file',
1851
- default: 'TODO.md'
2054
+ default: 'TODO.md',
2055
+ },
2056
+ enableMemoryIntegration: {
2057
+ type: 'boolean',
2058
+ description: 'Enable memory entity storage for troubleshooting session tracking and pattern recognition',
2059
+ default: true,
2060
+ },
2061
+ enablePatternRecognition: {
2062
+ type: 'boolean',
2063
+ description: 'Enable automatic pattern recognition and failure classification',
2064
+ default: true,
2065
+ },
2066
+ enableAdrSuggestion: {
2067
+ type: 'boolean',
2068
+ description: 'Enable automatic ADR suggestion based on recurring failures',
2069
+ default: true,
2070
+ },
2071
+ enableResearchGeneration: {
2072
+ type: 'boolean',
2073
+ description: 'Enable automatic research question generation for persistent problems',
2074
+ default: true,
1852
2075
  },
1853
- conversationContext: CONVERSATION_CONTEXT_SCHEMA
2076
+ conversationContext: CONVERSATION_CONTEXT_SCHEMA,
1854
2077
  },
1855
- required: ['operation']
1856
- }
2078
+ required: ['operation'],
2079
+ },
1857
2080
  },
1858
2081
  {
1859
2082
  name: 'smart_score',
@@ -1863,70 +2086,91 @@ export class McpAdrAnalysisServer {
1863
2086
  properties: {
1864
2087
  operation: {
1865
2088
  type: 'string',
1866
- enum: ['recalculate_scores', 'sync_scores', 'diagnose_scores', 'optimize_weights', 'reset_scores', 'get_score_trends', 'get_intent_scores'],
1867
- description: 'Smart scoring operation to perform'
2089
+ enum: [
2090
+ 'recalculate_scores',
2091
+ 'sync_scores',
2092
+ 'diagnose_scores',
2093
+ 'optimize_weights',
2094
+ 'reset_scores',
2095
+ 'get_score_trends',
2096
+ 'get_intent_scores',
2097
+ ],
2098
+ description: 'Smart scoring operation to perform',
1868
2099
  },
1869
2100
  projectPath: {
1870
2101
  type: 'string',
1871
- description: 'Path to project directory'
2102
+ description: 'Path to project directory',
1872
2103
  },
1873
2104
  components: {
1874
2105
  type: 'array',
1875
2106
  items: {
1876
2107
  type: 'string',
1877
- enum: ['task_completion', 'deployment_readiness', 'architecture_compliance', 'security_posture', 'code_quality', 'all']
2108
+ enum: [
2109
+ 'task_completion',
2110
+ 'deployment_readiness',
2111
+ 'architecture_compliance',
2112
+ 'security_posture',
2113
+ 'code_quality',
2114
+ 'all',
2115
+ ],
1878
2116
  },
1879
2117
  default: ['all'],
1880
- description: 'Score components to recalculate (for recalculate_scores operation)'
2118
+ description: 'Score components to recalculate (for recalculate_scores operation)',
1881
2119
  },
1882
2120
  forceUpdate: {
1883
2121
  type: 'boolean',
1884
2122
  default: false,
1885
- description: 'Force update even if data is fresh'
2123
+ description: 'Force update even if data is fresh',
1886
2124
  },
1887
2125
  updateSources: {
1888
2126
  type: 'boolean',
1889
2127
  default: true,
1890
- description: 'Trigger source tool updates before recalculating'
2128
+ description: 'Trigger source tool updates before recalculating',
1891
2129
  },
1892
2130
  todoPath: {
1893
2131
  type: 'string',
1894
2132
  default: 'TODO.md',
1895
- description: 'Path to TODO.md file (for sync_scores operation)'
2133
+ description: 'Path to TODO.md file (for sync_scores operation)',
1896
2134
  },
1897
2135
  triggerTools: {
1898
2136
  type: 'array',
1899
2137
  items: {
1900
2138
  type: 'string',
1901
- enum: ['manage_todo_json', 'smart_git_push', 'compare_adr_progress', 'analyze_content_security', 'validate_rules']
2139
+ enum: [
2140
+ 'manage_todo_json',
2141
+ 'smart_git_push',
2142
+ 'compare_adr_progress',
2143
+ 'analyze_content_security',
2144
+ 'validate_rules',
2145
+ ],
1902
2146
  },
1903
- description: 'Tools to trigger for fresh data (for sync_scores operation)'
2147
+ description: 'Tools to trigger for fresh data (for sync_scores operation)',
1904
2148
  },
1905
2149
  rebalanceWeights: {
1906
2150
  type: 'boolean',
1907
2151
  default: false,
1908
- description: 'Recalculate optimal scoring weights (for sync_scores operation)'
2152
+ description: 'Recalculate optimal scoring weights (for sync_scores operation)',
1909
2153
  },
1910
2154
  includeHistory: {
1911
2155
  type: 'boolean',
1912
2156
  default: true,
1913
- description: 'Include score history analysis (for diagnose_scores operation)'
2157
+ description: 'Include score history analysis (for diagnose_scores operation)',
1914
2158
  },
1915
2159
  checkDataFreshness: {
1916
2160
  type: 'boolean',
1917
2161
  default: true,
1918
- description: 'Validate data freshness across tools (for diagnose_scores operation)'
2162
+ description: 'Validate data freshness across tools (for diagnose_scores operation)',
1919
2163
  },
1920
2164
  suggestImprovements: {
1921
2165
  type: 'boolean',
1922
2166
  default: true,
1923
- description: 'Provide score improvement suggestions (for diagnose_scores operation)'
2167
+ description: 'Provide score improvement suggestions (for diagnose_scores operation)',
1924
2168
  },
1925
2169
  analysisMode: {
1926
2170
  type: 'string',
1927
2171
  enum: ['current_state', 'historical_data', 'project_type'],
1928
2172
  default: 'current_state',
1929
- description: 'Method for weight optimization (for optimize_weights operation)'
2173
+ description: 'Method for weight optimization (for optimize_weights operation)',
1930
2174
  },
1931
2175
  customWeights: {
1932
2176
  type: 'object',
@@ -1935,38 +2179,45 @@ export class McpAdrAnalysisServer {
1935
2179
  deploymentReadiness: { type: 'number', minimum: 0, maximum: 1 },
1936
2180
  architectureCompliance: { type: 'number', minimum: 0, maximum: 1 },
1937
2181
  securityPosture: { type: 'number', minimum: 0, maximum: 1 },
1938
- codeQuality: { type: 'number', minimum: 0, maximum: 1 }
2182
+ codeQuality: { type: 'number', minimum: 0, maximum: 1 },
1939
2183
  },
1940
- description: 'Custom weight overrides (for optimize_weights operation)'
2184
+ description: 'Custom weight overrides (for optimize_weights operation)',
1941
2185
  },
1942
2186
  previewOnly: {
1943
2187
  type: 'boolean',
1944
2188
  default: false,
1945
- description: 'Preview changes without applying (for optimize_weights operation)'
2189
+ description: 'Preview changes without applying (for optimize_weights operation)',
1946
2190
  },
1947
2191
  component: {
1948
2192
  type: 'string',
1949
- enum: ['task_completion', 'deployment_readiness', 'architecture_compliance', 'security_posture', 'code_quality', 'all'],
2193
+ enum: [
2194
+ 'task_completion',
2195
+ 'deployment_readiness',
2196
+ 'architecture_compliance',
2197
+ 'security_posture',
2198
+ 'code_quality',
2199
+ 'all',
2200
+ ],
1950
2201
  default: 'all',
1951
- description: 'Score component to reset (for reset_scores operation)'
2202
+ description: 'Score component to reset (for reset_scores operation)',
1952
2203
  },
1953
2204
  preserveHistory: {
1954
2205
  type: 'boolean',
1955
2206
  default: true,
1956
- description: 'Preserve score history in backup (for reset_scores operation)'
2207
+ description: 'Preserve score history in backup (for reset_scores operation)',
1957
2208
  },
1958
2209
  recalculateAfterReset: {
1959
2210
  type: 'boolean',
1960
2211
  default: true,
1961
- description: 'Immediately recalculate after reset (for reset_scores operation)'
2212
+ description: 'Immediately recalculate after reset (for reset_scores operation)',
1962
2213
  },
1963
2214
  intentId: {
1964
2215
  type: 'string',
1965
- description: 'Intent ID to get score trends for (for get_intent_scores operation)'
1966
- }
2216
+ description: 'Intent ID to get score trends for (for get_intent_scores operation)',
2217
+ },
1967
2218
  },
1968
- required: ['operation', 'projectPath']
1969
- }
2219
+ required: ['operation', 'projectPath'],
2220
+ },
1970
2221
  },
1971
2222
  {
1972
2223
  name: 'mcp_planning',
@@ -1976,20 +2227,27 @@ export class McpAdrAnalysisServer {
1976
2227
  properties: {
1977
2228
  operation: {
1978
2229
  type: 'string',
1979
- enum: ['create_project', 'manage_phases', 'track_progress', 'manage_resources', 'risk_analysis', 'generate_reports'],
1980
- description: 'Project planning operation to perform'
2230
+ enum: [
2231
+ 'create_project',
2232
+ 'manage_phases',
2233
+ 'track_progress',
2234
+ 'manage_resources',
2235
+ 'risk_analysis',
2236
+ 'generate_reports',
2237
+ ],
2238
+ description: 'Project planning operation to perform',
1981
2239
  },
1982
2240
  projectPath: {
1983
2241
  type: 'string',
1984
- description: 'Project root path'
2242
+ description: 'Project root path',
1985
2243
  },
1986
2244
  projectName: {
1987
2245
  type: 'string',
1988
- description: 'Project name (for create_project operation)'
2246
+ description: 'Project name (for create_project operation)',
1989
2247
  },
1990
2248
  description: {
1991
2249
  type: 'string',
1992
- description: 'Project description (for create_project operation)'
2250
+ description: 'Project description (for create_project operation)',
1993
2251
  },
1994
2252
  phases: {
1995
2253
  type: 'array',
@@ -2001,17 +2259,17 @@ export class McpAdrAnalysisServer {
2001
2259
  dependencies: {
2002
2260
  type: 'array',
2003
2261
  items: { type: 'string' },
2004
- default: []
2262
+ default: [],
2005
2263
  },
2006
2264
  milestones: {
2007
2265
  type: 'array',
2008
2266
  items: { type: 'string' },
2009
- default: []
2010
- }
2267
+ default: [],
2268
+ },
2011
2269
  },
2012
- required: ['name', 'duration']
2270
+ required: ['name', 'duration'],
2013
2271
  },
2014
- description: 'Initial project phases (for create_project operation)'
2272
+ description: 'Initial project phases (for create_project operation)',
2015
2273
  },
2016
2274
  team: {
2017
2275
  type: 'array',
@@ -2023,33 +2281,43 @@ export class McpAdrAnalysisServer {
2023
2281
  skills: {
2024
2282
  type: 'array',
2025
2283
  items: { type: 'string' },
2026
- default: []
2284
+ default: [],
2027
2285
  },
2028
- capacity: { type: 'string' }
2286
+ capacity: { type: 'string' },
2029
2287
  },
2030
- required: ['name', 'role', 'capacity']
2288
+ required: ['name', 'role', 'capacity'],
2031
2289
  },
2032
2290
  default: [],
2033
- description: 'Team structure (for create_project operation)'
2291
+ description: 'Team structure (for create_project operation)',
2034
2292
  },
2035
2293
  importFromAdrs: {
2036
2294
  type: 'boolean',
2037
2295
  default: true,
2038
- description: 'Import phases from existing ADRs (for create_project operation)'
2296
+ description: 'Import phases from existing ADRs (for create_project operation)',
2039
2297
  },
2040
2298
  importFromTodos: {
2041
2299
  type: 'boolean',
2042
2300
  default: true,
2043
- description: 'Import tasks from TODO system (for create_project operation)'
2301
+ description: 'Import tasks from TODO system (for create_project operation)',
2044
2302
  },
2045
2303
  action: {
2046
2304
  type: 'string',
2047
- enum: ['list', 'create', 'update', 'delete', 'transition', 'add', 'remove', 'allocate', 'optimize'],
2048
- description: 'Management action (for manage_phases/manage_resources operations)'
2305
+ enum: [
2306
+ 'list',
2307
+ 'create',
2308
+ 'update',
2309
+ 'delete',
2310
+ 'transition',
2311
+ 'add',
2312
+ 'remove',
2313
+ 'allocate',
2314
+ 'optimize',
2315
+ ],
2316
+ description: 'Management action (for manage_phases/manage_resources operations)',
2049
2317
  },
2050
2318
  phaseId: {
2051
2319
  type: 'string',
2052
- description: 'Phase ID for phase operations'
2320
+ description: 'Phase ID for phase operations',
2053
2321
  },
2054
2322
  phaseData: {
2055
2323
  type: 'object',
@@ -2059,49 +2327,69 @@ export class McpAdrAnalysisServer {
2059
2327
  estimatedDuration: { type: 'string' },
2060
2328
  dependencies: {
2061
2329
  type: 'array',
2062
- items: { type: 'string' }
2330
+ items: { type: 'string' },
2063
2331
  },
2064
2332
  milestones: {
2065
2333
  type: 'array',
2066
- items: { type: 'string' }
2334
+ items: { type: 'string' },
2067
2335
  },
2068
2336
  linkedAdrs: {
2069
2337
  type: 'array',
2070
- items: { type: 'string' }
2071
- }
2338
+ items: { type: 'string' },
2339
+ },
2072
2340
  },
2073
- description: 'Phase data for create/update operations'
2341
+ description: 'Phase data for create/update operations',
2074
2342
  },
2075
2343
  targetStatus: {
2076
2344
  type: 'string',
2077
2345
  enum: ['planning', 'active', 'completed', 'blocked', 'cancelled'],
2078
- description: 'Target status for phase transition'
2346
+ description: 'Target status for phase transition',
2079
2347
  },
2080
2348
  reportType: {
2081
2349
  type: 'string',
2082
- enum: ['summary', 'detailed', 'gantt', 'milestones', 'risks', 'executive', 'status', 'health', 'team_performance', 'milestone_tracking'],
2350
+ enum: [
2351
+ 'summary',
2352
+ 'detailed',
2353
+ 'gantt',
2354
+ 'milestones',
2355
+ 'risks',
2356
+ 'executive',
2357
+ 'status',
2358
+ 'health',
2359
+ 'team_performance',
2360
+ 'milestone_tracking',
2361
+ ],
2083
2362
  default: 'summary',
2084
- description: 'Type of progress report or generated report'
2363
+ description: 'Type of progress report or generated report',
2085
2364
  },
2086
2365
  timeframe: {
2087
2366
  type: 'string',
2088
- enum: ['current', 'weekly', 'monthly', 'quarterly', 'week', 'month', 'quarter', 'project'],
2367
+ enum: [
2368
+ 'current',
2369
+ 'weekly',
2370
+ 'monthly',
2371
+ 'quarterly',
2372
+ 'week',
2373
+ 'month',
2374
+ 'quarter',
2375
+ 'project',
2376
+ ],
2089
2377
  default: 'current',
2090
- description: 'Time frame for reports and tracking'
2378
+ description: 'Time frame for reports and tracking',
2091
2379
  },
2092
2380
  includeVisuals: {
2093
2381
  type: 'boolean',
2094
2382
  default: true,
2095
- description: 'Include visual progress indicators'
2383
+ description: 'Include visual progress indicators',
2096
2384
  },
2097
2385
  updateTaskProgress: {
2098
2386
  type: 'boolean',
2099
2387
  default: true,
2100
- description: 'Sync progress from TODO system'
2388
+ description: 'Sync progress from TODO system',
2101
2389
  },
2102
2390
  memberId: {
2103
2391
  type: 'string',
2104
- description: 'Team member ID for resource operations'
2392
+ description: 'Team member ID for resource operations',
2105
2393
  },
2106
2394
  memberData: {
2107
2395
  type: 'object',
@@ -2110,11 +2398,11 @@ export class McpAdrAnalysisServer {
2110
2398
  role: { type: 'string' },
2111
2399
  skills: {
2112
2400
  type: 'array',
2113
- items: { type: 'string' }
2401
+ items: { type: 'string' },
2114
2402
  },
2115
- capacity: { type: 'string' }
2403
+ capacity: { type: 'string' },
2116
2404
  },
2117
- description: 'Team member data for resource operations'
2405
+ description: 'Team member data for resource operations',
2118
2406
  },
2119
2407
  allocationData: {
2120
2408
  type: 'object',
@@ -2123,52 +2411,52 @@ export class McpAdrAnalysisServer {
2123
2411
  allocation: {
2124
2412
  type: 'number',
2125
2413
  minimum: 0,
2126
- maximum: 100
2127
- }
2414
+ maximum: 100,
2415
+ },
2128
2416
  },
2129
2417
  required: ['phaseId', 'allocation'],
2130
- description: 'Resource allocation data'
2418
+ description: 'Resource allocation data',
2131
2419
  },
2132
2420
  analysisType: {
2133
2421
  type: 'string',
2134
2422
  enum: ['automated', 'manual', 'comprehensive'],
2135
2423
  default: 'comprehensive',
2136
- description: 'Type of risk analysis'
2424
+ description: 'Type of risk analysis',
2137
2425
  },
2138
2426
  includeAdrRisks: {
2139
2427
  type: 'boolean',
2140
2428
  default: true,
2141
- description: 'Analyze risks from ADR complexity'
2429
+ description: 'Analyze risks from ADR complexity',
2142
2430
  },
2143
2431
  includeDependencyRisks: {
2144
2432
  type: 'boolean',
2145
2433
  default: true,
2146
- description: 'Analyze dependency chain risks'
2434
+ description: 'Analyze dependency chain risks',
2147
2435
  },
2148
2436
  includeResourceRisks: {
2149
2437
  type: 'boolean',
2150
2438
  default: true,
2151
- description: 'Analyze resource allocation risks'
2439
+ description: 'Analyze resource allocation risks',
2152
2440
  },
2153
2441
  generateMitigation: {
2154
2442
  type: 'boolean',
2155
2443
  default: true,
2156
- description: 'Generate mitigation strategies'
2444
+ description: 'Generate mitigation strategies',
2157
2445
  },
2158
2446
  format: {
2159
2447
  type: 'string',
2160
2448
  enum: ['markdown', 'json', 'html'],
2161
2449
  default: 'markdown',
2162
- description: 'Report output format'
2450
+ description: 'Report output format',
2163
2451
  },
2164
2452
  includeCharts: {
2165
2453
  type: 'boolean',
2166
2454
  default: true,
2167
- description: 'Include progress charts and graphs'
2168
- }
2455
+ description: 'Include progress charts and graphs',
2456
+ },
2169
2457
  },
2170
- required: ['operation', 'projectPath']
2171
- }
2458
+ required: ['operation', 'projectPath'],
2459
+ },
2172
2460
  },
2173
2461
  {
2174
2462
  name: 'interactive_adr_planning',
@@ -2191,37 +2479,228 @@ export class McpAdrAnalysisServer {
2191
2479
  'update_todos',
2192
2480
  'get_guidance',
2193
2481
  'save_session',
2194
- 'complete_session'
2482
+ 'complete_session',
2195
2483
  ],
2196
- description: 'Interactive planning operation to perform'
2484
+ description: 'Interactive planning operation to perform',
2197
2485
  },
2198
2486
  sessionId: {
2199
2487
  type: 'string',
2200
- description: 'Planning session ID (required for all operations except start_session)'
2488
+ description: 'Planning session ID (required for all operations except start_session)',
2201
2489
  },
2202
2490
  input: {
2203
2491
  type: 'string',
2204
- description: 'User input for the current phase (varies by phase)'
2492
+ description: 'User input for the current phase (varies by phase)',
2205
2493
  },
2206
2494
  projectPath: {
2207
2495
  type: 'string',
2208
- description: 'Project root path'
2496
+ description: 'Project root path',
2209
2497
  },
2210
2498
  autoResearch: {
2211
2499
  type: 'boolean',
2212
2500
  default: true,
2213
- description: 'Automatically trigger research when needed'
2501
+ description: 'Automatically trigger research when needed',
2214
2502
  },
2215
2503
  generateTodos: {
2216
2504
  type: 'boolean',
2217
2505
  default: true,
2218
- description: 'Automatically generate TODO items from decisions'
2219
- }
2506
+ description: 'Automatically generate TODO items from decisions',
2507
+ },
2220
2508
  },
2221
- required: ['operation', 'projectPath']
2222
- }
2223
- }
2224
- ]
2509
+ required: ['operation', 'projectPath'],
2510
+ },
2511
+ },
2512
+ {
2513
+ name: 'memory_loading',
2514
+ description: 'Advanced memory loading tool for the memory-centric architecture. Query, explore, and manage memory entities and relationships. Load ADRs into memory system and perform intelligent queries.',
2515
+ inputSchema: {
2516
+ type: 'object',
2517
+ properties: {
2518
+ action: {
2519
+ type: 'string',
2520
+ enum: [
2521
+ 'load_adrs',
2522
+ 'query_entities',
2523
+ 'get_entity',
2524
+ 'find_related',
2525
+ 'get_intelligence',
2526
+ 'create_snapshot',
2527
+ ],
2528
+ description: 'Memory operation to perform',
2529
+ default: 'query_entities',
2530
+ },
2531
+ query: {
2532
+ type: 'object',
2533
+ properties: {
2534
+ entityTypes: {
2535
+ type: 'array',
2536
+ items: {
2537
+ type: 'string',
2538
+ enum: [
2539
+ 'architectural_decision',
2540
+ 'code_component',
2541
+ 'business_requirement',
2542
+ 'technical_constraint',
2543
+ 'quality_concern',
2544
+ 'implementation_pattern',
2545
+ 'environmental_factor',
2546
+ 'stakeholder_input',
2547
+ 'knowledge_artifact',
2548
+ 'decision_context',
2549
+ ],
2550
+ },
2551
+ description: 'Filter by entity types',
2552
+ },
2553
+ tags: {
2554
+ type: 'array',
2555
+ items: { type: 'string' },
2556
+ description: 'Filter by tags',
2557
+ },
2558
+ textQuery: {
2559
+ type: 'string',
2560
+ description: 'Full-text search query',
2561
+ },
2562
+ relationshipTypes: {
2563
+ type: 'array',
2564
+ items: {
2565
+ type: 'string',
2566
+ enum: [
2567
+ 'depends_on',
2568
+ 'influences',
2569
+ 'conflicts_with',
2570
+ 'implements',
2571
+ 'supersedes',
2572
+ 'relates_to',
2573
+ 'originated_from',
2574
+ 'impacts',
2575
+ 'constrains',
2576
+ ],
2577
+ },
2578
+ description: 'Filter by relationship types',
2579
+ },
2580
+ confidenceThreshold: {
2581
+ type: 'number',
2582
+ minimum: 0,
2583
+ maximum: 1,
2584
+ description: 'Minimum confidence threshold',
2585
+ },
2586
+ relevanceThreshold: {
2587
+ type: 'number',
2588
+ minimum: 0,
2589
+ maximum: 1,
2590
+ description: 'Minimum relevance threshold',
2591
+ },
2592
+ timeRange: {
2593
+ type: 'object',
2594
+ properties: {
2595
+ from: { type: 'string', description: 'Start date (ISO 8601)' },
2596
+ to: { type: 'string', description: 'End date (ISO 8601)' },
2597
+ },
2598
+ description: 'Filter by time range',
2599
+ },
2600
+ contextFilters: {
2601
+ type: 'object',
2602
+ properties: {
2603
+ projectPhase: { type: 'string', description: 'Project phase filter' },
2604
+ businessDomain: { type: 'string', description: 'Business domain filter' },
2605
+ technicalStack: {
2606
+ type: 'array',
2607
+ items: { type: 'string' },
2608
+ description: 'Technical stack filter',
2609
+ },
2610
+ environmentalFactors: {
2611
+ type: 'array',
2612
+ items: { type: 'string' },
2613
+ description: 'Environmental factors filter',
2614
+ },
2615
+ },
2616
+ description: 'Context-based filters',
2617
+ },
2618
+ limit: {
2619
+ type: 'number',
2620
+ minimum: 1,
2621
+ description: 'Maximum number of results',
2622
+ },
2623
+ sortBy: {
2624
+ type: 'string',
2625
+ enum: ['relevance', 'confidence', 'lastModified', 'created', 'accessCount'],
2626
+ description: 'Sort field',
2627
+ default: 'relevance',
2628
+ },
2629
+ includeRelated: {
2630
+ type: 'boolean',
2631
+ description: 'Include related entities and relationships',
2632
+ default: false,
2633
+ },
2634
+ relationshipDepth: {
2635
+ type: 'number',
2636
+ minimum: 1,
2637
+ maximum: 5,
2638
+ description: 'Maximum relationship traversal depth',
2639
+ default: 2,
2640
+ },
2641
+ },
2642
+ description: 'Query parameters for entity search',
2643
+ },
2644
+ entityId: {
2645
+ type: 'string',
2646
+ description: 'Entity ID for get_entity and find_related actions',
2647
+ },
2648
+ maxDepth: {
2649
+ type: 'number',
2650
+ minimum: 1,
2651
+ maximum: 5,
2652
+ description: 'Maximum depth for relationship traversal (find_related action)',
2653
+ default: 2,
2654
+ },
2655
+ forceReload: {
2656
+ type: 'boolean',
2657
+ description: 'Force reload of ADRs (load_adrs action)',
2658
+ default: false,
2659
+ },
2660
+ },
2661
+ },
2662
+ },
2663
+ {
2664
+ name: 'tool_chain_orchestrator',
2665
+ description: 'AI-powered dynamic tool sequencing - intelligently analyze user requests and generate structured tool execution plans',
2666
+ inputSchema: {
2667
+ type: 'object',
2668
+ properties: {
2669
+ userRequest: {
2670
+ type: 'string',
2671
+ description: 'User request to analyze and create tool execution plan for',
2672
+ },
2673
+ availableTools: {
2674
+ type: 'array',
2675
+ items: { type: 'string' },
2676
+ description: 'List of available MCP tools to orchestrate',
2677
+ },
2678
+ executionMode: {
2679
+ type: 'string',
2680
+ enum: ['plan_only', 'plan_and_execute', 'validate_plan'],
2681
+ description: 'Orchestration mode',
2682
+ default: 'plan_only',
2683
+ },
2684
+ maxSteps: {
2685
+ type: 'number',
2686
+ description: 'Maximum number of steps in the execution plan',
2687
+ default: 10,
2688
+ },
2689
+ allowParallel: {
2690
+ type: 'boolean',
2691
+ description: 'Allow parallel execution of independent steps',
2692
+ default: true,
2693
+ },
2694
+ contextHints: {
2695
+ type: 'array',
2696
+ items: { type: 'string' },
2697
+ description: 'Additional context hints for better plan generation',
2698
+ },
2699
+ },
2700
+ required: ['userRequest'],
2701
+ },
2702
+ },
2703
+ ],
2225
2704
  };
2226
2705
  });
2227
2706
  // Tool execution handler
@@ -2229,120 +2708,133 @@ export class McpAdrAnalysisServer {
2229
2708
  const { name, arguments: args } = request.params;
2230
2709
  try {
2231
2710
  let response;
2711
+ const safeArgs = args || {};
2232
2712
  switch (name) {
2233
2713
  case 'analyze_project_ecosystem':
2234
- response = await this.analyzeProjectEcosystem(args);
2714
+ response = await this.analyzeProjectEcosystem(safeArgs);
2235
2715
  break;
2236
2716
  case 'get_architectural_context':
2237
- response = await this.getArchitecturalContext(args);
2717
+ response = await this.getArchitecturalContext(safeArgs);
2238
2718
  break;
2239
2719
  case 'generate_adrs_from_prd':
2240
- response = await this.generateAdrsFromPrd(args);
2720
+ response = await this.generateAdrsFromPrd(safeArgs);
2241
2721
  break;
2242
2722
  case 'generate_adr_todo':
2243
- response = await this.generateAdrTodo(args);
2723
+ response = await this.generateAdrTodo(safeArgs);
2244
2724
  break;
2245
2725
  case 'compare_adr_progress':
2246
- response = await this.compareAdrProgress(args);
2726
+ response = await this.compareAdrProgress(safeArgs);
2247
2727
  break;
2248
2728
  case 'analyze_content_security':
2249
- response = await this.analyzeContentSecurity(args);
2729
+ response = await this.analyzeContentSecurity(safeArgs);
2250
2730
  break;
2251
2731
  case 'generate_content_masking':
2252
- response = await this.generateContentMasking(args);
2732
+ response = await this.generateContentMasking(safeArgs);
2253
2733
  break;
2254
2734
  case 'configure_custom_patterns':
2255
- response = await this.configureCustomPatterns(args);
2735
+ response = await this.configureCustomPatterns(safeArgs);
2256
2736
  break;
2257
2737
  case 'apply_basic_content_masking':
2258
- response = await this.applyBasicContentMasking(args);
2738
+ response = await this.applyBasicContentMasking(safeArgs);
2259
2739
  break;
2260
2740
  case 'validate_content_masking':
2261
- response = await this.validateContentMasking(args);
2741
+ response = await this.validateContentMasking(safeArgs);
2262
2742
  break;
2263
2743
  case 'manage_cache':
2264
- response = await this.manageCache(args);
2744
+ response = await this.manageCache(safeArgs);
2265
2745
  break;
2266
2746
  case 'configure_output_masking':
2267
- response = await this.configureOutputMasking(args);
2747
+ response = await this.configureOutputMasking(safeArgs);
2268
2748
  break;
2269
2749
  case 'suggest_adrs':
2270
- response = await this.suggestAdrs(args);
2750
+ response = await this.suggestAdrs(safeArgs);
2271
2751
  break;
2272
2752
  case 'generate_adr_from_decision':
2273
- response = await this.generateAdrFromDecision(args);
2753
+ response = await this.generateAdrFromDecision(safeArgs);
2754
+ break;
2755
+ case 'generate_adr_bootstrap':
2756
+ response = await this.generateAdrBootstrap(safeArgs);
2274
2757
  break;
2275
2758
  case 'discover_existing_adrs':
2276
- response = await this.discoverExistingAdrs(args);
2759
+ response = await this.discoverExistingAdrs(safeArgs);
2760
+ break;
2761
+ case 'review_existing_adrs':
2762
+ response = await this.reviewExistingAdrs(safeArgs);
2277
2763
  break;
2278
2764
  case 'incorporate_research':
2279
- response = await this.incorporateResearch(args);
2765
+ response = await this.incorporateResearch(safeArgs);
2280
2766
  break;
2281
2767
  case 'create_research_template':
2282
- response = await this.createResearchTemplate(args);
2768
+ response = await this.createResearchTemplate(safeArgs);
2283
2769
  break;
2284
2770
  case 'request_action_confirmation':
2285
- response = await this.requestActionConfirmation(args);
2771
+ response = await this.requestActionConfirmation(safeArgs);
2286
2772
  break;
2287
2773
  case 'generate_rules':
2288
- response = await this.generateRules(args);
2774
+ response = await this.generateRules(safeArgs);
2289
2775
  break;
2290
2776
  case 'validate_rules':
2291
- response = await this.validateRules(args);
2777
+ response = await this.validateRules(safeArgs);
2292
2778
  break;
2293
2779
  case 'create_rule_set':
2294
- response = await this.createRuleSet(args);
2780
+ response = await this.createRuleSet(safeArgs);
2295
2781
  break;
2296
2782
  case 'analyze_environment':
2297
- response = await this.analyzeEnvironment(args);
2783
+ response = await this.analyzeEnvironment(safeArgs);
2298
2784
  break;
2299
2785
  case 'generate_research_questions':
2300
- response = await this.generateResearchQuestions(args);
2786
+ response = await this.generateResearchQuestions(safeArgs);
2301
2787
  break;
2302
2788
  case 'analyze_deployment_progress':
2303
- response = await this.analyzeDeploymentProgress(args);
2789
+ response = await this.analyzeDeploymentProgress(safeArgs);
2304
2790
  break;
2305
2791
  case 'check_ai_execution_status':
2306
- response = await this.checkAIExecutionStatus(args);
2792
+ response = await this.checkAIExecutionStatus(safeArgs);
2307
2793
  break;
2308
2794
  case 'get_workflow_guidance':
2309
- response = await this.getWorkflowGuidance(args);
2795
+ response = await this.getWorkflowGuidance(safeArgs);
2310
2796
  break;
2311
2797
  case 'get_development_guidance':
2312
- response = await this.getDevelopmentGuidance(args);
2798
+ response = await this.getDevelopmentGuidance(safeArgs);
2313
2799
  break;
2314
2800
  case 'read_file':
2315
- response = await this.readFile(args);
2801
+ response = await this.readFile(safeArgs);
2316
2802
  break;
2317
2803
  case 'write_file':
2318
- response = await this.writeFile(args);
2804
+ response = await this.writeFile(safeArgs);
2319
2805
  break;
2320
2806
  case 'list_directory':
2321
- response = await this.listDirectory(args);
2807
+ response = await this.listDirectory(safeArgs);
2322
2808
  break;
2323
2809
  case 'manage_todo_json':
2324
- response = await this.manageTodoJson(args);
2810
+ response = await this.manageTodoJson(safeArgs);
2325
2811
  break;
2326
2812
  case 'generate_deployment_guidance':
2327
- response = await this.generateDeploymentGuidance(args);
2813
+ response = await this.generateDeploymentGuidance(safeArgs);
2328
2814
  break;
2329
2815
  case 'smart_git_push':
2330
- response = await this.smartGitPush(args);
2816
+ response = await this.smartGitPush(safeArgs);
2331
2817
  break;
2332
2818
  case 'deployment_readiness':
2333
- response = await this.deploymentReadiness(args);
2819
+ response = await this.deploymentReadiness(safeArgs);
2334
2820
  break;
2335
2821
  case 'troubleshoot_guided_workflow':
2336
- response = await this.troubleshootGuidedWorkflow(args);
2822
+ response = await this.troubleshootGuidedWorkflow(safeArgs);
2337
2823
  break;
2338
2824
  case 'smart_score':
2339
- response = await this.smartScore(args);
2825
+ response = await this.smartScore(safeArgs);
2340
2826
  break;
2341
2827
  case 'mcp_planning':
2342
- response = await this.mcpPlanning(args);
2828
+ response = await this.mcpPlanning(safeArgs);
2829
+ break;
2830
+ case 'memory_loading':
2831
+ response = await this.memoryLoading(safeArgs);
2343
2832
  break;
2344
2833
  case 'interactive_adr_planning':
2345
- response = await this.interactiveAdrPlanning(args);
2834
+ response = await this.interactiveAdrPlanning(safeArgs);
2835
+ break;
2836
+ case 'tool_chain_orchestrator':
2837
+ response = await this.toolChainOrchestrator(safeArgs);
2346
2838
  break;
2347
2839
  default:
2348
2840
  throw new McpAdrError(`Unknown tool: ${name}`, 'UNKNOWN_TOOL');
@@ -2369,21 +2861,21 @@ export class McpAdrAnalysisServer {
2369
2861
  uri: 'adr://architectural_knowledge_graph',
2370
2862
  name: 'Architectural Knowledge Graph',
2371
2863
  description: 'Complete architectural knowledge graph of the project',
2372
- mimeType: 'application/json'
2864
+ mimeType: 'application/json',
2373
2865
  },
2374
2866
  {
2375
2867
  uri: 'adr://analysis_report',
2376
2868
  name: 'Analysis Report',
2377
2869
  description: 'Comprehensive project analysis report',
2378
- mimeType: 'application/json'
2870
+ mimeType: 'application/json',
2379
2871
  },
2380
2872
  {
2381
2873
  uri: 'adr://adr_list',
2382
2874
  name: 'ADR List',
2383
2875
  description: 'List of all Architectural Decision Records',
2384
- mimeType: 'application/json'
2385
- }
2386
- ]
2876
+ mimeType: 'application/json',
2877
+ },
2878
+ ],
2387
2879
  };
2388
2880
  });
2389
2881
  // Resource reading handler
@@ -2407,8 +2899,8 @@ export class McpAdrAnalysisServer {
2407
2899
  prompts: allPrompts.map(prompt => ({
2408
2900
  name: prompt.name,
2409
2901
  description: prompt.description,
2410
- arguments: prompt.arguments
2411
- }))
2902
+ arguments: prompt.arguments,
2903
+ })),
2412
2904
  };
2413
2905
  });
2414
2906
  // Prompt execution handler
@@ -2435,10 +2927,10 @@ export class McpAdrAnalysisServer {
2435
2927
  role: 'user',
2436
2928
  content: {
2437
2929
  type: 'text',
2438
- text: renderedTemplate
2439
- }
2440
- }
2441
- ]
2930
+ text: renderedTemplate,
2931
+ },
2932
+ },
2933
+ ],
2442
2934
  };
2443
2935
  return await this.applyOutputMasking(response);
2444
2936
  }
@@ -2469,11 +2961,13 @@ export class McpAdrAnalysisServer {
2469
2961
  - **Execution Mode**: ${status.executionMode}
2470
2962
  - **AI Model**: ${status.model}
2471
2963
 
2472
- ${status.reason ? `## ⚠️ Issue Detected
2964
+ ${status.reason
2965
+ ? `## ⚠️ Issue Detected
2473
2966
  **Problem**: ${status.reason}
2474
2967
 
2475
2968
  ## Solution
2476
- ${!status.hasApiKey ? `
2969
+ ${!status.hasApiKey
2970
+ ? `
2477
2971
  1. Get an OpenRouter API key from https://openrouter.ai/keys
2478
2972
  2. Add it to your MCP configuration:
2479
2973
  \`\`\`json
@@ -2491,7 +2985,9 @@ ${!status.hasApiKey ? `
2491
2985
  }
2492
2986
  \`\`\`
2493
2987
  3. Restart your MCP client (Claude Desktop, etc.)
2494
- ` : status.executionMode !== 'full' ? `
2988
+ `
2989
+ : status.executionMode !== 'full'
2990
+ ? `
2495
2991
  1. Update your MCP configuration to set EXECUTION_MODE to "full":
2496
2992
  \`\`\`json
2497
2993
  {
@@ -2505,7 +3001,9 @@ ${!status.hasApiKey ? `
2505
3001
  }
2506
3002
  \`\`\`
2507
3003
  2. Restart your MCP client
2508
- ` : ''}` : `## ✅ Configuration Looks Good!
3004
+ `
3005
+ : ''}`
3006
+ : `## ✅ Configuration Looks Good!
2509
3007
 
2510
3008
  AI execution is properly configured. Tools should return actual results instead of prompts.
2511
3009
 
@@ -2521,9 +3019,9 @@ If you're still seeing prompts instead of results, try:
2521
3019
 
2522
3020
  ## Testing
2523
3021
  After fixing the configuration, try calling \`suggest_adrs\` - it should return actual ADR suggestions instead of prompts.
2524
- `
2525
- }
2526
- ]
3022
+ `,
3023
+ },
3024
+ ],
2527
3025
  };
2528
3026
  }
2529
3027
  catch (error) {
@@ -2542,14 +3040,14 @@ Verify these environment variables are set in your MCP configuration:
2542
3040
  - OPENROUTER_API_KEY
2543
3041
  - EXECUTION_MODE=full
2544
3042
  - AI_MODEL (optional)
2545
- `
2546
- }
2547
- ]
3043
+ `,
3044
+ },
3045
+ ],
2548
3046
  };
2549
3047
  }
2550
3048
  }
2551
3049
  async getWorkflowGuidance(args) {
2552
- const { goal, projectContext, availableAssets = [], timeframe = 'thorough_review', primaryConcerns = [] } = args;
3050
+ const { goal, projectContext, availableAssets = [], timeframe = 'thorough_review', primaryConcerns = [], } = args;
2553
3051
  try {
2554
3052
  const workflowPrompt = `
2555
3053
  # Workflow Guidance & Tool Recommendation System
@@ -2674,7 +3172,7 @@ Make the guidance **actionable, specific, and outcome-focused** so the user can
2674
3172
  systemPrompt: `You are an expert workflow advisor for the MCP ADR Analysis Server.
2675
3173
  Your role is to analyze user goals and project context, then recommend the optimal sequence of tools to achieve their objectives efficiently.
2676
3174
  Provide specific, actionable guidance with clear tool sequences, expected outcomes, and success criteria.
2677
- Focus on practical workflows that deliver measurable results.`
3175
+ Focus on practical workflows that deliver measurable results.`,
2678
3176
  });
2679
3177
  if (executionResult.isAIGenerated) {
2680
3178
  // AI execution successful - return actual workflow guidance
@@ -2720,9 +3218,9 @@ This guidance is tailored to your specific context and goals for maximum effecti
2720
3218
  content: [
2721
3219
  {
2722
3220
  type: 'text',
2723
- text: workflowPrompt
2724
- }
2725
- ]
3221
+ text: workflowPrompt,
3222
+ },
3223
+ ],
2726
3224
  };
2727
3225
  }
2728
3226
  }
@@ -2731,7 +3229,7 @@ This guidance is tailored to your specific context and goals for maximum effecti
2731
3229
  }
2732
3230
  }
2733
3231
  async getDevelopmentGuidance(args) {
2734
- const { developmentPhase, adrsToImplement = [], technologyStack = [], currentProgress = '', teamContext = { size: 'small_team', experienceLevel: 'mixed' }, timeline = '', focusAreas = [] } = args;
3232
+ const { developmentPhase, adrsToImplement = [], technologyStack = [], currentProgress = '', teamContext = { size: 'small_team', experienceLevel: 'mixed' }, timeline = '', focusAreas = [], } = args;
2735
3233
  try {
2736
3234
  // Use actual ADR discovery if ADRs are specified
2737
3235
  let adrAnalysisPrompt = '';
@@ -2750,14 +3248,16 @@ This guidance is tailored to your specific context and goals for maximum effecti
2750
3248
  **ADR Directory**: ${absoluteAdrPath}
2751
3249
  **Found ${targetAdrs.length} matching ADRs**
2752
3250
 
2753
- ${targetAdrs.map(adr => `
3251
+ ${targetAdrs
3252
+ .map(adr => `
2754
3253
  ### ${adr.title}
2755
3254
  - **File**: ${adr.filename}
2756
3255
  - **Status**: ${adr.status}
2757
3256
  - **Context**: ${adr.context}
2758
3257
  - **Decision**: ${adr.decision}
2759
3258
  - **Consequences**: ${adr.consequences}
2760
- `).join('\n')}
3259
+ `)
3260
+ .join('\n')}
2761
3261
  `;
2762
3262
  }
2763
3263
  const developmentPrompt = `
@@ -2895,7 +3395,7 @@ Make the guidance **actionable, specific, and immediately implementable** so dev
2895
3395
  Your role is to bridge the gap between architectural planning and actual code development.
2896
3396
  Provide specific, actionable development guidance with clear implementation steps, code patterns, and quality criteria.
2897
3397
  Focus on practical guidance that ensures architectural decisions are properly implemented in code.
2898
- Consider team context, technology stack, and development phase to provide tailored recommendations.`
3398
+ Consider team context, technology stack, and development phase to provide tailored recommendations.`,
2899
3399
  });
2900
3400
  if (executionResult.isAIGenerated) {
2901
3401
  // AI execution successful - return actual development guidance
@@ -2953,9 +3453,9 @@ This guidance ensures your development work is **architecturally aligned**, **qu
2953
3453
  content: [
2954
3454
  {
2955
3455
  type: 'text',
2956
- text: developmentPrompt
2957
- }
2958
- ]
3456
+ text: developmentPrompt,
3457
+ },
3458
+ ],
2959
3459
  };
2960
3460
  }
2961
3461
  }
@@ -2966,7 +3466,7 @@ This guidance ensures your development work is **architecturally aligned**, **qu
2966
3466
  async analyzeProjectEcosystem(args) {
2967
3467
  // Use configured project path if not provided in args
2968
3468
  const projectPath = args.projectPath || this.config.projectPath;
2969
- const { includePatterns, enhancedMode = true, knowledgeEnhancement = true, learningEnabled = true, technologyFocus = [], analysisDepth = 'comprehensive', includeEnvironment = true, recursiveDepth = 'comprehensive', analysisScope = []
3469
+ const { includePatterns, enhancedMode = true, knowledgeEnhancement = true, learningEnabled = true, technologyFocus = [], analysisDepth = 'comprehensive', includeEnvironment = true, recursiveDepth = 'comprehensive', analysisScope = [],
2970
3470
  // conversationContext - TODO: implement context integration for ecosystem analysis
2971
3471
  } = args;
2972
3472
  this.logger.info(`Generating comprehensive ecosystem analysis for project at: ${projectPath}`);
@@ -2975,7 +3475,7 @@ This guidance ensures your development work is **architecturally aligned**, **qu
2975
3475
  this.logger.info(`Analysis scope: ${analysisScope.length > 0 ? analysisScope.join(', ') : 'Full ecosystem analysis'}`);
2976
3476
  try {
2977
3477
  // Import utilities dynamically to avoid circular dependencies
2978
- const { analyzeProjectStructure } = await import('./utils/file-system.js');
3478
+ const { analyzeProjectStructureCompat: analyzeProjectStructure } = await import('./utils/file-system.js');
2979
3479
  // Import advanced prompting utilities if enhanced mode is enabled
2980
3480
  let generateArchitecturalKnowledge = null;
2981
3481
  let executeWithReflexion = null;
@@ -3002,11 +3502,11 @@ This guidance ensures your development work is **architecturally aligned**, **qu
3002
3502
  technologies: technologyFocus,
3003
3503
  patterns: [],
3004
3504
  projectType: 'ecosystem-analysis',
3005
- existingAdrs: []
3505
+ existingAdrs: [],
3006
3506
  }, {
3007
3507
  domains: this.getEcosystemAnalysisDomains(technologyFocus),
3008
3508
  depth: analysisDepth === 'basic' ? 'basic' : 'intermediate',
3009
- cacheEnabled: true
3509
+ cacheEnabled: true,
3010
3510
  });
3011
3511
  knowledgeContext = `
3012
3512
  ## Technology-Specific Knowledge Enhancement
@@ -3055,7 +3555,7 @@ ${memoryResult.prompt}
3055
3555
  const environmentResult = await analyzeEnvironment({
3056
3556
  projectPath,
3057
3557
  adrDirectory: this.config.adrDirectory,
3058
- analysisType: 'comprehensive'
3558
+ analysisType: 'comprehensive',
3059
3559
  });
3060
3560
  // Extract environment analysis content
3061
3561
  if (environmentResult.content && environmentResult.content[0]) {
@@ -3085,7 +3585,7 @@ ${environmentResult.content[0].text}
3085
3585
  const reflexionConfig = createToolReflexionConfig('analyze_project_ecosystem', {
3086
3586
  reflectionDepth: analysisDepth === 'basic' ? 'basic' : 'detailed',
3087
3587
  evaluationCriteria: ['task-success', 'accuracy', 'completeness'],
3088
- learningRate: 0.7
3588
+ learningRate: 0.7,
3089
3589
  });
3090
3590
  const reflexionResult = await executeWithReflexion({
3091
3591
  prompt: baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext,
@@ -3099,18 +3599,20 @@ ${environmentResult.content[0].text}
3099
3599
  includeEnvironment,
3100
3600
  analysisScope,
3101
3601
  knowledgeEnhanced: knowledgeEnhancement,
3102
- learningEnabled: true
3103
- }
3602
+ learningEnabled: true,
3603
+ },
3104
3604
  }, reflexionConfig);
3105
3605
  enhancedAnalysisPrompt = reflexionResult.prompt;
3106
3606
  }
3107
3607
  catch (error) {
3108
3608
  this.logger.warn('Reflexion execution failed:', error);
3109
- enhancedAnalysisPrompt = baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
3609
+ enhancedAnalysisPrompt =
3610
+ baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
3110
3611
  }
3111
3612
  }
3112
3613
  else {
3113
- enhancedAnalysisPrompt = baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
3614
+ enhancedAnalysisPrompt =
3615
+ baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
3114
3616
  }
3115
3617
  // Execute the analysis with AI if enabled, otherwise return prompt
3116
3618
  const { executeEcosystemAnalysisPrompt, formatMCPResponse } = await import('./utils/prompt-execution.js');
@@ -3129,7 +3631,7 @@ ${environmentResult.content[0].text}
3129
3631
  analysisScope,
3130
3632
  includeEnvironment,
3131
3633
  timestamp: new Date().toISOString(),
3132
- structureData: baseProjectAnalysisPrompt.context || {}
3634
+ structureData: baseProjectAnalysisPrompt.context || {},
3133
3635
  };
3134
3636
  await this.kgManager.recordProjectStructure(projectStructureSnapshot);
3135
3637
  this.logger.info('✅ Project structure recorded to knowledge graph');
@@ -3167,7 +3669,8 @@ ${reflexionContext}
3167
3669
 
3168
3670
  ${executionResult.content}
3169
3671
 
3170
- ${includeEnvironment ? `
3672
+ ${includeEnvironment
3673
+ ? `
3171
3674
 
3172
3675
  ## Environment Integration Summary
3173
3676
 
@@ -3178,7 +3681,8 @@ The analysis above includes comprehensive environment analysis covering:
3178
3681
  - **Compliance Assessment**: Security and regulatory compliance evaluation
3179
3682
 
3180
3683
  This integrated approach provides complete understanding of both codebase patterns AND operational environment.
3181
- ` : ''}
3684
+ `
3685
+ : ''}
3182
3686
 
3183
3687
  ## Next Steps: Complete Ecosystem Understanding
3184
3688
 
@@ -3242,19 +3746,23 @@ ${baseProjectAnalysisPrompt.instructions}
3242
3746
 
3243
3747
  ### Enhancement-Specific Instructions
3244
3748
 
3245
- ${enhancedMode && knowledgeEnhancement ? `
3749
+ ${enhancedMode && knowledgeEnhancement
3750
+ ? `
3246
3751
  #### Knowledge Enhancement
3247
3752
  - Apply technology-specific knowledge to ecosystem analysis
3248
3753
  - Use domain expertise to identify patterns and anti-patterns
3249
3754
  - Leverage architectural best practices for technology stack evaluation
3250
- ` : ''}
3755
+ `
3756
+ : ''}
3251
3757
 
3252
- ${enhancedMode && learningEnabled ? `
3758
+ ${enhancedMode && learningEnabled
3759
+ ? `
3253
3760
  #### Learning Integration
3254
3761
  - Apply lessons learned from past ecosystem analyses
3255
3762
  - Use memory insights to improve pattern recognition accuracy
3256
3763
  - Incorporate feedback from previous analysis outcomes
3257
- ` : ''}
3764
+ `
3765
+ : ''}
3258
3766
 
3259
3767
  ## Expected Enhanced Output
3260
3768
 
@@ -3270,9 +3778,9 @@ The enhanced analysis should provide:
3270
3778
  - Ensure analysis leverages all available enhancement features
3271
3779
  - Verify technology-specific knowledge is properly applied
3272
3780
  - Confirm learning insights improve analysis accuracy
3273
- - Validate recommendations align with domain best practices`
3274
- }
3275
- ]
3781
+ - Validate recommendations align with domain best practices`,
3782
+ },
3783
+ ],
3276
3784
  };
3277
3785
  }
3278
3786
  }
@@ -3283,10 +3791,12 @@ The enhanced analysis should provide:
3283
3791
  async getArchitecturalContext(args) {
3284
3792
  const { filePath, includeCompliance = true } = args;
3285
3793
  try {
3286
- const { analyzeProjectStructure, fileExists, ensureDirectory } = await import('./utils/file-system.js');
3794
+ const { analyzeProjectStructureCompat: analyzeProjectStructure, fileExistsCompat: fileExists, ensureDirectoryCompat: ensureDirectory, } = await import('./utils/file-system.js');
3287
3795
  const path = await import('path');
3288
3796
  // Determine project path
3289
- const projectPath = filePath ? filePath.split('/').slice(0, -1).join('/') : this.config.projectPath;
3797
+ const projectPath = filePath
3798
+ ? filePath.split('/').slice(0, -1).join('/')
3799
+ : this.config.projectPath;
3290
3800
  const adrDirectory = path.join(projectPath, this.config.adrDirectory);
3291
3801
  // Generate prompts for ADR directory setup
3292
3802
  const adrDirectoryCheckPrompt = await fileExists(adrDirectory);
@@ -3345,12 +3855,14 @@ ${filePath ? `- **File-specific Context**: How ${filePath} fits into the overall
3345
3855
  - **Technology Rationale**: Understand selection criteria and trade-offs
3346
3856
  - **Evolution Path**: How the architecture has changed over time
3347
3857
 
3348
- ${includeCompliance ? `### 5. Compliance & Standards Assessment
3858
+ ${includeCompliance
3859
+ ? `### 5. Compliance & Standards Assessment
3349
3860
  - **Industry Standards**: Adherence to relevant industry standards and best practices
3350
3861
  - **Security Compliance**: Security standards compliance (OWASP, SOC2, etc.)
3351
3862
  - **Code Standards**: Coding standards and style guide compliance
3352
3863
  - **Architectural Compliance**: Adherence to established architectural principles
3353
- - **Regulatory Requirements**: Any regulatory compliance requirements (GDPR, HIPAA, etc.)` : ''}
3864
+ - **Regulatory Requirements**: Any regulatory compliance requirements (GDPR, HIPAA, etc.)`
3865
+ : ''}
3354
3866
 
3355
3867
  ## Expected Output: Outcome-Focused Architectural Context
3356
3868
 
@@ -3451,7 +3963,7 @@ This approach ensures that architectural work is **grounded in measurable outcom
3451
3963
  maxTokens: 5000,
3452
3964
  systemPrompt: `You are a senior software architect specializing in architectural context analysis.
3453
3965
  Analyze the provided project to understand its architectural patterns, design decisions, and structural organization.
3454
- Focus on providing actionable insights about the architecture that can guide development decisions.`
3966
+ Focus on providing actionable insights about the architecture that can guide development decisions.`,
3455
3967
  });
3456
3968
  if (executionResult.isAIGenerated) {
3457
3969
  // AI execution successful - return actual analysis results
@@ -3507,9 +4019,9 @@ This **outcome-focused approach** ensures architectural work delivers **measurab
3507
4019
  content: [
3508
4020
  {
3509
4021
  type: 'text',
3510
- text: architecturalPrompt
3511
- }
3512
- ]
4022
+ text: architecturalPrompt,
4023
+ },
4024
+ ],
3513
4025
  };
3514
4026
  }
3515
4027
  }
@@ -3518,12 +4030,12 @@ This **outcome-focused approach** ensures architectural work delivers **measurab
3518
4030
  }
3519
4031
  }
3520
4032
  async generateAdrsFromPrd(args) {
3521
- const { prdPath, enhancedMode = true, promptOptimization = true, knowledgeEnhancement = true, prdType = 'general' } = args;
3522
- const outputDirectory = args.outputDirectory || this.config.adrDirectory;
4033
+ const { prdPath, enhancedMode = true, promptOptimization = true, knowledgeEnhancement = true, prdType = 'general', } = args;
4034
+ const outputDirectory = args['outputDirectory'] || this.config.adrDirectory;
3523
4035
  this.logger.info(`Generating enhanced ADRs from PRD: ${prdPath} to ${outputDirectory}`);
3524
4036
  this.logger.info(`Enhancement features - APE: ${promptOptimization}, Knowledge: ${knowledgeEnhancement}, Type: ${prdType}`);
3525
4037
  try {
3526
- const { readFileContent, fileExists } = await import('./utils/file-system.js');
4038
+ const { readFileContentCompat: readFileContent, fileExistsCompat: fileExists } = await import('./utils/file-system.js');
3527
4039
  // Import advanced prompting utilities if enhanced mode is enabled
3528
4040
  let generateArchitecturalKnowledge = null;
3529
4041
  let optimizePromptWithAPE = null;
@@ -3552,11 +4064,11 @@ This **outcome-focused approach** ensures architectural work delivers **measurab
3552
4064
  technologies: [],
3553
4065
  patterns: [],
3554
4066
  projectType: prdType,
3555
- existingAdrs: []
4067
+ existingAdrs: [],
3556
4068
  }, {
3557
4069
  domains: this.getPrdTypeDomains(prdType),
3558
4070
  depth: 'intermediate',
3559
- cacheEnabled: true
4071
+ cacheEnabled: true,
3560
4072
  });
3561
4073
  knowledgeContext = `
3562
4074
  ## Domain-Specific Knowledge Enhancement
@@ -3583,12 +4095,17 @@ ${knowledgeResult.prompt}
3583
4095
  candidateCount: 5,
3584
4096
  evaluationCriteria: ['task-completion', 'clarity', 'specificity'],
3585
4097
  optimizationRounds: 2,
3586
- qualityThreshold: 0.75
4098
+ qualityThreshold: 0.75,
3587
4099
  });
3588
4100
  const apeResult = await optimizePromptWithAPE({
3589
4101
  prompt: baseAdrPrompt,
3590
4102
  instructions: 'Generate comprehensive ADRs from PRD analysis',
3591
- context: { prdPath, outputDirectory, prdType, knowledgeEnhanced: knowledgeEnhancement }
4103
+ context: {
4104
+ prdPath,
4105
+ outputDirectory,
4106
+ prdType,
4107
+ knowledgeEnhanced: knowledgeEnhancement,
4108
+ },
3592
4109
  }, apeConfig);
3593
4110
  finalAdrPrompt = apeResult.prompt;
3594
4111
  }
@@ -3621,12 +4138,14 @@ ${fileContentPrompt.prompt}
3621
4138
 
3622
4139
  ## Step 3: Enhanced ADR Generation
3623
4140
 
3624
- ${enhancedMode && promptOptimization ? `
4141
+ ${enhancedMode && promptOptimization
4142
+ ? `
3625
4143
  ### APE-Optimized Analysis
3626
4144
  This prompt has been optimized using Automatic Prompt Engineering for superior ADR generation quality.
3627
4145
  The optimization focused on task completion, clarity, and specificity for PRD analysis.
3628
4146
 
3629
- ` : ''}
4147
+ `
4148
+ : ''}
3630
4149
 
3631
4150
  ${finalAdrPrompt}
3632
4151
 
@@ -3653,7 +4172,7 @@ For each generated ADR, create a file creation prompt using the following patter
3653
4172
  maxTokens: 8000,
3654
4173
  systemPrompt: `You are an expert software architect who creates comprehensive Architectural Decision Records (ADRs) from Product Requirements Documents (PRDs).
3655
4174
  Generate well-structured ADRs that follow best practices and include all necessary sections.
3656
- Focus on extracting architectural decisions from the PRD and creating actionable ADRs with clear reasoning.`
4175
+ Focus on extracting architectural decisions from the PRD and creating actionable ADRs with clear reasoning.`,
3657
4176
  });
3658
4177
  if (executionResult.isAIGenerated) {
3659
4178
  // AI execution successful - return actual ADR generation results
@@ -3734,19 +4253,23 @@ ${adrPrompt}
3734
4253
 
3735
4254
  ## Advanced Features
3736
4255
 
3737
- ${enhancedMode && knowledgeEnhancement ? `
4256
+ ${enhancedMode && knowledgeEnhancement
4257
+ ? `
3738
4258
  ### Knowledge Enhancement
3739
4259
  - Domain-specific architectural knowledge has been generated
3740
4260
  - PRD analysis is enhanced with ${prdType} domain expertise
3741
4261
  - ADR decisions leverage domain best practices and patterns
3742
- ` : ''}
4262
+ `
4263
+ : ''}
3743
4264
 
3744
- ${enhancedMode && promptOptimization ? `
4265
+ ${enhancedMode && promptOptimization
4266
+ ? `
3745
4267
  ### APE Optimization
3746
4268
  - Prompts have been automatically optimized for quality
3747
4269
  - Enhanced evaluation criteria ensure superior ADR generation
3748
4270
  - Optimization focused on task completion, clarity, and specificity
3749
- ` : ''}
4271
+ `
4272
+ : ''}
3750
4273
 
3751
4274
  ## Security and Validation
3752
4275
 
@@ -3766,9 +4289,9 @@ ${enhancedMode && promptOptimization ? `
3766
4289
  6. Create file creation prompts for each enhanced ADR
3767
4290
  7. Confirm with user before writing files to: ${outputDirectory}
3768
4291
 
3769
- The enhanced process maintains full traceability from PRD requirements to generated ADRs while providing superior quality through advanced prompting techniques and ensuring security and user control over file operations.`
3770
- }
3771
- ]
4292
+ The enhanced process maintains full traceability from PRD requirements to generated ADRs while providing superior quality through advanced prompting techniques and ensuring security and user control over file operations.`,
4293
+ },
4294
+ ],
3772
4295
  };
3773
4296
  }
3774
4297
  }
@@ -3777,53 +4300,53 @@ The enhanced process maintains full traceability from PRD requirements to genera
3777
4300
  }
3778
4301
  }
3779
4302
  async generateAdrTodo(args) {
3780
- const { scope = 'all', phase = 'both', linkAdrs = true, includeRules = true, ruleSource = 'both', preserveExisting = true, forceSyncToMarkdown = false, intentId, createJsonBackup = true } = args;
4303
+ const { scope = 'all', phase = 'both', linkAdrs = true, includeRules = true, ruleSource = 'both', preserveExisting = true, forceSyncToMarkdown = false, intentId, createJsonBackup = true, } = args;
3781
4304
  const { getAdrDirectoryPath } = await import('./utils/config.js');
3782
4305
  const path = await import('path');
3783
4306
  // Use absolute ADR path relative to project
3784
- const absoluteAdrPath = args.adrDirectory ?
3785
- path.resolve(this.config.projectPath, args.adrDirectory) :
3786
- getAdrDirectoryPath(this.config);
4307
+ const absoluteAdrPath = args['adrDirectory']
4308
+ ? path.resolve(this.config.projectPath, args['adrDirectory'])
4309
+ : getAdrDirectoryPath(this.config);
3787
4310
  // Keep relative path for display purposes
3788
- const adrDirectory = args.adrDirectory || this.config.adrDirectory;
4311
+ const adrDirectory = args['adrDirectory'] || this.config.adrDirectory;
3789
4312
  this.logger.info(`Generating JSON-first TODO for ADRs in: ${absoluteAdrPath} (phase: ${phase})`);
3790
4313
  try {
3791
4314
  // Always use JSON-first TODO system
3792
4315
  this.logger.info('Using JSON-first TODO system for ADR task generation');
3793
- const { manageTodoV2 } = await import('./tools/todo-management-tool-v2.js');
4316
+ // TODO management has been deprecated and moved to mcp-shrimp-task-manager
4317
+ this.logger.warn('⚠️ TODO management has been deprecated - use mcp-shrimp-task-manager instead');
3794
4318
  // Optional: Create backup if requested and JSON exists
3795
4319
  if (createJsonBackup) {
3796
4320
  try {
3797
- await manageTodoV2({
3798
- operation: 'import_from_markdown',
3799
- projectPath: this.config.projectPath,
3800
- mergeStrategy: 'preserve_json',
3801
- backupExisting: true
3802
- });
3803
- this.logger.info('Created backup of existing JSON TODO data');
4321
+ this.logger.info('Backup feature deprecated - use mcp-shrimp-task-manager for task management');
3804
4322
  }
3805
- catch (error) {
4323
+ catch {
3806
4324
  // Continue if backup fails - might be first time setup
3807
4325
  this.logger.debug('No existing JSON data to backup');
3808
4326
  }
3809
4327
  }
3810
- // Import ADR tasks into JSON system with enhanced parameters
3811
- const importResult = await manageTodoV2({
3812
- operation: 'import_adr_tasks',
3813
- projectPath: this.config.projectPath,
3814
- adrDirectory: absoluteAdrPath,
3815
- preserveExisting,
3816
- autoLinkDependencies: linkAdrs,
3817
- ...(intentId && { intentId })
3818
- });
3819
- // Sync JSON data to markdown with force option
3820
- await manageTodoV2({
3821
- operation: 'sync_to_markdown',
3822
- projectPath: this.config.projectPath,
3823
- force: forceSyncToMarkdown
3824
- });
4328
+ // Import ADR tasks into JSON system has been deprecated
4329
+ const importResult = {
4330
+ content: [
4331
+ {
4332
+ type: 'text',
4333
+ text: `⚠️ **TODO Management Deprecated**
4334
+
4335
+ This feature has been moved to mcp-shrimp-task-manager.
4336
+
4337
+ **Replacement:** Use the external \`mcp-shrimp-task-manager\` for:
4338
+ - Task planning and breaking down from ADRs
4339
+ - Task tracking and status updates
4340
+ - Task dependencies and priorities
4341
+ - Task completion and verification
4342
+
4343
+ **Migration:** The system now uses memory-centric architecture where task management is handled by external MCP servers.`,
4344
+ },
4345
+ ],
4346
+ };
3825
4347
  return {
3826
- content: [{
4348
+ content: [
4349
+ {
3827
4350
  type: 'text',
3828
4351
  text: `# ✅ JSON-First TODO Generated from ADRs
3829
4352
 
@@ -3850,7 +4373,7 @@ The enhanced process maintains full traceability from PRD requirements to genera
3850
4373
  ✅ **Backup Protection**: Automatic data preservation during updates
3851
4374
  ✅ **No Manual Setup**: All cache files auto-generated, tests can immediately validate
3852
4375
 
3853
- ${importResult.content[0].text}
4376
+ ${importResult.content?.[0]?.text || 'TODO management feature has been deprecated'}
3854
4377
 
3855
4378
  ## Available Operations (use manage_todo_v2 tool)
3856
4379
  1. **View Tasks**: \`get_tasks\` operation with filtering and sorting
@@ -3870,8 +4393,9 @@ ${importResult.content[0].text}
3870
4393
  - **Dependencies**: ADR relationships mapped to task dependencies
3871
4394
  - **Validation**: Architectural rules integrated into task criteria
3872
4395
 
3873
- *All TODO data is now managed in JSON format with automatic markdown sync*`
3874
- }]
4396
+ *All TODO data is now managed in JSON format with automatic markdown sync*`,
4397
+ },
4398
+ ],
3875
4399
  };
3876
4400
  }
3877
4401
  catch (error) {
@@ -3879,19 +4403,20 @@ ${importResult.content[0].text}
3879
4403
  }
3880
4404
  }
3881
4405
  async compareAdrProgress(args) {
3882
- const { todoPath = 'TODO.md', adrDirectory = this.config.adrDirectory, projectPath = this.config.projectPath, environment = 'auto-detect', environmentConfig = {}, validationType = 'full', includeFileChecks = true, includeRuleValidation = true, deepCodeAnalysis = true, functionalValidation = true, strictMode = true, environmentValidation = true } = args;
4406
+ const { todoPath = 'TODO.md', adrDirectory = this.config.adrDirectory, projectPath = this.config.projectPath, environment = 'auto-detect', environmentConfig = {}, validationType = 'full', includeFileChecks = true, includeRuleValidation = true, deepCodeAnalysis = true, functionalValidation = true, strictMode = true, environmentValidation = true, } = args;
3883
4407
  const { getAdrDirectoryPath } = await import('./utils/config.js');
3884
4408
  const path = await import('path');
3885
4409
  // Resolve paths
3886
4410
  const absoluteTodoPath = path.resolve(projectPath, todoPath);
3887
- const absoluteAdrPath = adrDirectory ?
3888
- path.resolve(projectPath, adrDirectory) :
3889
- getAdrDirectoryPath(this.config);
4411
+ const absoluteAdrPath = adrDirectory
4412
+ ? path.resolve(projectPath, adrDirectory)
4413
+ : getAdrDirectoryPath(this.config);
3890
4414
  this.logger.info(`Comparing ADR progress: TODO(${absoluteTodoPath}) vs ADRs(${absoluteAdrPath}) vs Environment(${projectPath}) [env: ${environment}]`);
3891
4415
  // Environment validation and auto-detection
3892
4416
  let detectedEnvironment = environment;
3893
4417
  let finalEnvironmentConfig = { ...environmentConfig };
3894
- if (environmentValidation && (validationType === 'full' || validationType === 'environment-only')) {
4418
+ if (environmentValidation &&
4419
+ (validationType === 'full' || validationType === 'environment-only')) {
3895
4420
  try {
3896
4421
  const envResult = await this.detectAndValidateEnvironment(projectPath, environment, environmentConfig);
3897
4422
  detectedEnvironment = envResult.detectedEnvironment;
@@ -3922,7 +4447,7 @@ ${importResult.content[0].text}
3922
4447
  const includeContent = deepCodeAnalysis || functionalValidation;
3923
4448
  projectStructure = await scanProjectStructure(projectPath, {
3924
4449
  readContent: includeContent,
3925
- maxFileSize: includeContent ? 10000 : 0
4450
+ maxFileSize: includeContent ? 10000 : 0,
3926
4451
  });
3927
4452
  }
3928
4453
  catch (error) {
@@ -3941,24 +4466,24 @@ ${importResult.content[0].text}
3941
4466
  discoveredAdrs: discoveryResult?.adrs || [],
3942
4467
  adrDirectory: absoluteAdrPath,
3943
4468
  projectStructure: projectStructure || null,
3944
- projectPath,
3945
- validationType,
3946
- includeFileChecks,
3947
- includeRuleValidation,
3948
- deepCodeAnalysis,
3949
- functionalValidation,
3950
- strictMode,
4469
+ projectPath: projectPath,
4470
+ validationType: validationType,
4471
+ includeFileChecks: includeFileChecks,
4472
+ includeRuleValidation: includeRuleValidation,
4473
+ deepCodeAnalysis: deepCodeAnalysis,
4474
+ functionalValidation: functionalValidation,
4475
+ strictMode: strictMode,
3951
4476
  environment: detectedEnvironment,
3952
4477
  environmentConfig: finalEnvironmentConfig,
3953
- environmentValidation
4478
+ environmentValidation: environmentValidation,
3954
4479
  });
3955
4480
  return {
3956
4481
  content: [
3957
4482
  {
3958
4483
  type: 'text',
3959
- text: analysis
3960
- }
3961
- ]
4484
+ text: analysis,
4485
+ },
4486
+ ],
3962
4487
  };
3963
4488
  }
3964
4489
  catch (error) {
@@ -3984,7 +4509,7 @@ ${importResult.content[0].text}
3984
4509
  '.env.test',
3985
4510
  'package.json',
3986
4511
  'docker-compose.yml',
3987
- 'Dockerfile'
4512
+ 'Dockerfile',
3988
4513
  ];
3989
4514
  const existingFiles = [];
3990
4515
  for (const file of envFiles) {
@@ -4017,7 +4542,7 @@ ${importResult.content[0].text}
4017
4542
  requiredFiles: ['package.json', 'README.md'],
4018
4543
  requiredServices: ['monitoring', 'logging'],
4019
4544
  performanceRequirements: { minUptime: 99.9 },
4020
- ...finalConfig
4545
+ ...finalConfig,
4021
4546
  };
4022
4547
  break;
4023
4548
  case 'staging':
@@ -4026,7 +4551,7 @@ ${importResult.content[0].text}
4026
4551
  requiredFiles: ['package.json'],
4027
4552
  requiredServices: ['testing', 'monitoring'],
4028
4553
  performanceRequirements: { minUptime: 95 },
4029
- ...finalConfig
4554
+ ...finalConfig,
4030
4555
  };
4031
4556
  break;
4032
4557
  case 'testing':
@@ -4035,7 +4560,7 @@ ${importResult.content[0].text}
4035
4560
  requiredFiles: ['package.json'],
4036
4561
  requiredServices: ['testing'],
4037
4562
  performanceRequirements: {},
4038
- ...finalConfig
4563
+ ...finalConfig,
4039
4564
  };
4040
4565
  break;
4041
4566
  default: // development
@@ -4044,7 +4569,7 @@ ${importResult.content[0].text}
4044
4569
  requiredFiles: ['package.json'],
4045
4570
  requiredServices: [],
4046
4571
  performanceRequirements: {},
4047
- ...finalConfig
4572
+ ...finalConfig,
4048
4573
  };
4049
4574
  }
4050
4575
  }
@@ -4059,7 +4584,7 @@ ${importResult.content[0].text}
4059
4584
  * Perform local ADR progress analysis without relying on AI execution
4060
4585
  */
4061
4586
  async performLocalAdrProgressAnalysis(params) {
4062
- const { todoContent, todoPath, discoveredAdrs, adrDirectory, projectStructure, projectPath, validationType, includeFileChecks, includeRuleValidation, deepCodeAnalysis, functionalValidation, strictMode, environment, environmentConfig, environmentValidation } = params;
4587
+ const { todoContent, todoPath, discoveredAdrs, adrDirectory, projectStructure, projectPath, validationType, includeFileChecks, includeRuleValidation, deepCodeAnalysis, functionalValidation, strictMode, environment, environmentConfig, environmentValidation, } = params;
4063
4588
  const currentDate = new Date().toISOString().split('T')[0];
4064
4589
  // Parse TODO content to extract tasks
4065
4590
  const todoTasks = this.parseTodoTasks(todoContent);
@@ -4123,31 +4648,39 @@ ${importResult.content[0].text}
4123
4648
  - **Required Services**: ${environmentConfig.requiredServices?.length || 0} services
4124
4649
 
4125
4650
  ## ADR Discovery Results
4126
- ${totalAdrs > 0 ?
4127
- `Found ${totalAdrs} ADRs:\n${discoveredAdrs.map((adr, i) => `${i + 1}. **${adr.title}** (${adr.status}) - ${adr.filename}`).join('\n')}` :
4128
- 'No ADRs found in the specified directory.'}
4651
+ ${totalAdrs > 0
4652
+ ? `Found ${totalAdrs} ADRs:\n${discoveredAdrs
4653
+ .map((adr, i) => `${i + 1}. **${adr.title}** (${adr.status}) - ${adr.filename}`)
4654
+ .join('\n')}`
4655
+ : 'No ADRs found in the specified directory.'}
4129
4656
 
4130
4657
  ## TODO Task Analysis
4131
- ${totalTasks > 0 ?
4132
- `Found ${totalTasks} tasks:\n${todoTasks.map((task, i) => `${i + 1}. ${task.completed ? '✅' : '⏳'} ${task.title}`).join('\n')}` :
4133
- 'No tasks found in TODO.md file.'}
4658
+ ${totalTasks > 0
4659
+ ? `Found ${totalTasks} tasks:\n${todoTasks
4660
+ .map((task, i) => `${i + 1}. ${task.completed ? '✅' : '⏳'} ${task.title}`)
4661
+ .join('\n')}`
4662
+ : 'No tasks found in TODO.md file.'}
4134
4663
 
4135
4664
  ## Alignment Analysis
4136
4665
 
4137
4666
  ### ✅ Properly Aligned Tasks
4138
- ${adrTaskMapping.aligned.length > 0 ?
4139
- adrTaskMapping.aligned.map(task => `- ${task.title}: Corresponds to ADR requirements`).join('\n') :
4140
- '- No aligned tasks identified'}
4667
+ ${adrTaskMapping.aligned.length > 0
4668
+ ? adrTaskMapping.aligned
4669
+ .map(task => `- ${task.title}: Corresponds to ADR requirements`)
4670
+ .join('\n')
4671
+ : '- No aligned tasks identified'}
4141
4672
 
4142
4673
  ### ⚠️ Misaligned Tasks
4143
- ${adrTaskMapping.misaligned.length > 0 ?
4144
- adrTaskMapping.misaligned.map(task => `- ${task.title}: May not fully align with ADR specifications`).join('\n') :
4145
- '- No misaligned tasks identified'}
4674
+ ${adrTaskMapping.misaligned.length > 0
4675
+ ? adrTaskMapping.misaligned
4676
+ .map(task => `- ${task.title}: May not fully align with ADR specifications`)
4677
+ .join('\n')
4678
+ : '- No misaligned tasks identified'}
4146
4679
 
4147
4680
  ### ❌ Missing Tasks
4148
- ${adrTaskMapping.missing.length > 0 ?
4149
- adrTaskMapping.missing.map(gap => `- ${gap}: Required by ADRs but not in TODO`).join('\n') :
4150
- '- No obvious missing tasks identified'}
4681
+ ${adrTaskMapping.missing.length > 0
4682
+ ? adrTaskMapping.missing.map(gap => `- ${gap}: Required by ADRs but not in TODO`).join('\n')
4683
+ : '- No obvious missing tasks identified'}
4151
4684
 
4152
4685
  ## Implementation Status
4153
4686
 
@@ -4160,19 +4693,22 @@ ${mockAnalysisResults || ''}
4160
4693
  ## Recommendations
4161
4694
 
4162
4695
  ### High Priority Actions
4163
- ${alignmentScore < 70 ?
4164
- '1. **Improve ADR-TODO Alignment**: Review TODO tasks against ADR requirements\n2. **Add Missing Tasks**: Identify and add tasks required by ADRs' :
4165
- '1. **Maintain Current Alignment**: Continue following ADR specifications'}
4166
- ${completedTasks < totalTasks * 0.5 ?
4167
- '\n3. **Accelerate Implementation**: Focus on completing pending tasks' : ''}
4168
- ${environmentValidation && environment === 'production' && alignmentScore < 90 ?
4169
- '\n4. **⚠️ Production Environment Warning**: Current alignment may not meet production requirements' : ''}
4696
+ ${alignmentScore < 70
4697
+ ? '1. **Improve ADR-TODO Alignment**: Review TODO tasks against ADR requirements\n2. **Add Missing Tasks**: Identify and add tasks required by ADRs'
4698
+ : '1. **Maintain Current Alignment**: Continue following ADR specifications'}
4699
+ ${completedTasks < totalTasks * 0.5
4700
+ ? '\n3. **Accelerate Implementation**: Focus on completing pending tasks'
4701
+ : ''}
4702
+ ${environmentValidation && environment === 'production' && alignmentScore < 90
4703
+ ? '\n4. **⚠️ Production Environment Warning**: Current alignment may not meet production requirements'
4704
+ : ''}
4170
4705
 
4171
4706
  ### Medium Priority Actions
4172
4707
  1. **Review Implementation Quality**: ${strictMode ? 'Strict mode analysis above shows' : 'Consider enabling strict mode for'} detailed quality assessment
4173
4708
  2. **Update Documentation**: Ensure TODO.md reflects current project state
4174
- ${environmentValidation ?
4175
- `3. **Environment Compliance**: Ensure ${environment} environment requirements are met` : ''}
4709
+ ${environmentValidation
4710
+ ? `3. **Environment Compliance**: Ensure ${environment} environment requirements are met`
4711
+ : ''}
4176
4712
 
4177
4713
  ### Low Priority Actions
4178
4714
  1. **Optimize Workflow**: Consider tools for automated ADR-TODO synchronization
@@ -4231,16 +4767,17 @@ To re-run this validation with strict mode:
4231
4767
  const title = taskMatch[2];
4232
4768
  tasks.push({
4233
4769
  title: title.trim(),
4234
- completed: checkbox.toLowerCase() === 'x'
4770
+ completed: checkbox.toLowerCase() === 'x',
4235
4771
  });
4236
4772
  }
4237
4773
  // Also look for simple list items that might be tasks
4238
4774
  else if (line.match(/^\s*[-*]\s+\w+/)) {
4239
4775
  const title = line.replace(/^\s*[-*]\s+/, '').trim();
4240
- if (title.length > 3) { // Avoid very short items
4776
+ if (title.length > 3) {
4777
+ // Avoid very short items
4241
4778
  tasks.push({
4242
4779
  title,
4243
- completed: false
4780
+ completed: false,
4244
4781
  });
4245
4782
  }
4246
4783
  }
@@ -4257,8 +4794,14 @@ To re-run this validation with strict mode:
4257
4794
  // Simple keyword matching for alignment detection
4258
4795
  const adrKeywords = adrs.flatMap(adr => [
4259
4796
  adr.title.toLowerCase(),
4260
- ...(adr.decision || '').toLowerCase().split(/\s+/).filter((w) => w.length > 4),
4261
- ...(adr.context || '').toLowerCase().split(/\s+/).filter((w) => w.length > 4)
4797
+ ...(adr.decision || '')
4798
+ .toLowerCase()
4799
+ .split(/\s+/)
4800
+ .filter((w) => w.length > 4),
4801
+ ...(adr.context || '')
4802
+ .toLowerCase()
4803
+ .split(/\s+/)
4804
+ .filter((w) => w.length > 4),
4262
4805
  ]);
4263
4806
  // Environment-specific keywords that should be prioritized
4264
4807
  const envKeywords = [];
@@ -4289,7 +4832,15 @@ To re-run this validation with strict mode:
4289
4832
  for (const adr of adrs) {
4290
4833
  if (adr.status === 'accepted' && adr.decision) {
4291
4834
  const decisionWords = adr.decision.toLowerCase().split(/\s+/);
4292
- const implementationWords = ['implement', 'create', 'build', 'develop', 'add', 'setup', 'configure'];
4835
+ const implementationWords = [
4836
+ 'implement',
4837
+ 'create',
4838
+ 'build',
4839
+ 'develop',
4840
+ 'add',
4841
+ 'setup',
4842
+ 'configure',
4843
+ ];
4293
4844
  if (implementationWords.some(word => decisionWords.includes(word))) {
4294
4845
  const hasCorrespondingTask = tasks.some(task => task.title.toLowerCase().includes(adr.title.toLowerCase().split(' ')[0]));
4295
4846
  if (!hasCorrespondingTask) {
@@ -4326,12 +4877,12 @@ To re-run this validation with strict mode:
4326
4877
  if (!projectStructure)
4327
4878
  return '- Project structure not available';
4328
4879
  const allFiles = [
4329
- ...projectStructure.packageFiles || [],
4330
- ...projectStructure.configFiles || [],
4331
- ...projectStructure.buildFiles || [],
4332
- ...projectStructure.dockerFiles || [],
4333
- ...projectStructure.ciFiles || [],
4334
- ...projectStructure.scriptFiles || []
4880
+ ...(projectStructure.packageFiles || []),
4881
+ ...(projectStructure.configFiles || []),
4882
+ ...(projectStructure.buildFiles || []),
4883
+ ...(projectStructure.dockerFiles || []),
4884
+ ...(projectStructure.ciFiles || []),
4885
+ ...(projectStructure.scriptFiles || []),
4335
4886
  ];
4336
4887
  let results = '### File Existence Validation\n';
4337
4888
  let checkCount = 0;
@@ -4345,7 +4896,9 @@ To re-run this validation with strict mode:
4345
4896
  results += `- ✅ **${task.title}**: Found related files (${mentionedFiles.map(f => f.filename).join(', ')})\n`;
4346
4897
  checkCount++;
4347
4898
  }
4348
- else if (taskLower.includes('file') || taskLower.includes('create') || taskLower.includes('implement')) {
4899
+ else if (taskLower.includes('file') ||
4900
+ taskLower.includes('create') ||
4901
+ taskLower.includes('implement')) {
4349
4902
  results += `- ⚠️ **${task.title}**: No clearly related files found\n`;
4350
4903
  checkCount++;
4351
4904
  }
@@ -4363,8 +4916,8 @@ To re-run this validation with strict mode:
4363
4916
  if (!projectStructure)
4364
4917
  return '';
4365
4918
  const codeFiles = [
4366
- ...projectStructure.buildFiles || [],
4367
- ...projectStructure.configFiles || []
4919
+ ...(projectStructure.buildFiles || []),
4920
+ ...(projectStructure.configFiles || []),
4368
4921
  ].filter(file => file.content && file.content !== '[Binary or unreadable file]');
4369
4922
  if (codeFiles.length === 0)
4370
4923
  return '';
@@ -4382,7 +4935,7 @@ To re-run this validation with strict mode:
4382
4935
  /return\s+null;/gi,
4383
4936
  /return\s+""/gi,
4384
4937
  /return\s+\[\]/gi,
4385
- /return\s+{}/gi
4938
+ /return\s+{}/gi,
4386
4939
  ];
4387
4940
  const productionPatterns = [
4388
4941
  /error\s+handling/gi,
@@ -4393,18 +4946,21 @@ To re-run this validation with strict mode:
4393
4946
  /authorization/gi,
4394
4947
  /database/gi,
4395
4948
  /api/gi,
4396
- /config/gi
4949
+ /config/gi,
4397
4950
  ];
4398
- for (const file of codeFiles.slice(0, 10)) { // Limit analysis to prevent overwhelming output
4951
+ for (const file of codeFiles.slice(0, 10)) {
4952
+ // Limit analysis to prevent overwhelming output
4399
4953
  const content = file.content;
4400
4954
  const fileMockCount = mockPatterns.reduce((count, pattern) => count + (content.match(pattern) || []).length, 0);
4401
4955
  const fileProdCount = productionPatterns.reduce((count, pattern) => count + (content.match(pattern) || []).length, 0);
4402
4956
  mockIndicators += fileMockCount;
4403
4957
  productionIndicators += fileProdCount;
4404
4958
  if (fileMockCount > 0 || fileProdCount > 2) {
4405
- const status = fileMockCount > fileProdCount ? '❌ **Mock/Stub**' :
4406
- fileProdCount > fileMockCount * 2 ? '✅ **Production Ready**' :
4407
- '⚠️ **Partial Implementation**';
4959
+ const status = fileMockCount > fileProdCount
4960
+ ? '❌ **Mock/Stub**'
4961
+ : fileProdCount > fileMockCount * 2
4962
+ ? '✅ **Production Ready**'
4963
+ : '⚠️ **Partial Implementation**';
4408
4964
  results += `- ${status}: ${file.filename} `;
4409
4965
  if (fileMockCount > 0) {
4410
4966
  results += `(${fileMockCount} mock indicators) `;
@@ -4419,8 +4975,11 @@ To re-run this validation with strict mode:
4419
4975
  results += `- **Mock Indicators Found**: ${mockIndicators} instances\n`;
4420
4976
  results += `- **Production Indicators Found**: ${productionIndicators} instances\n`;
4421
4977
  if (strictMode) {
4422
- const qualityScore = productionIndicators > mockIndicators * 2 ? 'Good' :
4423
- productionIndicators > mockIndicators ? 'Fair' : 'Needs Improvement';
4978
+ const qualityScore = productionIndicators > mockIndicators * 2
4979
+ ? 'Good'
4980
+ : productionIndicators > mockIndicators
4981
+ ? 'Fair'
4982
+ : 'Needs Improvement';
4424
4983
  results += `- **Quality Assessment**: ${qualityScore}\n`;
4425
4984
  if (mockIndicators > 0) {
4426
4985
  results += `- **⚠️ Strict Mode Warning**: Found ${mockIndicators} potential mock/stub indicators\n`;
@@ -4438,12 +4997,12 @@ To re-run this validation with strict mode:
4438
4997
  // Check required files
4439
4998
  if (environmentConfig.requiredFiles) {
4440
4999
  const allFiles = [
4441
- ...projectStructure.packageFiles || [],
4442
- ...projectStructure.configFiles || [],
4443
- ...projectStructure.buildFiles || [],
4444
- ...projectStructure.dockerFiles || [],
4445
- ...projectStructure.ciFiles || [],
4446
- ...projectStructure.scriptFiles || []
5000
+ ...(projectStructure.packageFiles || []),
5001
+ ...(projectStructure.configFiles || []),
5002
+ ...(projectStructure.buildFiles || []),
5003
+ ...(projectStructure.dockerFiles || []),
5004
+ ...(projectStructure.ciFiles || []),
5005
+ ...(projectStructure.scriptFiles || []),
4447
5006
  ];
4448
5007
  const existingFiles = allFiles.map(f => f.filename);
4449
5008
  const missingFiles = environmentConfig.requiredFiles.filter((file) => !existingFiles.includes(file));
@@ -4472,12 +5031,12 @@ To re-run this validation with strict mode:
4472
5031
  if (environmentConfig.requiredFiles) {
4473
5032
  results += `#### Required Files for ${environment} Environment\n`;
4474
5033
  const allFiles = [
4475
- ...projectStructure.packageFiles || [],
4476
- ...projectStructure.configFiles || [],
4477
- ...projectStructure.buildFiles || [],
4478
- ...projectStructure.dockerFiles || [],
4479
- ...projectStructure.ciFiles || [],
4480
- ...projectStructure.scriptFiles || []
5034
+ ...(projectStructure.packageFiles || []),
5035
+ ...(projectStructure.configFiles || []),
5036
+ ...(projectStructure.buildFiles || []),
5037
+ ...(projectStructure.dockerFiles || []),
5038
+ ...(projectStructure.ciFiles || []),
5039
+ ...(projectStructure.scriptFiles || []),
4481
5040
  ];
4482
5041
  const existingFiles = allFiles.map(f => f.filename);
4483
5042
  for (const requiredFile of environmentConfig.requiredFiles) {
@@ -4495,11 +5054,13 @@ To re-run this validation with strict mode:
4495
5054
  results += `\n#### ${environment} Environment Recommendations\n`;
4496
5055
  switch (environment) {
4497
5056
  case 'production':
4498
- results += '- ⚠️ **Production Critical**: Ensure monitoring, logging, and backup strategies are implemented\n';
5057
+ results +=
5058
+ '- ⚠️ **Production Critical**: Ensure monitoring, logging, and backup strategies are implemented\n';
4499
5059
  results += '- 🔒 **Security**: Implement comprehensive security measures\n';
4500
5060
  results += '- 📊 **Performance**: Monitor and optimize for production workloads\n';
4501
5061
  if (strictMode) {
4502
- results += '- 🔍 **Strict Mode**: Enhanced validation enabled for production environment\n';
5062
+ results +=
5063
+ '- 🔍 **Strict Mode**: Enhanced validation enabled for production environment\n';
4503
5064
  }
4504
5065
  break;
4505
5066
  case 'staging':
@@ -4519,8 +5080,8 @@ To re-run this validation with strict mode:
4519
5080
  analyzeSecurityCompliance(projectStructure, securityLevel) {
4520
5081
  let results = '';
4521
5082
  const securityFiles = [
4522
- ...projectStructure.configFiles || [],
4523
- ...projectStructure.dockerFiles || []
5083
+ ...(projectStructure.configFiles || []),
5084
+ ...(projectStructure.dockerFiles || []),
4524
5085
  ].filter(file => file.filename.includes('security') ||
4525
5086
  file.filename.includes('auth') ||
4526
5087
  file.filename.includes('.env') ||
@@ -4592,9 +5153,9 @@ ${clearPrompt.instructions}
4592
5153
 
4593
5154
  ## Expected Result
4594
5155
 
4595
- After successful execution, all cache entries will be removed while preserving the cache directory structure and metadata.json file.`
4596
- }
4597
- ]
5156
+ After successful execution, all cache entries will be removed while preserving the cache directory structure and metadata.json file.`,
5157
+ },
5158
+ ],
4598
5159
  };
4599
5160
  }
4600
5161
  case 'stats': {
@@ -4635,9 +5196,9 @@ The AI agent will provide:
4635
5196
  Use \`manage_cache\` tool with different actions:
4636
5197
  - \`clear\`: Remove all cache entries
4637
5198
  - \`cleanup\`: Remove expired entries only
4638
- - \`invalidate\`: Remove specific cache entry`
4639
- }
4640
- ]
5199
+ - \`invalidate\`: Remove specific cache entry`,
5200
+ },
5201
+ ],
4641
5202
  };
4642
5203
  }
4643
5204
  case 'cleanup': {
@@ -4660,9 +5221,9 @@ ${cleanupPrompt.instructions}
4660
5221
 
4661
5222
  ## Expected Result
4662
5223
 
4663
- The AI agent will remove expired cache entries and provide a count of cleaned files.`
4664
- }
4665
- ]
5224
+ The AI agent will remove expired cache entries and provide a count of cleaned files.`,
5225
+ },
5226
+ ],
4666
5227
  };
4667
5228
  }
4668
5229
  case 'invalidate': {
@@ -4690,9 +5251,9 @@ ${invalidatePrompt.instructions}
4690
5251
 
4691
5252
  **Cache Key**: ${key}
4692
5253
 
4693
- The AI agent will safely remove the specified cache entry.`
4694
- }
4695
- ]
5254
+ The AI agent will safely remove the specified cache entry.`,
5255
+ },
5256
+ ],
4696
5257
  };
4697
5258
  }
4698
5259
  default:
@@ -4734,9 +5295,9 @@ Use \`configure_output_masking\` tool with:
4734
5295
 
4735
5296
  ## Current Status
4736
5297
  ${this.maskingConfig.enabled ? '✅ Output masking is ACTIVE' : '⚠️ Output masking is DISABLED'}
4737
- `
4738
- }
4739
- ]
5298
+ `,
5299
+ },
5300
+ ],
4740
5301
  };
4741
5302
  }
4742
5303
  case 'set': {
@@ -4744,7 +5305,8 @@ ${this.maskingConfig.enabled ? '✅ Output masking is ACTIVE' : '⚠️ Output m
4744
5305
  if (typeof enabled === 'boolean') {
4745
5306
  newConfig.enabled = enabled;
4746
5307
  }
4747
- if (strategy && ['full', 'partial', 'placeholder', 'environment'].includes(strategy)) {
5308
+ if (strategy &&
5309
+ ['full', 'partial', 'placeholder', 'environment'].includes(strategy)) {
4748
5310
  newConfig.strategy = strategy;
4749
5311
  }
4750
5312
  if (Array.isArray(customPatterns)) {
@@ -4766,12 +5328,12 @@ ${this.maskingConfig.enabled ? '✅ Output masking is ACTIVE' : '⚠️ Output m
4766
5328
  - **Strategy**: ${newConfig.strategy}
4767
5329
  - **Custom Patterns**: ${newConfig.customPatterns?.length || 0} patterns
4768
5330
 
4769
- ${newConfig.enabled ?
4770
- '🔒 All MCP tool and resource outputs will now be masked according to the new configuration.' :
4771
- '⚠️ Output masking is disabled. Sensitive information may be exposed in responses.'}
4772
- `
4773
- }
4774
- ]
5331
+ ${newConfig.enabled
5332
+ ? '🔒 All MCP tool and resource outputs will now be masked according to the new configuration.'
5333
+ : '⚠️ Output masking is disabled. Sensitive information may be exposed in responses.'}
5334
+ `,
5335
+ },
5336
+ ],
4775
5337
  };
4776
5338
  }
4777
5339
  case 'reset': {
@@ -4790,9 +5352,9 @@ ${newConfig.enabled ?
4790
5352
  - **Skip Patterns**: ${this.maskingConfig.skipPatterns?.length || 0} patterns
4791
5353
 
4792
5354
  🔒 Default masking is now active for all outputs.
4793
- `
4794
- }
4795
- ]
5355
+ `,
5356
+ },
5357
+ ],
4796
5358
  };
4797
5359
  }
4798
5360
  default:
@@ -4810,12 +5372,17 @@ ${newConfig.enabled ?
4810
5372
  const domainMap = {
4811
5373
  'web-application': ['api-design', 'frontend-architecture', 'database-design', 'security'],
4812
5374
  'mobile-app': ['mobile-architecture', 'api-design', 'performance-optimization', 'security'],
4813
- 'microservices': ['microservices', 'api-design', 'distributed-systems', 'database-design'],
4814
- 'data-platform': ['database-design', 'data-architecture', 'performance-optimization', 'scalability'],
5375
+ microservices: ['microservices', 'api-design', 'distributed-systems', 'database-design'],
5376
+ 'data-platform': [
5377
+ 'database-design',
5378
+ 'data-architecture',
5379
+ 'performance-optimization',
5380
+ 'scalability',
5381
+ ],
4815
5382
  'api-service': ['api-design', 'microservices', 'security', 'performance-optimization'],
4816
- 'general': ['api-design', 'database-design', 'security']
5383
+ general: ['api-design', 'database-design', 'security'],
4817
5384
  };
4818
- return domainMap[prdType] || domainMap['general'] || ['api-design', 'database-design', 'security'];
5385
+ return (domainMap[prdType] || domainMap['general'] || ['api-design', 'database-design', 'security']);
4819
5386
  }
4820
5387
  /**
4821
5388
  * Helper method to get domains for ecosystem analysis based on technology focus
@@ -4825,35 +5392,35 @@ ${newConfig.enabled ?
4825
5392
  const baseDomains = ['api-design', 'database-design', 'security', 'performance-optimization'];
4826
5393
  // Technology-specific domain mapping
4827
5394
  const technologyDomainMap = {
4828
- 'react': ['frontend-architecture', 'web-applications'],
4829
- 'vue': ['frontend-architecture', 'web-applications'],
4830
- 'angular': ['frontend-architecture', 'web-applications'],
4831
- 'node': ['api-design', 'microservices'],
4832
- 'express': ['api-design', 'web-applications'],
4833
- 'fastify': ['api-design', 'performance-optimization'],
4834
- 'nestjs': ['api-design', 'microservices'],
4835
- 'spring': ['api-design', 'microservices'],
4836
- 'django': ['api-design', 'web-applications'],
4837
- 'flask': ['api-design', 'web-applications'],
4838
- 'rails': ['api-design', 'web-applications'],
4839
- 'laravel': ['api-design', 'web-applications'],
4840
- 'docker': ['containerization', 'microservices'],
4841
- 'kubernetes': ['containerization', 'distributed-systems'],
4842
- 'mongodb': ['database-design', 'data-architecture'],
4843
- 'postgresql': ['database-design', 'data-architecture'],
4844
- 'mysql': ['database-design', 'data-architecture'],
4845
- 'redis': ['database-design', 'performance-optimization'],
4846
- 'elasticsearch': ['database-design', 'data-architecture'],
4847
- 'kafka': ['distributed-systems', 'data-architecture'],
4848
- 'rabbitmq': ['distributed-systems', 'microservices'],
4849
- 'aws': ['cloud-architecture', 'scalability'],
4850
- 'azure': ['cloud-architecture', 'scalability'],
4851
- 'gcp': ['cloud-architecture', 'scalability'],
4852
- 'terraform': ['infrastructure-as-code', 'cloud-architecture'],
4853
- 'ansible': ['infrastructure-as-code', 'automation'],
4854
- 'jenkins': ['ci-cd', 'automation'],
5395
+ react: ['frontend-architecture', 'web-applications'],
5396
+ vue: ['frontend-architecture', 'web-applications'],
5397
+ angular: ['frontend-architecture', 'web-applications'],
5398
+ node: ['api-design', 'microservices'],
5399
+ express: ['api-design', 'web-applications'],
5400
+ fastify: ['api-design', 'performance-optimization'],
5401
+ nestjs: ['api-design', 'microservices'],
5402
+ spring: ['api-design', 'microservices'],
5403
+ django: ['api-design', 'web-applications'],
5404
+ flask: ['api-design', 'web-applications'],
5405
+ rails: ['api-design', 'web-applications'],
5406
+ laravel: ['api-design', 'web-applications'],
5407
+ docker: ['containerization', 'microservices'],
5408
+ kubernetes: ['containerization', 'distributed-systems'],
5409
+ mongodb: ['database-design', 'data-architecture'],
5410
+ postgresql: ['database-design', 'data-architecture'],
5411
+ mysql: ['database-design', 'data-architecture'],
5412
+ redis: ['database-design', 'performance-optimization'],
5413
+ elasticsearch: ['database-design', 'data-architecture'],
5414
+ kafka: ['distributed-systems', 'data-architecture'],
5415
+ rabbitmq: ['distributed-systems', 'microservices'],
5416
+ aws: ['cloud-architecture', 'scalability'],
5417
+ azure: ['cloud-architecture', 'scalability'],
5418
+ gcp: ['cloud-architecture', 'scalability'],
5419
+ terraform: ['infrastructure-as-code', 'cloud-architecture'],
5420
+ ansible: ['infrastructure-as-code', 'automation'],
5421
+ jenkins: ['ci-cd', 'automation'],
4855
5422
  'github-actions': ['ci-cd', 'automation'],
4856
- 'gitlab-ci': ['ci-cd', 'automation']
5423
+ 'gitlab-ci': ['ci-cd', 'automation'],
4857
5424
  };
4858
5425
  // Collect domains based on technology focus
4859
5426
  const technologyDomains = new Set();
@@ -4973,10 +5540,18 @@ Please provide:
4973
5540
  const { generateAdrFromDecision } = await import('./tools/adr-suggestion-tool.js');
4974
5541
  return await generateAdrFromDecision(args);
4975
5542
  }
5543
+ async generateAdrBootstrap(args) {
5544
+ const { default: generateAdrBootstrapScripts } = await import('./tools/adr-bootstrap-validation-tool.js');
5545
+ return await generateAdrBootstrapScripts(args);
5546
+ }
4976
5547
  async discoverExistingAdrs(args) {
4977
5548
  const { discoverExistingAdrs } = await import('./tools/adr-suggestion-tool.js');
4978
5549
  return await discoverExistingAdrs(args);
4979
5550
  }
5551
+ async reviewExistingAdrs(args) {
5552
+ const { reviewExistingAdrs } = await import('./tools/review-existing-adrs-tool.js');
5553
+ return await reviewExistingAdrs(args);
5554
+ }
4980
5555
  /**
4981
5556
  * Research integration tool implementations
4982
5557
  */
@@ -5031,6 +5606,129 @@ Please provide:
5031
5606
  /**
5032
5607
  * Apply content masking to MCP response
5033
5608
  */
5609
+ /**
5610
+ * Track memory operations performed by tools
5611
+ */
5612
+ async trackMemoryOperations(toolName, parameters, result, success) {
5613
+ try {
5614
+ // Check if memory integration was enabled and used
5615
+ if (parameters?.enableMemoryIntegration === false) {
5616
+ return; // Memory integration was explicitly disabled
5617
+ }
5618
+ // Extract memory operation information from result
5619
+ const memoryOps = this.extractMemoryOperations(toolName, parameters, result);
5620
+ if (memoryOps.length > 0) {
5621
+ // Store memory operation tracking in knowledge graph
5622
+ for (const op of memoryOps) {
5623
+ await this.kgManager.addMemoryExecution(toolName, op.action, op.entityType, success && op.success, op.details);
5624
+ }
5625
+ }
5626
+ }
5627
+ catch (error) {
5628
+ // Don't let memory tracking errors break execution
5629
+ console.error('[WARN] Memory operation tracking failed:', error);
5630
+ }
5631
+ }
5632
+ /**
5633
+ * Extract memory operation details from tool execution
5634
+ */
5635
+ extractMemoryOperations(toolName, parameters, result) {
5636
+ const operations = [];
5637
+ // Define memory-enabled tools and their expected operations
5638
+ const memoryEnabledTools = {
5639
+ analyze_content_security: {
5640
+ entityType: 'security_pattern',
5641
+ actions: ['store_pattern', 'analyze_institutional_security', 'track_evolution'],
5642
+ },
5643
+ analyze_environment: {
5644
+ entityType: 'environment_snapshot',
5645
+ actions: ['store_snapshot', 'analyze_trends', 'compare_configurations'],
5646
+ },
5647
+ deployment_readiness: {
5648
+ entityType: 'deployment_assessment',
5649
+ actions: ['store_assessment', 'migrate_history', 'analyze_patterns'],
5650
+ },
5651
+ troubleshoot_guided_workflow: {
5652
+ entityType: 'troubleshooting_session',
5653
+ actions: ['store_session', 'pattern_recognition', 'suggest_adrs', 'generate_research'],
5654
+ },
5655
+ };
5656
+ // Check if this tool supports memory operations
5657
+ const toolConfig = memoryEnabledTools[toolName];
5658
+ if (!toolConfig) {
5659
+ return operations; // Tool doesn't support memory operations
5660
+ }
5661
+ // Extract memory operation details from result
5662
+ if (result?.memoryIntegration) {
5663
+ const memoryInfo = result.memoryIntegration;
5664
+ // Pattern entity storage operation
5665
+ if (memoryInfo.entityStored || memoryInfo.patternStored) {
5666
+ operations.push({
5667
+ action: 'entity_storage',
5668
+ entityType: toolConfig.entityType,
5669
+ success: memoryInfo.storageSuccess !== false,
5670
+ details: {
5671
+ entityId: memoryInfo.entityId || memoryInfo.patternId,
5672
+ entityCount: memoryInfo.entityCount || 1,
5673
+ storageMethod: memoryInfo.storageMethod || 'standard',
5674
+ },
5675
+ });
5676
+ }
5677
+ // Historical analysis operation
5678
+ if (memoryInfo.historicalAnalysis || memoryInfo.trendAnalysis) {
5679
+ operations.push({
5680
+ action: 'historical_analysis',
5681
+ entityType: toolConfig.entityType,
5682
+ success: memoryInfo.analysisSuccess !== false,
5683
+ details: {
5684
+ analysisType: memoryInfo.analysisType || 'trend_analysis',
5685
+ entitiesAnalyzed: memoryInfo.entitiesAnalyzed || 0,
5686
+ insights: memoryInfo.insights || [],
5687
+ },
5688
+ });
5689
+ }
5690
+ // Evolution tracking operation
5691
+ if (memoryInfo.evolutionTracking) {
5692
+ operations.push({
5693
+ action: 'evolution_tracking',
5694
+ entityType: toolConfig.entityType,
5695
+ success: memoryInfo.evolutionSuccess !== false,
5696
+ details: {
5697
+ improvements: memoryInfo.improvements || [],
5698
+ degradations: memoryInfo.degradations || [],
5699
+ recommendations: memoryInfo.recommendations || [],
5700
+ },
5701
+ });
5702
+ }
5703
+ // Migration operation (for deployment readiness)
5704
+ if (memoryInfo.migrationCompleted) {
5705
+ operations.push({
5706
+ action: 'data_migration',
5707
+ entityType: toolConfig.entityType,
5708
+ success: memoryInfo.migrationSuccess !== false,
5709
+ details: {
5710
+ migratedRecords: memoryInfo.migratedRecords || 0,
5711
+ migrationMethod: memoryInfo.migrationMethod || 'json_to_memory',
5712
+ },
5713
+ });
5714
+ }
5715
+ }
5716
+ // If no specific memory integration info, infer from parameters
5717
+ if (operations.length === 0 && parameters?.enableMemoryIntegration !== false) {
5718
+ // Default assumption: entity was stored
5719
+ operations.push({
5720
+ action: 'entity_storage',
5721
+ entityType: toolConfig.entityType,
5722
+ success: true, // Assume success if no explicit info
5723
+ details: {
5724
+ entityCount: 1,
5725
+ storageMethod: 'inferred',
5726
+ note: 'Memory operation inferred from tool execution',
5727
+ },
5728
+ });
5729
+ }
5730
+ return operations;
5731
+ }
5034
5732
  /**
5035
5733
  * Track tool execution in knowledge graph
5036
5734
  */
@@ -5076,6 +5774,8 @@ Please provide:
5076
5774
  todoTasksModified.push(...result.metadata.taskIds);
5077
5775
  }
5078
5776
  }
5777
+ // Track memory operations if present
5778
+ await this.trackMemoryOperations(toolName, parameters, result, success);
5079
5779
  // Store execution in knowledge graph
5080
5780
  await this.kgManager.addToolExecution(intentId, toolName, parameters, result, success, todoTasksCreated, todoTasksModified, error);
5081
5781
  // If execution completed successfully, update intent status
@@ -5127,9 +5827,9 @@ Please provide:
5127
5827
  {
5128
5828
  uri,
5129
5829
  mimeType: result.contentType,
5130
- text: JSON.stringify(result.data, null, 2)
5131
- }
5132
- ]
5830
+ text: JSON.stringify(result.data, null, 2),
5831
+ },
5832
+ ],
5133
5833
  };
5134
5834
  }
5135
5835
  case 'analysis_report': {
@@ -5143,9 +5843,9 @@ Please provide:
5143
5843
  {
5144
5844
  uri,
5145
5845
  mimeType: result.contentType,
5146
- text: JSON.stringify(result.data, null, 2)
5147
- }
5148
- ]
5846
+ text: JSON.stringify(result.data, null, 2),
5847
+ },
5848
+ ],
5149
5849
  };
5150
5850
  }
5151
5851
  case 'adr_list': {
@@ -5153,9 +5853,9 @@ Please provide:
5153
5853
  const { getAdrDirectoryPath } = await import('./utils/config.js');
5154
5854
  const path = await import('path');
5155
5855
  // Use absolute ADR path relative to project
5156
- const absoluteAdrPath = params['adrDirectory'] ?
5157
- path.resolve(this.config.projectPath, params['adrDirectory']) :
5158
- getAdrDirectoryPath(this.config);
5856
+ const absoluteAdrPath = params['adrDirectory']
5857
+ ? path.resolve(this.config.projectPath, params['adrDirectory'])
5858
+ : getAdrDirectoryPath(this.config);
5159
5859
  // Generate resource directly (caching is now handled through AI delegation)
5160
5860
  const result = await generateAdrList(absoluteAdrPath, this.config.projectPath);
5161
5861
  return {
@@ -5163,9 +5863,9 @@ Please provide:
5163
5863
  {
5164
5864
  uri,
5165
5865
  mimeType: result.contentType,
5166
- text: JSON.stringify(result.data, null, 2)
5167
- }
5168
- ]
5866
+ text: JSON.stringify(result.data, null, 2),
5867
+ },
5868
+ ],
5169
5869
  };
5170
5870
  }
5171
5871
  default:
@@ -5197,7 +5897,7 @@ Please provide:
5197
5897
  * File system tool implementations
5198
5898
  */
5199
5899
  async readFile(args) {
5200
- const { path: filePath } = args;
5900
+ const { filePath } = args;
5201
5901
  try {
5202
5902
  const fs = await import('fs/promises');
5203
5903
  const path = await import('path');
@@ -5212,9 +5912,9 @@ Please provide:
5212
5912
  content: [
5213
5913
  {
5214
5914
  type: 'text',
5215
- text: content
5216
- }
5217
- ]
5915
+ text: content,
5916
+ },
5917
+ ],
5218
5918
  };
5219
5919
  }
5220
5920
  catch (error) {
@@ -5222,7 +5922,7 @@ Please provide:
5222
5922
  }
5223
5923
  }
5224
5924
  async writeFile(args) {
5225
- const { path: filePath, content } = args;
5925
+ const { filePath, content } = args;
5226
5926
  try {
5227
5927
  const fs = await import('fs/promises');
5228
5928
  const path = await import('path');
@@ -5240,9 +5940,9 @@ Please provide:
5240
5940
  content: [
5241
5941
  {
5242
5942
  type: 'text',
5243
- text: `Successfully wrote to ${filePath}`
5244
- }
5245
- ]
5943
+ text: `Successfully wrote to ${filePath}`,
5944
+ },
5945
+ ],
5246
5946
  };
5247
5947
  }
5248
5948
  catch (error) {
@@ -5264,32 +5964,52 @@ Please provide:
5264
5964
  const fileList = entries.map(entry => ({
5265
5965
  name: entry.name,
5266
5966
  type: entry.isDirectory() ? 'directory' : 'file',
5267
- path: path.join(dirPath, entry.name)
5967
+ path: path.join(dirPath, entry.name),
5268
5968
  }));
5269
5969
  return {
5270
5970
  content: [
5271
5971
  {
5272
5972
  type: 'text',
5273
- text: JSON.stringify(fileList, null, 2)
5274
- }
5275
- ]
5973
+ text: JSON.stringify(fileList, null, 2),
5974
+ },
5975
+ ],
5276
5976
  };
5277
5977
  }
5278
5978
  catch (error) {
5279
5979
  throw new McpAdrError(`Failed to list directory: ${error instanceof Error ? error.message : String(error)}`, 'DIRECTORY_LIST_ERROR');
5280
5980
  }
5281
5981
  }
5282
- async manageTodoJson(args) {
5982
+ async manageTodoJson(_args) {
5283
5983
  try {
5284
- const { manageTodoV2 } = await import('./tools/todo-management-tool-v2.js');
5285
- // Add projectPath to args if not provided
5286
- const argsWithPath = {
5287
- ...args,
5288
- projectPath: args.projectPath || this.config.projectPath
5984
+ // TODO management has been deprecated and moved to mcp-shrimp-task-manager
5985
+ this.logger.warn('⚠️ manageTodoJson deprecated - use mcp-shrimp-task-manager instead');
5986
+ return {
5987
+ content: [
5988
+ {
5989
+ type: 'text',
5990
+ text: `⚠️ **TODO Management Tool Deprecated**
5991
+
5992
+ This tool (manageTodoJson) has been deprecated and is no longer functional.
5993
+
5994
+ **Replacement:** Use the external \`mcp-shrimp-task-manager\` for task management:
5995
+ - Task planning and breaking down
5996
+ - Task tracking and status updates
5997
+ - Task dependencies and priorities
5998
+ - Task completion and verification
5999
+
6000
+ **Migration:** The system has moved to a memory-centric architecture where task management is handled by external MCP servers rather than internal JSON files.
6001
+
6002
+ **Error:** TodoJsonManager was removed - use mcp-shrimp-task-manager for task management`,
6003
+ },
6004
+ ],
6005
+ isError: false,
5289
6006
  };
5290
- return await manageTodoV2(argsWithPath);
5291
6007
  }
5292
6008
  catch (error) {
6009
+ // If it's already a McpAdrError with good details, re-throw it as-is
6010
+ if (error instanceof Error && error.name === 'McpAdrError') {
6011
+ throw error;
6012
+ }
5293
6013
  throw new McpAdrError(`JSON TODO management failed: ${error instanceof Error ? error.message : String(error)}`, 'TODO_JSON_MANAGEMENT_ERROR');
5294
6014
  }
5295
6015
  }
@@ -5329,14 +6049,28 @@ Please provide:
5329
6049
  throw new McpAdrError(`Troubleshoot guided workflow failed: ${error instanceof Error ? error.message : String(error)}`, 'TROUBLESHOOT_GUIDED_WORKFLOW_ERROR');
5330
6050
  }
5331
6051
  }
5332
- async smartScore(args) {
5333
- try {
5334
- const { smartScore } = await import('./tools/smart-score-tool.js');
5335
- return await smartScore(args);
5336
- }
5337
- catch (error) {
5338
- throw new McpAdrError(`Smart score analysis failed: ${error instanceof Error ? error.message : String(error)}`, 'SMART_SCORE_ERROR');
5339
- }
6052
+ async smartScore(_args) {
6053
+ // Smart score tool was removed - return deprecation message
6054
+ return {
6055
+ content: [
6056
+ {
6057
+ type: 'text',
6058
+ text: `⚠️ **Smart Score Tool Deprecated**
6059
+
6060
+ This tool has been deprecated and replaced with memory-centric health scoring.
6061
+
6062
+ **Replacement:** The new MemoryHealthScoring system tracks:
6063
+ - Memory quality and relevance
6064
+ - Retrieval performance
6065
+ - Entity relationship coherence
6066
+ - Context utilization
6067
+ - Decision alignment
6068
+
6069
+ **Migration:** Health scoring is now integrated into the knowledge graph and automatically calculated based on memory usage patterns.`,
6070
+ },
6071
+ ],
6072
+ isError: false,
6073
+ };
5340
6074
  }
5341
6075
  async mcpPlanning(args) {
5342
6076
  try {
@@ -5347,6 +6081,16 @@ Please provide:
5347
6081
  throw new McpAdrError(`MCP planning failed: ${error instanceof Error ? error.message : String(error)}`, 'MCP_PLANNING_ERROR');
5348
6082
  }
5349
6083
  }
6084
+ async memoryLoading(args) {
6085
+ try {
6086
+ const { MemoryLoadingTool } = await import('./tools/memory-loading-tool.js');
6087
+ const memoryTool = new MemoryLoadingTool();
6088
+ return await memoryTool.execute(args);
6089
+ }
6090
+ catch (error) {
6091
+ throw new McpAdrError(`Memory loading failed: ${error instanceof Error ? error.message : String(error)}`, 'MEMORY_LOADING_ERROR');
6092
+ }
6093
+ }
5350
6094
  async interactiveAdrPlanning(args) {
5351
6095
  try {
5352
6096
  const { interactiveAdrPlanning } = await import('./tools/interactive-adr-planning-tool.js');
@@ -5356,6 +6100,18 @@ Please provide:
5356
6100
  throw new McpAdrError(`Interactive ADR planning failed: ${error instanceof Error ? error.message : String(error)}`, 'INTERACTIVE_ADR_PLANNING_ERROR');
5357
6101
  }
5358
6102
  }
6103
+ /**
6104
+ * Tool chain orchestrator implementation
6105
+ */
6106
+ async toolChainOrchestrator(args) {
6107
+ try {
6108
+ const { toolChainOrchestrator } = await import('./tools/tool-chain-orchestrator.js');
6109
+ return await toolChainOrchestrator(args);
6110
+ }
6111
+ catch (error) {
6112
+ throw new McpAdrError(`Tool chain orchestration failed: ${error instanceof Error ? error.message : String(error)}`, 'TOOL_CHAIN_ORCHESTRATOR_ERROR');
6113
+ }
6114
+ }
5359
6115
  }
5360
6116
  /**
5361
6117
  * Main execution
@@ -5416,10 +6172,11 @@ Examples:
5416
6172
  // Start the server if this file is run directly
5417
6173
  // Jest-compatible check: avoid import.meta.url which Jest cannot handle
5418
6174
  // Handle both direct execution and npm global package symlinks
5419
- if (process.argv[1] && (process.argv[1].endsWith('index.js') ||
5420
- process.argv[1].endsWith('index.ts') ||
5421
- process.argv[1].endsWith('mcp-adr-analysis-server'))) {
5422
- main().catch((error) => {
6175
+ if (process.argv[1] &&
6176
+ (process.argv[1].endsWith('index.js') ||
6177
+ process.argv[1].endsWith('index.ts') ||
6178
+ process.argv[1].endsWith('mcp-adr-analysis-server'))) {
6179
+ main().catch(error => {
5423
6180
  console.error('Unhandled error:', error);
5424
6181
  process.exit(1);
5425
6182
  });