@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.
Files changed (363) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +181 -0
  3. package/bin/server.js +5 -0
  4. package/dist/cjs/constants.d.cts +7 -0
  5. package/dist/cjs/constants.d.ts +7 -0
  6. package/dist/cjs/constants.js +18 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/index.d.cts +8 -0
  9. package/dist/cjs/index.d.ts +8 -0
  10. package/dist/cjs/index.js +314 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/lib/create-store.d.cts +2 -0
  13. package/dist/cjs/lib/create-store.d.ts +2 -0
  14. package/dist/cjs/lib/create-store.js +166 -0
  15. package/dist/cjs/lib/create-store.js.map +1 -0
  16. package/dist/cjs/mcp/index.d.cts +3 -0
  17. package/dist/cjs/mcp/index.d.ts +3 -0
  18. package/dist/cjs/mcp/index.js +66 -0
  19. package/dist/cjs/mcp/index.js.map +1 -0
  20. package/dist/cjs/mcp/prompts/a1-notation.d.cts +19 -0
  21. package/dist/cjs/mcp/prompts/a1-notation.d.ts +19 -0
  22. package/dist/cjs/mcp/prompts/a1-notation.js +169 -0
  23. package/dist/cjs/mcp/prompts/a1-notation.js.map +1 -0
  24. package/dist/cjs/mcp/prompts/index.d.cts +1 -0
  25. package/dist/cjs/mcp/prompts/index.d.ts +1 -0
  26. package/dist/cjs/mcp/prompts/index.js +17 -0
  27. package/dist/cjs/mcp/prompts/index.js.map +1 -0
  28. package/dist/cjs/mcp/resources/index.d.cts +1 -0
  29. package/dist/cjs/mcp/resources/index.d.ts +1 -0
  30. package/dist/cjs/mcp/resources/index.js +17 -0
  31. package/dist/cjs/mcp/resources/index.js.map +1 -0
  32. package/dist/cjs/mcp/resources/spreadsheet.d.cts +2 -0
  33. package/dist/cjs/mcp/resources/spreadsheet.d.ts +2 -0
  34. package/dist/cjs/mcp/resources/spreadsheet.js +258 -0
  35. package/dist/cjs/mcp/resources/spreadsheet.js.map +1 -0
  36. package/dist/cjs/mcp/tools/cells-format.d.cts +144 -0
  37. package/dist/cjs/mcp/tools/cells-format.d.ts +144 -0
  38. package/dist/cjs/mcp/tools/cells-format.js +484 -0
  39. package/dist/cjs/mcp/tools/cells-format.js.map +1 -0
  40. package/dist/cjs/mcp/tools/chart-create.d.cts +94 -0
  41. package/dist/cjs/mcp/tools/chart-create.d.ts +94 -0
  42. package/dist/cjs/mcp/tools/chart-create.js +575 -0
  43. package/dist/cjs/mcp/tools/chart-create.js.map +1 -0
  44. package/dist/cjs/mcp/tools/columns-get.d.cts +55 -0
  45. package/dist/cjs/mcp/tools/columns-get.d.ts +55 -0
  46. package/dist/cjs/mcp/tools/columns-get.js +289 -0
  47. package/dist/cjs/mcp/tools/columns-get.js.map +1 -0
  48. package/dist/cjs/mcp/tools/columns-update.d.cts +86 -0
  49. package/dist/cjs/mcp/tools/columns-update.d.ts +86 -0
  50. package/dist/cjs/mcp/tools/columns-update.js +482 -0
  51. package/dist/cjs/mcp/tools/columns-update.js.map +1 -0
  52. package/dist/cjs/mcp/tools/csv-get-columns.d.cts +43 -0
  53. package/dist/cjs/mcp/tools/csv-get-columns.d.ts +43 -0
  54. package/dist/cjs/mcp/tools/csv-get-columns.js +386 -0
  55. package/dist/cjs/mcp/tools/csv-get-columns.js.map +1 -0
  56. package/dist/cjs/mcp/tools/dimensions-batch-update.d.cts +118 -0
  57. package/dist/cjs/mcp/tools/dimensions-batch-update.d.ts +118 -0
  58. package/dist/cjs/mcp/tools/dimensions-batch-update.js +504 -0
  59. package/dist/cjs/mcp/tools/dimensions-batch-update.js.map +1 -0
  60. package/dist/cjs/mcp/tools/dimensions-move.d.cts +86 -0
  61. package/dist/cjs/mcp/tools/dimensions-move.d.ts +86 -0
  62. package/dist/cjs/mcp/tools/dimensions-move.js +359 -0
  63. package/dist/cjs/mcp/tools/dimensions-move.js.map +1 -0
  64. package/dist/cjs/mcp/tools/index.d.cts +26 -0
  65. package/dist/cjs/mcp/tools/index.d.ts +26 -0
  66. package/dist/cjs/mcp/tools/index.js +122 -0
  67. package/dist/cjs/mcp/tools/index.js.map +1 -0
  68. package/dist/cjs/mcp/tools/lib/dimension-operations.d.cts +48 -0
  69. package/dist/cjs/mcp/tools/lib/dimension-operations.d.ts +48 -0
  70. package/dist/cjs/mcp/tools/lib/dimension-operations.js +177 -0
  71. package/dist/cjs/mcp/tools/lib/dimension-operations.js.map +1 -0
  72. package/dist/cjs/mcp/tools/rows-append.d.cts +58 -0
  73. package/dist/cjs/mcp/tools/rows-append.d.ts +58 -0
  74. package/dist/cjs/mcp/tools/rows-append.js +335 -0
  75. package/dist/cjs/mcp/tools/rows-append.js.map +1 -0
  76. package/dist/cjs/mcp/tools/rows-csv-append.d.cts +67 -0
  77. package/dist/cjs/mcp/tools/rows-csv-append.d.ts +67 -0
  78. package/dist/cjs/mcp/tools/rows-csv-append.js +859 -0
  79. package/dist/cjs/mcp/tools/rows-csv-append.js.map +1 -0
  80. package/dist/cjs/mcp/tools/rows-get.d.cts +56 -0
  81. package/dist/cjs/mcp/tools/rows-get.d.ts +56 -0
  82. package/dist/cjs/mcp/tools/rows-get.js +292 -0
  83. package/dist/cjs/mcp/tools/rows-get.js.map +1 -0
  84. package/dist/cjs/mcp/tools/sheet-copy-to.d.cts +68 -0
  85. package/dist/cjs/mcp/tools/sheet-copy-to.d.ts +68 -0
  86. package/dist/cjs/mcp/tools/sheet-copy-to.js +341 -0
  87. package/dist/cjs/mcp/tools/sheet-copy-to.js.map +1 -0
  88. package/dist/cjs/mcp/tools/sheet-copy.d.cts +80 -0
  89. package/dist/cjs/mcp/tools/sheet-copy.d.ts +80 -0
  90. package/dist/cjs/mcp/tools/sheet-copy.js +394 -0
  91. package/dist/cjs/mcp/tools/sheet-copy.js.map +1 -0
  92. package/dist/cjs/mcp/tools/sheet-create.d.cts +56 -0
  93. package/dist/cjs/mcp/tools/sheet-create.d.ts +56 -0
  94. package/dist/cjs/mcp/tools/sheet-create.js +283 -0
  95. package/dist/cjs/mcp/tools/sheet-create.js.map +1 -0
  96. package/dist/cjs/mcp/tools/sheet-delete.d.cts +62 -0
  97. package/dist/cjs/mcp/tools/sheet-delete.d.ts +62 -0
  98. package/dist/cjs/mcp/tools/sheet-delete.js +341 -0
  99. package/dist/cjs/mcp/tools/sheet-delete.js.map +1 -0
  100. package/dist/cjs/mcp/tools/sheet-find.d.cts +48 -0
  101. package/dist/cjs/mcp/tools/sheet-find.d.ts +48 -0
  102. package/dist/cjs/mcp/tools/sheet-find.js +261 -0
  103. package/dist/cjs/mcp/tools/sheet-find.js.map +1 -0
  104. package/dist/cjs/mcp/tools/sheet-rename.d.cts +60 -0
  105. package/dist/cjs/mcp/tools/sheet-rename.d.ts +60 -0
  106. package/dist/cjs/mcp/tools/sheet-rename.js +305 -0
  107. package/dist/cjs/mcp/tools/sheet-rename.js.map +1 -0
  108. package/dist/cjs/mcp/tools/spreadsheet-copy.d.cts +58 -0
  109. package/dist/cjs/mcp/tools/spreadsheet-copy.d.ts +58 -0
  110. package/dist/cjs/mcp/tools/spreadsheet-copy.js +319 -0
  111. package/dist/cjs/mcp/tools/spreadsheet-copy.js.map +1 -0
  112. package/dist/cjs/mcp/tools/spreadsheet-create.d.cts +52 -0
  113. package/dist/cjs/mcp/tools/spreadsheet-create.d.ts +52 -0
  114. package/dist/cjs/mcp/tools/spreadsheet-create.js +270 -0
  115. package/dist/cjs/mcp/tools/spreadsheet-create.js.map +1 -0
  116. package/dist/cjs/mcp/tools/spreadsheet-find.d.cts +58 -0
  117. package/dist/cjs/mcp/tools/spreadsheet-find.d.ts +58 -0
  118. package/dist/cjs/mcp/tools/spreadsheet-find.js +334 -0
  119. package/dist/cjs/mcp/tools/spreadsheet-find.js.map +1 -0
  120. package/dist/cjs/mcp/tools/spreadsheet-rename.d.cts +56 -0
  121. package/dist/cjs/mcp/tools/spreadsheet-rename.d.ts +56 -0
  122. package/dist/cjs/mcp/tools/spreadsheet-rename.js +289 -0
  123. package/dist/cjs/mcp/tools/spreadsheet-rename.js.map +1 -0
  124. package/dist/cjs/mcp/tools/validation-set.d.cts +144 -0
  125. package/dist/cjs/mcp/tools/validation-set.d.ts +144 -0
  126. package/dist/cjs/mcp/tools/validation-set.js +564 -0
  127. package/dist/cjs/mcp/tools/validation-set.js.map +1 -0
  128. package/dist/cjs/mcp/tools/values-batch-update.d.cts +102 -0
  129. package/dist/cjs/mcp/tools/values-batch-update.d.ts +102 -0
  130. package/dist/cjs/mcp/tools/values-batch-update.js +409 -0
  131. package/dist/cjs/mcp/tools/values-batch-update.js.map +1 -0
  132. package/dist/cjs/mcp/tools/values-clear.d.cts +56 -0
  133. package/dist/cjs/mcp/tools/values-clear.d.ts +56 -0
  134. package/dist/cjs/mcp/tools/values-clear.js +308 -0
  135. package/dist/cjs/mcp/tools/values-clear.js.map +1 -0
  136. package/dist/cjs/mcp/tools/values-csv-update.d.cts +75 -0
  137. package/dist/cjs/mcp/tools/values-csv-update.d.ts +75 -0
  138. package/dist/cjs/mcp/tools/values-csv-update.js +500 -0
  139. package/dist/cjs/mcp/tools/values-csv-update.js.map +1 -0
  140. package/dist/cjs/mcp/tools/values-replace.d.cts +68 -0
  141. package/dist/cjs/mcp/tools/values-replace.d.ts +68 -0
  142. package/dist/cjs/mcp/tools/values-replace.js +378 -0
  143. package/dist/cjs/mcp/tools/values-replace.js.map +1 -0
  144. package/dist/cjs/mcp/tools/values-search.d.cts +74 -0
  145. package/dist/cjs/mcp/tools/values-search.d.ts +74 -0
  146. package/dist/cjs/mcp/tools/values-search.js +470 -0
  147. package/dist/cjs/mcp/tools/values-search.js.map +1 -0
  148. package/dist/cjs/package.json +1 -0
  149. package/dist/cjs/schemas/index.d.cts +14 -0
  150. package/dist/cjs/schemas/index.d.ts +14 -0
  151. package/dist/cjs/schemas/index.js +64 -0
  152. package/dist/cjs/schemas/index.js.map +1 -0
  153. package/dist/cjs/setup/config.d.cts +44 -0
  154. package/dist/cjs/setup/config.d.ts +44 -0
  155. package/dist/cjs/setup/config.js +201 -0
  156. package/dist/cjs/setup/config.js.map +1 -0
  157. package/dist/cjs/setup/http.d.cts +8 -0
  158. package/dist/cjs/setup/http.d.ts +8 -0
  159. package/dist/cjs/setup/http.js +260 -0
  160. package/dist/cjs/setup/http.js.map +1 -0
  161. package/dist/cjs/setup/index.d.cts +5 -0
  162. package/dist/cjs/setup/index.d.ts +5 -0
  163. package/dist/cjs/setup/index.js +46 -0
  164. package/dist/cjs/setup/index.js.map +1 -0
  165. package/dist/cjs/setup/oauth-google.d.cts +54 -0
  166. package/dist/cjs/setup/oauth-google.d.ts +54 -0
  167. package/dist/cjs/setup/oauth-google.js +332 -0
  168. package/dist/cjs/setup/oauth-google.js.map +1 -0
  169. package/dist/cjs/setup/runtime.d.cts +10 -0
  170. package/dist/cjs/setup/runtime.d.ts +10 -0
  171. package/dist/cjs/setup/runtime.js +353 -0
  172. package/dist/cjs/setup/runtime.js.map +1 -0
  173. package/dist/cjs/setup/stdio.d.cts +7 -0
  174. package/dist/cjs/setup/stdio.d.ts +7 -0
  175. package/dist/cjs/setup/stdio.js +239 -0
  176. package/dist/cjs/setup/stdio.js.map +1 -0
  177. package/dist/cjs/spreadsheet/column-utilities.d.cts +1 -0
  178. package/dist/cjs/spreadsheet/column-utilities.d.ts +1 -0
  179. package/dist/cjs/spreadsheet/column-utilities.js +21 -0
  180. package/dist/cjs/spreadsheet/column-utilities.js.map +1 -0
  181. package/dist/cjs/spreadsheet/csv-streaming.d.cts +19 -0
  182. package/dist/cjs/spreadsheet/csv-streaming.d.ts +19 -0
  183. package/dist/cjs/spreadsheet/csv-streaming.js +188 -0
  184. package/dist/cjs/spreadsheet/csv-streaming.js.map +1 -0
  185. package/dist/cjs/spreadsheet/data-operations.d.cts +115 -0
  186. package/dist/cjs/spreadsheet/data-operations.d.ts +115 -0
  187. package/dist/cjs/spreadsheet/data-operations.js +1515 -0
  188. package/dist/cjs/spreadsheet/data-operations.js.map +1 -0
  189. package/dist/cjs/spreadsheet/deduplication-utils.d.cts +31 -0
  190. package/dist/cjs/spreadsheet/deduplication-utils.d.ts +31 -0
  191. package/dist/cjs/spreadsheet/deduplication-utils.js +65 -0
  192. package/dist/cjs/spreadsheet/deduplication-utils.js.map +1 -0
  193. package/dist/cjs/spreadsheet/range-operations.d.cts +184 -0
  194. package/dist/cjs/spreadsheet/range-operations.d.ts +184 -0
  195. package/dist/cjs/spreadsheet/range-operations.js +672 -0
  196. package/dist/cjs/spreadsheet/range-operations.js.map +1 -0
  197. package/dist/cjs/spreadsheet/sheet-operations.d.cts +30 -0
  198. package/dist/cjs/spreadsheet/sheet-operations.d.ts +30 -0
  199. package/dist/cjs/spreadsheet/sheet-operations.js +811 -0
  200. package/dist/cjs/spreadsheet/sheet-operations.js.map +1 -0
  201. package/dist/cjs/spreadsheet/spreadsheet-management.d.cts +21 -0
  202. package/dist/cjs/spreadsheet/spreadsheet-management.d.ts +21 -0
  203. package/dist/cjs/spreadsheet/spreadsheet-management.js +310 -0
  204. package/dist/cjs/spreadsheet/spreadsheet-management.js.map +1 -0
  205. package/dist/cjs/types.d.cts +53 -0
  206. package/dist/cjs/types.d.ts +53 -0
  207. package/dist/cjs/types.js +5 -0
  208. package/dist/cjs/types.js.map +1 -0
  209. package/dist/esm/constants.d.ts +7 -0
  210. package/dist/esm/constants.js +7 -0
  211. package/dist/esm/constants.js.map +1 -0
  212. package/dist/esm/index.d.ts +8 -0
  213. package/dist/esm/index.js +34 -0
  214. package/dist/esm/index.js.map +1 -0
  215. package/dist/esm/lib/create-store.d.ts +2 -0
  216. package/dist/esm/lib/create-store.js +6 -0
  217. package/dist/esm/lib/create-store.js.map +1 -0
  218. package/dist/esm/mcp/index.d.ts +3 -0
  219. package/dist/esm/mcp/index.js +6 -0
  220. package/dist/esm/mcp/index.js.map +1 -0
  221. package/dist/esm/mcp/prompts/a1-notation.d.ts +19 -0
  222. package/dist/esm/mcp/prompts/a1-notation.js +49 -0
  223. package/dist/esm/mcp/prompts/a1-notation.js.map +1 -0
  224. package/dist/esm/mcp/prompts/index.d.ts +1 -0
  225. package/dist/esm/mcp/prompts/index.js +1 -0
  226. package/dist/esm/mcp/prompts/index.js.map +1 -0
  227. package/dist/esm/mcp/resources/index.d.ts +1 -0
  228. package/dist/esm/mcp/resources/index.js +1 -0
  229. package/dist/esm/mcp/resources/index.js.map +1 -0
  230. package/dist/esm/mcp/resources/spreadsheet.d.ts +2 -0
  231. package/dist/esm/mcp/resources/spreadsheet.js +88 -0
  232. package/dist/esm/mcp/resources/spreadsheet.js.map +1 -0
  233. package/dist/esm/mcp/tools/cells-format.d.ts +144 -0
  234. package/dist/esm/mcp/tools/cells-format.js +288 -0
  235. package/dist/esm/mcp/tools/cells-format.js.map +1 -0
  236. package/dist/esm/mcp/tools/chart-create.d.ts +94 -0
  237. package/dist/esm/mcp/tools/chart-create.js +408 -0
  238. package/dist/esm/mcp/tools/chart-create.js.map +1 -0
  239. package/dist/esm/mcp/tools/columns-get.d.ts +55 -0
  240. package/dist/esm/mcp/tools/columns-get.js +113 -0
  241. package/dist/esm/mcp/tools/columns-get.js.map +1 -0
  242. package/dist/esm/mcp/tools/columns-update.d.ts +86 -0
  243. package/dist/esm/mcp/tools/columns-update.js +296 -0
  244. package/dist/esm/mcp/tools/columns-update.js.map +1 -0
  245. package/dist/esm/mcp/tools/csv-get-columns.d.ts +43 -0
  246. package/dist/esm/mcp/tools/csv-get-columns.js +95 -0
  247. package/dist/esm/mcp/tools/csv-get-columns.js.map +1 -0
  248. package/dist/esm/mcp/tools/dimensions-batch-update.d.ts +118 -0
  249. package/dist/esm/mcp/tools/dimensions-batch-update.js +321 -0
  250. package/dist/esm/mcp/tools/dimensions-batch-update.js.map +1 -0
  251. package/dist/esm/mcp/tools/dimensions-move.d.ts +86 -0
  252. package/dist/esm/mcp/tools/dimensions-move.js +183 -0
  253. package/dist/esm/mcp/tools/dimensions-move.js.map +1 -0
  254. package/dist/esm/mcp/tools/index.d.ts +26 -0
  255. package/dist/esm/mcp/tools/index.js +26 -0
  256. package/dist/esm/mcp/tools/index.js.map +1 -0
  257. package/dist/esm/mcp/tools/lib/dimension-operations.d.ts +48 -0
  258. package/dist/esm/mcp/tools/lib/dimension-operations.js +93 -0
  259. package/dist/esm/mcp/tools/lib/dimension-operations.js.map +1 -0
  260. package/dist/esm/mcp/tools/rows-append.d.ts +58 -0
  261. package/dist/esm/mcp/tools/rows-append.js +151 -0
  262. package/dist/esm/mcp/tools/rows-append.js.map +1 -0
  263. package/dist/esm/mcp/tools/rows-csv-append.d.ts +67 -0
  264. package/dist/esm/mcp/tools/rows-csv-append.js +342 -0
  265. package/dist/esm/mcp/tools/rows-csv-append.js.map +1 -0
  266. package/dist/esm/mcp/tools/rows-get.d.ts +56 -0
  267. package/dist/esm/mcp/tools/rows-get.js +116 -0
  268. package/dist/esm/mcp/tools/rows-get.js.map +1 -0
  269. package/dist/esm/mcp/tools/sheet-copy-to.d.ts +68 -0
  270. package/dist/esm/mcp/tools/sheet-copy-to.js +156 -0
  271. package/dist/esm/mcp/tools/sheet-copy-to.js.map +1 -0
  272. package/dist/esm/mcp/tools/sheet-copy.d.ts +80 -0
  273. package/dist/esm/mcp/tools/sheet-copy.js +177 -0
  274. package/dist/esm/mcp/tools/sheet-copy.js.map +1 -0
  275. package/dist/esm/mcp/tools/sheet-create.d.ts +56 -0
  276. package/dist/esm/mcp/tools/sheet-create.js +110 -0
  277. package/dist/esm/mcp/tools/sheet-create.js.map +1 -0
  278. package/dist/esm/mcp/tools/sheet-delete.d.ts +62 -0
  279. package/dist/esm/mcp/tools/sheet-delete.js +125 -0
  280. package/dist/esm/mcp/tools/sheet-delete.js.map +1 -0
  281. package/dist/esm/mcp/tools/sheet-find.d.ts +48 -0
  282. package/dist/esm/mcp/tools/sheet-find.js +90 -0
  283. package/dist/esm/mcp/tools/sheet-find.js.map +1 -0
  284. package/dist/esm/mcp/tools/sheet-rename.d.ts +60 -0
  285. package/dist/esm/mcp/tools/sheet-rename.js +128 -0
  286. package/dist/esm/mcp/tools/sheet-rename.js.map +1 -0
  287. package/dist/esm/mcp/tools/spreadsheet-copy.d.ts +58 -0
  288. package/dist/esm/mcp/tools/spreadsheet-copy.js +117 -0
  289. package/dist/esm/mcp/tools/spreadsheet-copy.js.map +1 -0
  290. package/dist/esm/mcp/tools/spreadsheet-create.d.ts +52 -0
  291. package/dist/esm/mcp/tools/spreadsheet-create.js +97 -0
  292. package/dist/esm/mcp/tools/spreadsheet-create.js.map +1 -0
  293. package/dist/esm/mcp/tools/spreadsheet-find.d.ts +58 -0
  294. package/dist/esm/mcp/tools/spreadsheet-find.js +113 -0
  295. package/dist/esm/mcp/tools/spreadsheet-find.js.map +1 -0
  296. package/dist/esm/mcp/tools/spreadsheet-rename.d.ts +56 -0
  297. package/dist/esm/mcp/tools/spreadsheet-rename.js +112 -0
  298. package/dist/esm/mcp/tools/spreadsheet-rename.js.map +1 -0
  299. package/dist/esm/mcp/tools/validation-set.d.ts +144 -0
  300. package/dist/esm/mcp/tools/validation-set.js +366 -0
  301. package/dist/esm/mcp/tools/validation-set.js.map +1 -0
  302. package/dist/esm/mcp/tools/values-batch-update.d.ts +102 -0
  303. package/dist/esm/mcp/tools/values-batch-update.js +224 -0
  304. package/dist/esm/mcp/tools/values-batch-update.js.map +1 -0
  305. package/dist/esm/mcp/tools/values-clear.d.ts +56 -0
  306. package/dist/esm/mcp/tools/values-clear.js +131 -0
  307. package/dist/esm/mcp/tools/values-clear.js.map +1 -0
  308. package/dist/esm/mcp/tools/values-csv-update.d.ts +75 -0
  309. package/dist/esm/mcp/tools/values-csv-update.js +202 -0
  310. package/dist/esm/mcp/tools/values-csv-update.js.map +1 -0
  311. package/dist/esm/mcp/tools/values-replace.d.ts +68 -0
  312. package/dist/esm/mcp/tools/values-replace.js +171 -0
  313. package/dist/esm/mcp/tools/values-replace.js.map +1 -0
  314. package/dist/esm/mcp/tools/values-search.d.ts +74 -0
  315. package/dist/esm/mcp/tools/values-search.js +229 -0
  316. package/dist/esm/mcp/tools/values-search.js.map +1 -0
  317. package/dist/esm/package.json +1 -0
  318. package/dist/esm/schemas/index.d.ts +14 -0
  319. package/dist/esm/schemas/index.js +35 -0
  320. package/dist/esm/schemas/index.js.map +1 -0
  321. package/dist/esm/setup/config.d.ts +44 -0
  322. package/dist/esm/setup/config.js +151 -0
  323. package/dist/esm/setup/config.js.map +1 -0
  324. package/dist/esm/setup/http.d.ts +8 -0
  325. package/dist/esm/setup/http.js +54 -0
  326. package/dist/esm/setup/http.js.map +1 -0
  327. package/dist/esm/setup/index.d.ts +5 -0
  328. package/dist/esm/setup/index.js +5 -0
  329. package/dist/esm/setup/index.js.map +1 -0
  330. package/dist/esm/setup/oauth-google.d.ts +54 -0
  331. package/dist/esm/setup/oauth-google.js +142 -0
  332. package/dist/esm/setup/oauth-google.js.map +1 -0
  333. package/dist/esm/setup/runtime.d.ts +10 -0
  334. package/dist/esm/setup/runtime.js +84 -0
  335. package/dist/esm/setup/runtime.js.map +1 -0
  336. package/dist/esm/setup/stdio.d.ts +7 -0
  337. package/dist/esm/setup/stdio.js +38 -0
  338. package/dist/esm/setup/stdio.js.map +1 -0
  339. package/dist/esm/spreadsheet/column-utilities.d.ts +1 -0
  340. package/dist/esm/spreadsheet/column-utilities.js +10 -0
  341. package/dist/esm/spreadsheet/column-utilities.js.map +1 -0
  342. package/dist/esm/spreadsheet/csv-streaming.d.ts +19 -0
  343. package/dist/esm/spreadsheet/csv-streaming.js +43 -0
  344. package/dist/esm/spreadsheet/csv-streaming.js.map +1 -0
  345. package/dist/esm/spreadsheet/data-operations.d.ts +115 -0
  346. package/dist/esm/spreadsheet/data-operations.js +712 -0
  347. package/dist/esm/spreadsheet/data-operations.js.map +1 -0
  348. package/dist/esm/spreadsheet/deduplication-utils.d.ts +31 -0
  349. package/dist/esm/spreadsheet/deduplication-utils.js +54 -0
  350. package/dist/esm/spreadsheet/deduplication-utils.js.map +1 -0
  351. package/dist/esm/spreadsheet/range-operations.d.ts +184 -0
  352. package/dist/esm/spreadsheet/range-operations.js +591 -0
  353. package/dist/esm/spreadsheet/range-operations.js.map +1 -0
  354. package/dist/esm/spreadsheet/sheet-operations.d.ts +30 -0
  355. package/dist/esm/spreadsheet/sheet-operations.js +359 -0
  356. package/dist/esm/spreadsheet/sheet-operations.js.map +1 -0
  357. package/dist/esm/spreadsheet/spreadsheet-management.d.ts +21 -0
  358. package/dist/esm/spreadsheet/spreadsheet-management.js +73 -0
  359. package/dist/esm/spreadsheet/spreadsheet-management.js.map +1 -0
  360. package/dist/esm/types.d.ts +53 -0
  361. package/dist/esm/types.js +1 -0
  362. package/dist/esm/types.js.map +1 -0
  363. 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,2 @@
1
+ import type { ResourceModule } from '@mcp-z/server';
2
+ export default function createResource(): ResourceModule;
@@ -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":"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"}
@@ -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
+ }