UNPKG

mcp-quickbase

Version:

Work with Quickbase via Model Context Protocol

123 lines 4.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateRecordTool = void 0; const base_1 = require("../base"); const logger_1 = require("../../utils/logger"); const logger = (0, logger_1.createLogger)("CreateRecordTool"); /** * Tool for creating a new record in a Quickbase table */ class CreateRecordTool extends base_1.BaseTool { /** * Constructor * @param client Quickbase client */ constructor(client) { super(client); this.name = "create_record"; this.description = "Creates a new record in a Quickbase table"; /** * Parameter schema for create_record */ this.paramSchema = { type: "object", properties: { table_id: { type: "string", description: "The ID of the Quickbase table", }, data: { type: "object", description: "The data for the new record, as field ID/value pairs", }, }, required: ["table_id", "data"], }; } /** * Run the create_record tool * @param params Tool parameters * @returns Created record information */ async run(params) { const { table_id, data } = params; logger.info("Creating new record in Quickbase table", { tableId: table_id, }); // Validate data if (!data || typeof data !== "object" || Object.keys(data).length === 0) { throw new Error("Record data is required and must be a non-empty object"); } // Prepare record data // Convert data to { [fieldId]: { value: fieldValue } } format expected by the API const recordData = {}; for (const [field, value] of Object.entries(data)) { recordData[field] = { value }; } // Prepare request body const body = { to: table_id, data: [recordData], }; // Create the record const response = await this.client.request({ method: "POST", path: "/records", body, }); if (!response.success || !response.data) { logger.error("Failed to create record", { error: response.error, tableId: table_id, }); throw new Error(response.error?.message || "Failed to create record"); } // Safely validate response structure if (typeof response.data !== "object" || response.data === null) { throw new Error("Invalid API response: data is not an object"); } const result = response.data; // Validate metadata exists and is an object if (typeof result.metadata !== "object" || result.metadata === null) { logger.error("Record creation response missing metadata", { response: result, }); throw new Error("Record created but response metadata is missing"); } const metadata = result.metadata; // Validate createdRecordIds exists and is an array if (!Array.isArray(metadata.createdRecordIds)) { logger.error("Record creation response missing createdRecordIds array", { metadata, }); throw new Error("Record created but no record IDs array was returned"); } const createdRecordIds = metadata.createdRecordIds; if (createdRecordIds.length === 0) { logger.error("Record creation response has empty createdRecordIds array", { metadata, }); throw new Error("Record created but no record ID was returned"); } // Validate first record ID is a string const recordId = createdRecordIds[0]; if (typeof recordId !== "string") { logger.error("Record creation response has invalid record ID type", { recordId, type: typeof recordId, }); throw new Error("Record created but returned record ID is not a string"); } logger.info("Successfully created record", { recordId, tableId: table_id, }); return { recordId, tableId: table_id, createdTime: new Date().toISOString(), }; } } exports.CreateRecordTool = CreateRecordTool; //# sourceMappingURL=create_record.js.map