Files
rea/src/server/registerFirmwareTools.ts
T
N0zoM1z0 5a7c769692 feat(firmware): integrate Binwalk and Unblob analysis
* feat(firmware): integrate Binwalk and Unblob analysis

* fix(firmware): verify published files and namespace source references

* test(firmware): isolate extractor dependency failure from process cleanup

* fix(firmware): retain actionable report and cleanup diagnostics

* test: assert retained batch output failure diagnostics
2026-10-06 14:16:04 +00:00

46 lines
1.8 KiB
TypeScript

import type { McpServer, ServerContext } from "@modelcontextprotocol/server";
import type { FirmwareAnalysisService } from "../application/FirmwareAnalysisService.js";
import type { BinarySessionPort } from "../application/BinarySession.js";
import { toolContract } from "../contracts/toolContracts.js";
import type { ToolContract } from "../contracts/toolContractTypes.js";
import type { FirmwareOperation } from "../domain/firmwareAnalysis.js";
import type { Logger } from "../logger.js";
import { logToolExecution } from "./toolLogging.js";
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
import { toCallToolResult } from "./toolResult.js";
/** Bind firmware handlers to their exact named schemas. */
export const registerFirmwareTools = (
server: McpServer,
service: FirmwareAnalysisService,
logger: Logger,
recordEvidence?: BinarySessionPort["recordEvidence"],
): void => {
const handler =
(contract: ToolContract<FirmwareOperation>) =>
async (input: unknown, context: ServerContext) => {
const result = await logToolExecution(logger, contract.name, () =>
service.execute(contract.name, input, {
signal: context.mcpReq.signal,
}),
);
if (!result.ok) return toCallToolResult(result, contract);
const recorded = recordEvidence?.(result.value);
return recorded !== undefined && !recorded.ok
? toCallToolResult(recorded, contract)
: toCallToolResult(result, contract);
};
const inspect = toolContract("inspect_firmware_regions");
server.registerTool(
inspect.name,
toolRegistrationOptions(inspect),
handler(inspect),
);
const extract = toolContract("extract_firmware");
server.registerTool(
extract.name,
toolRegistrationOptions(extract),
handler(extract),
);
};