@mcp-z/mcp-sheets 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +181 -0
- package/bin/server.js +5 -0
- package/dist/cjs/constants.d.cts +7 -0
- package/dist/cjs/constants.d.ts +7 -0
- package/dist/cjs/constants.js +18 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +314 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/create-store.d.cts +2 -0
- package/dist/cjs/lib/create-store.d.ts +2 -0
- package/dist/cjs/lib/create-store.js +166 -0
- package/dist/cjs/lib/create-store.js.map +1 -0
- package/dist/cjs/mcp/index.d.cts +3 -0
- package/dist/cjs/mcp/index.d.ts +3 -0
- package/dist/cjs/mcp/index.js +66 -0
- package/dist/cjs/mcp/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/a1-notation.d.cts +19 -0
- package/dist/cjs/mcp/prompts/a1-notation.d.ts +19 -0
- package/dist/cjs/mcp/prompts/a1-notation.js +169 -0
- package/dist/cjs/mcp/prompts/a1-notation.js.map +1 -0
- package/dist/cjs/mcp/prompts/index.d.cts +1 -0
- package/dist/cjs/mcp/prompts/index.d.ts +1 -0
- package/dist/cjs/mcp/prompts/index.js +17 -0
- package/dist/cjs/mcp/prompts/index.js.map +1 -0
- package/dist/cjs/mcp/resources/index.d.cts +1 -0
- package/dist/cjs/mcp/resources/index.d.ts +1 -0
- package/dist/cjs/mcp/resources/index.js +17 -0
- package/dist/cjs/mcp/resources/index.js.map +1 -0
- package/dist/cjs/mcp/resources/spreadsheet.d.cts +2 -0
- package/dist/cjs/mcp/resources/spreadsheet.d.ts +2 -0
- package/dist/cjs/mcp/resources/spreadsheet.js +258 -0
- package/dist/cjs/mcp/resources/spreadsheet.js.map +1 -0
- package/dist/cjs/mcp/tools/cells-format.d.cts +144 -0
- package/dist/cjs/mcp/tools/cells-format.d.ts +144 -0
- package/dist/cjs/mcp/tools/cells-format.js +484 -0
- package/dist/cjs/mcp/tools/cells-format.js.map +1 -0
- package/dist/cjs/mcp/tools/chart-create.d.cts +94 -0
- package/dist/cjs/mcp/tools/chart-create.d.ts +94 -0
- package/dist/cjs/mcp/tools/chart-create.js +575 -0
- package/dist/cjs/mcp/tools/chart-create.js.map +1 -0
- package/dist/cjs/mcp/tools/columns-get.d.cts +55 -0
- package/dist/cjs/mcp/tools/columns-get.d.ts +55 -0
- package/dist/cjs/mcp/tools/columns-get.js +289 -0
- package/dist/cjs/mcp/tools/columns-get.js.map +1 -0
- package/dist/cjs/mcp/tools/columns-update.d.cts +86 -0
- package/dist/cjs/mcp/tools/columns-update.d.ts +86 -0
- package/dist/cjs/mcp/tools/columns-update.js +482 -0
- package/dist/cjs/mcp/tools/columns-update.js.map +1 -0
- package/dist/cjs/mcp/tools/csv-get-columns.d.cts +43 -0
- package/dist/cjs/mcp/tools/csv-get-columns.d.ts +43 -0
- package/dist/cjs/mcp/tools/csv-get-columns.js +386 -0
- package/dist/cjs/mcp/tools/csv-get-columns.js.map +1 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.d.cts +118 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.d.ts +118 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.js +504 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.js.map +1 -0
- package/dist/cjs/mcp/tools/dimensions-move.d.cts +86 -0
- package/dist/cjs/mcp/tools/dimensions-move.d.ts +86 -0
- package/dist/cjs/mcp/tools/dimensions-move.js +359 -0
- package/dist/cjs/mcp/tools/dimensions-move.js.map +1 -0
- package/dist/cjs/mcp/tools/index.d.cts +26 -0
- package/dist/cjs/mcp/tools/index.d.ts +26 -0
- package/dist/cjs/mcp/tools/index.js +122 -0
- package/dist/cjs/mcp/tools/index.js.map +1 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.cts +48 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.ts +48 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.js +177 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-append.d.cts +58 -0
- package/dist/cjs/mcp/tools/rows-append.d.ts +58 -0
- package/dist/cjs/mcp/tools/rows-append.js +335 -0
- package/dist/cjs/mcp/tools/rows-append.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-csv-append.d.cts +67 -0
- package/dist/cjs/mcp/tools/rows-csv-append.d.ts +67 -0
- package/dist/cjs/mcp/tools/rows-csv-append.js +859 -0
- package/dist/cjs/mcp/tools/rows-csv-append.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-get.d.cts +56 -0
- package/dist/cjs/mcp/tools/rows-get.d.ts +56 -0
- package/dist/cjs/mcp/tools/rows-get.js +292 -0
- package/dist/cjs/mcp/tools/rows-get.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.d.cts +68 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.d.ts +68 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.js +341 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-copy.d.cts +80 -0
- package/dist/cjs/mcp/tools/sheet-copy.d.ts +80 -0
- package/dist/cjs/mcp/tools/sheet-copy.js +394 -0
- package/dist/cjs/mcp/tools/sheet-copy.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-create.d.cts +56 -0
- package/dist/cjs/mcp/tools/sheet-create.d.ts +56 -0
- package/dist/cjs/mcp/tools/sheet-create.js +283 -0
- package/dist/cjs/mcp/tools/sheet-create.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-delete.d.cts +62 -0
- package/dist/cjs/mcp/tools/sheet-delete.d.ts +62 -0
- package/dist/cjs/mcp/tools/sheet-delete.js +341 -0
- package/dist/cjs/mcp/tools/sheet-delete.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-find.d.cts +48 -0
- package/dist/cjs/mcp/tools/sheet-find.d.ts +48 -0
- package/dist/cjs/mcp/tools/sheet-find.js +261 -0
- package/dist/cjs/mcp/tools/sheet-find.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-rename.d.cts +60 -0
- package/dist/cjs/mcp/tools/sheet-rename.d.ts +60 -0
- package/dist/cjs/mcp/tools/sheet-rename.js +305 -0
- package/dist/cjs/mcp/tools/sheet-rename.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.d.cts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.d.ts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.js +319 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.d.cts +52 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.d.ts +52 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.js +270 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.d.cts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.d.ts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.js +334 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.d.cts +56 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.d.ts +56 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.js +289 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.js.map +1 -0
- package/dist/cjs/mcp/tools/validation-set.d.cts +144 -0
- package/dist/cjs/mcp/tools/validation-set.d.ts +144 -0
- package/dist/cjs/mcp/tools/validation-set.js +564 -0
- package/dist/cjs/mcp/tools/validation-set.js.map +1 -0
- package/dist/cjs/mcp/tools/values-batch-update.d.cts +102 -0
- package/dist/cjs/mcp/tools/values-batch-update.d.ts +102 -0
- package/dist/cjs/mcp/tools/values-batch-update.js +409 -0
- package/dist/cjs/mcp/tools/values-batch-update.js.map +1 -0
- package/dist/cjs/mcp/tools/values-clear.d.cts +56 -0
- package/dist/cjs/mcp/tools/values-clear.d.ts +56 -0
- package/dist/cjs/mcp/tools/values-clear.js +308 -0
- package/dist/cjs/mcp/tools/values-clear.js.map +1 -0
- package/dist/cjs/mcp/tools/values-csv-update.d.cts +75 -0
- package/dist/cjs/mcp/tools/values-csv-update.d.ts +75 -0
- package/dist/cjs/mcp/tools/values-csv-update.js +500 -0
- package/dist/cjs/mcp/tools/values-csv-update.js.map +1 -0
- package/dist/cjs/mcp/tools/values-replace.d.cts +68 -0
- package/dist/cjs/mcp/tools/values-replace.d.ts +68 -0
- package/dist/cjs/mcp/tools/values-replace.js +378 -0
- package/dist/cjs/mcp/tools/values-replace.js.map +1 -0
- package/dist/cjs/mcp/tools/values-search.d.cts +74 -0
- package/dist/cjs/mcp/tools/values-search.d.ts +74 -0
- package/dist/cjs/mcp/tools/values-search.js +470 -0
- package/dist/cjs/mcp/tools/values-search.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schemas/index.d.cts +14 -0
- package/dist/cjs/schemas/index.d.ts +14 -0
- package/dist/cjs/schemas/index.js +64 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/setup/config.d.cts +44 -0
- package/dist/cjs/setup/config.d.ts +44 -0
- package/dist/cjs/setup/config.js +201 -0
- package/dist/cjs/setup/config.js.map +1 -0
- package/dist/cjs/setup/http.d.cts +8 -0
- package/dist/cjs/setup/http.d.ts +8 -0
- package/dist/cjs/setup/http.js +260 -0
- package/dist/cjs/setup/http.js.map +1 -0
- package/dist/cjs/setup/index.d.cts +5 -0
- package/dist/cjs/setup/index.d.ts +5 -0
- package/dist/cjs/setup/index.js +46 -0
- package/dist/cjs/setup/index.js.map +1 -0
- package/dist/cjs/setup/oauth-google.d.cts +54 -0
- package/dist/cjs/setup/oauth-google.d.ts +54 -0
- package/dist/cjs/setup/oauth-google.js +332 -0
- package/dist/cjs/setup/oauth-google.js.map +1 -0
- package/dist/cjs/setup/runtime.d.cts +10 -0
- package/dist/cjs/setup/runtime.d.ts +10 -0
- package/dist/cjs/setup/runtime.js +353 -0
- package/dist/cjs/setup/runtime.js.map +1 -0
- package/dist/cjs/setup/stdio.d.cts +7 -0
- package/dist/cjs/setup/stdio.d.ts +7 -0
- package/dist/cjs/setup/stdio.js +239 -0
- package/dist/cjs/setup/stdio.js.map +1 -0
- package/dist/cjs/spreadsheet/column-utilities.d.cts +1 -0
- package/dist/cjs/spreadsheet/column-utilities.d.ts +1 -0
- package/dist/cjs/spreadsheet/column-utilities.js +21 -0
- package/dist/cjs/spreadsheet/column-utilities.js.map +1 -0
- package/dist/cjs/spreadsheet/csv-streaming.d.cts +19 -0
- package/dist/cjs/spreadsheet/csv-streaming.d.ts +19 -0
- package/dist/cjs/spreadsheet/csv-streaming.js +188 -0
- package/dist/cjs/spreadsheet/csv-streaming.js.map +1 -0
- package/dist/cjs/spreadsheet/data-operations.d.cts +115 -0
- package/dist/cjs/spreadsheet/data-operations.d.ts +115 -0
- package/dist/cjs/spreadsheet/data-operations.js +1515 -0
- package/dist/cjs/spreadsheet/data-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/deduplication-utils.d.cts +31 -0
- package/dist/cjs/spreadsheet/deduplication-utils.d.ts +31 -0
- package/dist/cjs/spreadsheet/deduplication-utils.js +65 -0
- package/dist/cjs/spreadsheet/deduplication-utils.js.map +1 -0
- package/dist/cjs/spreadsheet/range-operations.d.cts +184 -0
- package/dist/cjs/spreadsheet/range-operations.d.ts +184 -0
- package/dist/cjs/spreadsheet/range-operations.js +672 -0
- package/dist/cjs/spreadsheet/range-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/sheet-operations.d.cts +30 -0
- package/dist/cjs/spreadsheet/sheet-operations.d.ts +30 -0
- package/dist/cjs/spreadsheet/sheet-operations.js +811 -0
- package/dist/cjs/spreadsheet/sheet-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.d.cts +21 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.d.ts +21 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.js +310 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.js.map +1 -0
- package/dist/cjs/types.d.cts +53 -0
- package/dist/cjs/types.d.ts +53 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/constants.d.ts +7 -0
- package/dist/esm/constants.js +7 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/create-store.d.ts +2 -0
- package/dist/esm/lib/create-store.js +6 -0
- package/dist/esm/lib/create-store.js.map +1 -0
- package/dist/esm/mcp/index.d.ts +3 -0
- package/dist/esm/mcp/index.js +6 -0
- package/dist/esm/mcp/index.js.map +1 -0
- package/dist/esm/mcp/prompts/a1-notation.d.ts +19 -0
- package/dist/esm/mcp/prompts/a1-notation.js +49 -0
- package/dist/esm/mcp/prompts/a1-notation.js.map +1 -0
- package/dist/esm/mcp/prompts/index.d.ts +1 -0
- package/dist/esm/mcp/prompts/index.js +1 -0
- package/dist/esm/mcp/prompts/index.js.map +1 -0
- package/dist/esm/mcp/resources/index.d.ts +1 -0
- package/dist/esm/mcp/resources/index.js +1 -0
- package/dist/esm/mcp/resources/index.js.map +1 -0
- package/dist/esm/mcp/resources/spreadsheet.d.ts +2 -0
- package/dist/esm/mcp/resources/spreadsheet.js +88 -0
- package/dist/esm/mcp/resources/spreadsheet.js.map +1 -0
- package/dist/esm/mcp/tools/cells-format.d.ts +144 -0
- package/dist/esm/mcp/tools/cells-format.js +288 -0
- package/dist/esm/mcp/tools/cells-format.js.map +1 -0
- package/dist/esm/mcp/tools/chart-create.d.ts +94 -0
- package/dist/esm/mcp/tools/chart-create.js +408 -0
- package/dist/esm/mcp/tools/chart-create.js.map +1 -0
- package/dist/esm/mcp/tools/columns-get.d.ts +55 -0
- package/dist/esm/mcp/tools/columns-get.js +113 -0
- package/dist/esm/mcp/tools/columns-get.js.map +1 -0
- package/dist/esm/mcp/tools/columns-update.d.ts +86 -0
- package/dist/esm/mcp/tools/columns-update.js +296 -0
- package/dist/esm/mcp/tools/columns-update.js.map +1 -0
- package/dist/esm/mcp/tools/csv-get-columns.d.ts +43 -0
- package/dist/esm/mcp/tools/csv-get-columns.js +95 -0
- package/dist/esm/mcp/tools/csv-get-columns.js.map +1 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.d.ts +118 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.js +321 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.js.map +1 -0
- package/dist/esm/mcp/tools/dimensions-move.d.ts +86 -0
- package/dist/esm/mcp/tools/dimensions-move.js +183 -0
- package/dist/esm/mcp/tools/dimensions-move.js.map +1 -0
- package/dist/esm/mcp/tools/index.d.ts +26 -0
- package/dist/esm/mcp/tools/index.js +26 -0
- package/dist/esm/mcp/tools/index.js.map +1 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.d.ts +48 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.js +93 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.js.map +1 -0
- package/dist/esm/mcp/tools/rows-append.d.ts +58 -0
- package/dist/esm/mcp/tools/rows-append.js +151 -0
- package/dist/esm/mcp/tools/rows-append.js.map +1 -0
- package/dist/esm/mcp/tools/rows-csv-append.d.ts +67 -0
- package/dist/esm/mcp/tools/rows-csv-append.js +342 -0
- package/dist/esm/mcp/tools/rows-csv-append.js.map +1 -0
- package/dist/esm/mcp/tools/rows-get.d.ts +56 -0
- package/dist/esm/mcp/tools/rows-get.js +116 -0
- package/dist/esm/mcp/tools/rows-get.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-copy-to.d.ts +68 -0
- package/dist/esm/mcp/tools/sheet-copy-to.js +156 -0
- package/dist/esm/mcp/tools/sheet-copy-to.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-copy.d.ts +80 -0
- package/dist/esm/mcp/tools/sheet-copy.js +177 -0
- package/dist/esm/mcp/tools/sheet-copy.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-create.d.ts +56 -0
- package/dist/esm/mcp/tools/sheet-create.js +110 -0
- package/dist/esm/mcp/tools/sheet-create.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-delete.d.ts +62 -0
- package/dist/esm/mcp/tools/sheet-delete.js +125 -0
- package/dist/esm/mcp/tools/sheet-delete.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-find.d.ts +48 -0
- package/dist/esm/mcp/tools/sheet-find.js +90 -0
- package/dist/esm/mcp/tools/sheet-find.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-rename.d.ts +60 -0
- package/dist/esm/mcp/tools/sheet-rename.js +128 -0
- package/dist/esm/mcp/tools/sheet-rename.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.d.ts +58 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.js +117 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-create.d.ts +52 -0
- package/dist/esm/mcp/tools/spreadsheet-create.js +97 -0
- package/dist/esm/mcp/tools/spreadsheet-create.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-find.d.ts +58 -0
- package/dist/esm/mcp/tools/spreadsheet-find.js +113 -0
- package/dist/esm/mcp/tools/spreadsheet-find.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.d.ts +56 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.js +112 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.js.map +1 -0
- package/dist/esm/mcp/tools/validation-set.d.ts +144 -0
- package/dist/esm/mcp/tools/validation-set.js +366 -0
- package/dist/esm/mcp/tools/validation-set.js.map +1 -0
- package/dist/esm/mcp/tools/values-batch-update.d.ts +102 -0
- package/dist/esm/mcp/tools/values-batch-update.js +224 -0
- package/dist/esm/mcp/tools/values-batch-update.js.map +1 -0
- package/dist/esm/mcp/tools/values-clear.d.ts +56 -0
- package/dist/esm/mcp/tools/values-clear.js +131 -0
- package/dist/esm/mcp/tools/values-clear.js.map +1 -0
- package/dist/esm/mcp/tools/values-csv-update.d.ts +75 -0
- package/dist/esm/mcp/tools/values-csv-update.js +202 -0
- package/dist/esm/mcp/tools/values-csv-update.js.map +1 -0
- package/dist/esm/mcp/tools/values-replace.d.ts +68 -0
- package/dist/esm/mcp/tools/values-replace.js +171 -0
- package/dist/esm/mcp/tools/values-replace.js.map +1 -0
- package/dist/esm/mcp/tools/values-search.d.ts +74 -0
- package/dist/esm/mcp/tools/values-search.js +229 -0
- package/dist/esm/mcp/tools/values-search.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/schemas/index.d.ts +14 -0
- package/dist/esm/schemas/index.js +35 -0
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/setup/config.d.ts +44 -0
- package/dist/esm/setup/config.js +151 -0
- package/dist/esm/setup/config.js.map +1 -0
- package/dist/esm/setup/http.d.ts +8 -0
- package/dist/esm/setup/http.js +54 -0
- package/dist/esm/setup/http.js.map +1 -0
- package/dist/esm/setup/index.d.ts +5 -0
- package/dist/esm/setup/index.js +5 -0
- package/dist/esm/setup/index.js.map +1 -0
- package/dist/esm/setup/oauth-google.d.ts +54 -0
- package/dist/esm/setup/oauth-google.js +142 -0
- package/dist/esm/setup/oauth-google.js.map +1 -0
- package/dist/esm/setup/runtime.d.ts +10 -0
- package/dist/esm/setup/runtime.js +84 -0
- package/dist/esm/setup/runtime.js.map +1 -0
- package/dist/esm/setup/stdio.d.ts +7 -0
- package/dist/esm/setup/stdio.js +38 -0
- package/dist/esm/setup/stdio.js.map +1 -0
- package/dist/esm/spreadsheet/column-utilities.d.ts +1 -0
- package/dist/esm/spreadsheet/column-utilities.js +10 -0
- package/dist/esm/spreadsheet/column-utilities.js.map +1 -0
- package/dist/esm/spreadsheet/csv-streaming.d.ts +19 -0
- package/dist/esm/spreadsheet/csv-streaming.js +43 -0
- package/dist/esm/spreadsheet/csv-streaming.js.map +1 -0
- package/dist/esm/spreadsheet/data-operations.d.ts +115 -0
- package/dist/esm/spreadsheet/data-operations.js +712 -0
- package/dist/esm/spreadsheet/data-operations.js.map +1 -0
- package/dist/esm/spreadsheet/deduplication-utils.d.ts +31 -0
- package/dist/esm/spreadsheet/deduplication-utils.js +54 -0
- package/dist/esm/spreadsheet/deduplication-utils.js.map +1 -0
- package/dist/esm/spreadsheet/range-operations.d.ts +184 -0
- package/dist/esm/spreadsheet/range-operations.js +591 -0
- package/dist/esm/spreadsheet/range-operations.js.map +1 -0
- package/dist/esm/spreadsheet/sheet-operations.d.ts +30 -0
- package/dist/esm/spreadsheet/sheet-operations.js +359 -0
- package/dist/esm/spreadsheet/sheet-operations.js.map +1 -0
- package/dist/esm/spreadsheet/spreadsheet-management.d.ts +21 -0
- package/dist/esm/spreadsheet/spreadsheet-management.js +73 -0
- package/dist/esm/spreadsheet/spreadsheet-management.js.map +1 -0
- package/dist/esm/types.d.ts +53 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { schemas } from '@mcp-z/oauth-google';
|
|
2
|
+
const { AuthRequiredBranchSchema } = schemas;
|
|
3
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { google } from 'googleapis';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { SheetGidOutput, SheetGidSchema, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';
|
|
7
|
+
const MAX_BATCH_SIZE = 100;
|
|
8
|
+
const copyItemSchema = z.object({
|
|
9
|
+
newTitle: z.coerce.string().trim().min(1).describe('Name for the copied sheet'),
|
|
10
|
+
insertIndex: z.number().int().min(0).optional().describe('Position to insert the new sheet (0-indexed)')
|
|
11
|
+
});
|
|
12
|
+
const inputSchema = z.object({
|
|
13
|
+
id: SpreadsheetIdSchema,
|
|
14
|
+
gid: SheetGidSchema,
|
|
15
|
+
copies: z.array(copyItemSchema).min(1).max(MAX_BATCH_SIZE).describe('Array of copies to create from the source sheet')
|
|
16
|
+
});
|
|
17
|
+
// Created sheet info
|
|
18
|
+
const createdSheetSchema = z.object({
|
|
19
|
+
gid: SheetGidOutput,
|
|
20
|
+
title: z.string().describe('Title of the created sheet'),
|
|
21
|
+
sheetUrl: z.string().describe('URL of the created sheet')
|
|
22
|
+
});
|
|
23
|
+
// Success branch schema - uses items: for consistency with standard vocabulary
|
|
24
|
+
const successBranchSchema = z.object({
|
|
25
|
+
type: z.literal('success'),
|
|
26
|
+
operationSummary: z.string().describe('Summary of the copy operation'),
|
|
27
|
+
itemsProcessed: z.number().describe('Total copies attempted'),
|
|
28
|
+
itemsChanged: z.number().describe('Successfully created copies'),
|
|
29
|
+
completedAt: z.string().describe('ISO datetime when operation completed'),
|
|
30
|
+
id: SpreadsheetIdOutput,
|
|
31
|
+
sourceGid: z.string().describe('Source sheet ID'),
|
|
32
|
+
sourceTitle: z.string().describe('Source sheet title'),
|
|
33
|
+
items: z.array(createdSheetSchema).describe('Information about created sheets'),
|
|
34
|
+
failures: z.array(z.object({
|
|
35
|
+
title: z.string(),
|
|
36
|
+
error: z.string()
|
|
37
|
+
})).optional().describe('Failed copies with error messages')
|
|
38
|
+
});
|
|
39
|
+
// Output schema with auth_required support
|
|
40
|
+
const outputSchema = z.discriminatedUnion('type', [
|
|
41
|
+
successBranchSchema,
|
|
42
|
+
AuthRequiredBranchSchema
|
|
43
|
+
]);
|
|
44
|
+
const config = {
|
|
45
|
+
description: 'Copy a sheet/tab within the same spreadsheet. Supports batch copying: create multiple copies from a single source sheet (e.g., create 12 monthly sheets from a template). Copies all data, formatting, charts, and conditional formatting verbatim.',
|
|
46
|
+
inputSchema,
|
|
47
|
+
outputSchema: z.object({
|
|
48
|
+
result: outputSchema
|
|
49
|
+
})
|
|
50
|
+
};
|
|
51
|
+
async function handler({ id, gid, copies }, extra) {
|
|
52
|
+
const logger = extra.logger;
|
|
53
|
+
logger.info('sheets.sheet.copy called', {
|
|
54
|
+
id,
|
|
55
|
+
gid,
|
|
56
|
+
copyCount: copies.length
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
var _spreadsheetInfo_data_sheets;
|
|
60
|
+
const sheets = google.sheets({
|
|
61
|
+
version: 'v4',
|
|
62
|
+
auth: extra.authContext.auth
|
|
63
|
+
});
|
|
64
|
+
// First, get the source sheet info
|
|
65
|
+
const spreadsheetInfo = await sheets.spreadsheets.get({
|
|
66
|
+
spreadsheetId: id,
|
|
67
|
+
fields: 'sheets.properties.sheetId,sheets.properties.title'
|
|
68
|
+
});
|
|
69
|
+
const sourceSheet = (_spreadsheetInfo_data_sheets = spreadsheetInfo.data.sheets) === null || _spreadsheetInfo_data_sheets === void 0 ? void 0 : _spreadsheetInfo_data_sheets.find((s)=>{
|
|
70
|
+
var _s_properties;
|
|
71
|
+
return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
|
|
72
|
+
});
|
|
73
|
+
if (!(sourceSheet === null || sourceSheet === void 0 ? void 0 : sourceSheet.properties)) {
|
|
74
|
+
throw new McpError(ErrorCode.InvalidParams, `Source sheet with gid "${gid}" not found in spreadsheet`);
|
|
75
|
+
}
|
|
76
|
+
const sourceTitle = sourceSheet.properties.title || '';
|
|
77
|
+
const sourceSheetId = Number(gid);
|
|
78
|
+
// Execute copies using Promise.allSettled for partial failure handling
|
|
79
|
+
const results = await Promise.allSettled(copies.map(async (copy)=>{
|
|
80
|
+
var _response_data_replies__duplicateSheet_properties, _response_data_replies__duplicateSheet, _response_data_replies_, _response_data_replies, _response_data_replies__duplicateSheet_properties1, _response_data_replies__duplicateSheet1, _response_data_replies_1, _response_data_replies1;
|
|
81
|
+
const response = await sheets.spreadsheets.batchUpdate({
|
|
82
|
+
spreadsheetId: id,
|
|
83
|
+
requestBody: {
|
|
84
|
+
requests: [
|
|
85
|
+
{
|
|
86
|
+
duplicateSheet: {
|
|
87
|
+
sourceSheetId,
|
|
88
|
+
newSheetName: copy.newTitle,
|
|
89
|
+
...copy.insertIndex !== undefined && {
|
|
90
|
+
insertSheetIndex: copy.insertIndex
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const newSheetId = (_response_data_replies = response.data.replies) === null || _response_data_replies === void 0 ? void 0 : (_response_data_replies_ = _response_data_replies[0]) === null || _response_data_replies_ === void 0 ? void 0 : (_response_data_replies__duplicateSheet = _response_data_replies_.duplicateSheet) === null || _response_data_replies__duplicateSheet === void 0 ? void 0 : (_response_data_replies__duplicateSheet_properties = _response_data_replies__duplicateSheet.properties) === null || _response_data_replies__duplicateSheet_properties === void 0 ? void 0 : _response_data_replies__duplicateSheet_properties.sheetId;
|
|
98
|
+
const newTitle = (_response_data_replies1 = response.data.replies) === null || _response_data_replies1 === void 0 ? void 0 : (_response_data_replies_1 = _response_data_replies1[0]) === null || _response_data_replies_1 === void 0 ? void 0 : (_response_data_replies__duplicateSheet1 = _response_data_replies_1.duplicateSheet) === null || _response_data_replies__duplicateSheet1 === void 0 ? void 0 : (_response_data_replies__duplicateSheet_properties1 = _response_data_replies__duplicateSheet1.properties) === null || _response_data_replies__duplicateSheet_properties1 === void 0 ? void 0 : _response_data_replies__duplicateSheet_properties1.title;
|
|
99
|
+
if (!newSheetId || !newTitle) {
|
|
100
|
+
throw new Error('Failed to retrieve new sheet info from API response');
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
gid: String(newSheetId),
|
|
104
|
+
title: newTitle,
|
|
105
|
+
sheetUrl: `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${newSheetId}`
|
|
106
|
+
};
|
|
107
|
+
}));
|
|
108
|
+
// Separate successes and failures
|
|
109
|
+
const items = [];
|
|
110
|
+
const failures = [];
|
|
111
|
+
results.forEach((result, index)=>{
|
|
112
|
+
const copy = copies[index];
|
|
113
|
+
if (!copy) return;
|
|
114
|
+
if (result.status === 'fulfilled') {
|
|
115
|
+
items.push(result.value);
|
|
116
|
+
} else {
|
|
117
|
+
const errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason);
|
|
118
|
+
failures.push({
|
|
119
|
+
title: copy.newTitle,
|
|
120
|
+
error: errorMessage
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const successCount = items.length;
|
|
125
|
+
const failureCount = failures.length;
|
|
126
|
+
const totalCount = copies.length;
|
|
127
|
+
const summary = failureCount === 0 ? `Created ${successCount} cop${successCount === 1 ? 'y' : 'ies'} of "${sourceTitle}"` : `Created ${successCount} of ${totalCount} cop${totalCount === 1 ? 'y' : 'ies'} (${failureCount} failed)`;
|
|
128
|
+
logger.info('sheets.sheet.copy completed', {
|
|
129
|
+
totalCount,
|
|
130
|
+
successCount,
|
|
131
|
+
failureCount
|
|
132
|
+
});
|
|
133
|
+
const result = {
|
|
134
|
+
type: 'success',
|
|
135
|
+
operationSummary: summary,
|
|
136
|
+
itemsProcessed: totalCount,
|
|
137
|
+
itemsChanged: successCount,
|
|
138
|
+
completedAt: new Date().toISOString(),
|
|
139
|
+
id,
|
|
140
|
+
sourceGid: gid,
|
|
141
|
+
sourceTitle,
|
|
142
|
+
items,
|
|
143
|
+
...failures.length > 0 && {
|
|
144
|
+
failures
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
return {
|
|
148
|
+
content: [
|
|
149
|
+
{
|
|
150
|
+
type: 'text',
|
|
151
|
+
text: JSON.stringify(result)
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
structuredContent: {
|
|
155
|
+
result
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
} catch (error) {
|
|
159
|
+
if (error instanceof McpError) {
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
163
|
+
logger.error('sheets.sheet.copy error', {
|
|
164
|
+
error: message
|
|
165
|
+
});
|
|
166
|
+
throw new McpError(ErrorCode.InternalError, `Error copying sheet: ${message}`, {
|
|
167
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export default function createTool() {
|
|
172
|
+
return {
|
|
173
|
+
name: 'sheet-copy',
|
|
174
|
+
config,
|
|
175
|
+
handler
|
|
176
|
+
};
|
|
177
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/sheet-copy.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport { schemas } from '@mcp-z/oauth-google';\n\nconst { AuthRequiredBranchSchema } = schemas;\n\nimport type { ToolModule } from '@mcp-z/server';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';\nimport { google } from 'googleapis';\nimport { z } from 'zod';\nimport { SheetGidOutput, SheetGidSchema, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';\n\nconst MAX_BATCH_SIZE = 100;\n\nconst copyItemSchema = z.object({\n newTitle: z.coerce.string().trim().min(1).describe('Name for the copied sheet'),\n insertIndex: z.number().int().min(0).optional().describe('Position to insert the new sheet (0-indexed)'),\n});\n\nconst inputSchema = z.object({\n id: SpreadsheetIdSchema,\n gid: SheetGidSchema,\n copies: z.array(copyItemSchema).min(1).max(MAX_BATCH_SIZE).describe('Array of copies to create from the source sheet'),\n});\n\n// Created sheet info\nconst createdSheetSchema = z.object({\n gid: SheetGidOutput,\n title: z.string().describe('Title of the created sheet'),\n sheetUrl: z.string().describe('URL of the created sheet'),\n});\n\n// Success branch schema - uses items: for consistency with standard vocabulary\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n operationSummary: z.string().describe('Summary of the copy operation'),\n itemsProcessed: z.number().describe('Total copies attempted'),\n itemsChanged: z.number().describe('Successfully created copies'),\n completedAt: z.string().describe('ISO datetime when operation completed'),\n id: SpreadsheetIdOutput,\n sourceGid: z.string().describe('Source sheet ID'),\n sourceTitle: z.string().describe('Source sheet title'),\n items: z.array(createdSheetSchema).describe('Information about created sheets'),\n failures: z\n .array(\n z.object({\n title: z.string(),\n error: z.string(),\n })\n )\n .optional()\n .describe('Failed copies with error messages'),\n});\n\n// Output schema with auth_required support\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description: 'Copy a sheet/tab within the same spreadsheet. Supports batch copying: create multiple copies from a single source sheet (e.g., create 12 monthly sheets from a template). Copies all data, formatting, charts, and conditional formatting verbatim.',\n inputSchema,\n outputSchema: z.object({\n result: outputSchema,\n }),\n} as const;\n\nexport type Input = z.infer<typeof inputSchema>;\nexport type Output = z.infer<typeof outputSchema>;\n\nasync function handler({ id, gid, copies }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.sheet.copy called', { id, gid, copyCount: copies.length });\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n\n // First, get the source sheet info\n const spreadsheetInfo = await sheets.spreadsheets.get({\n spreadsheetId: id,\n fields: 'sheets.properties.sheetId,sheets.properties.title',\n });\n\n const sourceSheet = spreadsheetInfo.data.sheets?.find((s) => String(s.properties?.sheetId) === gid);\n if (!sourceSheet?.properties) {\n throw new McpError(ErrorCode.InvalidParams, `Source sheet with gid \"${gid}\" not found in spreadsheet`);\n }\n\n const sourceTitle = sourceSheet.properties.title || '';\n const sourceSheetId = Number(gid);\n\n // Execute copies using Promise.allSettled for partial failure handling\n const results = await Promise.allSettled(\n copies.map(async (copy) => {\n const response = await sheets.spreadsheets.batchUpdate({\n spreadsheetId: id,\n requestBody: {\n requests: [\n {\n duplicateSheet: {\n sourceSheetId,\n newSheetName: copy.newTitle,\n ...(copy.insertIndex !== undefined && { insertSheetIndex: copy.insertIndex }),\n },\n },\n ],\n },\n });\n\n const newSheetId = response.data.replies?.[0]?.duplicateSheet?.properties?.sheetId;\n const newTitle = response.data.replies?.[0]?.duplicateSheet?.properties?.title;\n\n if (!newSheetId || !newTitle) {\n throw new Error('Failed to retrieve new sheet info from API response');\n }\n\n return {\n gid: String(newSheetId),\n title: newTitle,\n sheetUrl: `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${newSheetId}`,\n };\n })\n );\n\n // Separate successes and failures\n const items: Array<{ gid: string; title: string; sheetUrl: string }> = [];\n const failures: Array<{ title: string; error: string }> = [];\n\n results.forEach((result, index) => {\n const copy = copies[index];\n if (!copy) return;\n\n if (result.status === 'fulfilled') {\n items.push(result.value);\n } else {\n const errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason);\n failures.push({ title: copy.newTitle, error: errorMessage });\n }\n });\n\n const successCount = items.length;\n const failureCount = failures.length;\n const totalCount = copies.length;\n\n const summary = failureCount === 0 ? `Created ${successCount} cop${successCount === 1 ? 'y' : 'ies'} of \"${sourceTitle}\"` : `Created ${successCount} of ${totalCount} cop${totalCount === 1 ? 'y' : 'ies'} (${failureCount} failed)`;\n\n logger.info('sheets.sheet.copy completed', { totalCount, successCount, failureCount });\n\n const result: Output = {\n type: 'success' as const,\n operationSummary: summary,\n itemsProcessed: totalCount,\n itemsChanged: successCount,\n completedAt: new Date().toISOString(),\n id,\n sourceGid: gid,\n sourceTitle,\n items,\n ...(failures.length > 0 && { failures }),\n };\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result) }],\n structuredContent: { result },\n };\n } catch (error) {\n if (error instanceof McpError) {\n throw error;\n }\n const message = error instanceof Error ? error.message : String(error);\n logger.error('sheets.sheet.copy error', { error: message });\n\n throw new McpError(ErrorCode.InternalError, `Error copying sheet: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'sheet-copy',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["schemas","AuthRequiredBranchSchema","ErrorCode","McpError","google","z","SheetGidOutput","SheetGidSchema","SpreadsheetIdOutput","SpreadsheetIdSchema","MAX_BATCH_SIZE","copyItemSchema","object","newTitle","coerce","string","trim","min","describe","insertIndex","number","int","optional","inputSchema","id","gid","copies","array","max","createdSheetSchema","title","sheetUrl","successBranchSchema","type","literal","operationSummary","itemsProcessed","itemsChanged","completedAt","sourceGid","sourceTitle","items","failures","error","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","info","copyCount","length","spreadsheetInfo","sheets","version","auth","authContext","spreadsheets","get","spreadsheetId","fields","sourceSheet","data","find","s","String","properties","sheetId","InvalidParams","sourceSheetId","Number","results","Promise","allSettled","map","copy","response","batchUpdate","requestBody","requests","duplicateSheet","newSheetName","undefined","insertSheetIndex","newSheetId","replies","Error","forEach","index","status","push","value","errorMessage","reason","message","successCount","failureCount","totalCount","summary","Date","toISOString","content","text","JSON","stringify","structuredContent","InternalError","stack","createTool","name"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { EnrichedExtra } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
sheetTitle: z.ZodCoercedString<unknown>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
type: z.ZodLiteral<"success">;
|
|
10
|
+
operationSummary: z.ZodString;
|
|
11
|
+
itemsProcessed: z.ZodNumber;
|
|
12
|
+
itemsChanged: z.ZodNumber;
|
|
13
|
+
completedAt: z.ZodString;
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
gid: z.ZodString;
|
|
16
|
+
sheetUrl: z.ZodString;
|
|
17
|
+
sheetTitle: z.ZodString;
|
|
18
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
19
|
+
type: z.ZodLiteral<"auth_required">;
|
|
20
|
+
provider: z.ZodString;
|
|
21
|
+
message: z.ZodString;
|
|
22
|
+
url: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strip>], "type">;
|
|
24
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
25
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
26
|
+
declare function handler({ id, sheetTitle }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
27
|
+
export default function createTool(): {
|
|
28
|
+
name: string;
|
|
29
|
+
config: {
|
|
30
|
+
readonly description: "Create a new sheet/tab in the spreadsheet/workbook";
|
|
31
|
+
readonly inputSchema: z.ZodObject<{
|
|
32
|
+
id: z.ZodString;
|
|
33
|
+
sheetTitle: z.ZodCoercedString<unknown>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
readonly outputSchema: z.ZodObject<{
|
|
36
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
37
|
+
type: z.ZodLiteral<"success">;
|
|
38
|
+
operationSummary: z.ZodString;
|
|
39
|
+
itemsProcessed: z.ZodNumber;
|
|
40
|
+
itemsChanged: z.ZodNumber;
|
|
41
|
+
completedAt: z.ZodString;
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
gid: z.ZodString;
|
|
44
|
+
sheetUrl: z.ZodString;
|
|
45
|
+
sheetTitle: z.ZodString;
|
|
46
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
47
|
+
type: z.ZodLiteral<"auth_required">;
|
|
48
|
+
provider: z.ZodString;
|
|
49
|
+
message: z.ZodString;
|
|
50
|
+
url: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>], "type">;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
};
|
|
54
|
+
handler: typeof handler;
|
|
55
|
+
};
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { schemas } from '@mcp-z/oauth-google';
|
|
2
|
+
const { AuthRequiredBranchSchema } = schemas;
|
|
3
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { google } from 'googleapis';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { SheetGidOutput, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';
|
|
7
|
+
const inputSchema = z.object({
|
|
8
|
+
id: SpreadsheetIdSchema,
|
|
9
|
+
sheetTitle: z.coerce.string().trim().min(1).describe('Name for the new sheet tab')
|
|
10
|
+
});
|
|
11
|
+
// Success branch schema
|
|
12
|
+
const successBranchSchema = z.object({
|
|
13
|
+
type: z.literal('success'),
|
|
14
|
+
operationSummary: z.string().describe('Summary of the sheet creation operation'),
|
|
15
|
+
itemsProcessed: z.number().describe('Total items attempted (always 1 for single sheet)'),
|
|
16
|
+
itemsChanged: z.number().describe('Successfully created sheets (always 1 on success)'),
|
|
17
|
+
completedAt: z.string().describe('ISO datetime when operation completed'),
|
|
18
|
+
id: SpreadsheetIdOutput,
|
|
19
|
+
gid: SheetGidOutput,
|
|
20
|
+
sheetUrl: z.string().describe('URL of the created sheet'),
|
|
21
|
+
sheetTitle: z.string().describe('Title of the created sheet')
|
|
22
|
+
});
|
|
23
|
+
// Output schema with auth_required support
|
|
24
|
+
const outputSchema = z.discriminatedUnion('type', [
|
|
25
|
+
successBranchSchema,
|
|
26
|
+
AuthRequiredBranchSchema
|
|
27
|
+
]);
|
|
28
|
+
const config = {
|
|
29
|
+
description: 'Create a new sheet/tab in the spreadsheet/workbook',
|
|
30
|
+
inputSchema,
|
|
31
|
+
outputSchema: z.object({
|
|
32
|
+
result: outputSchema
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
async function handler({ id, sheetTitle }, extra) {
|
|
36
|
+
const logger = extra.logger;
|
|
37
|
+
logger.info('sheets.sheet.create called', {
|
|
38
|
+
id,
|
|
39
|
+
sheetTitle
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
var _batchResult_replies__addSheet_properties, _batchResult_replies__addSheet, _batchResult_replies_, _batchResult_replies;
|
|
43
|
+
const sheets = google.sheets({
|
|
44
|
+
version: 'v4',
|
|
45
|
+
auth: extra.authContext.auth
|
|
46
|
+
});
|
|
47
|
+
const response = await sheets.spreadsheets.batchUpdate({
|
|
48
|
+
spreadsheetId: id,
|
|
49
|
+
requestBody: {
|
|
50
|
+
requests: [
|
|
51
|
+
{
|
|
52
|
+
addSheet: {
|
|
53
|
+
properties: {
|
|
54
|
+
title: sheetTitle
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const batchResult = response.data;
|
|
62
|
+
const sheetId = (_batchResult_replies = batchResult.replies) === null || _batchResult_replies === void 0 ? void 0 : (_batchResult_replies_ = _batchResult_replies[0]) === null || _batchResult_replies_ === void 0 ? void 0 : (_batchResult_replies__addSheet = _batchResult_replies_.addSheet) === null || _batchResult_replies__addSheet === void 0 ? void 0 : (_batchResult_replies__addSheet_properties = _batchResult_replies__addSheet.properties) === null || _batchResult_replies__addSheet_properties === void 0 ? void 0 : _batchResult_replies__addSheet_properties.sheetId;
|
|
63
|
+
if (!sheetId) {
|
|
64
|
+
throw new Error('Failed to retrieve sheetId from Google Sheets API response');
|
|
65
|
+
}
|
|
66
|
+
logger.info('sheets.sheet.create success', {
|
|
67
|
+
id,
|
|
68
|
+
sheetTitle,
|
|
69
|
+
sheetId
|
|
70
|
+
});
|
|
71
|
+
const result = {
|
|
72
|
+
type: 'success',
|
|
73
|
+
operationSummary: `Created sheet "${sheetTitle}"`,
|
|
74
|
+
itemsProcessed: 1,
|
|
75
|
+
itemsChanged: 1,
|
|
76
|
+
completedAt: new Date().toISOString(),
|
|
77
|
+
id,
|
|
78
|
+
gid: String(sheetId),
|
|
79
|
+
sheetUrl: `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetId}`,
|
|
80
|
+
sheetTitle
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: 'text',
|
|
86
|
+
text: JSON.stringify(result)
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
structuredContent: {
|
|
90
|
+
result
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
} catch (error) {
|
|
94
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
95
|
+
logger.error('sheets.sheet.create error', {
|
|
96
|
+
error: message
|
|
97
|
+
});
|
|
98
|
+
// Throw McpError for proper MCP error handling
|
|
99
|
+
throw new McpError(ErrorCode.InternalError, `Error creating sheet: ${message}`, {
|
|
100
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export default function createTool() {
|
|
105
|
+
return {
|
|
106
|
+
name: 'sheet-create',
|
|
107
|
+
config,
|
|
108
|
+
handler
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/sheet-create.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport { schemas } from '@mcp-z/oauth-google';\n\nconst { AuthRequiredBranchSchema } = schemas;\n\nimport type { ToolModule } from '@mcp-z/server';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';\nimport { google } from 'googleapis';\nimport { z } from 'zod';\nimport { SheetGidOutput, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';\n\nconst inputSchema = z.object({\n id: SpreadsheetIdSchema,\n sheetTitle: z.coerce.string().trim().min(1).describe('Name for the new sheet tab'),\n});\n\n// Success branch schema\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n operationSummary: z.string().describe('Summary of the sheet creation operation'),\n itemsProcessed: z.number().describe('Total items attempted (always 1 for single sheet)'),\n itemsChanged: z.number().describe('Successfully created sheets (always 1 on success)'),\n completedAt: z.string().describe('ISO datetime when operation completed'),\n id: SpreadsheetIdOutput,\n gid: SheetGidOutput,\n sheetUrl: z.string().describe('URL of the created sheet'),\n sheetTitle: z.string().describe('Title of the created sheet'),\n});\n\n// Output schema with auth_required support\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description: 'Create a new sheet/tab in the spreadsheet/workbook',\n inputSchema,\n outputSchema: z.object({\n result: outputSchema,\n }),\n} as const;\n\nexport type Input = z.infer<typeof inputSchema>;\nexport type Output = z.infer<typeof outputSchema>;\n\nasync function handler({ id, sheetTitle }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.sheet.create called', { id, sheetTitle });\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n const response = await sheets.spreadsheets.batchUpdate({\n spreadsheetId: id,\n requestBody: {\n requests: [{ addSheet: { properties: { title: sheetTitle } } }],\n },\n });\n const batchResult = response.data;\n const sheetId = batchResult.replies?.[0]?.addSheet?.properties?.sheetId;\n if (!sheetId) {\n throw new Error('Failed to retrieve sheetId from Google Sheets API response');\n }\n logger.info('sheets.sheet.create success', { id, sheetTitle, sheetId });\n\n const result: Output = {\n type: 'success' as const,\n operationSummary: `Created sheet \"${sheetTitle}\"`,\n itemsProcessed: 1,\n itemsChanged: 1,\n completedAt: new Date().toISOString(),\n id,\n gid: String(sheetId),\n sheetUrl: `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetId}`,\n sheetTitle,\n };\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(result),\n },\n ],\n structuredContent: { result },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('sheets.sheet.create error', { error: message });\n\n // Throw McpError for proper MCP error handling\n throw new McpError(ErrorCode.InternalError, `Error creating sheet: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'sheet-create',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["schemas","AuthRequiredBranchSchema","ErrorCode","McpError","google","z","SheetGidOutput","SpreadsheetIdOutput","SpreadsheetIdSchema","inputSchema","object","id","sheetTitle","coerce","string","trim","min","describe","successBranchSchema","type","literal","operationSummary","itemsProcessed","number","itemsChanged","completedAt","gid","sheetUrl","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","info","batchResult","sheets","version","auth","authContext","response","spreadsheets","batchUpdate","spreadsheetId","requestBody","requests","addSheet","properties","title","data","sheetId","replies","Error","Date","toISOString","String","content","text","JSON","stringify","structuredContent","error","message","InternalError","stack","undefined","createTool","name"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { EnrichedExtra } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
gids: z.ZodArray<z.ZodCoercedString<unknown>>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
type: z.ZodLiteral<"success">;
|
|
10
|
+
operationSummary: z.ZodString;
|
|
11
|
+
itemsProcessed: z.ZodNumber;
|
|
12
|
+
itemsChanged: z.ZodNumber;
|
|
13
|
+
completedAt: z.ZodString;
|
|
14
|
+
recoverable: z.ZodLiteral<false>;
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
spreadsheetUrl: z.ZodOptional<z.ZodString>;
|
|
17
|
+
failures: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
18
|
+
gid: z.ZodString;
|
|
19
|
+
error: z.ZodString;
|
|
20
|
+
}, z.core.$strip>>>;
|
|
21
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
22
|
+
type: z.ZodLiteral<"auth_required">;
|
|
23
|
+
provider: z.ZodString;
|
|
24
|
+
message: z.ZodString;
|
|
25
|
+
url: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strip>], "type">;
|
|
27
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
28
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
29
|
+
declare function handler({ id, gids }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
30
|
+
export default function createTool(): {
|
|
31
|
+
name: string;
|
|
32
|
+
config: {
|
|
33
|
+
readonly description: "Permanently delete sheets from a spreadsheet. Cannot delete the last remaining sheet.";
|
|
34
|
+
readonly inputSchema: z.ZodObject<{
|
|
35
|
+
id: z.ZodString;
|
|
36
|
+
gids: z.ZodArray<z.ZodCoercedString<unknown>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
readonly outputSchema: z.ZodObject<{
|
|
39
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
40
|
+
type: z.ZodLiteral<"success">;
|
|
41
|
+
operationSummary: z.ZodString;
|
|
42
|
+
itemsProcessed: z.ZodNumber;
|
|
43
|
+
itemsChanged: z.ZodNumber;
|
|
44
|
+
completedAt: z.ZodString;
|
|
45
|
+
recoverable: z.ZodLiteral<false>;
|
|
46
|
+
id: z.ZodString;
|
|
47
|
+
spreadsheetUrl: z.ZodOptional<z.ZodString>;
|
|
48
|
+
failures: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
49
|
+
gid: z.ZodString;
|
|
50
|
+
error: z.ZodString;
|
|
51
|
+
}, z.core.$strip>>>;
|
|
52
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
53
|
+
type: z.ZodLiteral<"auth_required">;
|
|
54
|
+
provider: z.ZodString;
|
|
55
|
+
message: z.ZodString;
|
|
56
|
+
url: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, z.core.$strip>], "type">;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
};
|
|
60
|
+
handler: typeof handler;
|
|
61
|
+
};
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { schemas } from '@mcp-z/oauth-google';
|
|
2
|
+
const { AuthRequiredBranchSchema } = schemas;
|
|
3
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { google } from 'googleapis';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { SheetGidSchema, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';
|
|
7
|
+
const MAX_BATCH_SIZE = 1000;
|
|
8
|
+
const inputSchema = z.object({
|
|
9
|
+
id: SpreadsheetIdSchema,
|
|
10
|
+
gids: z.array(SheetGidSchema).min(1).max(MAX_BATCH_SIZE).describe('Sheet grid IDs to permanently delete')
|
|
11
|
+
});
|
|
12
|
+
const successBranchSchema = z.object({
|
|
13
|
+
type: z.literal('success'),
|
|
14
|
+
operationSummary: z.string().describe('Human-readable summary of the operation'),
|
|
15
|
+
itemsProcessed: z.number().describe('Total sheets attempted to delete'),
|
|
16
|
+
itemsChanged: z.number().describe('Number of sheets successfully deleted'),
|
|
17
|
+
completedAt: z.string().describe('ISO timestamp when operation completed'),
|
|
18
|
+
recoverable: z.literal(false).describe('Whether deletion can be undone (always false)'),
|
|
19
|
+
id: SpreadsheetIdOutput,
|
|
20
|
+
spreadsheetUrl: z.string().optional().describe('URL to view the spreadsheet'),
|
|
21
|
+
failures: z.array(z.object({
|
|
22
|
+
gid: z.string().describe('Grid ID of sheet that failed to delete'),
|
|
23
|
+
error: z.string().describe('Error message explaining the failure')
|
|
24
|
+
})).optional().describe('Details of any sheets that failed to delete')
|
|
25
|
+
});
|
|
26
|
+
const outputSchema = z.discriminatedUnion('type', [
|
|
27
|
+
successBranchSchema,
|
|
28
|
+
AuthRequiredBranchSchema
|
|
29
|
+
]);
|
|
30
|
+
const config = {
|
|
31
|
+
description: 'Permanently delete sheets from a spreadsheet. Cannot delete the last remaining sheet.',
|
|
32
|
+
inputSchema,
|
|
33
|
+
outputSchema: z.object({
|
|
34
|
+
result: outputSchema
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
async function handler({ id, gids }, extra) {
|
|
38
|
+
const logger = extra.logger;
|
|
39
|
+
logger.info('sheets.sheet.delete called', {
|
|
40
|
+
id,
|
|
41
|
+
count: gids.length
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
const sheets = google.sheets({
|
|
45
|
+
version: 'v4',
|
|
46
|
+
auth: extra.authContext.auth
|
|
47
|
+
});
|
|
48
|
+
const results = await Promise.allSettled(gids.map(async (gid)=>{
|
|
49
|
+
await sheets.spreadsheets.batchUpdate({
|
|
50
|
+
spreadsheetId: id,
|
|
51
|
+
requestBody: {
|
|
52
|
+
requests: [
|
|
53
|
+
{
|
|
54
|
+
deleteSheet: {
|
|
55
|
+
sheetId: Number(gid)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return gid;
|
|
62
|
+
}));
|
|
63
|
+
// Separate successes and failures
|
|
64
|
+
const failures = [];
|
|
65
|
+
results.forEach((result, index)=>{
|
|
66
|
+
const gid = gids[index];
|
|
67
|
+
if (!gid) return;
|
|
68
|
+
if (result.status === 'rejected') {
|
|
69
|
+
const errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason);
|
|
70
|
+
failures.push({
|
|
71
|
+
gid,
|
|
72
|
+
error: errorMessage
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const successCount = gids.length - failures.length;
|
|
77
|
+
const failureCount = failures.length;
|
|
78
|
+
const totalCount = gids.length;
|
|
79
|
+
const summary = failureCount === 0 ? `Permanently deleted ${successCount} sheet${successCount === 1 ? '' : 's'}` : `Deleted ${successCount} of ${totalCount} sheet${totalCount === 1 ? '' : 's'} (${failureCount} failed)`;
|
|
80
|
+
logger.info('sheets.sheet.delete completed', {
|
|
81
|
+
totalCount,
|
|
82
|
+
successCount,
|
|
83
|
+
failureCount
|
|
84
|
+
});
|
|
85
|
+
const result = {
|
|
86
|
+
type: 'success',
|
|
87
|
+
operationSummary: summary,
|
|
88
|
+
itemsProcessed: totalCount,
|
|
89
|
+
itemsChanged: successCount,
|
|
90
|
+
completedAt: new Date().toISOString(),
|
|
91
|
+
recoverable: false,
|
|
92
|
+
id,
|
|
93
|
+
spreadsheetUrl: `https://docs.google.com/spreadsheets/d/${id}`,
|
|
94
|
+
...failures.length > 0 && {
|
|
95
|
+
failures
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: 'text',
|
|
102
|
+
text: JSON.stringify(result)
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
structuredContent: {
|
|
106
|
+
result
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
} catch (error) {
|
|
110
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
111
|
+
logger.error('sheets.sheet.delete error', {
|
|
112
|
+
error: message
|
|
113
|
+
});
|
|
114
|
+
throw new McpError(ErrorCode.InternalError, `Error deleting sheet: ${message}`, {
|
|
115
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export default function createTool() {
|
|
120
|
+
return {
|
|
121
|
+
name: 'sheet-delete',
|
|
122
|
+
config,
|
|
123
|
+
handler
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/sheet-delete.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport { schemas } from '@mcp-z/oauth-google';\n\nconst { AuthRequiredBranchSchema } = schemas;\n\nimport type { ToolModule } from '@mcp-z/server';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';\nimport { google } from 'googleapis';\nimport { z } from 'zod';\nimport { SheetGidSchema, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.js';\n\nconst MAX_BATCH_SIZE = 1000;\n\nconst inputSchema = z.object({\n id: SpreadsheetIdSchema,\n gids: z.array(SheetGidSchema).min(1).max(MAX_BATCH_SIZE).describe('Sheet grid IDs to permanently delete'),\n});\n\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n operationSummary: z.string().describe('Human-readable summary of the operation'),\n itemsProcessed: z.number().describe('Total sheets attempted to delete'),\n itemsChanged: z.number().describe('Number of sheets successfully deleted'),\n completedAt: z.string().describe('ISO timestamp when operation completed'),\n recoverable: z.literal(false).describe('Whether deletion can be undone (always false)'),\n id: SpreadsheetIdOutput,\n spreadsheetUrl: z.string().optional().describe('URL to view the spreadsheet'),\n failures: z\n .array(\n z.object({\n gid: z.string().describe('Grid ID of sheet that failed to delete'),\n error: z.string().describe('Error message explaining the failure'),\n })\n )\n .optional()\n .describe('Details of any sheets that failed to delete'),\n});\n\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description: 'Permanently delete sheets from a spreadsheet. Cannot delete the last remaining sheet.',\n inputSchema,\n outputSchema: z.object({\n result: outputSchema,\n }),\n} as const;\n\nexport type Input = z.infer<typeof inputSchema>;\nexport type Output = z.infer<typeof outputSchema>;\n\nasync function handler({ id, gids }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.sheet.delete called', { id, count: gids.length });\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n\n const results = await Promise.allSettled(\n gids.map(async (gid) => {\n await sheets.spreadsheets.batchUpdate({\n spreadsheetId: id,\n requestBody: {\n requests: [{ deleteSheet: { sheetId: Number(gid) } }],\n },\n });\n return gid;\n })\n );\n\n // Separate successes and failures\n const failures: Array<{ gid: string; error: string }> = [];\n\n results.forEach((result, index) => {\n const gid = gids[index];\n if (!gid) return;\n\n if (result.status === 'rejected') {\n const errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason);\n failures.push({ gid, error: errorMessage });\n }\n });\n\n const successCount = gids.length - failures.length;\n const failureCount = failures.length;\n const totalCount = gids.length;\n\n const summary = failureCount === 0 ? `Permanently deleted ${successCount} sheet${successCount === 1 ? '' : 's'}` : `Deleted ${successCount} of ${totalCount} sheet${totalCount === 1 ? '' : 's'} (${failureCount} failed)`;\n\n logger.info('sheets.sheet.delete completed', {\n totalCount,\n successCount,\n failureCount,\n });\n\n const result: Output = {\n type: 'success' as const,\n operationSummary: summary,\n itemsProcessed: totalCount,\n itemsChanged: successCount,\n completedAt: new Date().toISOString(),\n recoverable: false as const,\n id,\n spreadsheetUrl: `https://docs.google.com/spreadsheets/d/${id}`,\n ...(failures.length > 0 && { failures }),\n };\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result) }],\n structuredContent: { result },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('sheets.sheet.delete error', { error: message });\n\n throw new McpError(ErrorCode.InternalError, `Error deleting sheet: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'sheet-delete',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["schemas","AuthRequiredBranchSchema","ErrorCode","McpError","google","z","SheetGidSchema","SpreadsheetIdOutput","SpreadsheetIdSchema","MAX_BATCH_SIZE","inputSchema","object","id","gids","array","min","max","describe","successBranchSchema","type","literal","operationSummary","string","itemsProcessed","number","itemsChanged","completedAt","recoverable","spreadsheetUrl","optional","failures","gid","error","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","info","count","length","sheets","version","auth","authContext","results","Promise","allSettled","map","spreadsheets","batchUpdate","spreadsheetId","requestBody","requests","deleteSheet","sheetId","Number","forEach","index","status","errorMessage","reason","Error","message","String","push","successCount","failureCount","totalCount","summary","Date","toISOString","content","text","JSON","stringify","structuredContent","InternalError","stack","undefined","createTool","name"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { EnrichedExtra } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
sheetRef: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
type: z.ZodLiteral<"success">;
|
|
10
|
+
id: z.ZodString;
|
|
11
|
+
gid: z.ZodString;
|
|
12
|
+
title: z.ZodString;
|
|
13
|
+
sheetUrl: z.ZodOptional<z.ZodString>;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"auth_required">;
|
|
16
|
+
provider: z.ZodString;
|
|
17
|
+
message: z.ZodString;
|
|
18
|
+
url: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>], "type">;
|
|
20
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
21
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
22
|
+
declare function handler({ id, sheetRef }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
23
|
+
export default function createTool(): {
|
|
24
|
+
name: string;
|
|
25
|
+
config: {
|
|
26
|
+
readonly description: "Find an existing sheet/tab within a known spreadsheet by title or GUID";
|
|
27
|
+
readonly inputSchema: z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
sheetRef: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
readonly outputSchema: z.ZodObject<{
|
|
32
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
33
|
+
type: z.ZodLiteral<"success">;
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
gid: z.ZodString;
|
|
36
|
+
title: z.ZodString;
|
|
37
|
+
sheetUrl: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
39
|
+
type: z.ZodLiteral<"auth_required">;
|
|
40
|
+
provider: z.ZodString;
|
|
41
|
+
message: z.ZodString;
|
|
42
|
+
url: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, z.core.$strip>], "type">;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
};
|
|
46
|
+
handler: typeof handler;
|
|
47
|
+
};
|
|
48
|
+
export {};
|