UNPKG

mcp-gdrive-enhanced-markov

Version:

MCP server for Google Drive and Sheets with write capabilities, AI-powered PDF analysis, SQLite document indexing, and advanced directory exploration tools

109 lines (108 loc) 3.67 kB
import { google } from "googleapis"; export const schema = { name: "gsheets_update_range", description: "Update multiple cells in a Google Spreadsheet at once", inputSchema: { type: "object", properties: { spreadsheetId: { type: "string", description: "ID of the spreadsheet" }, range: { type: "string", description: "Range in A1 notation (e.g., 'Sheet1!A1:C3')" }, values: { type: "array", items: { type: "array" }, description: "2D array of values to write" } }, required: ["spreadsheetId", "range", "values"] } }; export async function updateRange(args) { try { const validatedArgs = args; // Validate range format if (!validatedArgs.range || !/^[^!]+![A-Z]+\d+(?::[A-Z]+\d+)?$/.test(validatedArgs.range)) { return { content: [{ type: "text", text: "Error: Invalid range format. Use A1 notation like 'Sheet1!A1:C3'" }], isError: true }; } // Validate values array if (!validatedArgs.values || validatedArgs.values.length === 0) { return { content: [{ type: "text", text: "Error: Values array cannot be empty" }], isError: true }; } const sheets = google.sheets({ version: "v4" }); // Update the range const response = await sheets.spreadsheets.values.update({ spreadsheetId: validatedArgs.spreadsheetId, range: validatedArgs.range, valueInputOption: "RAW", requestBody: { values: validatedArgs.values } }); const result = response.data; return { content: [{ type: "text", text: `Range updated successfully: - Spreadsheet ID: ${validatedArgs.spreadsheetId} - Range: ${validatedArgs.range} - Cells Updated: ${result.updatedCells} - Rows Updated: ${result.updatedRows} - Columns Updated: ${result.updatedColumns}` }], isError: false }; } catch (error) { if (error.code === 404) { return { content: [{ type: "text", text: "Error: Spreadsheet not found or invalid range" }], isError: true }; } if (error.code === 403 && error.message?.includes("insufficientPermissions")) { return { content: [{ type: "text", text: "Error: Insufficient permissions. This operation requires write access. Please re-authenticate with updated permissions." }], isError: true }; } if (error.code === 400 && error.message?.includes("Unable to parse range")) { return { content: [{ type: "text", text: `Error: Invalid range '${args.range}'. Use A1 notation like 'Sheet1!A1:C3'` }], isError: true }; } return { content: [{ type: "text", text: `Error updating range: ${error.message || error}` }], isError: true }; } }