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