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.
- package/CODEX_INSTALLATION.md +69 -0
- package/COPILOT_INSTALLATION.md +77 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/bin/windows-exe-decompiler-mcp-server.js +3 -0
- package/dist/analysis-provenance.d.ts +184 -0
- package/dist/analysis-provenance.js +74 -0
- package/dist/analysis-task-runner.d.ts +31 -0
- package/dist/analysis-task-runner.js +160 -0
- package/dist/artifact-inventory.d.ts +23 -0
- package/dist/artifact-inventory.js +175 -0
- package/dist/cache-manager.d.ts +128 -0
- package/dist/cache-manager.js +454 -0
- package/dist/confidence-semantics.d.ts +66 -0
- package/dist/confidence-semantics.js +122 -0
- package/dist/config.d.ts +335 -0
- package/dist/config.js +193 -0
- package/dist/database.d.ts +227 -0
- package/dist/database.js +601 -0
- package/dist/decompiler-worker.d.ts +441 -0
- package/dist/decompiler-worker.js +1962 -0
- package/dist/dynamic-trace.d.ts +95 -0
- package/dist/dynamic-trace.js +629 -0
- package/dist/env-validator.d.ts +15 -0
- package/dist/env-validator.js +249 -0
- package/dist/error-handler.d.ts +28 -0
- package/dist/error-handler.example.d.ts +22 -0
- package/dist/error-handler.example.js +141 -0
- package/dist/error-handler.js +139 -0
- package/dist/ghidra-analysis-status.d.ts +49 -0
- package/dist/ghidra-analysis-status.js +178 -0
- package/dist/ghidra-config.d.ts +134 -0
- package/dist/ghidra-config.js +464 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +200 -0
- package/dist/job-queue.d.ts +169 -0
- package/dist/job-queue.js +407 -0
- package/dist/logger.d.ts +106 -0
- package/dist/logger.js +176 -0
- package/dist/policy-guard.d.ts +115 -0
- package/dist/policy-guard.js +243 -0
- package/dist/process-output.d.ts +15 -0
- package/dist/process-output.js +90 -0
- package/dist/prompts/function-explanation-review.d.ts +5 -0
- package/dist/prompts/function-explanation-review.js +64 -0
- package/dist/prompts/semantic-name-review.d.ts +5 -0
- package/dist/prompts/semantic-name-review.js +63 -0
- package/dist/runtime-correlation.d.ts +34 -0
- package/dist/runtime-correlation.js +279 -0
- package/dist/runtime-paths.d.ts +3 -0
- package/dist/runtime-paths.js +11 -0
- package/dist/selection-diff.d.ts +667 -0
- package/dist/selection-diff.js +53 -0
- package/dist/semantic-name-suggestion-artifacts.d.ts +116 -0
- package/dist/semantic-name-suggestion-artifacts.js +314 -0
- package/dist/server.d.ts +129 -0
- package/dist/server.js +578 -0
- package/dist/tools/artifact-read.d.ts +235 -0
- package/dist/tools/artifact-read.js +317 -0
- package/dist/tools/artifacts-diff.d.ts +728 -0
- package/dist/tools/artifacts-diff.js +304 -0
- package/dist/tools/artifacts-list.d.ts +515 -0
- package/dist/tools/artifacts-list.js +389 -0
- package/dist/tools/attack-map.d.ts +290 -0
- package/dist/tools/attack-map.js +519 -0
- package/dist/tools/cache-observability.d.ts +4 -0
- package/dist/tools/cache-observability.js +36 -0
- package/dist/tools/code-function-cfg.d.ts +50 -0
- package/dist/tools/code-function-cfg.js +102 -0
- package/dist/tools/code-function-decompile.d.ts +55 -0
- package/dist/tools/code-function-decompile.js +103 -0
- package/dist/tools/code-function-disassemble.d.ts +43 -0
- package/dist/tools/code-function-disassemble.js +185 -0
- package/dist/tools/code-function-explain-apply.d.ts +255 -0
- package/dist/tools/code-function-explain-apply.js +225 -0
- package/dist/tools/code-function-explain-prepare.d.ts +535 -0
- package/dist/tools/code-function-explain-prepare.js +276 -0
- package/dist/tools/code-function-explain-review.d.ts +397 -0
- package/dist/tools/code-function-explain-review.js +589 -0
- package/dist/tools/code-function-rename-apply.d.ts +248 -0
- package/dist/tools/code-function-rename-apply.js +220 -0
- package/dist/tools/code-function-rename-prepare.d.ts +506 -0
- package/dist/tools/code-function-rename-prepare.js +279 -0
- package/dist/tools/code-function-rename-review.d.ts +574 -0
- package/dist/tools/code-function-rename-review.js +761 -0
- package/dist/tools/code-functions-list.d.ts +37 -0
- package/dist/tools/code-functions-list.js +91 -0
- package/dist/tools/code-functions-rank.d.ts +34 -0
- package/dist/tools/code-functions-rank.js +90 -0
- package/dist/tools/code-functions-reconstruct.d.ts +2725 -0
- package/dist/tools/code-functions-reconstruct.js +2807 -0
- package/dist/tools/code-functions-search.d.ts +39 -0
- package/dist/tools/code-functions-search.js +90 -0
- package/dist/tools/code-reconstruct-export.d.ts +1212 -0
- package/dist/tools/code-reconstruct-export.js +4002 -0
- package/dist/tools/code-reconstruct-plan.d.ts +274 -0
- package/dist/tools/code-reconstruct-plan.js +342 -0
- package/dist/tools/dotnet-metadata-extract.d.ts +541 -0
- package/dist/tools/dotnet-metadata-extract.js +355 -0
- package/dist/tools/dotnet-reconstruct-export.d.ts +567 -0
- package/dist/tools/dotnet-reconstruct-export.js +1151 -0
- package/dist/tools/dotnet-types-list.d.ts +325 -0
- package/dist/tools/dotnet-types-list.js +201 -0
- package/dist/tools/dynamic-dependencies.d.ts +115 -0
- package/dist/tools/dynamic-dependencies.js +213 -0
- package/dist/tools/dynamic-memory-import.d.ts +10 -0
- package/dist/tools/dynamic-memory-import.js +567 -0
- package/dist/tools/dynamic-trace-import.d.ts +10 -0
- package/dist/tools/dynamic-trace-import.js +235 -0
- package/dist/tools/entrypoint-fallback-disasm.d.ts +30 -0
- package/dist/tools/entrypoint-fallback-disasm.js +89 -0
- package/dist/tools/ghidra-analyze.d.ts +88 -0
- package/dist/tools/ghidra-analyze.js +208 -0
- package/dist/tools/ghidra-health.d.ts +37 -0
- package/dist/tools/ghidra-health.js +212 -0
- package/dist/tools/ioc-export.d.ts +209 -0
- package/dist/tools/ioc-export.js +542 -0
- package/dist/tools/packer-detect.d.ts +165 -0
- package/dist/tools/packer-detect.js +284 -0
- package/dist/tools/pe-exports-extract.d.ts +175 -0
- package/dist/tools/pe-exports-extract.js +253 -0
- package/dist/tools/pe-fingerprint.d.ts +234 -0
- package/dist/tools/pe-fingerprint.js +269 -0
- package/dist/tools/pe-imports-extract.d.ts +105 -0
- package/dist/tools/pe-imports-extract.js +245 -0
- package/dist/tools/report-generate.d.ts +157 -0
- package/dist/tools/report-generate.js +457 -0
- package/dist/tools/report-summarize.d.ts +2131 -0
- package/dist/tools/report-summarize.js +596 -0
- package/dist/tools/runtime-detect.d.ts +135 -0
- package/dist/tools/runtime-detect.js +247 -0
- package/dist/tools/sample-ingest.d.ts +94 -0
- package/dist/tools/sample-ingest.js +327 -0
- package/dist/tools/sample-profile-get.d.ts +183 -0
- package/dist/tools/sample-profile-get.js +121 -0
- package/dist/tools/sandbox-execute.d.ts +441 -0
- package/dist/tools/sandbox-execute.js +392 -0
- package/dist/tools/strings-extract.d.ts +375 -0
- package/dist/tools/strings-extract.js +314 -0
- package/dist/tools/strings-floss-decode.d.ts +143 -0
- package/dist/tools/strings-floss-decode.js +259 -0
- package/dist/tools/system-health.d.ts +434 -0
- package/dist/tools/system-health.js +446 -0
- package/dist/tools/task-cancel.d.ts +21 -0
- package/dist/tools/task-cancel.js +70 -0
- package/dist/tools/task-status.d.ts +27 -0
- package/dist/tools/task-status.js +106 -0
- package/dist/tools/task-sweep.d.ts +22 -0
- package/dist/tools/task-sweep.js +77 -0
- package/dist/tools/tool-help.d.ts +340 -0
- package/dist/tools/tool-help.js +261 -0
- package/dist/tools/yara-scan.d.ts +554 -0
- package/dist/tools/yara-scan.js +313 -0
- package/dist/types.d.ts +266 -0
- package/dist/types.js +41 -0
- package/dist/worker-pool.d.ts +204 -0
- package/dist/worker-pool.js +650 -0
- package/dist/workflows/deep-static.d.ts +104 -0
- package/dist/workflows/deep-static.js +276 -0
- package/dist/workflows/function-explanation-review.d.ts +655 -0
- package/dist/workflows/function-explanation-review.js +440 -0
- package/dist/workflows/reconstruct.d.ts +2053 -0
- package/dist/workflows/reconstruct.js +666 -0
- package/dist/workflows/semantic-name-review.d.ts +2418 -0
- package/dist/workflows/semantic-name-review.js +521 -0
- package/dist/workflows/triage.d.ts +659 -0
- package/dist/workflows/triage.js +1374 -0
- package/dist/workspace-manager.d.ts +150 -0
- package/dist/workspace-manager.js +411 -0
- package/ghidra_scripts/DecompileFunction.java +487 -0
- package/ghidra_scripts/DecompileFunction.py +150 -0
- package/ghidra_scripts/ExtractCFG.java +256 -0
- package/ghidra_scripts/ExtractCFG.py +233 -0
- package/ghidra_scripts/ExtractFunctions.java +442 -0
- package/ghidra_scripts/ExtractFunctions.py +101 -0
- package/ghidra_scripts/README.md +125 -0
- package/ghidra_scripts/SearchFunctionReferences.java +380 -0
- package/helpers/DotNetMetadataProbe/DotNetMetadataProbe.csproj +9 -0
- package/helpers/DotNetMetadataProbe/Program.cs +566 -0
- package/install-to-codex.ps1 +178 -0
- package/install-to-copilot.ps1 +303 -0
- package/package.json +101 -0
- package/requirements.txt +9 -0
- package/workers/requirements-dynamic.txt +11 -0
- package/workers/requirements.txt +8 -0
- package/workers/speakeasy_compat.py +175 -0
- package/workers/static_worker.py +5183 -0
- package/workers/yara_rules/default.yar +33 -0
- package/workers/yara_rules/malware_families.yar +93 -0
- 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
|