@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,86 @@
|
|
|
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
|
+
gid: z.ZodCoercedString<unknown>;
|
|
7
|
+
dimension: z.ZodEnum<{
|
|
8
|
+
ROWS: "ROWS";
|
|
9
|
+
COLUMNS: "COLUMNS";
|
|
10
|
+
}>;
|
|
11
|
+
startIndex: z.ZodNumber;
|
|
12
|
+
endIndex: z.ZodNumber;
|
|
13
|
+
destinationIndex: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
16
|
+
type: z.ZodLiteral<"success">;
|
|
17
|
+
id: z.ZodString;
|
|
18
|
+
gid: z.ZodString;
|
|
19
|
+
spreadsheetTitle: z.ZodString;
|
|
20
|
+
spreadsheetUrl: z.ZodString;
|
|
21
|
+
sheetTitle: z.ZodString;
|
|
22
|
+
sheetUrl: z.ZodString;
|
|
23
|
+
dimension: z.ZodEnum<{
|
|
24
|
+
ROWS: "ROWS";
|
|
25
|
+
COLUMNS: "COLUMNS";
|
|
26
|
+
}>;
|
|
27
|
+
sourceRange: z.ZodObject<{
|
|
28
|
+
startIndex: z.ZodNumber;
|
|
29
|
+
endIndex: z.ZodNumber;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
destinationIndex: z.ZodNumber;
|
|
32
|
+
movedCount: z.ZodNumber;
|
|
33
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
34
|
+
type: z.ZodLiteral<"auth_required">;
|
|
35
|
+
provider: z.ZodString;
|
|
36
|
+
message: z.ZodString;
|
|
37
|
+
url: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>], "type">;
|
|
39
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
40
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
41
|
+
declare function handler({ id, gid, dimension, startIndex, endIndex, destinationIndex }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
42
|
+
export default function createTool(): {
|
|
43
|
+
name: string;
|
|
44
|
+
config: {
|
|
45
|
+
readonly description: "Move rows or columns within a sheet to a new position. Use 0-based indices. The destinationIndex is where the rows/columns will be moved TO.";
|
|
46
|
+
readonly inputSchema: z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
gid: z.ZodCoercedString<unknown>;
|
|
49
|
+
dimension: z.ZodEnum<{
|
|
50
|
+
ROWS: "ROWS";
|
|
51
|
+
COLUMNS: "COLUMNS";
|
|
52
|
+
}>;
|
|
53
|
+
startIndex: z.ZodNumber;
|
|
54
|
+
endIndex: z.ZodNumber;
|
|
55
|
+
destinationIndex: z.ZodNumber;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
readonly outputSchema: z.ZodObject<{
|
|
58
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
59
|
+
type: z.ZodLiteral<"success">;
|
|
60
|
+
id: z.ZodString;
|
|
61
|
+
gid: z.ZodString;
|
|
62
|
+
spreadsheetTitle: z.ZodString;
|
|
63
|
+
spreadsheetUrl: z.ZodString;
|
|
64
|
+
sheetTitle: z.ZodString;
|
|
65
|
+
sheetUrl: z.ZodString;
|
|
66
|
+
dimension: z.ZodEnum<{
|
|
67
|
+
ROWS: "ROWS";
|
|
68
|
+
COLUMNS: "COLUMNS";
|
|
69
|
+
}>;
|
|
70
|
+
sourceRange: z.ZodObject<{
|
|
71
|
+
startIndex: z.ZodNumber;
|
|
72
|
+
endIndex: z.ZodNumber;
|
|
73
|
+
}, z.core.$strip>;
|
|
74
|
+
destinationIndex: z.ZodNumber;
|
|
75
|
+
movedCount: z.ZodNumber;
|
|
76
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
77
|
+
type: z.ZodLiteral<"auth_required">;
|
|
78
|
+
provider: z.ZodString;
|
|
79
|
+
message: z.ZodString;
|
|
80
|
+
url: z.ZodOptional<z.ZodString>;
|
|
81
|
+
}, z.core.$strip>], "type">;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
};
|
|
84
|
+
handler: typeof handler;
|
|
85
|
+
};
|
|
86
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
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 inputSchema = z.object({
|
|
8
|
+
id: SpreadsheetIdSchema,
|
|
9
|
+
gid: SheetGidSchema,
|
|
10
|
+
dimension: z.enum([
|
|
11
|
+
'ROWS',
|
|
12
|
+
'COLUMNS'
|
|
13
|
+
]).describe('Whether to move rows or columns'),
|
|
14
|
+
startIndex: z.number().int().nonnegative().describe('Starting index of the range to move (0-based)'),
|
|
15
|
+
endIndex: z.number().int().positive().describe('Ending index of the range to move (0-based, exclusive)'),
|
|
16
|
+
destinationIndex: z.number().int().nonnegative().describe('Index where the rows/columns will be moved to (0-based)')
|
|
17
|
+
});
|
|
18
|
+
const successBranchSchema = z.object({
|
|
19
|
+
type: z.literal('success'),
|
|
20
|
+
id: SpreadsheetIdOutput,
|
|
21
|
+
gid: SheetGidOutput,
|
|
22
|
+
spreadsheetTitle: z.string().describe('Title of the spreadsheet'),
|
|
23
|
+
spreadsheetUrl: z.string().describe('URL of the spreadsheet'),
|
|
24
|
+
sheetTitle: z.string().describe('Title of the sheet'),
|
|
25
|
+
sheetUrl: z.string().describe('URL of the sheet'),
|
|
26
|
+
dimension: z.enum([
|
|
27
|
+
'ROWS',
|
|
28
|
+
'COLUMNS'
|
|
29
|
+
]).describe('Dimension that was moved'),
|
|
30
|
+
sourceRange: z.object({
|
|
31
|
+
startIndex: z.number().describe('Starting index of the moved range'),
|
|
32
|
+
endIndex: z.number().describe('Ending index of the moved range')
|
|
33
|
+
}),
|
|
34
|
+
destinationIndex: z.number().describe('Index where the range was moved to'),
|
|
35
|
+
movedCount: z.number().describe('Number of rows/columns moved')
|
|
36
|
+
});
|
|
37
|
+
const outputSchema = z.discriminatedUnion('type', [
|
|
38
|
+
successBranchSchema,
|
|
39
|
+
AuthRequiredBranchSchema
|
|
40
|
+
]);
|
|
41
|
+
const config = {
|
|
42
|
+
description: 'Move rows or columns within a sheet to a new position. Use 0-based indices. The destinationIndex is where the rows/columns will be moved TO.',
|
|
43
|
+
inputSchema,
|
|
44
|
+
outputSchema: z.object({
|
|
45
|
+
result: outputSchema
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
async function handler({ id, gid, dimension, startIndex, endIndex, destinationIndex }, extra) {
|
|
49
|
+
const logger = extra.logger;
|
|
50
|
+
logger.info('sheets.dimensions.move called', {
|
|
51
|
+
id,
|
|
52
|
+
gid,
|
|
53
|
+
dimension,
|
|
54
|
+
startIndex,
|
|
55
|
+
endIndex,
|
|
56
|
+
destinationIndex
|
|
57
|
+
});
|
|
58
|
+
// Validate indices
|
|
59
|
+
if (startIndex >= endIndex) {
|
|
60
|
+
throw new McpError(ErrorCode.InvalidParams, `startIndex (${startIndex}) must be less than endIndex (${endIndex})`);
|
|
61
|
+
}
|
|
62
|
+
// Check if destination is within source range (invalid move)
|
|
63
|
+
if (destinationIndex > startIndex && destinationIndex < endIndex) {
|
|
64
|
+
throw new McpError(ErrorCode.InvalidParams, `destinationIndex (${destinationIndex}) cannot be within the source range (${startIndex}-${endIndex})`);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
var _ref, _spreadsheetData_spreadsheetUrl, _sheet_properties_title, _sheet_properties_sheetId;
|
|
68
|
+
var _spreadsheetData_properties, _spreadsheetData_sheets;
|
|
69
|
+
const sheets = google.sheets({
|
|
70
|
+
version: 'v4',
|
|
71
|
+
auth: extra.authContext.auth
|
|
72
|
+
});
|
|
73
|
+
// Get spreadsheet and sheet info in single API call
|
|
74
|
+
const spreadsheetResponse = await sheets.spreadsheets.get({
|
|
75
|
+
spreadsheetId: id,
|
|
76
|
+
fields: 'properties.title,spreadsheetUrl,sheets.properties.sheetId,sheets.properties.title'
|
|
77
|
+
});
|
|
78
|
+
const spreadsheetData = spreadsheetResponse.data;
|
|
79
|
+
const spreadsheetTitle = (_ref = (_spreadsheetData_properties = spreadsheetData.properties) === null || _spreadsheetData_properties === void 0 ? void 0 : _spreadsheetData_properties.title) !== null && _ref !== void 0 ? _ref : '';
|
|
80
|
+
const spreadsheetUrl = (_spreadsheetData_spreadsheetUrl = spreadsheetData.spreadsheetUrl) !== null && _spreadsheetData_spreadsheetUrl !== void 0 ? _spreadsheetData_spreadsheetUrl : '';
|
|
81
|
+
// Find sheet by gid
|
|
82
|
+
const sheet = (_spreadsheetData_sheets = spreadsheetData.sheets) === null || _spreadsheetData_sheets === void 0 ? void 0 : _spreadsheetData_sheets.find((s)=>{
|
|
83
|
+
var _s_properties;
|
|
84
|
+
return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
|
|
85
|
+
});
|
|
86
|
+
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.properties)) {
|
|
87
|
+
logger.info('Sheet not found for move', {
|
|
88
|
+
id,
|
|
89
|
+
gid,
|
|
90
|
+
dimension
|
|
91
|
+
});
|
|
92
|
+
throw new McpError(ErrorCode.InvalidParams, `Sheet not found: ${gid}`);
|
|
93
|
+
}
|
|
94
|
+
const sheetTitle = (_sheet_properties_title = sheet.properties.title) !== null && _sheet_properties_title !== void 0 ? _sheet_properties_title : gid;
|
|
95
|
+
const sheetGid = (_sheet_properties_sheetId = sheet.properties.sheetId) !== null && _sheet_properties_sheetId !== void 0 ? _sheet_properties_sheetId : 0;
|
|
96
|
+
const sheetUrl = `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetGid}`;
|
|
97
|
+
logger.info('sheets.dimensions.move executing', {
|
|
98
|
+
spreadsheetId: id,
|
|
99
|
+
sheetTitle,
|
|
100
|
+
dimension,
|
|
101
|
+
startIndex,
|
|
102
|
+
endIndex,
|
|
103
|
+
destinationIndex
|
|
104
|
+
});
|
|
105
|
+
// Execute the move dimension request
|
|
106
|
+
await sheets.spreadsheets.batchUpdate({
|
|
107
|
+
spreadsheetId: id,
|
|
108
|
+
requestBody: {
|
|
109
|
+
requests: [
|
|
110
|
+
{
|
|
111
|
+
moveDimension: {
|
|
112
|
+
source: {
|
|
113
|
+
sheetId: sheetGid,
|
|
114
|
+
dimension,
|
|
115
|
+
startIndex,
|
|
116
|
+
endIndex
|
|
117
|
+
},
|
|
118
|
+
destinationIndex
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const movedCount = endIndex - startIndex;
|
|
125
|
+
logger.info('sheets.dimensions.move completed successfully', {
|
|
126
|
+
spreadsheetId: id,
|
|
127
|
+
sheetTitle,
|
|
128
|
+
dimension,
|
|
129
|
+
movedCount
|
|
130
|
+
});
|
|
131
|
+
const result = {
|
|
132
|
+
type: 'success',
|
|
133
|
+
id,
|
|
134
|
+
gid: String(sheetGid),
|
|
135
|
+
spreadsheetTitle: spreadsheetTitle || '',
|
|
136
|
+
spreadsheetUrl: spreadsheetUrl || '',
|
|
137
|
+
sheetTitle,
|
|
138
|
+
sheetUrl,
|
|
139
|
+
dimension,
|
|
140
|
+
sourceRange: {
|
|
141
|
+
startIndex,
|
|
142
|
+
endIndex
|
|
143
|
+
},
|
|
144
|
+
destinationIndex,
|
|
145
|
+
movedCount
|
|
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('Move operation failed', {
|
|
164
|
+
id,
|
|
165
|
+
gid,
|
|
166
|
+
dimension,
|
|
167
|
+
startIndex,
|
|
168
|
+
endIndex,
|
|
169
|
+
destinationIndex,
|
|
170
|
+
error: message
|
|
171
|
+
});
|
|
172
|
+
throw new McpError(ErrorCode.InternalError, `Error moving ${dimension.toLowerCase()}: ${message}`, {
|
|
173
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export default function createTool() {
|
|
178
|
+
return {
|
|
179
|
+
name: 'dimensions-move',
|
|
180
|
+
config,
|
|
181
|
+
handler
|
|
182
|
+
};
|
|
183
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/dimensions-move.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 inputSchema = z.object({\n id: SpreadsheetIdSchema,\n gid: SheetGidSchema,\n dimension: z.enum(['ROWS', 'COLUMNS']).describe('Whether to move rows or columns'),\n startIndex: z.number().int().nonnegative().describe('Starting index of the range to move (0-based)'),\n endIndex: z.number().int().positive().describe('Ending index of the range to move (0-based, exclusive)'),\n destinationIndex: z.number().int().nonnegative().describe('Index where the rows/columns will be moved to (0-based)'),\n});\n\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n id: SpreadsheetIdOutput,\n gid: SheetGidOutput,\n spreadsheetTitle: z.string().describe('Title of the spreadsheet'),\n spreadsheetUrl: z.string().describe('URL of the spreadsheet'),\n sheetTitle: z.string().describe('Title of the sheet'),\n sheetUrl: z.string().describe('URL of the sheet'),\n dimension: z.enum(['ROWS', 'COLUMNS']).describe('Dimension that was moved'),\n sourceRange: z.object({\n startIndex: z.number().describe('Starting index of the moved range'),\n endIndex: z.number().describe('Ending index of the moved range'),\n }),\n destinationIndex: z.number().describe('Index where the range was moved to'),\n movedCount: z.number().describe('Number of rows/columns moved'),\n});\n\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description: 'Move rows or columns within a sheet to a new position. Use 0-based indices. The destinationIndex is where the rows/columns will be moved TO.',\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, dimension, startIndex, endIndex, destinationIndex }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.dimensions.move called', { id, gid, dimension, startIndex, endIndex, destinationIndex });\n\n // Validate indices\n if (startIndex >= endIndex) {\n throw new McpError(ErrorCode.InvalidParams, `startIndex (${startIndex}) must be less than endIndex (${endIndex})`);\n }\n\n // Check if destination is within source range (invalid move)\n if (destinationIndex > startIndex && destinationIndex < endIndex) {\n throw new McpError(ErrorCode.InvalidParams, `destinationIndex (${destinationIndex}) cannot be within the source range (${startIndex}-${endIndex})`);\n }\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n\n // Get spreadsheet and sheet info in single API call\n const spreadsheetResponse = await sheets.spreadsheets.get({\n spreadsheetId: id,\n fields: 'properties.title,spreadsheetUrl,sheets.properties.sheetId,sheets.properties.title',\n });\n\n const spreadsheetData = spreadsheetResponse.data;\n const spreadsheetTitle = spreadsheetData.properties?.title ?? '';\n const spreadsheetUrl = spreadsheetData.spreadsheetUrl ?? '';\n\n // Find sheet by gid\n const sheet = spreadsheetData.sheets?.find((s) => String(s.properties?.sheetId) === gid);\n if (!sheet?.properties) {\n logger.info('Sheet not found for move', { id, gid, dimension });\n throw new McpError(ErrorCode.InvalidParams, `Sheet not found: ${gid}`);\n }\n\n const sheetTitle = sheet.properties.title ?? gid;\n const sheetGid = sheet.properties.sheetId ?? 0;\n const sheetUrl = `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetGid}`;\n\n logger.info('sheets.dimensions.move executing', { spreadsheetId: id, sheetTitle, dimension, startIndex, endIndex, destinationIndex });\n\n // Execute the move dimension request\n await sheets.spreadsheets.batchUpdate({\n spreadsheetId: id,\n requestBody: {\n requests: [\n {\n moveDimension: {\n source: {\n sheetId: sheetGid,\n dimension,\n startIndex,\n endIndex,\n },\n destinationIndex,\n },\n },\n ],\n },\n });\n\n const movedCount = endIndex - startIndex;\n\n logger.info('sheets.dimensions.move completed successfully', {\n spreadsheetId: id,\n sheetTitle,\n dimension,\n movedCount,\n });\n\n const result: Output = {\n type: 'success' as const,\n id,\n gid: String(sheetGid),\n spreadsheetTitle: spreadsheetTitle || '',\n spreadsheetUrl: spreadsheetUrl || '',\n sheetTitle,\n sheetUrl,\n dimension,\n sourceRange: {\n startIndex,\n endIndex,\n },\n destinationIndex,\n movedCount,\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('Move operation failed', { id, gid, dimension, startIndex, endIndex, destinationIndex, error: message });\n\n throw new McpError(ErrorCode.InternalError, `Error moving ${dimension.toLowerCase()}: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'dimensions-move',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["schemas","AuthRequiredBranchSchema","ErrorCode","McpError","google","z","SheetGidOutput","SheetGidSchema","SpreadsheetIdOutput","SpreadsheetIdSchema","inputSchema","object","id","gid","dimension","enum","describe","startIndex","number","int","nonnegative","endIndex","positive","destinationIndex","successBranchSchema","type","literal","spreadsheetTitle","string","spreadsheetUrl","sheetTitle","sheetUrl","sourceRange","movedCount","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","info","InvalidParams","spreadsheetData","sheet","sheets","version","auth","authContext","spreadsheetResponse","spreadsheets","get","spreadsheetId","fields","data","properties","title","find","s","String","sheetId","sheetGid","batchUpdate","requestBody","requests","moveDimension","source","content","text","JSON","stringify","structuredContent","error","message","Error","InternalError","toLowerCase","stack","undefined","createTool","name"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { default as cellsFormat } from './cells-format.js';
|
|
2
|
+
export { default as chartCreate } from './chart-create.js';
|
|
3
|
+
export { default as columnsGet } from './columns-get.js';
|
|
4
|
+
export { default as columnsUpdate } from './columns-update.js';
|
|
5
|
+
export { default as csvGetColumns } from './csv-get-columns.js';
|
|
6
|
+
export { default as dimensionsBatchUpdate } from './dimensions-batch-update.js';
|
|
7
|
+
export { default as dimensionsMove } from './dimensions-move.js';
|
|
8
|
+
export { default as rowsAppend } from './rows-append.js';
|
|
9
|
+
export { default as rowsCsvAppend } from './rows-csv-append.js';
|
|
10
|
+
export { default as rowsGet } from './rows-get.js';
|
|
11
|
+
export { default as sheetCopy } from './sheet-copy.js';
|
|
12
|
+
export { default as sheetCopyTo } from './sheet-copy-to.js';
|
|
13
|
+
export { default as sheetCreate } from './sheet-create.js';
|
|
14
|
+
export { default as sheetDelete } from './sheet-delete.js';
|
|
15
|
+
export { default as sheetFind } from './sheet-find.js';
|
|
16
|
+
export { default as sheetRename } from './sheet-rename.js';
|
|
17
|
+
export { default as spreadsheetCopy } from './spreadsheet-copy.js';
|
|
18
|
+
export { default as spreadsheetCreate } from './spreadsheet-create.js';
|
|
19
|
+
export { default as spreadsheetFind } from './spreadsheet-find.js';
|
|
20
|
+
export { default as spreadsheetRename } from './spreadsheet-rename.js';
|
|
21
|
+
export { default as validationSet } from './validation-set.js';
|
|
22
|
+
export { default as valuesBatchUpdate } from './values-batch-update.js';
|
|
23
|
+
export { default as valuesClear } from './values-clear.js';
|
|
24
|
+
export { default as valuesCsvUpdate } from './values-csv-update.js';
|
|
25
|
+
export { default as valuesReplace } from './values-replace.js';
|
|
26
|
+
export { default as valuesSearch } from './values-search.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { default as cellsFormat } from './cells-format.js';
|
|
2
|
+
export { default as chartCreate } from './chart-create.js';
|
|
3
|
+
export { default as columnsGet } from './columns-get.js';
|
|
4
|
+
export { default as columnsUpdate } from './columns-update.js';
|
|
5
|
+
export { default as csvGetColumns } from './csv-get-columns.js';
|
|
6
|
+
export { default as dimensionsBatchUpdate } from './dimensions-batch-update.js';
|
|
7
|
+
export { default as dimensionsMove } from './dimensions-move.js';
|
|
8
|
+
export { default as rowsAppend } from './rows-append.js';
|
|
9
|
+
export { default as rowsCsvAppend } from './rows-csv-append.js';
|
|
10
|
+
export { default as rowsGet } from './rows-get.js';
|
|
11
|
+
export { default as sheetCopy } from './sheet-copy.js';
|
|
12
|
+
export { default as sheetCopyTo } from './sheet-copy-to.js';
|
|
13
|
+
export { default as sheetCreate } from './sheet-create.js';
|
|
14
|
+
export { default as sheetDelete } from './sheet-delete.js';
|
|
15
|
+
export { default as sheetFind } from './sheet-find.js';
|
|
16
|
+
export { default as sheetRename } from './sheet-rename.js';
|
|
17
|
+
export { default as spreadsheetCopy } from './spreadsheet-copy.js';
|
|
18
|
+
export { default as spreadsheetCreate } from './spreadsheet-create.js';
|
|
19
|
+
export { default as spreadsheetFind } from './spreadsheet-find.js';
|
|
20
|
+
export { default as spreadsheetRename } from './spreadsheet-rename.js';
|
|
21
|
+
export { default as validationSet } from './validation-set.js';
|
|
22
|
+
export { default as valuesBatchUpdate } from './values-batch-update.js';
|
|
23
|
+
export { default as valuesClear } from './values-clear.js';
|
|
24
|
+
export { default as valuesCsvUpdate } from './values-csv-update.js';
|
|
25
|
+
export { default as valuesReplace } from './values-replace.js';
|
|
26
|
+
export { default as valuesSearch } from './values-search.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/index.ts"],"sourcesContent":["export { default as cellsFormat } from './cells-format.js';\nexport { default as chartCreate } from './chart-create.js';\nexport { default as columnsGet } from './columns-get.js';\nexport { default as columnsUpdate } from './columns-update.js';\nexport { default as csvGetColumns } from './csv-get-columns.js';\nexport { default as dimensionsBatchUpdate } from './dimensions-batch-update.js';\nexport { default as dimensionsMove } from './dimensions-move.js';\nexport { default as rowsAppend } from './rows-append.js';\nexport { default as rowsCsvAppend } from './rows-csv-append.js';\nexport { default as rowsGet } from './rows-get.js';\nexport { default as sheetCopy } from './sheet-copy.js';\nexport { default as sheetCopyTo } from './sheet-copy-to.js';\nexport { default as sheetCreate } from './sheet-create.js';\nexport { default as sheetDelete } from './sheet-delete.js';\nexport { default as sheetFind } from './sheet-find.js';\nexport { default as sheetRename } from './sheet-rename.js';\nexport { default as spreadsheetCopy } from './spreadsheet-copy.js';\nexport { default as spreadsheetCreate } from './spreadsheet-create.js';\nexport { default as spreadsheetFind } from './spreadsheet-find.js';\nexport { default as spreadsheetRename } from './spreadsheet-rename.js';\nexport { default as validationSet } from './validation-set.js';\nexport { default as valuesBatchUpdate } from './values-batch-update.js';\nexport { default as valuesClear } from './values-clear.js';\nexport { default as valuesCsvUpdate } from './values-csv-update.js';\nexport { default as valuesReplace } from './values-replace.js';\nexport { default as valuesSearch } from './values-search.js';\n"],"names":["default","cellsFormat","chartCreate","columnsGet","columnsUpdate","csvGetColumns","dimensionsBatchUpdate","dimensionsMove","rowsAppend","rowsCsvAppend","rowsGet","sheetCopy","sheetCopyTo","sheetCreate","sheetDelete","sheetFind","sheetRename","spreadsheetCopy","spreadsheetCreate","spreadsheetFind","spreadsheetRename","validationSet","valuesBatchUpdate","valuesClear","valuesCsvUpdate","valuesReplace","valuesSearch"],"mappings":"AAAA,SAASA,WAAWC,WAAW,QAAQ,oBAAoB;AAC3D,SAASD,WAAWE,WAAW,QAAQ,oBAAoB;AAC3D,SAASF,WAAWG,UAAU,QAAQ,mBAAmB;AACzD,SAASH,WAAWI,aAAa,QAAQ,sBAAsB;AAC/D,SAASJ,WAAWK,aAAa,QAAQ,uBAAuB;AAChE,SAASL,WAAWM,qBAAqB,QAAQ,+BAA+B;AAChF,SAASN,WAAWO,cAAc,QAAQ,uBAAuB;AACjE,SAASP,WAAWQ,UAAU,QAAQ,mBAAmB;AACzD,SAASR,WAAWS,aAAa,QAAQ,uBAAuB;AAChE,SAAST,WAAWU,OAAO,QAAQ,gBAAgB;AACnD,SAASV,WAAWW,SAAS,QAAQ,kBAAkB;AACvD,SAASX,WAAWY,WAAW,QAAQ,qBAAqB;AAC5D,SAASZ,WAAWa,WAAW,QAAQ,oBAAoB;AAC3D,SAASb,WAAWc,WAAW,QAAQ,oBAAoB;AAC3D,SAASd,WAAWe,SAAS,QAAQ,kBAAkB;AACvD,SAASf,WAAWgB,WAAW,QAAQ,oBAAoB;AAC3D,SAAShB,WAAWiB,eAAe,QAAQ,wBAAwB;AACnE,SAASjB,WAAWkB,iBAAiB,QAAQ,0BAA0B;AACvE,SAASlB,WAAWmB,eAAe,QAAQ,wBAAwB;AACnE,SAASnB,WAAWoB,iBAAiB,QAAQ,0BAA0B;AACvE,SAASpB,WAAWqB,aAAa,QAAQ,sBAAsB;AAC/D,SAASrB,WAAWsB,iBAAiB,QAAQ,2BAA2B;AACxE,SAAStB,WAAWuB,WAAW,QAAQ,oBAAoB;AAC3D,SAASvB,WAAWwB,eAAe,QAAQ,yBAAyB;AACpE,SAASxB,WAAWyB,aAAa,QAAQ,sBAAsB;AAC/D,SAASzB,WAAW0B,YAAY,QAAQ,qBAAqB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const DEFAULT_APPEND_COUNT = 1;
|
|
2
|
+
export declare const DEFAULT_ROW_COUNT = 1000;
|
|
3
|
+
export declare const DEFAULT_COLUMN_COUNT = 26;
|
|
4
|
+
export declare const MAX_ROW_COUNT = 10000000;
|
|
5
|
+
export declare const MAX_COLUMN_COUNT = 18278;
|
|
6
|
+
export type DimensionOperation = 'insertDimension' | 'deleteDimension' | 'appendDimension';
|
|
7
|
+
export type DimensionType = 'ROWS' | 'COLUMNS';
|
|
8
|
+
export interface DimensionRequest {
|
|
9
|
+
operation: DimensionOperation;
|
|
10
|
+
dimension: DimensionType;
|
|
11
|
+
startIndex: number;
|
|
12
|
+
endIndex?: number;
|
|
13
|
+
inheritFromBefore?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function sortOperations(requests: DimensionRequest[]): DimensionRequest[];
|
|
16
|
+
export declare function buildDimensionRequest(operation: DimensionRequest, sheetId: number): {
|
|
17
|
+
insertDimension: {
|
|
18
|
+
range: {
|
|
19
|
+
endIndex: number;
|
|
20
|
+
sheetId: number;
|
|
21
|
+
dimension: DimensionType;
|
|
22
|
+
startIndex: number;
|
|
23
|
+
};
|
|
24
|
+
inheritFromBefore: boolean;
|
|
25
|
+
};
|
|
26
|
+
deleteDimension?: undefined;
|
|
27
|
+
appendDimension?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
deleteDimension: {
|
|
30
|
+
range: {
|
|
31
|
+
endIndex: number;
|
|
32
|
+
sheetId: number;
|
|
33
|
+
dimension: DimensionType;
|
|
34
|
+
startIndex: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
insertDimension?: undefined;
|
|
38
|
+
appendDimension?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
appendDimension: {
|
|
41
|
+
sheetId: number;
|
|
42
|
+
dimension: DimensionType;
|
|
43
|
+
length: number;
|
|
44
|
+
};
|
|
45
|
+
insertDimension?: undefined;
|
|
46
|
+
deleteDimension?: undefined;
|
|
47
|
+
};
|
|
48
|
+
export declare function calculateAffectedCount(operation: DimensionRequest): number;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Google Sheets dimension constants
|
|
2
|
+
export const DEFAULT_APPEND_COUNT = 1; // Default number of rows/columns to append
|
|
3
|
+
export const DEFAULT_ROW_COUNT = 1000; // Google Sheets default for new sheets
|
|
4
|
+
export const DEFAULT_COLUMN_COUNT = 26; // Google Sheets default for new sheets (A-Z)
|
|
5
|
+
export const MAX_ROW_COUNT = 10000000; // Google Sheets maximum
|
|
6
|
+
export const MAX_COLUMN_COUNT = 18278; // Google Sheets maximum (ZZZ in base-26)
|
|
7
|
+
// Helper function to sort operations for optimal execution order
|
|
8
|
+
export function sortOperations(requests) {
|
|
9
|
+
// Sort by: 1) operation type (delete -> insert -> append), 2) proper index ordering to prevent conflicts
|
|
10
|
+
return [
|
|
11
|
+
...requests
|
|
12
|
+
].sort((a, b)=>{
|
|
13
|
+
// Operation type priority: deleteDimension (0), insertDimension (1), appendDimension (2)
|
|
14
|
+
const operationPriority = {
|
|
15
|
+
deleteDimension: 0,
|
|
16
|
+
insertDimension: 1,
|
|
17
|
+
appendDimension: 2
|
|
18
|
+
};
|
|
19
|
+
const aPriority = operationPriority[a.operation];
|
|
20
|
+
const bPriority = operationPriority[b.operation];
|
|
21
|
+
if (aPriority !== bPriority) {
|
|
22
|
+
return aPriority - bPriority;
|
|
23
|
+
}
|
|
24
|
+
// Within same operation type, sort by appropriate index
|
|
25
|
+
if (a.operation === 'deleteDimension') {
|
|
26
|
+
var _a_endIndex, _b_endIndex;
|
|
27
|
+
// For deletes, process higher START indices first to avoid index shifting issues
|
|
28
|
+
// This ensures we delete from the end towards the beginning
|
|
29
|
+
const aStart = a.startIndex;
|
|
30
|
+
const bStart = b.startIndex;
|
|
31
|
+
if (aStart !== bStart) {
|
|
32
|
+
return bStart - aStart; // Higher start index first
|
|
33
|
+
}
|
|
34
|
+
// If start indices are equal, process higher end index first for consistency
|
|
35
|
+
const aEnd = (_a_endIndex = a.endIndex) !== null && _a_endIndex !== void 0 ? _a_endIndex : a.startIndex + 1;
|
|
36
|
+
const bEnd = (_b_endIndex = b.endIndex) !== null && _b_endIndex !== void 0 ? _b_endIndex : b.startIndex + 1;
|
|
37
|
+
return bEnd - aEnd;
|
|
38
|
+
}
|
|
39
|
+
// For inserts and appends, process lower indices first
|
|
40
|
+
// This ensures we modify from the beginning towards the end
|
|
41
|
+
return a.startIndex - b.startIndex;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Helper function to build Google Sheets API dimension request
|
|
45
|
+
export function buildDimensionRequest(operation, sheetId) {
|
|
46
|
+
const { operation: operationType, dimension, startIndex, endIndex, inheritFromBefore } = operation;
|
|
47
|
+
const dimensionRange = {
|
|
48
|
+
sheetId,
|
|
49
|
+
dimension,
|
|
50
|
+
startIndex,
|
|
51
|
+
...endIndex !== undefined && {
|
|
52
|
+
endIndex
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
switch(operationType){
|
|
56
|
+
case 'insertDimension':
|
|
57
|
+
return {
|
|
58
|
+
insertDimension: {
|
|
59
|
+
range: dimensionRange,
|
|
60
|
+
inheritFromBefore: inheritFromBefore !== null && inheritFromBefore !== void 0 ? inheritFromBefore : false
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
case 'deleteDimension':
|
|
64
|
+
return {
|
|
65
|
+
deleteDimension: {
|
|
66
|
+
range: dimensionRange
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
case 'appendDimension':
|
|
70
|
+
return {
|
|
71
|
+
appendDimension: {
|
|
72
|
+
sheetId,
|
|
73
|
+
dimension,
|
|
74
|
+
length: DEFAULT_APPEND_COUNT
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
default:
|
|
78
|
+
throw new Error(`Unsupported operation type: ${operationType}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Helper function to calculate affected count for each operation
|
|
82
|
+
export function calculateAffectedCount(operation) {
|
|
83
|
+
const { operation: operationType, startIndex, endIndex } = operation;
|
|
84
|
+
switch(operationType){
|
|
85
|
+
case 'insertDimension':
|
|
86
|
+
case 'deleteDimension':
|
|
87
|
+
return endIndex !== undefined ? endIndex - startIndex : 1;
|
|
88
|
+
case 'appendDimension':
|
|
89
|
+
return DEFAULT_APPEND_COUNT;
|
|
90
|
+
default:
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/lib/dimension-operations.ts"],"sourcesContent":["// Google Sheets dimension constants\nexport const DEFAULT_APPEND_COUNT = 1; // Default number of rows/columns to append\nexport const DEFAULT_ROW_COUNT = 1000; // Google Sheets default for new sheets\nexport const DEFAULT_COLUMN_COUNT = 26; // Google Sheets default for new sheets (A-Z)\nexport const MAX_ROW_COUNT = 10000000; // Google Sheets maximum\nexport const MAX_COLUMN_COUNT = 18278; // Google Sheets maximum (ZZZ in base-26)\n\n// Type definitions for dimension operations\nexport type DimensionOperation = 'insertDimension' | 'deleteDimension' | 'appendDimension';\nexport type DimensionType = 'ROWS' | 'COLUMNS';\n\nexport interface DimensionRequest {\n operation: DimensionOperation;\n dimension: DimensionType;\n startIndex: number;\n endIndex?: number;\n inheritFromBefore?: boolean;\n}\n\n// Helper function to sort operations for optimal execution order\nexport function sortOperations(requests: DimensionRequest[]): DimensionRequest[] {\n // Sort by: 1) operation type (delete -> insert -> append), 2) proper index ordering to prevent conflicts\n return [...requests].sort((a, b) => {\n // Operation type priority: deleteDimension (0), insertDimension (1), appendDimension (2)\n const operationPriority = {\n deleteDimension: 0,\n insertDimension: 1,\n appendDimension: 2,\n };\n\n const aPriority = operationPriority[a.operation];\n const bPriority = operationPriority[b.operation];\n\n if (aPriority !== bPriority) {\n return aPriority - bPriority;\n }\n\n // Within same operation type, sort by appropriate index\n if (a.operation === 'deleteDimension') {\n // For deletes, process higher START indices first to avoid index shifting issues\n // This ensures we delete from the end towards the beginning\n const aStart = a.startIndex;\n const bStart = b.startIndex;\n if (aStart !== bStart) {\n return bStart - aStart; // Higher start index first\n }\n // If start indices are equal, process higher end index first for consistency\n const aEnd = a.endIndex ?? a.startIndex + 1;\n const bEnd = b.endIndex ?? b.startIndex + 1;\n return bEnd - aEnd;\n }\n // For inserts and appends, process lower indices first\n // This ensures we modify from the beginning towards the end\n return a.startIndex - b.startIndex;\n });\n}\n\n// Helper function to build Google Sheets API dimension request\nexport function buildDimensionRequest(operation: DimensionRequest, sheetId: number) {\n const { operation: operationType, dimension, startIndex, endIndex, inheritFromBefore } = operation;\n\n const dimensionRange = {\n sheetId,\n dimension,\n startIndex,\n ...(endIndex !== undefined && { endIndex }),\n };\n\n switch (operationType) {\n case 'insertDimension':\n return {\n insertDimension: {\n range: dimensionRange,\n inheritFromBefore: inheritFromBefore ?? false,\n },\n };\n case 'deleteDimension':\n return {\n deleteDimension: {\n range: dimensionRange,\n },\n };\n case 'appendDimension':\n return {\n appendDimension: {\n sheetId,\n dimension,\n length: DEFAULT_APPEND_COUNT,\n },\n };\n default:\n throw new Error(`Unsupported operation type: ${operationType}`);\n }\n}\n\n// Helper function to calculate affected count for each operation\nexport function calculateAffectedCount(operation: DimensionRequest): number {\n const { operation: operationType, startIndex, endIndex } = operation;\n\n switch (operationType) {\n case 'insertDimension':\n case 'deleteDimension':\n return endIndex !== undefined ? endIndex - startIndex : 1;\n case 'appendDimension':\n return DEFAULT_APPEND_COUNT;\n default:\n return 0;\n }\n}\n"],"names":["DEFAULT_APPEND_COUNT","DEFAULT_ROW_COUNT","DEFAULT_COLUMN_COUNT","MAX_ROW_COUNT","MAX_COLUMN_COUNT","sortOperations","requests","sort","a","b","operationPriority","deleteDimension","insertDimension","appendDimension","aPriority","operation","bPriority","aStart","startIndex","bStart","aEnd","endIndex","bEnd","buildDimensionRequest","sheetId","operationType","dimension","inheritFromBefore","dimensionRange","undefined","range","length","Error","calculateAffectedCount"],"mappings":"AAAA,oCAAoC;AACpC,OAAO,MAAMA,uBAAuB,EAAE,CAAC,2CAA2C;AAClF,OAAO,MAAMC,oBAAoB,KAAK,CAAC,uCAAuC;AAC9E,OAAO,MAAMC,uBAAuB,GAAG,CAAC,6CAA6C;AACrF,OAAO,MAAMC,gBAAgB,SAAS,CAAC,wBAAwB;AAC/D,OAAO,MAAMC,mBAAmB,MAAM,CAAC,yCAAyC;AAchF,iEAAiE;AACjE,OAAO,SAASC,eAAeC,QAA4B;IACzD,yGAAyG;IACzG,OAAO;WAAIA;KAAS,CAACC,IAAI,CAAC,CAACC,GAAGC;QAC5B,yFAAyF;QACzF,MAAMC,oBAAoB;YACxBC,iBAAiB;YACjBC,iBAAiB;YACjBC,iBAAiB;QACnB;QAEA,MAAMC,YAAYJ,iBAAiB,CAACF,EAAEO,SAAS,CAAC;QAChD,MAAMC,YAAYN,iBAAiB,CAACD,EAAEM,SAAS,CAAC;QAEhD,IAAID,cAAcE,WAAW;YAC3B,OAAOF,YAAYE;QACrB;QAEA,wDAAwD;QACxD,IAAIR,EAAEO,SAAS,KAAK,mBAAmB;gBASxBP,aACAC;YATb,iFAAiF;YACjF,4DAA4D;YAC5D,MAAMQ,SAAST,EAAEU,UAAU;YAC3B,MAAMC,SAASV,EAAES,UAAU;YAC3B,IAAID,WAAWE,QAAQ;gBACrB,OAAOA,SAASF,QAAQ,2BAA2B;YACrD;YACA,6EAA6E;YAC7E,MAAMG,QAAOZ,cAAAA,EAAEa,QAAQ,cAAVb,yBAAAA,cAAcA,EAAEU,UAAU,GAAG;YAC1C,MAAMI,QAAOb,cAAAA,EAAEY,QAAQ,cAAVZ,yBAAAA,cAAcA,EAAES,UAAU,GAAG;YAC1C,OAAOI,OAAOF;QAChB;QACA,uDAAuD;QACvD,4DAA4D;QAC5D,OAAOZ,EAAEU,UAAU,GAAGT,EAAES,UAAU;IACpC;AACF;AAEA,+DAA+D;AAC/D,OAAO,SAASK,sBAAsBR,SAA2B,EAAES,OAAe;IAChF,MAAM,EAAET,WAAWU,aAAa,EAAEC,SAAS,EAAER,UAAU,EAAEG,QAAQ,EAAEM,iBAAiB,EAAE,GAAGZ;IAEzF,MAAMa,iBAAiB;QACrBJ;QACAE;QACAR;QACA,GAAIG,aAAaQ,aAAa;YAAER;QAAS,CAAC;IAC5C;IAEA,OAAQI;QACN,KAAK;YACH,OAAO;gBACLb,iBAAiB;oBACfkB,OAAOF;oBACPD,iBAAiB,EAAEA,8BAAAA,+BAAAA,oBAAqB;gBAC1C;YACF;QACF,KAAK;YACH,OAAO;gBACLhB,iBAAiB;oBACfmB,OAAOF;gBACT;YACF;QACF,KAAK;YACH,OAAO;gBACLf,iBAAiB;oBACfW;oBACAE;oBACAK,QAAQ/B;gBACV;YACF;QACF;YACE,MAAM,IAAIgC,MAAM,CAAC,4BAA4B,EAAEP,eAAe;IAClE;AACF;AAEA,iEAAiE;AACjE,OAAO,SAASQ,uBAAuBlB,SAA2B;IAChE,MAAM,EAAEA,WAAWU,aAAa,EAAEP,UAAU,EAAEG,QAAQ,EAAE,GAAGN;IAE3D,OAAQU;QACN,KAAK;QACL,KAAK;YACH,OAAOJ,aAAaQ,YAAYR,WAAWH,aAAa;QAC1D,KAAK;YACH,OAAOlB;QACT;YACE,OAAO;IACX;AACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
gid: z.ZodCoercedString<unknown>;
|
|
7
|
+
rows: z.ZodArray<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
8
|
+
headers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
deduplicateBy: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
12
|
+
type: z.ZodLiteral<"success">;
|
|
13
|
+
id: z.ZodString;
|
|
14
|
+
gid: z.ZodString;
|
|
15
|
+
sheetTitle: z.ZodString;
|
|
16
|
+
updatedRows: z.ZodNumber;
|
|
17
|
+
rowsSkipped: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
sheetUrl: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
20
|
+
type: z.ZodLiteral<"auth_required">;
|
|
21
|
+
provider: z.ZodString;
|
|
22
|
+
message: z.ZodString;
|
|
23
|
+
url: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>], "type">;
|
|
25
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
26
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
27
|
+
declare function handler({ id, gid, rows, headers, deduplicateBy }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
28
|
+
export default function createTool(): {
|
|
29
|
+
name: string;
|
|
30
|
+
config: {
|
|
31
|
+
readonly description: "Add new rows to the bottom of an existing sheet with smart header handling and optional deduplication. BEST FOR: Structured database operations where spreadsheet has headers defining schema and rows represent records.";
|
|
32
|
+
readonly inputSchema: z.ZodObject<{
|
|
33
|
+
id: z.ZodString;
|
|
34
|
+
gid: z.ZodCoercedString<unknown>;
|
|
35
|
+
rows: z.ZodArray<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
36
|
+
headers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
37
|
+
deduplicateBy: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
readonly outputSchema: z.ZodObject<{
|
|
40
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
41
|
+
type: z.ZodLiteral<"success">;
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
gid: z.ZodString;
|
|
44
|
+
sheetTitle: z.ZodString;
|
|
45
|
+
updatedRows: z.ZodNumber;
|
|
46
|
+
rowsSkipped: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
sheetUrl: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
49
|
+
type: z.ZodLiteral<"auth_required">;
|
|
50
|
+
provider: z.ZodString;
|
|
51
|
+
message: z.ZodString;
|
|
52
|
+
url: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, z.core.$strip>], "type">;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
};
|
|
56
|
+
handler: typeof handler;
|
|
57
|
+
};
|
|
58
|
+
export {};
|