import type { CallToolResult } from "@modelcontextprotocol/client"; import { queryMcpToolId } from "../runtime/product-mcp-tools.js"; // The local server exposes tools only. Retain the saved Server evidence, but // replace its upstream-only resource link with this server's paging tool. export function localEvidenceResult(result: CallToolResult): CallToolResult { if (result.isError || !result.content.some((item) => item.type === "resource_link" && item.uri.startsWith("tjwater://"))) return result; const raw = result.structuredContent; const output = raw && typeof raw === "object" && !Array.isArray(raw) ? raw as Record : undefined; const evidenceId = output?.evidence_id; if (!output || typeof evidenceId !== "string" || !evidenceId || evidenceId.length > 160) throw new Error("Saved evidence response has no identifier"); const originalData = output.data && typeof output.data === "object" && !Array.isArray(output.data) ? output.data as Record : {}; const { resource_uri: _uri, ...data } = originalData; const next = { ...output, data: { ...data, evidence_read: { tool: queryMcpToolId("get_task_evidence"), arguments: { evidence_id: evidenceId, limit: 20, offset: 0 } } }, data_gaps: [...(Array.isArray(output.data_gaps) ? output.data_gaps.filter((gap) => gap !== "Inline result abbreviated; read the saved evidence resource") : []), "Inline result abbreviated; use evidence_read with a small page and select deeper data_path values when needed"], }; return { ...result, structuredContent: next, content: [{ type: "text", text: JSON.stringify(next) }, ...result.content.filter((item) => item.type !== "text" && item.type !== "resource_link")], }; }