diff --git a/src/tools/correspondents.ts b/src/tools/correspondents.ts index 87504f0..4b3e572 100644 --- a/src/tools/correspondents.ts +++ b/src/tools/correspondents.ts @@ -1,5 +1,6 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp"; import { z } from "zod"; +import { toTextResult } from "./result"; export function registerCorrespondentTools(server: McpServer, api) { server.tool( @@ -7,7 +8,7 @@ export function registerCorrespondentTools(server: McpServer, api) { "Retrieve all available correspondents (people, companies, organizations that send/receive documents). Returns names and automatic matching patterns for document assignment.", { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.getCorrespondents(); + return toTextResult(await api.getCorrespondents()); }); server.tool( @@ -22,7 +23,7 @@ export function registerCorrespondentTools(server: McpServer, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.createCorrespondent(args); + return toTextResult(await api.createCorrespondent(args)); } ); @@ -49,17 +50,19 @@ export function registerCorrespondentTools(server: McpServer, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.bulkEditObjects( - args.correspondent_ids, - "correspondents", - args.operation, - args.operation === "set_permissions" - ? { - owner: args.owner, - permissions: args.permissions, - merge: args.merge, - } - : {} + return toTextResult( + await api.bulkEditObjects( + args.correspondent_ids, + "correspondents", + args.operation, + args.operation === "set_permissions" + ? { + owner: args.owner, + permissions: args.permissions, + merge: args.merge, + } + : {} + ) ); } ); diff --git a/src/tools/documentTypes.ts b/src/tools/documentTypes.ts index e7b4536..036564b 100644 --- a/src/tools/documentTypes.ts +++ b/src/tools/documentTypes.ts @@ -1,4 +1,5 @@ import { z } from "zod"; +import { toTextResult } from "./result"; export function registerDocumentTypeTools(server, api) { server.tool( @@ -8,7 +9,7 @@ export function registerDocumentTypeTools(server, api) { // No parameters - returns all available document types }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.getDocumentTypes(); + return toTextResult(await api.getDocumentTypes()); }); server.tool( @@ -23,7 +24,7 @@ export function registerDocumentTypeTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.createDocumentType(args); + return toTextResult(await api.createDocumentType(args)); } ); @@ -50,17 +51,19 @@ export function registerDocumentTypeTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.bulkEditObjects( - args.document_type_ids, - "document_types", - args.operation, - args.operation === "set_permissions" - ? { - owner: args.owner, - permissions: args.permissions, - merge: args.merge, - } - : {} + return toTextResult( + await api.bulkEditObjects( + args.document_type_ids, + "document_types", + args.operation, + args.operation === "set_permissions" + ? { + owner: args.owner, + permissions: args.permissions, + merge: args.merge, + } + : {} + ) ); } ); diff --git a/src/tools/documents.ts b/src/tools/documents.ts index 87a94a7..6abfe83 100644 --- a/src/tools/documents.ts +++ b/src/tools/documents.ts @@ -1,4 +1,5 @@ import { z } from "zod"; +import { toTextResult } from "./result"; export function registerDocumentTools(server, api) { server.tool( @@ -53,7 +54,7 @@ export function registerDocumentTools(server, api) { async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); const { documents, method, ...parameters } = args; - return api.bulkEditDocuments(documents, method, parameters); + return toTextResult(await api.bulkEditDocuments(documents, method, parameters)); } ); @@ -78,7 +79,7 @@ export function registerDocumentTools(server, api) { const blob = new Blob([binaryData]); const file = new File([blob], args.filename); const { file: _, filename: __, ...metadata } = args; - return api.postDocument(file, metadata); + return toTextResult(await api.postDocument(file, metadata)); } ); @@ -91,7 +92,7 @@ export function registerDocumentTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.getDocument(args.id); + return toTextResult(await api.getDocument(args.id)); } ); @@ -114,7 +115,7 @@ export function registerDocumentTools(server, api) { if (Object.keys(data).length === 0) { throw new Error("At least one field must be provided to update."); } - return api.updateDocument(id, data); + return toTextResult(await api.updateDocument(id, data)); } ); @@ -128,7 +129,7 @@ export function registerDocumentTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.searchDocuments(args.query, args.page, args.page_size); + return toTextResult(await api.searchDocuments(args.query, args.page, args.page_size)); } ); @@ -142,14 +143,14 @@ export function registerDocumentTools(server, api) { async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); const response = await api.downloadDocument(args.id, args.original); - return { + return toTextResult({ blob: Buffer.from(await response.arrayBuffer()).toString("base64"), filename: response.headers .get("content-disposition") ?.split("filename=")[1] ?.replace(/"/g, "") || `document-${args.id}`, - }; + }); } ); } diff --git a/src/tools/result.ts b/src/tools/result.ts new file mode 100644 index 0000000..be64f8d --- /dev/null +++ b/src/tools/result.ts @@ -0,0 +1,7 @@ +export function toTextResult(data: unknown) { + return { + content: [ + { type: "text" as const, text: JSON.stringify(data, null, 2) }, + ], + }; +} diff --git a/src/tools/tags.ts b/src/tools/tags.ts index 5447764..8a0e4ca 100644 --- a/src/tools/tags.ts +++ b/src/tools/tags.ts @@ -1,4 +1,5 @@ import { z } from "zod"; +import { toTextResult } from "./result"; export function registerTagTools(server, api) { server.tool( @@ -8,7 +9,7 @@ export function registerTagTools(server, api) { // No parameters - returns all available tags }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.getTags(); + return toTextResult(await api.getTags()); }); server.tool( @@ -25,7 +26,7 @@ export function registerTagTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.createTag(args); + return toTextResult(await api.createTag(args)); } ); @@ -44,7 +45,7 @@ export function registerTagTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.updateTag(args.id, args); + return toTextResult(await api.updateTag(args.id, args)); } ); @@ -56,7 +57,7 @@ export function registerTagTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.deleteTag(args.id); + return toTextResult(await api.deleteTag(args.id)); } ); @@ -83,17 +84,19 @@ export function registerTagTools(server, api) { }, async (args, extra) => { if (!api) throw new Error("Please configure API connection first"); - return api.bulkEditObjects( - args.tag_ids, - "tags", - args.operation, - args.operation === "set_permissions" - ? { - owner: args.owner, - permissions: args.permissions, - merge: args.merge, - } - : {} + return toTextResult( + await api.bulkEditObjects( + args.tag_ids, + "tags", + args.operation, + args.operation === "set_permissions" + ? { + owner: args.owner, + permissions: args.permissions, + merge: args.merge, + } + : {} + ) ); } );