File tree Expand file tree Collapse file tree 3 files changed +120
-0
lines changed
Expand file tree Collapse file tree 3 files changed +120
-0
lines changed Original file line number Diff line number Diff line change 1+ import type { FastMCP } from 'fastmcp' ;
2+ import { UserError } from 'fastmcp' ;
3+ import { z } from 'zod' ;
4+ import { getSheetsClient } from '../../clients.js' ;
5+
6+ export function register ( server : FastMCP ) {
7+ server . addTool ( {
8+ name : 'deleteSheet' ,
9+ description :
10+ 'Deletes a sheet (tab) from a spreadsheet. Use getSpreadsheetInfo to find the numeric sheet ID.' ,
11+ parameters : z . object ( {
12+ spreadsheetId : z
13+ . string ( )
14+ . describe (
15+ 'The spreadsheet ID — the long string between /d/ and /edit in a Google Sheets URL.'
16+ ) ,
17+ sheetId : z
18+ . number ( )
19+ . int ( )
20+ . describe (
21+ 'The numeric sheet ID to delete. Use getSpreadsheetInfo to find sheet IDs.'
22+ ) ,
23+ } ) ,
24+ execute : async ( args , { log } ) => {
25+ const sheets = await getSheetsClient ( ) ;
26+ log . info (
27+ `Deleting sheet ID ${ args . sheetId } from spreadsheet ${ args . spreadsheetId } `
28+ ) ;
29+
30+ try {
31+ await sheets . spreadsheets . batchUpdate ( {
32+ spreadsheetId : args . spreadsheetId ,
33+ requestBody : {
34+ requests : [
35+ {
36+ deleteSheet : {
37+ sheetId : args . sheetId ,
38+ } ,
39+ } ,
40+ ] ,
41+ } ,
42+ } ) ;
43+
44+ return `Successfully deleted sheet (ID: ${ args . sheetId } ) from spreadsheet.` ;
45+ } catch ( error : any ) {
46+ log . error (
47+ `Error deleting sheet in spreadsheet ${ args . spreadsheetId } : ${ error . message || error } `
48+ ) ;
49+ if ( error instanceof UserError ) throw error ;
50+ throw new UserError ( `Failed to delete sheet: ${ error . message || 'Unknown error' } ` ) ;
51+ }
52+ } ,
53+ } ) ;
54+ }
Original file line number Diff line number Diff line change @@ -8,6 +8,8 @@ import { register as getSpreadsheetInfo } from './getSpreadsheetInfo.js';
88import { register as addSpreadsheetSheet } from './addSpreadsheetSheet.js' ;
99import { register as createSpreadsheet } from './createSpreadsheet.js' ;
1010import { register as listGoogleSheets } from './listGoogleSheets.js' ;
11+ import { register as deleteSheet } from './deleteSheet.js' ;
12+ import { register as renameSheet } from './renameSheet.js' ;
1113import { register as duplicateSheet } from './duplicateSheet.js' ;
1214
1315// Formatting & validation
@@ -27,6 +29,8 @@ export function registerSheetsTools(server: FastMCP) {
2729 addSpreadsheetSheet ( server ) ;
2830 createSpreadsheet ( server ) ;
2931 listGoogleSheets ( server ) ;
32+ deleteSheet ( server ) ;
33+ renameSheet ( server ) ;
3034 duplicateSheet ( server ) ;
3135
3236 // Formatting & validation
Original file line number Diff line number Diff line change 1+ import type { FastMCP } from 'fastmcp' ;
2+ import { UserError } from 'fastmcp' ;
3+ import { z } from 'zod' ;
4+ import { getSheetsClient } from '../../clients.js' ;
5+
6+ export function register ( server : FastMCP ) {
7+ server . addTool ( {
8+ name : 'renameSheet' ,
9+ description :
10+ 'Renames a sheet (tab) in a spreadsheet. Use getSpreadsheetInfo to find the numeric sheet ID.' ,
11+ parameters : z . object ( {
12+ spreadsheetId : z
13+ . string ( )
14+ . describe (
15+ 'The spreadsheet ID — the long string between /d/ and /edit in a Google Sheets URL.'
16+ ) ,
17+ sheetId : z
18+ . number ( )
19+ . int ( )
20+ . describe (
21+ 'The numeric sheet ID to rename. Use getSpreadsheetInfo to find sheet IDs.'
22+ ) ,
23+ newName : z
24+ . string ( )
25+ . min ( 1 )
26+ . describe ( 'The new name for the sheet.' ) ,
27+ } ) ,
28+ execute : async ( args , { log } ) => {
29+ const sheets = await getSheetsClient ( ) ;
30+ log . info (
31+ `Renaming sheet ID ${ args . sheetId } to "${ args . newName } " in spreadsheet ${ args . spreadsheetId } `
32+ ) ;
33+
34+ try {
35+ await sheets . spreadsheets . batchUpdate ( {
36+ spreadsheetId : args . spreadsheetId ,
37+ requestBody : {
38+ requests : [
39+ {
40+ updateSheetProperties : {
41+ properties : {
42+ sheetId : args . sheetId ,
43+ title : args . newName ,
44+ } ,
45+ fields : 'title' ,
46+ } ,
47+ } ,
48+ ] ,
49+ } ,
50+ } ) ;
51+
52+ return `Successfully renamed sheet (ID: ${ args . sheetId } ) to "${ args . newName } ".` ;
53+ } catch ( error : any ) {
54+ log . error (
55+ `Error renaming sheet in spreadsheet ${ args . spreadsheetId } : ${ error . message || error } `
56+ ) ;
57+ if ( error instanceof UserError ) throw error ;
58+ throw new UserError ( `Failed to rename sheet: ${ error . message || 'Unknown error' } ` ) ;
59+ }
60+ } ,
61+ } ) ;
62+ }
You can’t perform that action at this time.
0 commit comments