53 lines
1.8 KiB
TypeScript
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),
|
|
);
|
|
};
|