Skip to main content
Glama

QuickFile MCP Server

by marcusquinn
supplier.ts5.42 kB
/** * QuickFile Supplier Tools * Supplier management operations */ import type { Tool } from "@modelcontextprotocol/sdk/types.js"; import { getApiClient } from "../api/client.js"; import type { Supplier, SupplierSearchParams } from "../types/quickfile.js"; import { handleToolError, successResult, cleanParams, buildAddressFromArgs, buildEntityData, searchSchemaProperties, entitySchemaProperties, type ToolResult, } from "./utils.js"; // ============================================================================= // Tool Definitions // ============================================================================= export const supplierTools: Tool[] = [ { name: "quickfile_supplier_search", description: "Search for suppliers by company name, contact name, email, or postcode", inputSchema: { type: "object", properties: { ...searchSchemaProperties, orderBy: { type: "string", enum: ["CompanyName", "DateCreated", "SupplierID"], description: "Field to order by", }, }, required: [], }, }, { name: "quickfile_supplier_get", description: "Get detailed information about a specific supplier", inputSchema: { type: "object", properties: { supplierId: { type: "number", description: "The supplier ID" }, }, required: ["supplierId"], }, }, { name: "quickfile_supplier_create", description: "Create a new supplier record", inputSchema: { type: "object", properties: entitySchemaProperties, required: [], }, }, { name: "quickfile_supplier_delete", description: "Delete a supplier record (use with caution)", inputSchema: { type: "object", properties: { supplierId: { type: "number", description: "The supplier ID to delete", }, }, required: ["supplierId"], }, }, ]; // ============================================================================= // Tool Handlers // ============================================================================= interface SupplierSearchResponse { Suppliers: { Supplier: Supplier[]; }; TotalRecords: number; } interface SupplierGetResponse { SupplierDetails: Supplier; } interface SupplierCreateResponse { SupplierID: number; } // ============================================================================= // Tool Handler // ============================================================================= export async function handleSupplierTool( toolName: string, args: Record<string, unknown>, ): Promise<ToolResult> { const apiClient = getApiClient(); try { switch (toolName) { case "quickfile_supplier_search": { const params: SupplierSearchParams = { OrderResultsBy: (args.orderBy as SupplierSearchParams["OrderResultsBy"]) ?? "CompanyName", OrderDirection: (args.orderDirection as SupplierSearchParams["OrderDirection"]) ?? "ASC", ReturnCount: (args.returnCount as number) ?? 25, Offset: (args.offset as number) ?? 0, CompanyName: args.companyName as string | undefined, ContactName: args.contactName as string | undefined, Email: args.email as string | undefined, Postcode: args.postcode as string | undefined, }; const cleaned = cleanParams(params); const response = await apiClient.request< { SearchParameters: typeof cleaned }, SupplierSearchResponse >("Supplier_Search", { SearchParameters: cleaned }); const suppliers = response.Suppliers?.Supplier || []; return successResult({ totalRecords: response.TotalRecords, count: suppliers.length, suppliers, }); } case "quickfile_supplier_get": { const response = await apiClient.request< { SupplierID: number }, SupplierGetResponse >("Supplier_Get", { SupplierID: args.supplierId as number }); return successResult(response.SupplierDetails); } case "quickfile_supplier_create": { const address = buildAddressFromArgs(args); const supplierData = buildEntityData(args, address); const cleanData = cleanParams(supplierData); const response = await apiClient.request< { SupplierData: typeof cleanData }, SupplierCreateResponse >("Supplier_Create", { SupplierData: cleanData }); return successResult({ success: true, supplierId: response.SupplierID, message: `Supplier created successfully with ID ${response.SupplierID}`, }); } case "quickfile_supplier_delete": { await apiClient.request<{ SupplierID: number }, Record<string, never>>( "Supplier_Delete", { SupplierID: args.supplierId as number }, ); return successResult({ success: true, supplierId: args.supplierId, message: `Supplier #${args.supplierId} deleted successfully`, }); } default: return { content: [ { type: "text", text: `Unknown supplier tool: ${toolName}` }, ], isError: true, }; } } catch (error) { return handleToolError(error); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcusquinn/quickfile-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server