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

90 lines (89 loc) 2.99 kB
import { google } from "googleapis"; export const schema = { name: "gsheets_create_spreadsheet", description: "Create a new Google Spreadsheet", inputSchema: { type: "object", properties: { title: { type: "string", description: "Title of the spreadsheet" }, sheetNames: { type: "array", items: { type: "string" }, description: "Names of initial sheets (optional)", optional: true } }, required: ["title"] } }; export async function createSpreadsheet(args) { try { const validatedArgs = args; // Security validation if (!validatedArgs.title || validatedArgs.title.includes("../")) { return { content: [{ type: "text", text: "Error: Invalid spreadsheet title" }], isError: true }; } const sheets = google.sheets({ version: "v4" }); // Prepare spreadsheet properties const requestBody = { properties: { title: validatedArgs.title } }; // Add initial sheets if specified if (validatedArgs.sheetNames && validatedArgs.sheetNames.length > 0) { requestBody.sheets = validatedArgs.sheetNames.map((name, index) => ({ properties: { sheetId: index, title: name, index: index } })); } // Create the spreadsheet const response = await sheets.spreadsheets.create({ requestBody, fields: "spreadsheetId,spreadsheetUrl,properties.title,sheets.properties.title" }); const spreadsheet = response.data; const sheetTitles = spreadsheet.sheets?.map(s => s.properties?.title).join(", ") || "Sheet1"; return { content: [{ type: "text", text: `Spreadsheet created successfully: - Title: ${spreadsheet.properties?.title} - ID: ${spreadsheet.spreadsheetId} - URL: ${spreadsheet.spreadsheetUrl} - Sheets: ${sheetTitles}` }], isError: false }; } catch (error) { 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 }; } return { content: [{ type: "text", text: `Error creating spreadsheet: ${error.message || error}` }], isError: true }; } }