UNPKG

@gsb-core/mcp-tools

Version:

Shared tools for GSB MCP implementations

299 lines 20.9 kB
import { gsbEntityTools } from "./gsb-entity-tools.js"; import { gsbEntityDefTools } from "./gsb-entity-def-tools.js"; import { z } from "zod"; import { getDocs, getSummary, getApiDocs, getServerlessFunctionDocs, getSchemaDocs } from "@gsb-core/mcp-docs"; function getToolSummary(toolName) { return getSummary(toolName) + "\n\n ***Important: Make sure to run getDocs(\"" + toolName + "\") to get the full documentation before using the tool"; } export const toolHelper = { applyToMcp: async ({ server, getToken, getTenantCode }) => { // Entity tools server.tool("getById", getToolSummary("getById") || "Retrieves an entity by its ID", { definitionType: z.string().describe("The entity definition type name"), id: z.string().describe("The unique identifier of the entity"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ definitionType, id, token, tenantCode }, extra) => { const result = await gsbEntityTools.getById({ definitionType, id, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("getCopy", getToolSummary("getCopy") || "Creates a copy of an entity by its ID, excluding the ID field", { request: z.any().describe("The copy request containing definitionType and id"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.getCopy({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("query", getToolSummary("query") || "Performs a query operation to fetch entities", { queryParams: z.any().describe("The query parameters object"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ queryParams, token, tenantCode }, extra) => { const result = await gsbEntityTools.query({ queryParams, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("queryMapped", getToolSummary("queryMapped") || "Performs a mapped query operation to fetch entities with mapping", { queryParams: z.any().describe("The query parameters object"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ queryParams, token, tenantCode }, extra) => { const result = await gsbEntityTools.queryMapped({ queryParams, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("save", getToolSummary("save") || "Saves a single entity", { entity: z.any().describe("The entity to save"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ entity, token, tenantCode }, extra) => { const result = await gsbEntityTools.save({ request: entity, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("saveMulti", getToolSummary("saveMulti") || "Saves multiple entities in a single operation", { request: z.any().describe("The save request with entities array"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.saveMulti({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("delete", getToolSummary("delete") || "Deletes an entity or entities based on criteria", { request: z.any().describe("The delete request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.delete({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("deleteQuery", getToolSummary("deleteQuery") || "Deletes entities based on a query", { queryParams: z.any().describe("The query parameters object"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ queryParams, token, tenantCode }, extra) => { const result = await gsbEntityTools.deleteQuery({ queryParams, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("saveMappedItems", getToolSummary("saveMappedItems") || "Saves mapped items for an entity", { request: z.any().describe("The mapped save request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.saveMappedItems({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("removeMappedItems", getToolSummary("removeMappedItems") || "Removes mapped items from an entity", { request: z.any().describe("The mapped remove request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.removeMappedItems({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("runWorkflow", getToolSummary("runWorkflow") || "Runs a workflow", { request: z.any().describe("The workflow request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.runWorkflow({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("startWorkflow", getToolSummary("startWorkflow") || "Starts a workflow", { request: z.any().describe("The workflow start request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.startWorkflow({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("runWfFunction", getToolSummary("runWfFunction") || "Runs a workflow function", { request: z.any().describe("The function execution request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.runWfFunction({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("testWfFunction", getToolSummary("testWfFunction") || "Tests a workflow function", { request: z.any().describe("The function execution request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.testWfFunction({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("iterateTask", getToolSummary("iterateTask") || "Iterates a workflow task", { request: z.any().describe("The task iteration request"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ request, token, tenantCode }, extra) => { const result = await gsbEntityTools.iterateTask({ request, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); // Entity Definition tools server.tool("getCommonPropertyDefs", getToolSummary("getCommonPropertyDefs") || "Gets common property definitions that can be used when creating entity properties", { token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ token, tenantCode }, extra) => { const result = await gsbEntityDefTools.getCommonPropertyDefs({ token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("createEntityDef", getToolSummary("createEntityDef") || "Creates a new entity definition with the specified schema", { entityDef: z.any().describe("The entity definition to create"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.createEntityDef({ entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("updateEntityDef", getToolSummary("updateEntityDef") || "Updates an existing entity definition", { entityDef: z.any().describe("The entity definition to update"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.updateEntityDef({ entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("addProperty", getToolSummary("addProperty") || "Adds a new property to an entity definition", { property: z.any().describe("The property to add"), entityDef: z.any().optional().describe("The entity definition object containing id or name"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ property, entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.addProperty({ property, entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("removeProperty", getToolSummary("removeProperty") || "Removes a property from an entity definition", { property: z.any().describe("The property to remove"), entityDef: z.any().optional().describe("The entity definition object containing id or name"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ property, entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.removeProperty({ property, entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("updateProperty", getToolSummary("updateProperty") || "Updates an existing property in an entity definition", { property: z.any().describe("The updated property definition"), entityDef: z.any().describe("The entity definition object containing id or name"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ property, entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.updateProperty({ property, entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("getEntityDef", getToolSummary("getEntityDef") || "Gets an entity definition by ID or name", { entityDef: z.any().describe("The entity definition object containing id or name"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ entityDef, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.getEntityDef({ entityDef, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); server.tool("queryEntityDefs", getToolSummary("queryEntityDefs") || "Queries entity definitions", { searchTerm: z.string().describe("Search term for entity definitions"), page: z.number().int().describe("Page number (0-based)"), pageSize: z.number().int().describe("Number of items per page"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ searchTerm, page, pageSize, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.queryEntityDefs({ searchTerm, page, pageSize, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); // Add the createOrUpdateSchema tool server.tool("createOrUpdateSchema", getToolSummary("createOrUpdateSchema") || "Creates or updates multiple entity definitions and their properties with intelligent reference handling", { entityDefs: z.array(z.any()).describe("Array of entity definitions to create or update"), token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ entityDefs, token, tenantCode }, extra) => { const result = await gsbEntityDefTools.createOrUpdateSchema({ entityDefs, token: getToken(token), tenantCode: getTenantCode(tenantCode) }); return { content: [{ type: "text", text: JSON.stringify(result) }], }; }); // Add API documentation tools server.tool("getDocs", getToolSummary("getDocs") || "Gets comprehensive API documentation", { methodName: z.string().optional().describe("Optional method name to get specific documentation") }, async ({ methodName }, extra) => { const docs = getDocs(methodName); return { content: [{ type: "text", text: docs }], }; }); server.tool("getApiDocs", getToolSummary("getApiDocs") || "Gets general API information", { token: z.string().optional().describe("The authentication token for your request"), tenantCode: z.string().optional().describe("Optional tenant code (extracted from token if not provided)") }, async ({ token, tenantCode }, extra) => { const docs = getApiDocs(); return { content: [{ type: "text", text: docs }], }; }); // New tool for GSB Serverless Functions Documentation server.tool("getServerlessFunctionDocs", "Gets comprehensive documentation for GSB Serverless Functions", {}, async (args, extra) => { const docs = getServerlessFunctionDocs(); return { content: [{ type: "text", text: docs }], }; }); // New tool for GSB Schema Docs server.tool("getSchemaDocs", "Gets comprehensive documentation for GSB Schema Management", {}, async (args, extra) => { const docs = getSchemaDocs(); return { content: [{ type: "text", text: docs }], }; }); // Add Schema Manager Documentation server.tool("getSchemaManagerDocs", "Gets documentation specific to the Schema Manager service", {}, async (args, extra) => { const docs = getDocs("createOrUpdateSchema"); return { content: [{ type: "text", text: docs }], }; }); } }; // Added missing closing brace //# sourceMappingURL=tool-helper.js.map