rea/src/server/registerAndroidTools.ts

53 lines
1.8 KiB
TypeScript

import type { EvidenceMcpServer } from "./EvidenceMcpServer.js";
import type { EvidenceWriter } from "../application/investigation/InvestigationRecordPort.js";
import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
import { toolContract } from "../contracts/toolContracts.js";
import type { Logger } from "pino";
import { createContractToolHandler } from "./contractToolHandler.js";
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
/** Bind Android handlers to their exact named contracts through shared workflows. */
export const registerAndroidTools = (
server: EvidenceMcpServer,
service: AndroidAnalysisService,
logger: Logger,
recordEvidence?: EvidenceWriter["recordEvidence"],
): void => {
const handler = createContractToolHandler(
server,
service,
logger,
recordEvidence,
);
const packageContract = toolContract("inspect_android_package");
server.registerTool(
packageContract.name,
toolRegistrationOptions(packageContract),
handler(packageContract),
);
const searchContract = toolContract("search_android_classes");
server.registerTool(
searchContract.name,
toolRegistrationOptions(searchContract),
handler(searchContract),
);
const classContract = toolContract("inspect_android_class");
server.registerTool(
classContract.name,
toolRegistrationOptions(classContract),
handler(classContract),
);
const methodContract = toolContract("inspect_android_method");
server.registerTool(
methodContract.name,
toolRegistrationOptions(methodContract),
handler(methodContract),
);
const referencesContract = toolContract("trace_android_references");
server.registerTool(
referencesContract.name,
toolRegistrationOptions(referencesContract),
handler(referencesContract),
);
};