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
JavaScript
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
};
}
}