@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,19 @@
|
|
|
1
|
+
import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
2
|
+
import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
export default function createPrompt(): {
|
|
4
|
+
name: string;
|
|
5
|
+
config: {
|
|
6
|
+
description: string;
|
|
7
|
+
};
|
|
8
|
+
handler: (_args: {
|
|
9
|
+
[x: string]: unknown;
|
|
10
|
+
}, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => Promise<{
|
|
11
|
+
messages: {
|
|
12
|
+
role: "user";
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export default function createPrompt() {
|
|
2
|
+
const config = {
|
|
3
|
+
description: 'Reference guide for Google Sheets A1 notation syntax'
|
|
4
|
+
};
|
|
5
|
+
const handler = async (_args, _extra)=>{
|
|
6
|
+
return {
|
|
7
|
+
messages: [
|
|
8
|
+
{
|
|
9
|
+
role: 'user',
|
|
10
|
+
content: {
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: `# Google Sheets A1 Notation Reference
|
|
13
|
+
|
|
14
|
+
A1 notation identifies cells and ranges in Google Sheets.
|
|
15
|
+
|
|
16
|
+
## Cell References
|
|
17
|
+
- \`B5\` - Single cell at column B, row 5
|
|
18
|
+
- \`A1\` - Top-left cell
|
|
19
|
+
|
|
20
|
+
## Range References
|
|
21
|
+
- \`A1:D10\` - Rectangle from A1 to D10
|
|
22
|
+
- \`A5:D5\` - Single row (columns A-D of row 5)
|
|
23
|
+
- \`B1:B10\` - Single column segment (rows 1-10 of column B)
|
|
24
|
+
|
|
25
|
+
## Full Row/Column References
|
|
26
|
+
- \`5:5\` - Entire row 5
|
|
27
|
+
- \`B:B\` - Entire column B
|
|
28
|
+
- \`A:D\` - Columns A through D (all rows)
|
|
29
|
+
- \`1:10\` - Rows 1 through 10 (all columns)
|
|
30
|
+
|
|
31
|
+
## Common Patterns
|
|
32
|
+
| Goal | Notation |
|
|
33
|
+
|------|----------|
|
|
34
|
+
| Get one cell | \`B5\` |
|
|
35
|
+
| Get a row | \`A5:Z5\` or \`5:5\` |
|
|
36
|
+
| Get a column | \`B:B\` or \`B1:B1000\` |
|
|
37
|
+
| Get a data table | \`A1:F100\` |
|
|
38
|
+
| Get headers | \`1:1\` or \`A1:Z1\` |`
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
name: 'a1-notation',
|
|
46
|
+
config,
|
|
47
|
+
handler
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/prompts/a1-notation.ts"],"sourcesContent":["import type { PromptModule } from '@mcp-z/server';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nexport default function createPrompt() {\n const config = {\n description: 'Reference guide for Google Sheets A1 notation syntax',\n };\n\n const handler = async (_args: { [x: string]: unknown }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `# Google Sheets A1 Notation Reference\n\nA1 notation identifies cells and ranges in Google Sheets.\n\n## Cell References\n- \\`B5\\` - Single cell at column B, row 5\n- \\`A1\\` - Top-left cell\n\n## Range References\n- \\`A1:D10\\` - Rectangle from A1 to D10\n- \\`A5:D5\\` - Single row (columns A-D of row 5)\n- \\`B1:B10\\` - Single column segment (rows 1-10 of column B)\n\n## Full Row/Column References\n- \\`5:5\\` - Entire row 5\n- \\`B:B\\` - Entire column B\n- \\`A:D\\` - Columns A through D (all rows)\n- \\`1:10\\` - Rows 1 through 10 (all columns)\n\n## Common Patterns\n| Goal | Notation |\n|------|----------|\n| Get one cell | \\`B5\\` |\n| Get a row | \\`A5:Z5\\` or \\`5:5\\` |\n| Get a column | \\`B:B\\` or \\`B1:B1000\\` |\n| Get a data table | \\`A1:F100\\` |\n| Get headers | \\`1:1\\` or \\`A1:Z1\\` |`,\n },\n },\n ],\n };\n };\n\n return {\n name: 'a1-notation',\n config,\n handler,\n } satisfies PromptModule;\n}\n"],"names":["createPrompt","config","description","handler","_args","_extra","messages","role","content","type","text","name"],"mappings":"AAIA,eAAe,SAASA;IACtB,MAAMC,SAAS;QACbC,aAAa;IACf;IAEA,MAAMC,UAAU,OAAOC,OAAiCC;QACtD,OAAO;YACLC,UAAU;gBACR;oBACEC,MAAM;oBACNC,SAAS;wBACPC,MAAM;wBACNC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;sCA0BmB,CAAC;oBAC7B;gBACF;aACD;QACH;IACF;IAEA,OAAO;QACLC,MAAM;QACNV;QACAE;IACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as a1Notation } from './a1-notation.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as a1Notation } from './a1-notation.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/prompts/index.ts"],"sourcesContent":["export { default as a1Notation } from './a1-notation.js';\n"],"names":["default","a1Notation"],"mappings":"AAAA,SAASA,WAAWC,UAAU,QAAQ,mBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as spreadsheet } from './spreadsheet.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as spreadsheet } from './spreadsheet.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/resources/index.ts"],"sourcesContent":["export { default as spreadsheet } from './spreadsheet.js';\n"],"names":["default","spreadsheet"],"mappings":"AAAA,SAASA,WAAWC,WAAW,QAAQ,mBAAmB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { google } from 'googleapis';
|
|
3
|
+
export default function createResource() {
|
|
4
|
+
const template = new ResourceTemplate('sheets://spreadsheets/{spreadsheetId}', {
|
|
5
|
+
list: undefined
|
|
6
|
+
});
|
|
7
|
+
const config = {
|
|
8
|
+
description: 'Sheets spreadsheet resource',
|
|
9
|
+
mimeType: 'application/json'
|
|
10
|
+
};
|
|
11
|
+
const handler = async (uri, variables, extra)=>{
|
|
12
|
+
const spreadsheetId = Array.isArray(variables.spreadsheetId) ? variables.spreadsheetId[0] : variables.spreadsheetId;
|
|
13
|
+
if (!spreadsheetId) {
|
|
14
|
+
return {
|
|
15
|
+
contents: [
|
|
16
|
+
{
|
|
17
|
+
uri: uri.href,
|
|
18
|
+
mimeType: 'application/json',
|
|
19
|
+
text: JSON.stringify({
|
|
20
|
+
error: 'spreadsheetId is required'
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
var _data_properties, _data_properties1;
|
|
28
|
+
// Safe type guard to access middleware-enriched extra
|
|
29
|
+
const { logger, authContext } = extra;
|
|
30
|
+
const sheets = google.sheets({
|
|
31
|
+
version: 'v4',
|
|
32
|
+
auth: authContext.auth
|
|
33
|
+
});
|
|
34
|
+
const resp = await sheets.spreadsheets.get({
|
|
35
|
+
spreadsheetId,
|
|
36
|
+
fields: 'spreadsheetId,properties.title,sheets.properties'
|
|
37
|
+
});
|
|
38
|
+
const data = resp.data;
|
|
39
|
+
logger.info('sheets-spreadsheet resource fetch success', {
|
|
40
|
+
spreadsheetId: data.spreadsheetId,
|
|
41
|
+
title: data === null || data === void 0 ? void 0 : (_data_properties = data.properties) === null || _data_properties === void 0 ? void 0 : _data_properties.title,
|
|
42
|
+
sheetCount: ((data === null || data === void 0 ? void 0 : data.sheets) || []).length
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
contents: [
|
|
46
|
+
{
|
|
47
|
+
uri: uri.href,
|
|
48
|
+
mimeType: 'application/json',
|
|
49
|
+
text: JSON.stringify({
|
|
50
|
+
id: data === null || data === void 0 ? void 0 : data.spreadsheetId,
|
|
51
|
+
title: data === null || data === void 0 ? void 0 : (_data_properties1 = data.properties) === null || _data_properties1 === void 0 ? void 0 : _data_properties1.title,
|
|
52
|
+
sheets: ((data === null || data === void 0 ? void 0 : data.sheets) || []).map((s)=>{
|
|
53
|
+
var _s_properties, _s_properties1, _s_properties_gridProperties, _s_properties2, _s_properties_gridProperties1, _s_properties3;
|
|
54
|
+
return {
|
|
55
|
+
id: s === null || s === void 0 ? void 0 : (_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId,
|
|
56
|
+
title: s === null || s === void 0 ? void 0 : (_s_properties1 = s.properties) === null || _s_properties1 === void 0 ? void 0 : _s_properties1.title,
|
|
57
|
+
rowCount: s === null || s === void 0 ? void 0 : (_s_properties2 = s.properties) === null || _s_properties2 === void 0 ? void 0 : (_s_properties_gridProperties = _s_properties2.gridProperties) === null || _s_properties_gridProperties === void 0 ? void 0 : _s_properties_gridProperties.rowCount,
|
|
58
|
+
columnCount: s === null || s === void 0 ? void 0 : (_s_properties3 = s.properties) === null || _s_properties3 === void 0 ? void 0 : (_s_properties_gridProperties1 = _s_properties3.gridProperties) === null || _s_properties_gridProperties1 === void 0 ? void 0 : _s_properties_gridProperties1.columnCount
|
|
59
|
+
};
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
} catch (error) {
|
|
66
|
+
var _ref;
|
|
67
|
+
const { logger } = extra;
|
|
68
|
+
logger.info('sheets-spreadsheet resource fetch failed', error);
|
|
69
|
+
return {
|
|
70
|
+
contents: [
|
|
71
|
+
{
|
|
72
|
+
uri: uri.href,
|
|
73
|
+
mimeType: 'application/json',
|
|
74
|
+
text: JSON.stringify({
|
|
75
|
+
error: String((_ref = error === null || error === void 0 ? void 0 : error.message) !== null && _ref !== void 0 ? _ref : error)
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
name: 'spreadsheet',
|
|
84
|
+
template,
|
|
85
|
+
config,
|
|
86
|
+
handler
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/resources/spreadsheet.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport type { ResourceConfig, ResourceModule } from '@mcp-z/server';\nimport { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ReadResourceResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\nimport { google, type sheets_v4 } from 'googleapis';\nimport type { GoogleApiError } from '../../types.js';\n\nexport default function createResource(): ResourceModule {\n const template = new ResourceTemplate('sheets://spreadsheets/{spreadsheetId}', { list: undefined });\n const config: ResourceConfig = {\n description: 'Sheets spreadsheet resource',\n mimeType: 'application/json',\n };\n\n const handler = async (uri: URL, variables: Record<string, string | string[]>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>): Promise<ReadResourceResult> => {\n const spreadsheetId = Array.isArray(variables.spreadsheetId) ? variables.spreadsheetId[0] : variables.spreadsheetId;\n\n if (!spreadsheetId) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify({ error: 'spreadsheetId is required' }),\n },\n ],\n };\n }\n\n try {\n // Safe type guard to access middleware-enriched extra\n const { logger, authContext } = extra as unknown as EnrichedExtra;\n const sheets = google.sheets({ version: 'v4', auth: authContext.auth });\n const resp = await sheets.spreadsheets.get({\n spreadsheetId,\n fields: 'spreadsheetId,properties.title,sheets.properties',\n });\n const data = resp.data as sheets_v4.Schema$Spreadsheet;\n logger.info('sheets-spreadsheet resource fetch success', {\n spreadsheetId: data.spreadsheetId,\n title: data?.properties?.title,\n sheetCount: (data?.sheets || []).length,\n });\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify({\n id: data?.spreadsheetId,\n title: data?.properties?.title,\n sheets: (data?.sheets || []).map((s) => ({\n id: s?.properties?.sheetId,\n title: s?.properties?.title,\n rowCount: s?.properties?.gridProperties?.rowCount,\n columnCount: s?.properties?.gridProperties?.columnCount,\n })),\n }),\n },\n ],\n };\n } catch (error) {\n const { logger } = extra as unknown as EnrichedExtra;\n logger.info('sheets-spreadsheet resource fetch failed', error as Record<string, unknown>);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify({\n error: String((error as GoogleApiError)?.message ?? error),\n }),\n },\n ],\n };\n }\n };\n\n return {\n name: 'spreadsheet',\n template,\n config,\n handler,\n };\n}\n"],"names":["ResourceTemplate","google","createResource","template","list","undefined","config","description","mimeType","handler","uri","variables","extra","spreadsheetId","Array","isArray","contents","href","text","JSON","stringify","error","data","logger","authContext","sheets","version","auth","resp","spreadsheets","get","fields","info","title","properties","sheetCount","length","id","map","s","sheetId","rowCount","gridProperties","columnCount","String","message","name"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,0CAA0C;AAG3E,SAASC,MAAM,QAAwB,aAAa;AAGpD,eAAe,SAASC;IACtB,MAAMC,WAAW,IAAIH,iBAAiB,yCAAyC;QAAEI,MAAMC;IAAU;IACjG,MAAMC,SAAyB;QAC7BC,aAAa;QACbC,UAAU;IACZ;IAEA,MAAMC,UAAU,OAAOC,KAAUC,WAA8CC;QAC7E,MAAMC,gBAAgBC,MAAMC,OAAO,CAACJ,UAAUE,aAAa,IAAIF,UAAUE,aAAa,CAAC,EAAE,GAAGF,UAAUE,aAAa;QAEnH,IAAI,CAACA,eAAe;YAClB,OAAO;gBACLG,UAAU;oBACR;wBACEN,KAAKA,IAAIO,IAAI;wBACbT,UAAU;wBACVU,MAAMC,KAAKC,SAAS,CAAC;4BAAEC,OAAO;wBAA4B;oBAC5D;iBACD;YACH;QACF;QAEA,IAAI;gBAWOC,kBAUMA;YApBf,sDAAsD;YACtD,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGZ;YAChC,MAAMa,SAASxB,OAAOwB,MAAM,CAAC;gBAAEC,SAAS;gBAAMC,MAAMH,YAAYG,IAAI;YAAC;YACrE,MAAMC,OAAO,MAAMH,OAAOI,YAAY,CAACC,GAAG,CAAC;gBACzCjB;gBACAkB,QAAQ;YACV;YACA,MAAMT,OAAOM,KAAKN,IAAI;YACtBC,OAAOS,IAAI,CAAC,6CAA6C;gBACvDnB,eAAeS,KAAKT,aAAa;gBACjCoB,KAAK,EAAEX,iBAAAA,4BAAAA,mBAAAA,KAAMY,UAAU,cAAhBZ,uCAAAA,iBAAkBW,KAAK;gBAC9BE,YAAY,AAACb,CAAAA,CAAAA,iBAAAA,2BAAAA,KAAMG,MAAM,KAAI,EAAE,AAAD,EAAGW,MAAM;YACzC;YACA,OAAO;gBACLpB,UAAU;oBACR;wBACEN,KAAKA,IAAIO,IAAI;wBACbT,UAAU;wBACVU,MAAMC,KAAKC,SAAS,CAAC;4BACnBiB,EAAE,EAAEf,iBAAAA,2BAAAA,KAAMT,aAAa;4BACvBoB,KAAK,EAAEX,iBAAAA,4BAAAA,oBAAAA,KAAMY,UAAU,cAAhBZ,wCAAAA,kBAAkBW,KAAK;4BAC9BR,QAAQ,AAACH,CAAAA,CAAAA,iBAAAA,2BAAAA,KAAMG,MAAM,KAAI,EAAE,AAAD,EAAGa,GAAG,CAAC,CAACC;oCAC5BA,eACGA,gBACGA,8BAAAA,gBACGA,+BAAAA;uCAJ0B;oCACvCF,EAAE,EAAEE,cAAAA,yBAAAA,gBAAAA,EAAGL,UAAU,cAAbK,oCAAAA,cAAeC,OAAO;oCAC1BP,KAAK,EAAEM,cAAAA,yBAAAA,iBAAAA,EAAGL,UAAU,cAAbK,qCAAAA,eAAeN,KAAK;oCAC3BQ,QAAQ,EAAEF,cAAAA,yBAAAA,iBAAAA,EAAGL,UAAU,cAAbK,sCAAAA,+BAAAA,eAAeG,cAAc,cAA7BH,mDAAAA,6BAA+BE,QAAQ;oCACjDE,WAAW,EAAEJ,cAAAA,yBAAAA,iBAAAA,EAAGL,UAAU,cAAbK,sCAAAA,gCAAAA,eAAeG,cAAc,cAA7BH,oDAAAA,8BAA+BI,WAAW;gCACzD;;wBACF;oBACF;iBACD;YACH;QACF,EAAE,OAAOtB,OAAO;;YACd,MAAM,EAAEE,MAAM,EAAE,GAAGX;YACnBW,OAAOS,IAAI,CAAC,4CAA4CX;YACxD,OAAO;gBACLL,UAAU;oBACR;wBACEN,KAAKA,IAAIO,IAAI;wBACbT,UAAU;wBACVU,MAAMC,KAAKC,SAAS,CAAC;4BACnBC,OAAOuB,eAAQvB,kBAAAA,4BAAD,AAACA,MAA0BwB,OAAO,uCAAIxB;wBACtD;oBACF;iBACD;YACH;QACF;IACF;IAEA,OAAO;QACLyB,MAAM;QACN3C;QACAG;QACAG;IACF;AACF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
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
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
8
|
+
range: z.ZodString;
|
|
9
|
+
backgroundColor: z.ZodOptional<z.ZodObject<{
|
|
10
|
+
red: z.ZodNumber;
|
|
11
|
+
green: z.ZodNumber;
|
|
12
|
+
blue: z.ZodNumber;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
textColor: z.ZodOptional<z.ZodObject<{
|
|
15
|
+
red: z.ZodNumber;
|
|
16
|
+
green: z.ZodNumber;
|
|
17
|
+
blue: z.ZodNumber;
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
bold: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
fontSize: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
horizontalAlignment: z.ZodOptional<z.ZodEnum<{
|
|
22
|
+
LEFT: "LEFT";
|
|
23
|
+
CENTER: "CENTER";
|
|
24
|
+
RIGHT: "RIGHT";
|
|
25
|
+
}>>;
|
|
26
|
+
numberFormat: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
type: z.ZodEnum<{
|
|
28
|
+
TEXT: "TEXT";
|
|
29
|
+
NUMBER: "NUMBER";
|
|
30
|
+
PERCENT: "PERCENT";
|
|
31
|
+
CURRENCY: "CURRENCY";
|
|
32
|
+
DATE: "DATE";
|
|
33
|
+
TIME: "TIME";
|
|
34
|
+
}>;
|
|
35
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
borders: z.ZodOptional<z.ZodObject<{
|
|
38
|
+
style: z.ZodEnum<{
|
|
39
|
+
SOLID: "SOLID";
|
|
40
|
+
DASHED: "DASHED";
|
|
41
|
+
DOTTED: "DOTTED";
|
|
42
|
+
}>;
|
|
43
|
+
color: z.ZodObject<{
|
|
44
|
+
red: z.ZodNumber;
|
|
45
|
+
green: z.ZodNumber;
|
|
46
|
+
blue: z.ZodNumber;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
}, z.core.$strip>>;
|
|
49
|
+
}, z.core.$strip>>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
52
|
+
type: z.ZodLiteral<"success">;
|
|
53
|
+
id: z.ZodString;
|
|
54
|
+
gid: z.ZodString;
|
|
55
|
+
sheetTitle: z.ZodString;
|
|
56
|
+
sheetUrl: z.ZodString;
|
|
57
|
+
successCount: z.ZodNumber;
|
|
58
|
+
failedRanges: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
59
|
+
range: z.ZodString;
|
|
60
|
+
error: z.ZodString;
|
|
61
|
+
}, z.core.$strip>>>;
|
|
62
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
63
|
+
type: z.ZodLiteral<"auth_required">;
|
|
64
|
+
provider: z.ZodString;
|
|
65
|
+
message: z.ZodString;
|
|
66
|
+
url: z.ZodOptional<z.ZodString>;
|
|
67
|
+
}, z.core.$strip>], "type">;
|
|
68
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
69
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
70
|
+
declare function handler({ id, gid, requests }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
71
|
+
export default function createTool(): {
|
|
72
|
+
name: string;
|
|
73
|
+
config: {
|
|
74
|
+
readonly description: "Apply formatting (colors, borders, fonts, alignment, number formats) to cell ranges without modifying data. Supports batch operations for efficiency. Colors use 0-1 RGB format. Best for creating professional, visually organized spreadsheets.";
|
|
75
|
+
readonly inputSchema: z.ZodObject<{
|
|
76
|
+
id: z.ZodString;
|
|
77
|
+
gid: z.ZodCoercedString<unknown>;
|
|
78
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
79
|
+
range: z.ZodString;
|
|
80
|
+
backgroundColor: z.ZodOptional<z.ZodObject<{
|
|
81
|
+
red: z.ZodNumber;
|
|
82
|
+
green: z.ZodNumber;
|
|
83
|
+
blue: z.ZodNumber;
|
|
84
|
+
}, z.core.$strip>>;
|
|
85
|
+
textColor: z.ZodOptional<z.ZodObject<{
|
|
86
|
+
red: z.ZodNumber;
|
|
87
|
+
green: z.ZodNumber;
|
|
88
|
+
blue: z.ZodNumber;
|
|
89
|
+
}, z.core.$strip>>;
|
|
90
|
+
bold: z.ZodOptional<z.ZodBoolean>;
|
|
91
|
+
fontSize: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
horizontalAlignment: z.ZodOptional<z.ZodEnum<{
|
|
93
|
+
LEFT: "LEFT";
|
|
94
|
+
CENTER: "CENTER";
|
|
95
|
+
RIGHT: "RIGHT";
|
|
96
|
+
}>>;
|
|
97
|
+
numberFormat: z.ZodOptional<z.ZodObject<{
|
|
98
|
+
type: z.ZodEnum<{
|
|
99
|
+
TEXT: "TEXT";
|
|
100
|
+
NUMBER: "NUMBER";
|
|
101
|
+
PERCENT: "PERCENT";
|
|
102
|
+
CURRENCY: "CURRENCY";
|
|
103
|
+
DATE: "DATE";
|
|
104
|
+
TIME: "TIME";
|
|
105
|
+
}>;
|
|
106
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
107
|
+
}, z.core.$strip>>;
|
|
108
|
+
borders: z.ZodOptional<z.ZodObject<{
|
|
109
|
+
style: z.ZodEnum<{
|
|
110
|
+
SOLID: "SOLID";
|
|
111
|
+
DASHED: "DASHED";
|
|
112
|
+
DOTTED: "DOTTED";
|
|
113
|
+
}>;
|
|
114
|
+
color: z.ZodObject<{
|
|
115
|
+
red: z.ZodNumber;
|
|
116
|
+
green: z.ZodNumber;
|
|
117
|
+
blue: z.ZodNumber;
|
|
118
|
+
}, z.core.$strip>;
|
|
119
|
+
}, z.core.$strip>>;
|
|
120
|
+
}, z.core.$strip>>;
|
|
121
|
+
}, z.core.$strip>;
|
|
122
|
+
readonly outputSchema: z.ZodObject<{
|
|
123
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
124
|
+
type: z.ZodLiteral<"success">;
|
|
125
|
+
id: z.ZodString;
|
|
126
|
+
gid: z.ZodString;
|
|
127
|
+
sheetTitle: z.ZodString;
|
|
128
|
+
sheetUrl: z.ZodString;
|
|
129
|
+
successCount: z.ZodNumber;
|
|
130
|
+
failedRanges: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
131
|
+
range: z.ZodString;
|
|
132
|
+
error: z.ZodString;
|
|
133
|
+
}, z.core.$strip>>>;
|
|
134
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
135
|
+
type: z.ZodLiteral<"auth_required">;
|
|
136
|
+
provider: z.ZodString;
|
|
137
|
+
message: z.ZodString;
|
|
138
|
+
url: z.ZodOptional<z.ZodString>;
|
|
139
|
+
}, z.core.$strip>], "type">;
|
|
140
|
+
}, z.core.$strip>;
|
|
141
|
+
};
|
|
142
|
+
handler: typeof handler;
|
|
143
|
+
};
|
|
144
|
+
export {};
|
|
@@ -0,0 +1,288 @@
|
|
|
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
|
+
import { parseA1Notation, rangeReferenceToGridRange } from '../../spreadsheet/range-operations.js';
|
|
8
|
+
// RGB color schema (0-1 range for Google Sheets API)
|
|
9
|
+
const ColorSchema = z.object({
|
|
10
|
+
red: z.number().min(0).max(1).describe('Red component (0-1)'),
|
|
11
|
+
green: z.number().min(0).max(1).describe('Green component (0-1)'),
|
|
12
|
+
blue: z.number().min(0).max(1).describe('Blue component (0-1)')
|
|
13
|
+
});
|
|
14
|
+
// Number format schema
|
|
15
|
+
const NumberFormatSchema = z.object({
|
|
16
|
+
type: z.enum([
|
|
17
|
+
'TEXT',
|
|
18
|
+
'NUMBER',
|
|
19
|
+
'PERCENT',
|
|
20
|
+
'CURRENCY',
|
|
21
|
+
'DATE',
|
|
22
|
+
'TIME'
|
|
23
|
+
]).describe('Number format type'),
|
|
24
|
+
pattern: z.string().optional().describe('Custom format pattern (e.g., "$#,##0.00" for currency)')
|
|
25
|
+
});
|
|
26
|
+
// Border schema
|
|
27
|
+
const BorderSchema = z.object({
|
|
28
|
+
style: z.enum([
|
|
29
|
+
'SOLID',
|
|
30
|
+
'DASHED',
|
|
31
|
+
'DOTTED'
|
|
32
|
+
]).describe('Border line style'),
|
|
33
|
+
color: ColorSchema.describe('Border color')
|
|
34
|
+
});
|
|
35
|
+
// Input schema for format requests
|
|
36
|
+
const FormatRequestSchema = z.object({
|
|
37
|
+
range: z.string().min(1).describe('A1 notation range to format (e.g., "A1:D10", "B:B", "5:5")'),
|
|
38
|
+
backgroundColor: ColorSchema.optional().describe('Cell background color'),
|
|
39
|
+
textColor: ColorSchema.optional().describe('Text color'),
|
|
40
|
+
bold: z.boolean().optional().describe('Bold text'),
|
|
41
|
+
fontSize: z.number().int().min(6).max(36).optional().describe('Font size in points'),
|
|
42
|
+
horizontalAlignment: z.enum([
|
|
43
|
+
'LEFT',
|
|
44
|
+
'CENTER',
|
|
45
|
+
'RIGHT'
|
|
46
|
+
]).optional().describe('Horizontal text alignment'),
|
|
47
|
+
numberFormat: NumberFormatSchema.optional().describe('Number format pattern'),
|
|
48
|
+
borders: BorderSchema.optional().describe('Cell borders')
|
|
49
|
+
});
|
|
50
|
+
const inputSchema = z.object({
|
|
51
|
+
id: SpreadsheetIdSchema,
|
|
52
|
+
gid: SheetGidSchema,
|
|
53
|
+
requests: z.array(FormatRequestSchema).min(1).max(50).describe('Array of formatting requests. Batch multiple ranges for efficiency.')
|
|
54
|
+
});
|
|
55
|
+
const successBranchSchema = z.object({
|
|
56
|
+
type: z.literal('success'),
|
|
57
|
+
id: SpreadsheetIdOutput,
|
|
58
|
+
gid: SheetGidOutput,
|
|
59
|
+
sheetTitle: z.string().describe('Title of the formatted sheet'),
|
|
60
|
+
sheetUrl: z.string().describe('URL of the formatted sheet'),
|
|
61
|
+
successCount: z.number().int().nonnegative().describe('Number of format requests successfully applied'),
|
|
62
|
+
failedRanges: z.array(z.object({
|
|
63
|
+
range: z.string().describe('A1 notation of range that failed'),
|
|
64
|
+
error: z.string().describe('Why formatting failed for this range')
|
|
65
|
+
})).optional().describe('Only populated if some ranges failed to format')
|
|
66
|
+
});
|
|
67
|
+
const outputSchema = z.discriminatedUnion('type', [
|
|
68
|
+
successBranchSchema,
|
|
69
|
+
AuthRequiredBranchSchema
|
|
70
|
+
]);
|
|
71
|
+
const config = {
|
|
72
|
+
description: 'Apply formatting (colors, borders, fonts, alignment, number formats) to cell ranges without modifying data. Supports batch operations for efficiency. Colors use 0-1 RGB format. Best for creating professional, visually organized spreadsheets.',
|
|
73
|
+
inputSchema,
|
|
74
|
+
outputSchema: z.object({
|
|
75
|
+
result: outputSchema
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
async function handler({ id, gid, requests }, extra) {
|
|
79
|
+
const logger = extra.logger;
|
|
80
|
+
logger.info('sheets.cells.format called', {
|
|
81
|
+
id,
|
|
82
|
+
gid,
|
|
83
|
+
requestCount: requests.length
|
|
84
|
+
});
|
|
85
|
+
try {
|
|
86
|
+
var _sheet_properties_title;
|
|
87
|
+
var _spreadsheetResponse_data_sheets;
|
|
88
|
+
const sheets = google.sheets({
|
|
89
|
+
version: 'v4',
|
|
90
|
+
auth: extra.authContext.auth
|
|
91
|
+
});
|
|
92
|
+
// Get spreadsheet and sheet info in single API call
|
|
93
|
+
const spreadsheetResponse = await sheets.spreadsheets.get({
|
|
94
|
+
spreadsheetId: id,
|
|
95
|
+
fields: 'sheets.properties.sheetId,sheets.properties.title'
|
|
96
|
+
});
|
|
97
|
+
// Find sheet by gid
|
|
98
|
+
const sheet = (_spreadsheetResponse_data_sheets = spreadsheetResponse.data.sheets) === null || _spreadsheetResponse_data_sheets === void 0 ? void 0 : _spreadsheetResponse_data_sheets.find((s)=>{
|
|
99
|
+
var _s_properties;
|
|
100
|
+
return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
|
|
101
|
+
});
|
|
102
|
+
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.properties)) {
|
|
103
|
+
logger.info('Sheet not found for format cells', {
|
|
104
|
+
id,
|
|
105
|
+
gid,
|
|
106
|
+
requestCount: requests.length
|
|
107
|
+
});
|
|
108
|
+
throw new McpError(ErrorCode.InvalidParams, `Sheet not found: ${gid}`);
|
|
109
|
+
}
|
|
110
|
+
const sheetTitle = (_sheet_properties_title = sheet.properties.title) !== null && _sheet_properties_title !== void 0 ? _sheet_properties_title : gid;
|
|
111
|
+
const sheetId = sheet.properties.sheetId;
|
|
112
|
+
const sheetUrl = `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetId}`;
|
|
113
|
+
// Build batch update requests
|
|
114
|
+
const batchRequests = [];
|
|
115
|
+
const failedRanges = [];
|
|
116
|
+
for (const request of requests){
|
|
117
|
+
try {
|
|
118
|
+
// Parse A1 notation to range reference
|
|
119
|
+
const rangeRef = parseA1Notation(request.range);
|
|
120
|
+
// Build grid range from range reference using helper function
|
|
121
|
+
const gridRange = rangeReferenceToGridRange(rangeRef, sheetId);
|
|
122
|
+
// Build cell format object
|
|
123
|
+
const cellFormat = {};
|
|
124
|
+
const fields = [];
|
|
125
|
+
// Background color
|
|
126
|
+
if (request.backgroundColor) {
|
|
127
|
+
cellFormat.backgroundColor = request.backgroundColor;
|
|
128
|
+
fields.push('backgroundColor');
|
|
129
|
+
}
|
|
130
|
+
// Text format
|
|
131
|
+
if (request.textColor || request.bold !== undefined || request.fontSize !== undefined) {
|
|
132
|
+
cellFormat.textFormat = {};
|
|
133
|
+
if (request.textColor) {
|
|
134
|
+
cellFormat.textFormat.foregroundColor = request.textColor;
|
|
135
|
+
fields.push('textFormat.foregroundColor');
|
|
136
|
+
}
|
|
137
|
+
if (request.bold !== undefined) {
|
|
138
|
+
cellFormat.textFormat.bold = request.bold;
|
|
139
|
+
fields.push('textFormat.bold');
|
|
140
|
+
}
|
|
141
|
+
if (request.fontSize !== undefined) {
|
|
142
|
+
cellFormat.textFormat.fontSize = request.fontSize;
|
|
143
|
+
fields.push('textFormat.fontSize');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Horizontal alignment
|
|
147
|
+
if (request.horizontalAlignment) {
|
|
148
|
+
cellFormat.horizontalAlignment = request.horizontalAlignment;
|
|
149
|
+
fields.push('horizontalAlignment');
|
|
150
|
+
}
|
|
151
|
+
// Number format
|
|
152
|
+
if (request.numberFormat) {
|
|
153
|
+
const numberFormat = {
|
|
154
|
+
type: request.numberFormat.type
|
|
155
|
+
};
|
|
156
|
+
if (request.numberFormat.pattern !== undefined) {
|
|
157
|
+
numberFormat.pattern = request.numberFormat.pattern;
|
|
158
|
+
}
|
|
159
|
+
cellFormat.numberFormat = numberFormat;
|
|
160
|
+
fields.push('numberFormat');
|
|
161
|
+
}
|
|
162
|
+
// Add repeatCell request for this range
|
|
163
|
+
if (fields.length > 0) {
|
|
164
|
+
batchRequests.push({
|
|
165
|
+
repeatCell: {
|
|
166
|
+
range: gridRange,
|
|
167
|
+
cell: {
|
|
168
|
+
userEnteredFormat: cellFormat
|
|
169
|
+
},
|
|
170
|
+
fields: `userEnteredFormat(${fields.join(',')})`
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Add border formatting if specified
|
|
175
|
+
if (request.borders) {
|
|
176
|
+
batchRequests.push({
|
|
177
|
+
updateBorders: {
|
|
178
|
+
range: gridRange,
|
|
179
|
+
top: {
|
|
180
|
+
style: request.borders.style,
|
|
181
|
+
color: request.borders.color
|
|
182
|
+
},
|
|
183
|
+
bottom: {
|
|
184
|
+
style: request.borders.style,
|
|
185
|
+
color: request.borders.color
|
|
186
|
+
},
|
|
187
|
+
left: {
|
|
188
|
+
style: request.borders.style,
|
|
189
|
+
color: request.borders.color
|
|
190
|
+
},
|
|
191
|
+
right: {
|
|
192
|
+
style: request.borders.style,
|
|
193
|
+
color: request.borders.color
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
} catch (error) {
|
|
199
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
200
|
+
logger.info('Failed to parse range for formatting', {
|
|
201
|
+
range: request.range,
|
|
202
|
+
error: message
|
|
203
|
+
});
|
|
204
|
+
failedRanges.push({
|
|
205
|
+
range: request.range,
|
|
206
|
+
error: `Failed to parse range: ${message}`
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Early return if all ranges failed
|
|
211
|
+
if (batchRequests.length === 0) {
|
|
212
|
+
const result = {
|
|
213
|
+
type: 'success',
|
|
214
|
+
id,
|
|
215
|
+
gid: String(sheetId),
|
|
216
|
+
sheetTitle,
|
|
217
|
+
sheetUrl,
|
|
218
|
+
successCount: 0,
|
|
219
|
+
failedRanges: failedRanges.length > 0 ? failedRanges : undefined
|
|
220
|
+
};
|
|
221
|
+
return {
|
|
222
|
+
content: [
|
|
223
|
+
{
|
|
224
|
+
type: 'text',
|
|
225
|
+
text: JSON.stringify(result)
|
|
226
|
+
}
|
|
227
|
+
],
|
|
228
|
+
structuredContent: {
|
|
229
|
+
result
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
logger.info('sheets.cells.format executing batch request', {
|
|
234
|
+
spreadsheetId: id,
|
|
235
|
+
sheetTitle,
|
|
236
|
+
batchRequestsCount: batchRequests.length
|
|
237
|
+
});
|
|
238
|
+
// Execute the batch update
|
|
239
|
+
await sheets.spreadsheets.batchUpdate({
|
|
240
|
+
spreadsheetId: id,
|
|
241
|
+
requestBody: {
|
|
242
|
+
requests: batchRequests
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
logger.info('sheets.cells.format completed successfully', {
|
|
246
|
+
successCount: requests.length - failedRanges.length,
|
|
247
|
+
failedCount: failedRanges.length
|
|
248
|
+
});
|
|
249
|
+
const result = {
|
|
250
|
+
type: 'success',
|
|
251
|
+
id,
|
|
252
|
+
gid: String(sheetId),
|
|
253
|
+
sheetTitle,
|
|
254
|
+
sheetUrl,
|
|
255
|
+
successCount: requests.length - failedRanges.length,
|
|
256
|
+
failedRanges: failedRanges.length > 0 ? failedRanges : undefined
|
|
257
|
+
};
|
|
258
|
+
return {
|
|
259
|
+
content: [
|
|
260
|
+
{
|
|
261
|
+
type: 'text',
|
|
262
|
+
text: JSON.stringify(result)
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
structuredContent: {
|
|
266
|
+
result
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
} catch (error) {
|
|
270
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
271
|
+
logger.error('Format cells operation failed', {
|
|
272
|
+
id,
|
|
273
|
+
gid,
|
|
274
|
+
requestCount: requests.length,
|
|
275
|
+
error: message
|
|
276
|
+
});
|
|
277
|
+
throw new McpError(ErrorCode.InternalError, `Error formatting cells: ${message}`, {
|
|
278
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
export default function createTool() {
|
|
283
|
+
return {
|
|
284
|
+
name: 'cells-format',
|
|
285
|
+
config,
|
|
286
|
+
handler
|
|
287
|
+
};
|
|
288
|
+
}
|