@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,859 @@
1
+ /** Import CSV data to Google Sheets with database-style row append and deduplication */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createTool;
9
+ }
10
+ });
11
+ var _oauthgoogle = require("@mcp-z/oauth-google");
12
+ var _types = require("@modelcontextprotocol/sdk/types.js");
13
+ var _csvparse = require("csv-parse");
14
+ var _googleapis = require("googleapis");
15
+ var _zod = require("zod");
16
+ var _index = require("../../schemas/index.js");
17
+ var _csvstreaming = require("../../spreadsheet/csv-streaming.js");
18
+ var _deduplicationutils = require("../../spreadsheet/deduplication-utils.js");
19
+ var _sheetoperations = require("../../spreadsheet/sheet-operations.js");
20
+ function _array_like_to_array(arr, len) {
21
+ if (len == null || len > arr.length) len = arr.length;
22
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
23
+ return arr2;
24
+ }
25
+ function _array_without_holes(arr) {
26
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
27
+ }
28
+ function _async_iterator(iterable) {
29
+ var method, async, sync, retry = 2;
30
+ for("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;){
31
+ if (async && null != (method = iterable[async])) return method.call(iterable);
32
+ if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
33
+ async = "@@asyncIterator", sync = "@@iterator";
34
+ }
35
+ throw new TypeError("Object is not async iterable");
36
+ }
37
+ function AsyncFromSyncIterator(s) {
38
+ function AsyncFromSyncIteratorContinuation(r) {
39
+ if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
40
+ var done = r.done;
41
+ return Promise.resolve(r.value).then(function(value) {
42
+ return {
43
+ value: value,
44
+ done: done
45
+ };
46
+ });
47
+ }
48
+ return AsyncFromSyncIterator = function(s) {
49
+ this.s = s, this.n = s.next;
50
+ }, AsyncFromSyncIterator.prototype = {
51
+ s: null,
52
+ n: null,
53
+ next: function() {
54
+ return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
55
+ },
56
+ return: function(value) {
57
+ var ret = this.s.return;
58
+ return void 0 === ret ? Promise.resolve({
59
+ value: value,
60
+ done: !0
61
+ }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
62
+ },
63
+ throw: function(value) {
64
+ var thr = this.s.return;
65
+ return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
66
+ }
67
+ }, new AsyncFromSyncIterator(s);
68
+ }
69
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
70
+ try {
71
+ var info = gen[key](arg);
72
+ var value = info.value;
73
+ } catch (error) {
74
+ reject(error);
75
+ return;
76
+ }
77
+ if (info.done) {
78
+ resolve(value);
79
+ } else {
80
+ Promise.resolve(value).then(_next, _throw);
81
+ }
82
+ }
83
+ function _async_to_generator(fn) {
84
+ return function() {
85
+ var self = this, args = arguments;
86
+ return new Promise(function(resolve, reject) {
87
+ var gen = fn.apply(self, args);
88
+ function _next(value) {
89
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
90
+ }
91
+ function _throw(err) {
92
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
93
+ }
94
+ _next(undefined);
95
+ });
96
+ };
97
+ }
98
+ function _instanceof(left, right) {
99
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
100
+ return !!right[Symbol.hasInstance](left);
101
+ } else {
102
+ return left instanceof right;
103
+ }
104
+ }
105
+ function _iterable_to_array(iter) {
106
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
107
+ }
108
+ function _non_iterable_spread() {
109
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
110
+ }
111
+ function _to_consumable_array(arr) {
112
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
113
+ }
114
+ function _unsupported_iterable_to_array(o, minLen) {
115
+ if (!o) return;
116
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
117
+ var n = Object.prototype.toString.call(o).slice(8, -1);
118
+ if (n === "Object" && o.constructor) n = o.constructor.name;
119
+ if (n === "Map" || n === "Set") return Array.from(n);
120
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
121
+ }
122
+ function _ts_generator(thisArg, body) {
123
+ var f, y, t, _ = {
124
+ label: 0,
125
+ sent: function() {
126
+ if (t[0] & 1) throw t[1];
127
+ return t[1];
128
+ },
129
+ trys: [],
130
+ ops: []
131
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
132
+ return d(g, "next", {
133
+ value: verb(0)
134
+ }), d(g, "throw", {
135
+ value: verb(1)
136
+ }), d(g, "return", {
137
+ value: verb(2)
138
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
139
+ value: function() {
140
+ return this;
141
+ }
142
+ }), g;
143
+ function verb(n) {
144
+ return function(v) {
145
+ return step([
146
+ n,
147
+ v
148
+ ]);
149
+ };
150
+ }
151
+ function step(op) {
152
+ if (f) throw new TypeError("Generator is already executing.");
153
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
154
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
155
+ if (y = 0, t) op = [
156
+ op[0] & 2,
157
+ t.value
158
+ ];
159
+ switch(op[0]){
160
+ case 0:
161
+ case 1:
162
+ t = op;
163
+ break;
164
+ case 4:
165
+ _.label++;
166
+ return {
167
+ value: op[1],
168
+ done: false
169
+ };
170
+ case 5:
171
+ _.label++;
172
+ y = op[1];
173
+ op = [
174
+ 0
175
+ ];
176
+ continue;
177
+ case 7:
178
+ op = _.ops.pop();
179
+ _.trys.pop();
180
+ continue;
181
+ default:
182
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
183
+ _ = 0;
184
+ continue;
185
+ }
186
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
187
+ _.label = op[1];
188
+ break;
189
+ }
190
+ if (op[0] === 6 && _.label < t[1]) {
191
+ _.label = t[1];
192
+ t = op;
193
+ break;
194
+ }
195
+ if (t && _.label < t[2]) {
196
+ _.label = t[2];
197
+ _.ops.push(op);
198
+ break;
199
+ }
200
+ if (t[2]) _.ops.pop();
201
+ _.trys.pop();
202
+ continue;
203
+ }
204
+ op = body.call(thisArg, _);
205
+ } catch (e) {
206
+ op = [
207
+ 6,
208
+ e
209
+ ];
210
+ y = 0;
211
+ } finally{
212
+ f = t = 0;
213
+ }
214
+ if (op[0] & 5) throw op[1];
215
+ return {
216
+ value: op[0] ? op[1] : void 0,
217
+ done: true
218
+ };
219
+ }
220
+ }
221
+ function _ts_values(o) {
222
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
223
+ if (m) return m.call(o);
224
+ if (o && typeof o.length === "number") return {
225
+ next: function() {
226
+ if (o && i >= o.length) o = void 0;
227
+ return {
228
+ value: o && o[i++],
229
+ done: !o
230
+ };
231
+ }
232
+ };
233
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
234
+ }
235
+ var AuthRequiredBranchSchema = _oauthgoogle.schemas.AuthRequiredBranchSchema;
236
+ // Header mapping schema: source/target can be string (name) or number (0-based index)
237
+ var HeaderMapItemSchema = _zod.z.object({
238
+ source: _zod.z.union([
239
+ _zod.z.string(),
240
+ _zod.z.number().int().min(0)
241
+ ]).describe('CSV column: header name (string) or 0-based index (number)'),
242
+ target: _zod.z.union([
243
+ _zod.z.string(),
244
+ _zod.z.number().int().min(0)
245
+ ]).describe('Sheet column: header name (string) or 0-based index (number)')
246
+ });
247
+ var inputSchema = _zod.z.object({
248
+ id: _index.SpreadsheetIdSchema,
249
+ gid: _index.SheetGidSchema,
250
+ sourceUri: _zod.z.string().trim().min(1).describe('CSV file URI (file://, http://, https://)'),
251
+ sourceHasHeaders: _zod.z.boolean().default(true).describe('Source has header row for column name mapping. Set to false for data-only sources (numeric indices required).'),
252
+ headerMap: _zod.z.array(HeaderMapItemSchema).describe('Column mappings from CSV to sheet'),
253
+ deduplicateBy: _zod.z.array(_zod.z.union([
254
+ _zod.z.string(),
255
+ _zod.z.number().int().min(0)
256
+ ])).optional().describe('Sheet columns for deduplication (names or indices)')
257
+ });
258
+ var successBranchSchema = _zod.z.object({
259
+ type: _zod.z.literal('success'),
260
+ id: _index.SpreadsheetIdOutput,
261
+ gid: _index.SheetGidOutput,
262
+ sheetTitle: _zod.z.string().describe('Sheet tab name'),
263
+ updatedRows: _zod.z.number().describe('Number of rows appended'),
264
+ rowsSkipped: _zod.z.number().optional().describe('Number of duplicate rows skipped'),
265
+ sheetUrl: _zod.z.string().optional().describe('URL to view the sheet')
266
+ });
267
+ var outputSchema = _zod.z.discriminatedUnion('type', [
268
+ successBranchSchema,
269
+ AuthRequiredBranchSchema
270
+ ]);
271
+ var config = {
272
+ description: 'Import CSV to Google Sheets with column mapping and optional deduplication. Streams data for large files.',
273
+ inputSchema: inputSchema,
274
+ outputSchema: _zod.z.object({
275
+ result: outputSchema
276
+ })
277
+ };
278
+ /** Batch size for Sheets API calls (1000 rows × 12 cols = 12K cells, well under 40K limit) */ var BATCH_SIZE = 1000;
279
+ /**
280
+ * Resolve column reference to numeric index
281
+ * @param ref Column reference (string name or number index)
282
+ * @param headers Header row (null when sourceHasHeaders=false)
283
+ * @param sourceHasHeaders Whether headers are present
284
+ * @returns 0-based column index
285
+ */ function resolveColumnReference(ref, headers, sourceHasHeaders, context) {
286
+ // If number, use directly as 0-based index
287
+ if (typeof ref === 'number') {
288
+ if (ref < 0) {
289
+ throw new Error("".concat(context, ": Column index must be >= 0, got ").concat(ref));
290
+ }
291
+ return ref;
292
+ }
293
+ // If string, must be header name
294
+ if (!sourceHasHeaders || !headers) {
295
+ throw new Error("".concat(context, ': String column reference "').concat(ref, '" requires sourceHasHeaders=true. Use numeric index when sourceHasHeaders=false.'));
296
+ }
297
+ var index = headers.indexOf(ref);
298
+ if (index === -1) {
299
+ throw new Error("".concat(context, ': Header "').concat(ref, '" not found in [').concat(headers.join(', '), "]"));
300
+ }
301
+ return index;
302
+ }
303
+ function handler(_0, _1) {
304
+ return _async_to_generator(function(param, extra) {
305
+ var id, gid, sourceUri, sourceHasHeaders, headerMap, deduplicateBy, logger, _ref, _spreadsheetResponse_data_sheets, _sheet_properties, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, source, target, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, colRef, sheets, spreadsheetResponse, sheet, sheetTitle, sheetHeaders, existingKeySet, keyColumns, targetHeaderNames, headerResult, CHUNK_SIZE, startRow, hasMore, endRow, chunkRange, response, rows, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, row, key, sourceHeaders, batch, totalRows, rowsSkipped, readStream, parser, appendBatch, resolvedMap, _iteratorAbruptCompletion, _didIteratorError3, _iteratorError3, _loop, _iterator3, _step3, err, updatedRows, result, error, message;
306
+ return _ts_generator(this, function(_state) {
307
+ switch(_state.label){
308
+ case 0:
309
+ id = param.id, gid = param.gid, sourceUri = param.sourceUri, sourceHasHeaders = param.sourceHasHeaders, headerMap = param.headerMap, deduplicateBy = param.deduplicateBy;
310
+ logger = extra.logger;
311
+ logger.info('sheets.rows.csv-append called', {
312
+ id: id,
313
+ gid: gid,
314
+ sourceUri: sourceUri,
315
+ sourceHasHeaders: sourceHasHeaders,
316
+ headerMap: headerMap,
317
+ deduplicateBy: deduplicateBy
318
+ });
319
+ _state.label = 1;
320
+ case 1:
321
+ _state.trys.push([
322
+ 1,
323
+ 25,
324
+ ,
325
+ 26
326
+ ]);
327
+ if (headerMap.length === 0) {
328
+ throw new _types.McpError(_types.ErrorCode.InvalidParams, 'headerMap cannot be empty');
329
+ }
330
+ // Validate: if sourceHasHeaders=false, all references must be numeric
331
+ if (!sourceHasHeaders) {
332
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
333
+ try {
334
+ for(_iterator = headerMap[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
335
+ _step_value = _step.value, source = _step_value.source, target = _step_value.target;
336
+ if (typeof source === 'string') {
337
+ throw new _types.McpError(_types.ErrorCode.InvalidParams, 'sourceHasHeaders=false requires numeric indices. Got string source: "'.concat(source, '"'));
338
+ }
339
+ if (typeof target === 'string') {
340
+ throw new _types.McpError(_types.ErrorCode.InvalidParams, 'sourceHasHeaders=false requires numeric indices. Got string target: "'.concat(target, '"'));
341
+ }
342
+ }
343
+ } catch (err) {
344
+ _didIteratorError = true;
345
+ _iteratorError = err;
346
+ } finally{
347
+ try {
348
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
349
+ _iterator.return();
350
+ }
351
+ } finally{
352
+ if (_didIteratorError) {
353
+ throw _iteratorError;
354
+ }
355
+ }
356
+ }
357
+ if (deduplicateBy) {
358
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
359
+ try {
360
+ for(_iterator1 = deduplicateBy[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
361
+ colRef = _step1.value;
362
+ if (typeof colRef === 'string') {
363
+ throw new _types.McpError(_types.ErrorCode.InvalidParams, 'sourceHasHeaders=false requires numeric indices in deduplicateBy. Got string: "'.concat(colRef, '"'));
364
+ }
365
+ }
366
+ } catch (err) {
367
+ _didIteratorError1 = true;
368
+ _iteratorError1 = err;
369
+ } finally{
370
+ try {
371
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
372
+ _iterator1.return();
373
+ }
374
+ } finally{
375
+ if (_didIteratorError1) {
376
+ throw _iteratorError1;
377
+ }
378
+ }
379
+ }
380
+ }
381
+ }
382
+ sheets = _googleapis.google.sheets({
383
+ version: 'v4',
384
+ auth: extra.authContext.auth
385
+ });
386
+ return [
387
+ 4,
388
+ sheets.spreadsheets.get({
389
+ spreadsheetId: id,
390
+ fields: 'sheets.properties.sheetId,sheets.properties.title'
391
+ })
392
+ ];
393
+ case 2:
394
+ spreadsheetResponse = _state.sent();
395
+ sheet = (_spreadsheetResponse_data_sheets = spreadsheetResponse.data.sheets) === null || _spreadsheetResponse_data_sheets === void 0 ? void 0 : _spreadsheetResponse_data_sheets.find(function(s) {
396
+ var _s_properties;
397
+ return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
398
+ });
399
+ if (!sheet) {
400
+ throw new _types.McpError(_types.ErrorCode.InvalidParams, 'Sheet not found');
401
+ }
402
+ sheetTitle = (_ref = sheet === null || sheet === void 0 ? void 0 : (_sheet_properties = sheet.properties) === null || _sheet_properties === void 0 ? void 0 : _sheet_properties.title) !== null && _ref !== void 0 ? _ref : '';
403
+ // Determine target headers (for sourceHasHeaders=true) or column count (for sourceHasHeaders=false)
404
+ sheetHeaders = null;
405
+ existingKeySet = new Set();
406
+ keyColumns = deduplicateBy || [];
407
+ if (!sourceHasHeaders) return [
408
+ 3,
409
+ 4
410
+ ];
411
+ // Extract target header names from headerMap
412
+ targetHeaderNames = headerMap.map(function(param) {
413
+ var target = param.target;
414
+ return target;
415
+ }).filter(function(t) {
416
+ return typeof t === 'string';
417
+ });
418
+ return [
419
+ 4,
420
+ (0, _sheetoperations.ensureTabAndHeaders)(sheets, {
421
+ spreadsheetId: id,
422
+ sheetTitle: sheetTitle,
423
+ requiredHeader: targetHeaderNames.length > 0 ? targetHeaderNames : null,
424
+ keyColumns: keyColumns.filter(function(k) {
425
+ return typeof k === 'string';
426
+ }),
427
+ logger: logger
428
+ })
429
+ ];
430
+ case 3:
431
+ headerResult = _state.sent();
432
+ sheetHeaders = headerResult.header;
433
+ existingKeySet = headerResult.keySet;
434
+ return [
435
+ 3,
436
+ 8
437
+ ];
438
+ case 4:
439
+ if (!(deduplicateBy && deduplicateBy.length > 0)) return [
440
+ 3,
441
+ 8
442
+ ];
443
+ // Read data in chunks for memory efficiency with large sheets
444
+ CHUNK_SIZE = 1000;
445
+ startRow = 1;
446
+ hasMore = true;
447
+ _state.label = 5;
448
+ case 5:
449
+ if (!hasMore) return [
450
+ 3,
451
+ 7
452
+ ];
453
+ endRow = startRow + CHUNK_SIZE - 1;
454
+ chunkRange = "".concat(sheetTitle, "!A").concat(startRow, ":ZZZ").concat(endRow);
455
+ return [
456
+ 4,
457
+ sheets.spreadsheets.values.get({
458
+ spreadsheetId: id,
459
+ range: chunkRange
460
+ })
461
+ ];
462
+ case 6:
463
+ response = _state.sent();
464
+ rows = response.data.values || [];
465
+ _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
466
+ try {
467
+ for(_iterator2 = rows[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
468
+ row = _step2.value;
469
+ key = (0, _deduplicationutils.buildDeduplicationKey)(row, keyColumns, null, false);
470
+ if (key.replace(/::/g, '') !== '') {
471
+ existingKeySet.add(key);
472
+ }
473
+ }
474
+ } catch (err) {
475
+ _didIteratorError2 = true;
476
+ _iteratorError2 = err;
477
+ } finally{
478
+ try {
479
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
480
+ _iterator2.return();
481
+ }
482
+ } finally{
483
+ if (_didIteratorError2) {
484
+ throw _iteratorError2;
485
+ }
486
+ }
487
+ }
488
+ // Check if there are more rows to read
489
+ if (rows.length < CHUNK_SIZE) {
490
+ hasMore = false;
491
+ } else {
492
+ startRow += CHUNK_SIZE;
493
+ }
494
+ return [
495
+ 3,
496
+ 5
497
+ ];
498
+ case 7:
499
+ logger.info('sheets.rows.csv-append existing keys loaded', {
500
+ keyCount: existingKeySet.size
501
+ });
502
+ _state.label = 8;
503
+ case 8:
504
+ // Streaming CSV processing state
505
+ sourceHeaders = null;
506
+ batch = [];
507
+ totalRows = 0;
508
+ rowsSkipped = 0;
509
+ return [
510
+ 4,
511
+ (0, _csvstreaming.getCsvReadStream)(sourceUri)
512
+ ];
513
+ case 9:
514
+ readStream = _state.sent();
515
+ // Create CSV parser
516
+ parser = readStream.pipe((0, _csvparse.parse)({
517
+ columns: !!sourceHasHeaders,
518
+ skip_empty_lines: true,
519
+ trim: true,
520
+ cast: true,
521
+ relax_column_count: true
522
+ }));
523
+ // Helper to append batch to Sheets
524
+ appendBatch = function(rows) {
525
+ return _async_to_generator(function() {
526
+ return _ts_generator(this, function(_state) {
527
+ switch(_state.label){
528
+ case 0:
529
+ if (rows.length === 0) return [
530
+ 2
531
+ ];
532
+ return [
533
+ 4,
534
+ sheets.spreadsheets.values.append({
535
+ spreadsheetId: id,
536
+ range: "".concat(sheetTitle, "!A:A"),
537
+ valueInputOption: 'USER_ENTERED',
538
+ requestBody: {
539
+ values: rows,
540
+ majorDimension: 'ROWS'
541
+ }
542
+ })
543
+ ];
544
+ case 1:
545
+ _state.sent();
546
+ logger.info('sheets.rows.csv-append batch appended', {
547
+ batchSize: rows.length,
548
+ totalRows: totalRows
549
+ });
550
+ return [
551
+ 2
552
+ ];
553
+ }
554
+ });
555
+ })();
556
+ };
557
+ // Resolve headerMap to numeric indices (do this after extracting CSV headers)
558
+ resolvedMap = [];
559
+ _iteratorAbruptCompletion = false, _didIteratorError3 = false;
560
+ _state.label = 10;
561
+ case 10:
562
+ _state.trys.push([
563
+ 10,
564
+ 16,
565
+ 17,
566
+ 22
567
+ ]);
568
+ _loop = function() {
569
+ var _value, record, _Math, sourceRow, maxTargetIdx, sheetRow, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, sourceIdx, targetIdx, _sourceRow_sourceIdx, key, _Math1, sourceRow1, maxTargetIdx1, sheetRow1, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, sourceIdx1, targetIdx1, _sourceRow_sourceIdx1, key1;
570
+ return _ts_generator(this, function(_state) {
571
+ switch(_state.label){
572
+ case 0:
573
+ _value = _step3.value;
574
+ record = _value;
575
+ if (sourceHasHeaders) {
576
+ ;
577
+ // Extract source headers from first record
578
+ if (sourceHeaders === null) {
579
+ sourceHeaders = Object.keys(record);
580
+ logger.info('sheets.rows.csv-append source headers', {
581
+ sourceHeaders: sourceHeaders
582
+ });
583
+ // Resolve headerMap now that we have both source and sheet headers
584
+ resolvedMap = headerMap.map(function(param) {
585
+ var source = param.source, target = param.target;
586
+ return {
587
+ sourceIdx: resolveColumnReference(source, sourceHeaders, sourceHasHeaders, 'headerMap.source'),
588
+ targetIdx: resolveColumnReference(target, sheetHeaders, sourceHasHeaders, 'headerMap.target')
589
+ };
590
+ });
591
+ }
592
+ // Map source record to sheet row
593
+ sourceRow = sourceHeaders === null || sourceHeaders === void 0 ? void 0 : sourceHeaders.map(function(h) {
594
+ var _record_h;
595
+ return (_record_h = record[h]) !== null && _record_h !== void 0 ? _record_h : null;
596
+ });
597
+ maxTargetIdx = (_Math = Math).max.apply(_Math, _to_consumable_array(resolvedMap.map(function(m) {
598
+ return m.targetIdx;
599
+ })));
600
+ sheetRow = new Array(maxTargetIdx + 1).fill(null);
601
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
602
+ try {
603
+ for(_iterator = resolvedMap[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
604
+ _step_value = _step.value, sourceIdx = _step_value.sourceIdx, targetIdx = _step_value.targetIdx;
605
+ if (sourceRow) {
606
+ ;
607
+ sheetRow[targetIdx] = (_sourceRow_sourceIdx = sourceRow[sourceIdx]) !== null && _sourceRow_sourceIdx !== void 0 ? _sourceRow_sourceIdx : null;
608
+ }
609
+ }
610
+ } catch (err) {
611
+ _didIteratorError = true;
612
+ _iteratorError = err;
613
+ } finally{
614
+ try {
615
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
616
+ _iterator.return();
617
+ }
618
+ } finally{
619
+ if (_didIteratorError) {
620
+ throw _iteratorError;
621
+ }
622
+ }
623
+ }
624
+ // Check deduplication
625
+ if (deduplicateBy && deduplicateBy.length > 0) {
626
+ key = (0, _deduplicationutils.buildDeduplicationKey)(sheetRow, keyColumns, sheetHeaders, sourceHasHeaders);
627
+ if (existingKeySet.has(key)) {
628
+ rowsSkipped++;
629
+ return [
630
+ 2,
631
+ "continue" // Skip duplicate
632
+ ];
633
+ }
634
+ existingKeySet.add(key); // Add to set for future deduplication
635
+ }
636
+ // Add to batch
637
+ batch.push(sheetRow);
638
+ totalRows++;
639
+ } else {
640
+ ;
641
+ // sourceHasHeaders=false: record is an array (not an object)
642
+ // Resolve map on first row
643
+ if (resolvedMap.length === 0) {
644
+ resolvedMap = headerMap.map(function(param) {
645
+ var source = param.source, target = param.target;
646
+ return {
647
+ sourceIdx: resolveColumnReference(source, null, sourceHasHeaders, 'headerMap.source'),
648
+ targetIdx: resolveColumnReference(target, null, sourceHasHeaders, 'headerMap.target')
649
+ };
650
+ });
651
+ }
652
+ sourceRow1 = record;
653
+ maxTargetIdx1 = (_Math1 = Math).max.apply(_Math1, _to_consumable_array(resolvedMap.map(function(m) {
654
+ return m.targetIdx;
655
+ })));
656
+ sheetRow1 = new Array(maxTargetIdx1 + 1).fill(null);
657
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
658
+ try {
659
+ for(_iterator1 = resolvedMap[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
660
+ _step_value1 = _step1.value, sourceIdx1 = _step_value1.sourceIdx, targetIdx1 = _step_value1.targetIdx;
661
+ if (sourceIdx1 < sourceRow1.length) {
662
+ ;
663
+ sheetRow1[targetIdx1] = (_sourceRow_sourceIdx1 = sourceRow1[sourceIdx1]) !== null && _sourceRow_sourceIdx1 !== void 0 ? _sourceRow_sourceIdx1 : null;
664
+ }
665
+ }
666
+ } catch (err) {
667
+ _didIteratorError1 = true;
668
+ _iteratorError1 = err;
669
+ } finally{
670
+ try {
671
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
672
+ _iterator1.return();
673
+ }
674
+ } finally{
675
+ if (_didIteratorError1) {
676
+ throw _iteratorError1;
677
+ }
678
+ }
679
+ }
680
+ // Check deduplication
681
+ if (deduplicateBy && deduplicateBy.length > 0) {
682
+ key1 = (0, _deduplicationutils.buildDeduplicationKey)(sheetRow1, keyColumns, null, sourceHasHeaders);
683
+ if (existingKeySet.has(key1)) {
684
+ rowsSkipped++;
685
+ return [
686
+ 2,
687
+ "continue" // Skip duplicate
688
+ ];
689
+ }
690
+ existingKeySet.add(key1);
691
+ }
692
+ // Add to batch
693
+ batch.push(sheetRow1);
694
+ totalRows++;
695
+ }
696
+ if (!(batch.length >= BATCH_SIZE)) return [
697
+ 3,
698
+ 2
699
+ ];
700
+ return [
701
+ 4,
702
+ appendBatch(batch)
703
+ ];
704
+ case 1:
705
+ _state.sent();
706
+ batch = []; // Clear batch
707
+ _state.label = 2;
708
+ case 2:
709
+ return [
710
+ 2
711
+ ];
712
+ }
713
+ });
714
+ };
715
+ _iterator3 = _async_iterator(parser);
716
+ _state.label = 11;
717
+ case 11:
718
+ return [
719
+ 4,
720
+ _iterator3.next()
721
+ ];
722
+ case 12:
723
+ if (!(_iteratorAbruptCompletion = !(_step3 = _state.sent()).done)) return [
724
+ 3,
725
+ 15
726
+ ];
727
+ return [
728
+ 5,
729
+ _ts_values(_loop())
730
+ ];
731
+ case 13:
732
+ _state.sent();
733
+ _state.label = 14;
734
+ case 14:
735
+ _iteratorAbruptCompletion = false;
736
+ return [
737
+ 3,
738
+ 11
739
+ ];
740
+ case 15:
741
+ return [
742
+ 3,
743
+ 22
744
+ ];
745
+ case 16:
746
+ err = _state.sent();
747
+ _didIteratorError3 = true;
748
+ _iteratorError3 = err;
749
+ return [
750
+ 3,
751
+ 22
752
+ ];
753
+ case 17:
754
+ _state.trys.push([
755
+ 17,
756
+ ,
757
+ 20,
758
+ 21
759
+ ]);
760
+ if (!(_iteratorAbruptCompletion && _iterator3.return != null)) return [
761
+ 3,
762
+ 19
763
+ ];
764
+ return [
765
+ 4,
766
+ _iterator3.return()
767
+ ];
768
+ case 18:
769
+ _state.sent();
770
+ _state.label = 19;
771
+ case 19:
772
+ return [
773
+ 3,
774
+ 21
775
+ ];
776
+ case 20:
777
+ if (_didIteratorError3) {
778
+ throw _iteratorError3;
779
+ }
780
+ return [
781
+ 7
782
+ ];
783
+ case 21:
784
+ return [
785
+ 7
786
+ ];
787
+ case 22:
788
+ if (!(batch.length > 0)) return [
789
+ 3,
790
+ 24
791
+ ];
792
+ return [
793
+ 4,
794
+ appendBatch(batch)
795
+ ];
796
+ case 23:
797
+ _state.sent();
798
+ _state.label = 24;
799
+ case 24:
800
+ logger.info('sheets.rows.csv-append streaming complete', {
801
+ totalRows: totalRows,
802
+ rowsSkipped: rowsSkipped
803
+ });
804
+ updatedRows = totalRows;
805
+ logger.info('sheets.rows.csv-append completed', {
806
+ id: id,
807
+ gid: gid,
808
+ updatedRows: updatedRows,
809
+ rowsSkipped: rowsSkipped,
810
+ sourceUri: sourceUri
811
+ });
812
+ result = {
813
+ type: 'success',
814
+ id: id,
815
+ gid: gid,
816
+ sheetTitle: sheetTitle,
817
+ updatedRows: updatedRows,
818
+ rowsSkipped: rowsSkipped,
819
+ sheetUrl: "https://docs.google.com/spreadsheets/d/".concat(id, "/edit#gid=").concat(gid)
820
+ };
821
+ return [
822
+ 2,
823
+ {
824
+ content: [
825
+ {
826
+ type: 'text',
827
+ text: JSON.stringify(result)
828
+ }
829
+ ],
830
+ structuredContent: {
831
+ result: result
832
+ }
833
+ }
834
+ ];
835
+ case 25:
836
+ error = _state.sent();
837
+ message = _instanceof(error, Error) ? error.message : String(error);
838
+ logger.error('sheets.rows.csv-append error', {
839
+ error: message
840
+ });
841
+ throw new _types.McpError(_types.ErrorCode.InternalError, "Error appending CSV rows: ".concat(message), {
842
+ stack: _instanceof(error, Error) ? error.stack : undefined
843
+ });
844
+ case 26:
845
+ return [
846
+ 2
847
+ ];
848
+ }
849
+ });
850
+ }).apply(this, arguments);
851
+ }
852
+ function createTool() {
853
+ return {
854
+ name: 'rows-csv-append',
855
+ config: config,
856
+ handler: handler
857
+ };
858
+ }
859
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }