windows-exe-decompiler-mcp-server 0.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 (190) hide show
  1. package/CODEX_INSTALLATION.md +69 -0
  2. package/COPILOT_INSTALLATION.md +77 -0
  3. package/LICENSE +21 -0
  4. package/README.md +314 -0
  5. package/bin/windows-exe-decompiler-mcp-server.js +3 -0
  6. package/dist/analysis-provenance.d.ts +184 -0
  7. package/dist/analysis-provenance.js +74 -0
  8. package/dist/analysis-task-runner.d.ts +31 -0
  9. package/dist/analysis-task-runner.js +160 -0
  10. package/dist/artifact-inventory.d.ts +23 -0
  11. package/dist/artifact-inventory.js +175 -0
  12. package/dist/cache-manager.d.ts +128 -0
  13. package/dist/cache-manager.js +454 -0
  14. package/dist/confidence-semantics.d.ts +66 -0
  15. package/dist/confidence-semantics.js +122 -0
  16. package/dist/config.d.ts +335 -0
  17. package/dist/config.js +193 -0
  18. package/dist/database.d.ts +227 -0
  19. package/dist/database.js +601 -0
  20. package/dist/decompiler-worker.d.ts +441 -0
  21. package/dist/decompiler-worker.js +1962 -0
  22. package/dist/dynamic-trace.d.ts +95 -0
  23. package/dist/dynamic-trace.js +629 -0
  24. package/dist/env-validator.d.ts +15 -0
  25. package/dist/env-validator.js +249 -0
  26. package/dist/error-handler.d.ts +28 -0
  27. package/dist/error-handler.example.d.ts +22 -0
  28. package/dist/error-handler.example.js +141 -0
  29. package/dist/error-handler.js +139 -0
  30. package/dist/ghidra-analysis-status.d.ts +49 -0
  31. package/dist/ghidra-analysis-status.js +178 -0
  32. package/dist/ghidra-config.d.ts +134 -0
  33. package/dist/ghidra-config.js +464 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.js +200 -0
  36. package/dist/job-queue.d.ts +169 -0
  37. package/dist/job-queue.js +407 -0
  38. package/dist/logger.d.ts +106 -0
  39. package/dist/logger.js +176 -0
  40. package/dist/policy-guard.d.ts +115 -0
  41. package/dist/policy-guard.js +243 -0
  42. package/dist/process-output.d.ts +15 -0
  43. package/dist/process-output.js +90 -0
  44. package/dist/prompts/function-explanation-review.d.ts +5 -0
  45. package/dist/prompts/function-explanation-review.js +64 -0
  46. package/dist/prompts/semantic-name-review.d.ts +5 -0
  47. package/dist/prompts/semantic-name-review.js +63 -0
  48. package/dist/runtime-correlation.d.ts +34 -0
  49. package/dist/runtime-correlation.js +279 -0
  50. package/dist/runtime-paths.d.ts +3 -0
  51. package/dist/runtime-paths.js +11 -0
  52. package/dist/selection-diff.d.ts +667 -0
  53. package/dist/selection-diff.js +53 -0
  54. package/dist/semantic-name-suggestion-artifacts.d.ts +116 -0
  55. package/dist/semantic-name-suggestion-artifacts.js +314 -0
  56. package/dist/server.d.ts +129 -0
  57. package/dist/server.js +578 -0
  58. package/dist/tools/artifact-read.d.ts +235 -0
  59. package/dist/tools/artifact-read.js +317 -0
  60. package/dist/tools/artifacts-diff.d.ts +728 -0
  61. package/dist/tools/artifacts-diff.js +304 -0
  62. package/dist/tools/artifacts-list.d.ts +515 -0
  63. package/dist/tools/artifacts-list.js +389 -0
  64. package/dist/tools/attack-map.d.ts +290 -0
  65. package/dist/tools/attack-map.js +519 -0
  66. package/dist/tools/cache-observability.d.ts +4 -0
  67. package/dist/tools/cache-observability.js +36 -0
  68. package/dist/tools/code-function-cfg.d.ts +50 -0
  69. package/dist/tools/code-function-cfg.js +102 -0
  70. package/dist/tools/code-function-decompile.d.ts +55 -0
  71. package/dist/tools/code-function-decompile.js +103 -0
  72. package/dist/tools/code-function-disassemble.d.ts +43 -0
  73. package/dist/tools/code-function-disassemble.js +185 -0
  74. package/dist/tools/code-function-explain-apply.d.ts +255 -0
  75. package/dist/tools/code-function-explain-apply.js +225 -0
  76. package/dist/tools/code-function-explain-prepare.d.ts +535 -0
  77. package/dist/tools/code-function-explain-prepare.js +276 -0
  78. package/dist/tools/code-function-explain-review.d.ts +397 -0
  79. package/dist/tools/code-function-explain-review.js +589 -0
  80. package/dist/tools/code-function-rename-apply.d.ts +248 -0
  81. package/dist/tools/code-function-rename-apply.js +220 -0
  82. package/dist/tools/code-function-rename-prepare.d.ts +506 -0
  83. package/dist/tools/code-function-rename-prepare.js +279 -0
  84. package/dist/tools/code-function-rename-review.d.ts +574 -0
  85. package/dist/tools/code-function-rename-review.js +761 -0
  86. package/dist/tools/code-functions-list.d.ts +37 -0
  87. package/dist/tools/code-functions-list.js +91 -0
  88. package/dist/tools/code-functions-rank.d.ts +34 -0
  89. package/dist/tools/code-functions-rank.js +90 -0
  90. package/dist/tools/code-functions-reconstruct.d.ts +2725 -0
  91. package/dist/tools/code-functions-reconstruct.js +2807 -0
  92. package/dist/tools/code-functions-search.d.ts +39 -0
  93. package/dist/tools/code-functions-search.js +90 -0
  94. package/dist/tools/code-reconstruct-export.d.ts +1212 -0
  95. package/dist/tools/code-reconstruct-export.js +4002 -0
  96. package/dist/tools/code-reconstruct-plan.d.ts +274 -0
  97. package/dist/tools/code-reconstruct-plan.js +342 -0
  98. package/dist/tools/dotnet-metadata-extract.d.ts +541 -0
  99. package/dist/tools/dotnet-metadata-extract.js +355 -0
  100. package/dist/tools/dotnet-reconstruct-export.d.ts +567 -0
  101. package/dist/tools/dotnet-reconstruct-export.js +1151 -0
  102. package/dist/tools/dotnet-types-list.d.ts +325 -0
  103. package/dist/tools/dotnet-types-list.js +201 -0
  104. package/dist/tools/dynamic-dependencies.d.ts +115 -0
  105. package/dist/tools/dynamic-dependencies.js +213 -0
  106. package/dist/tools/dynamic-memory-import.d.ts +10 -0
  107. package/dist/tools/dynamic-memory-import.js +567 -0
  108. package/dist/tools/dynamic-trace-import.d.ts +10 -0
  109. package/dist/tools/dynamic-trace-import.js +235 -0
  110. package/dist/tools/entrypoint-fallback-disasm.d.ts +30 -0
  111. package/dist/tools/entrypoint-fallback-disasm.js +89 -0
  112. package/dist/tools/ghidra-analyze.d.ts +88 -0
  113. package/dist/tools/ghidra-analyze.js +208 -0
  114. package/dist/tools/ghidra-health.d.ts +37 -0
  115. package/dist/tools/ghidra-health.js +212 -0
  116. package/dist/tools/ioc-export.d.ts +209 -0
  117. package/dist/tools/ioc-export.js +542 -0
  118. package/dist/tools/packer-detect.d.ts +165 -0
  119. package/dist/tools/packer-detect.js +284 -0
  120. package/dist/tools/pe-exports-extract.d.ts +175 -0
  121. package/dist/tools/pe-exports-extract.js +253 -0
  122. package/dist/tools/pe-fingerprint.d.ts +234 -0
  123. package/dist/tools/pe-fingerprint.js +269 -0
  124. package/dist/tools/pe-imports-extract.d.ts +105 -0
  125. package/dist/tools/pe-imports-extract.js +245 -0
  126. package/dist/tools/report-generate.d.ts +157 -0
  127. package/dist/tools/report-generate.js +457 -0
  128. package/dist/tools/report-summarize.d.ts +2131 -0
  129. package/dist/tools/report-summarize.js +596 -0
  130. package/dist/tools/runtime-detect.d.ts +135 -0
  131. package/dist/tools/runtime-detect.js +247 -0
  132. package/dist/tools/sample-ingest.d.ts +94 -0
  133. package/dist/tools/sample-ingest.js +327 -0
  134. package/dist/tools/sample-profile-get.d.ts +183 -0
  135. package/dist/tools/sample-profile-get.js +121 -0
  136. package/dist/tools/sandbox-execute.d.ts +441 -0
  137. package/dist/tools/sandbox-execute.js +392 -0
  138. package/dist/tools/strings-extract.d.ts +375 -0
  139. package/dist/tools/strings-extract.js +314 -0
  140. package/dist/tools/strings-floss-decode.d.ts +143 -0
  141. package/dist/tools/strings-floss-decode.js +259 -0
  142. package/dist/tools/system-health.d.ts +434 -0
  143. package/dist/tools/system-health.js +446 -0
  144. package/dist/tools/task-cancel.d.ts +21 -0
  145. package/dist/tools/task-cancel.js +70 -0
  146. package/dist/tools/task-status.d.ts +27 -0
  147. package/dist/tools/task-status.js +106 -0
  148. package/dist/tools/task-sweep.d.ts +22 -0
  149. package/dist/tools/task-sweep.js +77 -0
  150. package/dist/tools/tool-help.d.ts +340 -0
  151. package/dist/tools/tool-help.js +261 -0
  152. package/dist/tools/yara-scan.d.ts +554 -0
  153. package/dist/tools/yara-scan.js +313 -0
  154. package/dist/types.d.ts +266 -0
  155. package/dist/types.js +41 -0
  156. package/dist/worker-pool.d.ts +204 -0
  157. package/dist/worker-pool.js +650 -0
  158. package/dist/workflows/deep-static.d.ts +104 -0
  159. package/dist/workflows/deep-static.js +276 -0
  160. package/dist/workflows/function-explanation-review.d.ts +655 -0
  161. package/dist/workflows/function-explanation-review.js +440 -0
  162. package/dist/workflows/reconstruct.d.ts +2053 -0
  163. package/dist/workflows/reconstruct.js +666 -0
  164. package/dist/workflows/semantic-name-review.d.ts +2418 -0
  165. package/dist/workflows/semantic-name-review.js +521 -0
  166. package/dist/workflows/triage.d.ts +659 -0
  167. package/dist/workflows/triage.js +1374 -0
  168. package/dist/workspace-manager.d.ts +150 -0
  169. package/dist/workspace-manager.js +411 -0
  170. package/ghidra_scripts/DecompileFunction.java +487 -0
  171. package/ghidra_scripts/DecompileFunction.py +150 -0
  172. package/ghidra_scripts/ExtractCFG.java +256 -0
  173. package/ghidra_scripts/ExtractCFG.py +233 -0
  174. package/ghidra_scripts/ExtractFunctions.java +442 -0
  175. package/ghidra_scripts/ExtractFunctions.py +101 -0
  176. package/ghidra_scripts/README.md +125 -0
  177. package/ghidra_scripts/SearchFunctionReferences.java +380 -0
  178. package/helpers/DotNetMetadataProbe/DotNetMetadataProbe.csproj +9 -0
  179. package/helpers/DotNetMetadataProbe/Program.cs +566 -0
  180. package/install-to-codex.ps1 +178 -0
  181. package/install-to-copilot.ps1 +303 -0
  182. package/package.json +101 -0
  183. package/requirements.txt +9 -0
  184. package/workers/requirements-dynamic.txt +11 -0
  185. package/workers/requirements.txt +8 -0
  186. package/workers/speakeasy_compat.py +175 -0
  187. package/workers/static_worker.py +5183 -0
  188. package/workers/yara_rules/default.yar +33 -0
  189. package/workers/yara_rules/malware_families.yar +93 -0
  190. package/workers/yara_rules/packers.yar +80 -0
package/dist/index.js ADDED
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Windows EXE Decompiler MCP Server
3
+ * Entry point
4
+ */
5
+ import { MCPServer } from './server.js';
6
+ import { loadConfig } from './config.js';
7
+ import { WorkspaceManager } from './workspace-manager.js';
8
+ import { DatabaseManager } from './database.js';
9
+ import { PolicyGuard } from './policy-guard.js';
10
+ import { CacheManager } from './cache-manager.js';
11
+ import { JobQueue } from './job-queue.js';
12
+ import { AnalysisTaskRunner } from './analysis-task-runner.js';
13
+ import { sampleIngestToolDefinition, createSampleIngestHandler } from './tools/sample-ingest.js';
14
+ import { sampleProfileGetToolDefinition, createSampleProfileGetHandler } from './tools/sample-profile-get.js';
15
+ import { artifactReadToolDefinition, createArtifactReadHandler } from './tools/artifact-read.js';
16
+ import { artifactsListToolDefinition, createArtifactsListHandler } from './tools/artifacts-list.js';
17
+ import { artifactsDiffToolDefinition, createArtifactsDiffHandler } from './tools/artifacts-diff.js';
18
+ import { peFingerprintToolDefinition, createPEFingerprintHandler } from './tools/pe-fingerprint.js';
19
+ import { peImportsExtractToolDefinition, createPEImportsExtractHandler } from './tools/pe-imports-extract.js';
20
+ import { peExportsExtractToolDefinition, createPEExportsExtractHandler } from './tools/pe-exports-extract.js';
21
+ import { stringsExtractToolDefinition, createStringsExtractHandler } from './tools/strings-extract.js';
22
+ import { stringsFlossDecodeToolDefinition, createStringsFlossDecodeHandler } from './tools/strings-floss-decode.js';
23
+ import { yaraScanToolDefinition, createYaraScanHandler } from './tools/yara-scan.js';
24
+ import { runtimeDetectToolDefinition, createRuntimeDetectHandler } from './tools/runtime-detect.js';
25
+ import { dotNetMetadataExtractToolDefinition, createDotNetMetadataExtractHandler } from './tools/dotnet-metadata-extract.js';
26
+ import { dotNetTypesListToolDefinition, createDotNetTypesListHandler } from './tools/dotnet-types-list.js';
27
+ import { packerDetectToolDefinition, createPackerDetectHandler } from './tools/packer-detect.js';
28
+ import { triageWorkflowToolDefinition, createTriageWorkflowHandler } from './workflows/triage.js';
29
+ import { reconstructWorkflowToolDefinition, createReconstructWorkflowHandler } from './workflows/reconstruct.js';
30
+ import { deepStaticWorkflowToolDefinition, createDeepStaticWorkflowHandler } from './workflows/deep-static.js';
31
+ import { semanticNameReviewWorkflowToolDefinition, createSemanticNameReviewWorkflowHandler, } from './workflows/semantic-name-review.js';
32
+ import { functionExplanationReviewWorkflowToolDefinition, createFunctionExplanationReviewWorkflowHandler, } from './workflows/function-explanation-review.js';
33
+ import { reportSummarizeToolDefinition, createReportSummarizeHandler } from './tools/report-summarize.js';
34
+ import { reportGenerateToolDefinition, createReportGenerateHandler } from './tools/report-generate.js';
35
+ import { toolHelpToolDefinition, createToolHelpHandler } from './tools/tool-help.js';
36
+ import { ghidraAnalyzeToolDefinition, createGhidraAnalyzeHandler } from './tools/ghidra-analyze.js';
37
+ import { ghidraHealthToolDefinition, createGhidraHealthHandler } from './tools/ghidra-health.js';
38
+ import { systemHealthToolDefinition, createSystemHealthHandler } from './tools/system-health.js';
39
+ import { dynamicDependenciesToolDefinition, createDynamicDependenciesHandler } from './tools/dynamic-dependencies.js';
40
+ import { dynamicTraceImportToolDefinition, createDynamicTraceImportHandler } from './tools/dynamic-trace-import.js';
41
+ import { dynamicMemoryImportToolDefinition, createDynamicMemoryImportHandler } from './tools/dynamic-memory-import.js';
42
+ import { sandboxExecuteToolDefinition, createSandboxExecuteHandler } from './tools/sandbox-execute.js';
43
+ import { attackMapToolDefinition, createAttackMapHandler } from './tools/attack-map.js';
44
+ import { iocExportToolDefinition, createIOCExportHandler } from './tools/ioc-export.js';
45
+ import { taskStatusToolDefinition, createTaskStatusHandler } from './tools/task-status.js';
46
+ import { taskCancelToolDefinition, createTaskCancelHandler } from './tools/task-cancel.js';
47
+ import { taskSweepToolDefinition, createTaskSweepHandler } from './tools/task-sweep.js';
48
+ import { codeFunctionsListToolDefinition, createCodeFunctionsListHandler } from './tools/code-functions-list.js';
49
+ import { codeFunctionsRankToolDefinition, createCodeFunctionsRankHandler } from './tools/code-functions-rank.js';
50
+ import { codeFunctionsSearchToolDefinition, createCodeFunctionsSearchHandler } from './tools/code-functions-search.js';
51
+ import { codeFunctionDecompileToolDefinition, createCodeFunctionDecompileHandler } from './tools/code-function-decompile.js';
52
+ import { codeFunctionDisassembleToolDefinition, createCodeFunctionDisassembleHandler } from './tools/code-function-disassemble.js';
53
+ import { codeFunctionCFGToolDefinition, createCodeFunctionCFGHandler } from './tools/code-function-cfg.js';
54
+ import { codeFunctionsReconstructToolDefinition, createCodeFunctionsReconstructHandler } from './tools/code-functions-reconstruct.js';
55
+ import { codeFunctionRenamePrepareToolDefinition, createCodeFunctionRenamePrepareHandler, } from './tools/code-function-rename-prepare.js';
56
+ import { codeFunctionExplainPrepareToolDefinition, createCodeFunctionExplainPrepareHandler, } from './tools/code-function-explain-prepare.js';
57
+ import { codeFunctionExplainApplyToolDefinition, createCodeFunctionExplainApplyHandler, } from './tools/code-function-explain-apply.js';
58
+ import { codeFunctionExplainReviewToolDefinition, createCodeFunctionExplainReviewHandler, } from './tools/code-function-explain-review.js';
59
+ import { codeFunctionRenameApplyToolDefinition, createCodeFunctionRenameApplyHandler, } from './tools/code-function-rename-apply.js';
60
+ import { codeFunctionRenameReviewToolDefinition, createCodeFunctionRenameReviewHandler, } from './tools/code-function-rename-review.js';
61
+ import { codeReconstructExportToolDefinition, createCodeReconstructExportHandler } from './tools/code-reconstruct-export.js';
62
+ import { dotNetReconstructExportToolDefinition, createDotNetReconstructExportHandler } from './tools/dotnet-reconstruct-export.js';
63
+ import { codeReconstructPlanToolDefinition, createCodeReconstructPlanHandler } from './tools/code-reconstruct-plan.js';
64
+ import { semanticNameReviewPromptDefinition, createSemanticNameReviewPromptHandler, } from './prompts/semantic-name-review.js';
65
+ import { functionExplanationReviewPromptDefinition, createFunctionExplanationReviewPromptHandler, } from './prompts/function-explanation-review.js';
66
+ // Export public API
67
+ export { MCPServer } from './server.js';
68
+ export { loadConfig } from './config.js';
69
+ export { WorkspaceManager } from './workspace-manager.js';
70
+ export * from './types.js';
71
+ async function main() {
72
+ try {
73
+ // Load configuration
74
+ const configPath = process.env.CONFIG_PATH;
75
+ const config = loadConfig(configPath);
76
+ // Initialize components
77
+ const workspaceManager = new WorkspaceManager(config.workspace.root);
78
+ const database = new DatabaseManager(config.database.path || './data/database.db');
79
+ const policyGuard = new PolicyGuard('./audit.log');
80
+ const cacheManager = new CacheManager('./cache', database);
81
+ const jobQueue = new JobQueue();
82
+ const analysisTaskRunner = new AnalysisTaskRunner(jobQueue, database, workspaceManager, cacheManager);
83
+ analysisTaskRunner.start();
84
+ // Create and start MCP server
85
+ const server = new MCPServer(config);
86
+ // Register tools
87
+ server.registerPrompt(semanticNameReviewPromptDefinition, createSemanticNameReviewPromptHandler());
88
+ server.registerPrompt(functionExplanationReviewPromptDefinition, createFunctionExplanationReviewPromptHandler());
89
+ // Task 8.1: sample.ingest tool
90
+ server.registerTool(sampleIngestToolDefinition, createSampleIngestHandler(workspaceManager, database, policyGuard));
91
+ // Task 8.2: sample.profile.get tool
92
+ server.registerTool(sampleProfileGetToolDefinition, createSampleProfileGetHandler(database));
93
+ // Task 18.15: artifact.read tool - Read manifest/gaps and other artifacts via MCP
94
+ server.registerTool(artifactReadToolDefinition, createArtifactReadHandler(workspaceManager, database));
95
+ // Task 18.18: artifacts.list tool - Enumerate artifact inventory with existence metadata
96
+ server.registerTool(artifactsListToolDefinition, createArtifactsListHandler(workspaceManager, database));
97
+ server.registerTool(artifactsDiffToolDefinition, createArtifactsDiffHandler(workspaceManager, database));
98
+ // Task 8.3: pe.fingerprint tool
99
+ server.registerTool(peFingerprintToolDefinition, createPEFingerprintHandler(workspaceManager, database, cacheManager));
100
+ // Task 8.4: pe.imports.extract tool
101
+ server.registerTool(peImportsExtractToolDefinition, createPEImportsExtractHandler(workspaceManager, database, cacheManager));
102
+ // Task 8.5: pe.exports.extract tool
103
+ server.registerTool(peExportsExtractToolDefinition, createPEExportsExtractHandler(workspaceManager, database, cacheManager));
104
+ // Task 8.6: strings.extract tool
105
+ server.registerTool(stringsExtractToolDefinition, createStringsExtractHandler(workspaceManager, database, cacheManager));
106
+ // Task 8.7: strings.floss.decode tool
107
+ server.registerTool(stringsFlossDecodeToolDefinition, createStringsFlossDecodeHandler(workspaceManager, database, cacheManager));
108
+ // Task 8.8: yara.scan tool
109
+ server.registerTool(yaraScanToolDefinition, createYaraScanHandler(workspaceManager, database, cacheManager));
110
+ // Task 8.9: runtime.detect tool
111
+ server.registerTool(runtimeDetectToolDefinition, createRuntimeDetectHandler(workspaceManager, database, cacheManager));
112
+ server.registerTool(dotNetMetadataExtractToolDefinition, createDotNetMetadataExtractHandler(workspaceManager, database, cacheManager));
113
+ server.registerTool(dotNetTypesListToolDefinition, createDotNetTypesListHandler(workspaceManager, database, cacheManager));
114
+ // Task 8.10: packer.detect tool
115
+ server.registerTool(packerDetectToolDefinition, createPackerDetectHandler(workspaceManager, database, cacheManager));
116
+ // Task 9.1: workflow.triage - Quick triage workflow
117
+ server.registerTool(triageWorkflowToolDefinition, createTriageWorkflowHandler(workspaceManager, database, cacheManager));
118
+ // Task 40.5.1: workflow.reconstruct - End-to-end source reconstruction workflow
119
+ server.registerTool(reconstructWorkflowToolDefinition, createReconstructWorkflowHandler(workspaceManager, database, cacheManager));
120
+ // Task 16.x: workflow.deep_static - Comprehensive long-running static analysis
121
+ server.registerTool(deepStaticWorkflowToolDefinition, createDeepStaticWorkflowHandler(workspaceManager, database, cacheManager, jobQueue));
122
+ server.registerTool(semanticNameReviewWorkflowToolDefinition, createSemanticNameReviewWorkflowHandler(workspaceManager, database, cacheManager, server));
123
+ server.registerTool(functionExplanationReviewWorkflowToolDefinition, createFunctionExplanationReviewWorkflowHandler(workspaceManager, database, cacheManager, server));
124
+ // Task 9.2: report.summarize - Generate quick triage report
125
+ server.registerTool(reportSummarizeToolDefinition, createReportSummarizeHandler(workspaceManager, database, cacheManager));
126
+ // Task 24.x: report.generate - Generate stored multi-stage analysis report artifact
127
+ server.registerTool(reportGenerateToolDefinition, createReportGenerateHandler(workspaceManager, database));
128
+ // Task 15.1: ghidra.analyze - Analyze binary with Ghidra
129
+ server.registerTool(ghidraAnalyzeToolDefinition, createGhidraAnalyzeHandler(workspaceManager, database, jobQueue));
130
+ // Task execution controls: query/cancel/sweep analysis jobs
131
+ server.registerTool(taskStatusToolDefinition, createTaskStatusHandler(jobQueue));
132
+ server.registerTool(taskCancelToolDefinition, createTaskCancelHandler(jobQueue));
133
+ server.registerTool(taskSweepToolDefinition, createTaskSweepHandler(jobQueue, database));
134
+ // Task 15.1.1: ghidra.health - Validate Ghidra execution environment
135
+ server.registerTool(ghidraHealthToolDefinition, createGhidraHealthHandler(workspaceManager, database));
136
+ // Task 40.5.2: system.health - Aggregated HA readiness health check
137
+ server.registerTool(systemHealthToolDefinition, createSystemHealthHandler(workspaceManager, database, { cacheManager }));
138
+ // Task 18.22: dynamic.dependencies - probe dynamic-analysis component readiness
139
+ server.registerTool(dynamicDependenciesToolDefinition, createDynamicDependenciesHandler(workspaceManager, database));
140
+ // Runtime evidence import: normalize external traces / memory summaries into MCP artifacts
141
+ server.registerTool(dynamicTraceImportToolDefinition, createDynamicTraceImportHandler(workspaceManager, database));
142
+ // Memory snapshot ingest: normalize minidump / process-memory captures into runtime artifacts
143
+ server.registerTool(dynamicMemoryImportToolDefinition, createDynamicMemoryImportHandler(workspaceManager, database));
144
+ // Task 31.2 (bootstrap): sandbox.execute - safe simulation-first dynamic analysis
145
+ server.registerTool(sandboxExecuteToolDefinition, createSandboxExecuteHandler(workspaceManager, database, policyGuard));
146
+ // P1 enhancement: ATT&CK mapping from correlated static indicators
147
+ server.registerTool(attackMapToolDefinition, createAttackMapHandler(workspaceManager, database, cacheManager));
148
+ // P2 productization: IOC export (JSON/CSV/STIX) for SOC/IR pipelines
149
+ server.registerTool(iocExportToolDefinition, createIOCExportHandler(workspaceManager, database, cacheManager));
150
+ // Tool metadata help: query normalized schema/help for registered MCP tools
151
+ server.registerTool(toolHelpToolDefinition, createToolHelpHandler(() => server.getToolDefinitions()));
152
+ // Task 15.2: code.functions.list - List extracted functions
153
+ server.registerTool(codeFunctionsListToolDefinition, createCodeFunctionsListHandler(workspaceManager, database));
154
+ // Task 15.3: code.functions.rank - Rank functions by interest
155
+ server.registerTool(codeFunctionsRankToolDefinition, createCodeFunctionsRankHandler(workspaceManager, database));
156
+ server.registerTool(codeFunctionsSearchToolDefinition, createCodeFunctionsSearchHandler(workspaceManager, database));
157
+ // Task 15.4: code.function.decompile - Decompile specific function
158
+ server.registerTool(codeFunctionDecompileToolDefinition, createCodeFunctionDecompileHandler(workspaceManager, database));
159
+ // Task 15.5: code.function.disassemble - Get assembly code
160
+ server.registerTool(codeFunctionDisassembleToolDefinition, createCodeFunctionDisassembleHandler(workspaceManager, database));
161
+ // Task 15.6: code.function.cfg - Extract control flow graph
162
+ server.registerTool(codeFunctionCFGToolDefinition, createCodeFunctionCFGHandler(workspaceManager, database));
163
+ // Task 40.2: code.functions.reconstruct - Function-level semantic reconstruction
164
+ server.registerTool(codeFunctionsReconstructToolDefinition, createCodeFunctionsReconstructHandler(workspaceManager, database, cacheManager));
165
+ // External semantic naming workflow: prepare structured evidence for any MCP-capable LLM
166
+ server.registerTool(codeFunctionRenamePrepareToolDefinition, createCodeFunctionRenamePrepareHandler(workspaceManager, database, cacheManager));
167
+ server.registerTool(codeFunctionExplainPrepareToolDefinition, createCodeFunctionExplainPrepareHandler(workspaceManager, database, cacheManager));
168
+ server.registerTool(codeFunctionExplainApplyToolDefinition, createCodeFunctionExplainApplyHandler(workspaceManager, database));
169
+ server.registerTool(codeFunctionExplainReviewToolDefinition, createCodeFunctionExplainReviewHandler(workspaceManager, database, cacheManager, server));
170
+ server.registerTool(codeFunctionRenameApplyToolDefinition, createCodeFunctionRenameApplyHandler(workspaceManager, database));
171
+ server.registerTool(codeFunctionRenameReviewToolDefinition, createCodeFunctionRenameReviewHandler(workspaceManager, database, cacheManager, server));
172
+ // Task 40.3: code.reconstruct.export - Module regrouping and skeleton export
173
+ server.registerTool(codeReconstructExportToolDefinition, createCodeReconstructExportHandler(workspaceManager, database, cacheManager));
174
+ // Task 40.4.1: dotnet.reconstruct.export - .NET skeleton reconstruction baseline
175
+ server.registerTool(dotNetReconstructExportToolDefinition, createDotNetReconstructExportHandler(workspaceManager, database, cacheManager));
176
+ // Task 40.1: code.reconstruct.plan - Source reconstruction planning
177
+ server.registerTool(codeReconstructPlanToolDefinition, createCodeReconstructPlanHandler(workspaceManager, database, cacheManager));
178
+ // Start server
179
+ await server.start();
180
+ // Handle graceful shutdown
181
+ process.on('SIGINT', async () => {
182
+ server.getLogger().info('Received SIGINT, shutting down gracefully');
183
+ analysisTaskRunner.stop();
184
+ await server.stop();
185
+ process.exit(0);
186
+ });
187
+ process.on('SIGTERM', async () => {
188
+ server.getLogger().info('Received SIGTERM, shutting down gracefully');
189
+ analysisTaskRunner.stop();
190
+ await server.stop();
191
+ process.exit(0);
192
+ });
193
+ }
194
+ catch (error) {
195
+ console.error('Failed to start MCP Server:', error);
196
+ process.exit(1);
197
+ }
198
+ }
199
+ main();
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Job Queue - In-memory task queue with priority support
3
+ *
4
+ * Implements requirements 21.1 and 21.2:
5
+ * - Task enqueueing with unique job_id
6
+ * - Priority-based task ordering
7
+ * - Job status tracking and cancellation
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ import type { Job, JobStatus, JobStatusType, JobResult, RetryPolicy } from './types.js';
11
+ export { JobPriority } from './types.js';
12
+ export type { Job, JobStatus, JobStatusType, JobResult, JobMetrics, RetryPolicy, ArtifactRef } from './types.js';
13
+ /**
14
+ * In-memory job queue with priority support
15
+ *
16
+ * Features:
17
+ * - Priority-based ordering
18
+ * - Job status tracking
19
+ * - Cancellation support
20
+ * - Event-based completion notifications
21
+ */
22
+ export declare class JobQueue extends EventEmitter {
23
+ private jobs;
24
+ private queue;
25
+ private readonly defaultRetryPolicy;
26
+ /**
27
+ * Enqueue a new job
28
+ *
29
+ * @param job - Job configuration (id will be generated if not provided)
30
+ * @returns Job ID
31
+ */
32
+ enqueue(job: Omit<Job, 'id' | 'createdAt' | 'attempts' | 'retryPolicy'> & {
33
+ retryPolicy?: RetryPolicy;
34
+ }): string;
35
+ /**
36
+ * Get job status
37
+ *
38
+ * @param jobId - Job identifier
39
+ * @returns Job status or undefined if not found
40
+ */
41
+ getStatus(jobId: string): JobStatus | undefined;
42
+ /**
43
+ * Cancel a job
44
+ *
45
+ * @param jobId - Job identifier
46
+ * @returns True if job was cancelled, false if not found or already completed
47
+ */
48
+ cancel(jobId: string, reason?: string): boolean;
49
+ /**
50
+ * Register a completion callback for a job
51
+ *
52
+ * @param jobId - Job identifier
53
+ * @param callback - Callback function to invoke when job completes
54
+ */
55
+ onComplete(jobId: string, callback: (result: JobResult) => void): void;
56
+ /**
57
+ * Get the next job from the queue (highest priority)
58
+ *
59
+ * @returns Next job or undefined if queue is empty
60
+ */
61
+ dequeue(): Job | undefined;
62
+ /**
63
+ * Mark a job as completed
64
+ *
65
+ * Requirements: 21.4, 21.5, 28.2 - Job completion with retry logic
66
+ *
67
+ * @param jobId - Job identifier
68
+ * @param result - Job execution result
69
+ */
70
+ complete(jobId: string, result: JobResult): void;
71
+ /**
72
+ * Check if a failed job should be retried
73
+ *
74
+ * Requirements: 21.5, 28.2 - Retry policy evaluation
75
+ *
76
+ * @param job - Job that failed
77
+ * @param result - Job execution result
78
+ * @returns True if job should be retried
79
+ */
80
+ private shouldRetry;
81
+ /**
82
+ * Retry a failed job with exponential backoff
83
+ *
84
+ * Requirements: 21.5, 28.2 - Exponential backoff retry
85
+ *
86
+ * @param job - Job to retry
87
+ */
88
+ private retryJob;
89
+ /**
90
+ * Calculate exponential backoff delay
91
+ *
92
+ * Requirements: 21.5, 28.2 - Exponential backoff calculation
93
+ *
94
+ * Formula: baseBackoff * (2 ^ (attempts - 1))
95
+ *
96
+ * @param job - Job to calculate backoff for
97
+ * @returns Backoff delay in milliseconds
98
+ */
99
+ private calculateBackoff;
100
+ /**
101
+ * Update job progress
102
+ *
103
+ * @param jobId - Job identifier
104
+ * @param progress - Progress percentage (0-100)
105
+ */
106
+ updateProgress(jobId: string, progress: number): void;
107
+ /**
108
+ * Get queue length
109
+ *
110
+ * @returns Number of jobs in queue (not including running jobs)
111
+ */
112
+ getQueueLength(): number;
113
+ /**
114
+ * Get all jobs with a specific status
115
+ *
116
+ * @param status - Job status to filter by
117
+ * @returns Array of job statuses
118
+ */
119
+ getJobsByStatus(status: JobStatusType): JobStatus[];
120
+ /**
121
+ * Get full job status list with lightweight execution context.
122
+ */
123
+ listStatuses(status?: JobStatusType): Array<JobStatus & {
124
+ tool: string;
125
+ sampleId: string;
126
+ attempts: number;
127
+ timeout: number;
128
+ createdAt: string;
129
+ cancelReason?: string;
130
+ }>;
131
+ /**
132
+ * Get job result
133
+ *
134
+ * @param jobId - Job identifier
135
+ * @returns Job result or undefined if not found or not completed
136
+ */
137
+ getResult(jobId: string): JobResult | undefined;
138
+ /**
139
+ * Clear completed jobs older than specified age
140
+ *
141
+ * @param maxAgeMs - Maximum age in milliseconds
142
+ * @returns Number of jobs cleared
143
+ */
144
+ clearOldJobs(maxAgeMs: number): number;
145
+ /**
146
+ * Mark stale running jobs as failed.
147
+ * Emits `job:reaped` with affected job ids for observability.
148
+ */
149
+ reapStaleRunningJobs(maxRuntimeMs: number, nowMs?: number): string[];
150
+ /**
151
+ * Get total number of jobs tracked
152
+ *
153
+ * @returns Total job count
154
+ */
155
+ getTotalJobs(): number;
156
+ /**
157
+ * Re-enqueue a job for retry (used by retry mechanism)
158
+ *
159
+ * Requirements: 21.5, 28.2 - Failure retry mechanism
160
+ *
161
+ * @param job - Job to re-enqueue (with updated attempts count)
162
+ */
163
+ requeue(job: Job): void;
164
+ /**
165
+ * Sort queue by priority (descending)
166
+ */
167
+ private sortQueue;
168
+ }
169
+ //# sourceMappingURL=job-queue.d.ts.map