refactor(mcp): reuse parsed Evidence tool parameters

This commit is contained in:
morluto committed 2026-10-23 18:53:38 +08:00
1 parent 23def04096
commit 19520d0008
2 files changed
+7 -18

No files matched your search

+5 -13
View File
@@ -4,10 +4,7 @@ import {
} from "../domain/immutableJson.js";
import type { EvidenceMcpServer } from "./EvidenceMcpServer.js";
import {
ARTIFACT_TOOL_CONTRACTS,
artifactInspectionInputSchema,
} from "../contracts/artifactToolContracts.js";
import { ARTIFACT_TOOL_CONTRACTS } from "../contracts/artifactToolContracts.js";
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
import { registerEvidenceTools } from "./registerEvidenceTools.js";
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
@@ -22,6 +19,7 @@ const SUMMARY_DELIVERY: ReadonlySet<string> = new Set([
"inspect_artifact",
"decode_interface_builder",
]);
const executionWithoutDelivery = withoutDeliveryDetail(SUMMARY_DELIVERY);
/** inspect_artifact keeps an explicit detail in its Evidence parameters. */
const decodeWithoutDelivery = withoutDeliveryDetail(
new Set(["decode_interface_builder"]),
@@ -35,16 +33,10 @@ export const registerArtifactTools = (
registerEvidenceTools(server, ARTIFACT_TOOL_CONTRACTS, {
...options,
...retainedSummaryDelivery(SUMMARY_DELIVERY, options),
parametersForExecution: (operation, parameters) => {
if (operation === "inspect_artifact") {
const { detail: _detail, ...execution } =
artifactInspectionInputSchema.parse(parameters);
return execution;
}
return operation === "extract_artifact"
parametersForExecution: (operation, parameters) =>
operation === "extract_artifact"
? { ...parameters, output_root: createArtifactExtractionDestination() }
: decodeWithoutDelivery(operation, parameters);
},
: executionWithoutDelivery(operation, parameters),
parametersForEvidence: decodeWithoutDelivery,
sourceEvidence: (operation, result) => {
if (operation !== "inspect_artifact") return [];
+2 -5
View File
@@ -61,10 +61,8 @@ export const registerEvidenceTools = (
contract.name,
toolRegistrationOptions(contract),
async (input, context) => {
const ready = options.preflight?.(
contract.name,
jsonObjectSchema.parse(input),
);
const parameters = jsonObjectSchema.parse(input);
const ready = options.preflight?.(contract.name, parameters);
if (ready !== undefined && !ready.ok)
return server.delivery.toCallToolResult(ready, contract);
const admitted = await options.withAdmittedAnalysis(
@@ -81,7 +79,6 @@ export const registerEvidenceTools = (
total: 1,
message: "started",
});
const parameters = jsonObjectSchema.parse(input);
const executionParameters =
options.parametersForExecution?.(contract.name, parameters) ??
parameters;