@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,229 @@
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 { SheetCellSchema, SheetGidSchema, SpreadsheetIdSchema } from '../../schemas/index.js';
7
+ // Helper to convert column index to letter (0 = A, 1 = B, etc.)
8
+ function columnIndexToLetter(index) {
9
+ let letter = '';
10
+ let num = index + 1;
11
+ while(num > 0){
12
+ const remainder = (num - 1) % 26;
13
+ letter = String.fromCharCode(65 + remainder) + letter;
14
+ num = Math.floor((num - 1) / 26);
15
+ }
16
+ return letter;
17
+ }
18
+ const inputSchema = z.object({
19
+ id: SpreadsheetIdSchema,
20
+ gid: SheetGidSchema,
21
+ query: z.coerce.string().trim().optional().describe('Text to search for in sheet cells. If empty, returns all data at specified granularity.'),
22
+ select: z.enum([
23
+ 'cells',
24
+ 'rows',
25
+ 'columns'
26
+ ]).describe('Granularity: cells (individual matches), rows (full matching rows), columns (columns with matching headers)'),
27
+ values: z.boolean().optional().describe('Include cell values in response'),
28
+ a1s: z.boolean().optional().describe('Include A1 notation references in response'),
29
+ render: z.enum([
30
+ 'FORMATTED_VALUE',
31
+ 'UNFORMATTED_VALUE',
32
+ 'FORMULA'
33
+ ]).optional().describe('How to render cell values. FORMATTED_VALUE (default): calculated with formatting. UNFORMATTED_VALUE: calculated without formatting. FORMULA: show formula text instead of result.'),
34
+ matchCase: z.boolean().optional().describe('Case-sensitive matching. Default is false (case-insensitive).')
35
+ });
36
+ const successBranchSchema = z.object({
37
+ type: z.literal('success'),
38
+ count: z.number().int().nonnegative().describe('Number of matches found'),
39
+ a1s: z.array(z.string()).optional().describe('A1 notation references for matches (e.g., "B5", "A5:D5", "B:B")'),
40
+ values: z.array(z.union([
41
+ z.array(SheetCellSchema),
42
+ SheetCellSchema
43
+ ])).optional().describe('Cell values for matches (arrays for rows/columns, single values for cells)')
44
+ });
45
+ const outputSchema = z.discriminatedUnion('type', [
46
+ successBranchSchema,
47
+ AuthRequiredBranchSchema
48
+ ]);
49
+ const config = {
50
+ description: 'Search spreadsheet and return matches at cell, row, or column granularity. Use a1-notation prompt for range syntax.',
51
+ inputSchema,
52
+ outputSchema: z.object({
53
+ result: outputSchema
54
+ })
55
+ };
56
+ async function handler({ id, gid, query, select, values = false, a1s = false, render, matchCase = false }, extra) {
57
+ const logger = extra.logger;
58
+ logger.info('sheets.values-search called', {
59
+ id,
60
+ gid,
61
+ query,
62
+ select,
63
+ values,
64
+ a1s,
65
+ render,
66
+ matchCase
67
+ });
68
+ try {
69
+ var _ref, _ref1, _ref2;
70
+ var _spreadsheetResponse_data_sheets, _sheet_properties, _sheet_properties_gridProperties, _sheet_properties1, _sheet_properties_gridProperties1, _sheet_properties2, _logger_debug;
71
+ const sheets = google.sheets({
72
+ version: 'v4',
73
+ auth: extra.authContext.auth
74
+ });
75
+ // Get sheet details including grid dimensions
76
+ const spreadsheetResponse = await sheets.spreadsheets.get({
77
+ spreadsheetId: id,
78
+ fields: 'sheets.properties.sheetId,sheets.properties.title,sheets.properties.gridProperties'
79
+ });
80
+ const sheet = (_spreadsheetResponse_data_sheets = spreadsheetResponse.data.sheets) === null || _spreadsheetResponse_data_sheets === void 0 ? void 0 : _spreadsheetResponse_data_sheets.find((s)=>{
81
+ var _s_properties;
82
+ return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
83
+ });
84
+ if (!sheet) {
85
+ logger.info('sheets.values-search sheet not found', {
86
+ id,
87
+ gid,
88
+ query
89
+ });
90
+ throw new McpError(ErrorCode.InvalidParams, 'Sheet not found');
91
+ }
92
+ const sheetTitle = (_ref = (_sheet_properties = sheet.properties) === null || _sheet_properties === void 0 ? void 0 : _sheet_properties.title) !== null && _ref !== void 0 ? _ref : '';
93
+ // Use actual sheet dimensions from gridProperties, with sensible defaults
94
+ // Google Sheets default for new sheets is 1000 rows x 26 columns
95
+ const rowCount = (_ref1 = (_sheet_properties1 = sheet.properties) === null || _sheet_properties1 === void 0 ? void 0 : (_sheet_properties_gridProperties = _sheet_properties1.gridProperties) === null || _sheet_properties_gridProperties === void 0 ? void 0 : _sheet_properties_gridProperties.rowCount) !== null && _ref1 !== void 0 ? _ref1 : 1000;
96
+ const columnCount = (_ref2 = (_sheet_properties2 = sheet.properties) === null || _sheet_properties2 === void 0 ? void 0 : (_sheet_properties_gridProperties1 = _sheet_properties2.gridProperties) === null || _sheet_properties_gridProperties1 === void 0 ? void 0 : _sheet_properties_gridProperties1.columnCount) !== null && _ref2 !== void 0 ? _ref2 : 26;
97
+ const endColumn = columnIndexToLetter(columnCount - 1);
98
+ const fullRange = `${sheetTitle}!A1:${endColumn}${rowCount}`;
99
+ (_logger_debug = logger.debug) === null || _logger_debug === void 0 ? void 0 : _logger_debug.call(logger, 'sheets.values-search fetching range', {
100
+ fullRange,
101
+ rowCount,
102
+ columnCount
103
+ });
104
+ const response = await sheets.spreadsheets.values.get({
105
+ spreadsheetId: id,
106
+ range: fullRange,
107
+ valueRenderOption: render || 'FORMATTED_VALUE'
108
+ });
109
+ const res = response.data;
110
+ const allRows = Array.isArray(res.values) ? res.values : [];
111
+ // Prepare query for matching (case-insensitive by default)
112
+ const searchQuery = query ? matchCase ? query : query.toLowerCase() : null;
113
+ let count = 0;
114
+ const a1Array = [];
115
+ const valuesArray = [];
116
+ // Helper to check if a cell matches the query
117
+ const cellMatches = (cell)=>{
118
+ if (!searchQuery) return true; // If no query, match all
119
+ if (typeof cell !== 'string') return false;
120
+ const cellValue = matchCase ? cell : cell.toLowerCase();
121
+ return cellValue.includes(searchQuery);
122
+ };
123
+ if (select === 'cells') {
124
+ for(let rowIdx = 0; rowIdx < allRows.length; rowIdx++){
125
+ const row = allRows[rowIdx];
126
+ if (!row) continue;
127
+ for(let colIdx = 0; colIdx < row.length; colIdx++){
128
+ const cell = row[colIdx];
129
+ if (cellMatches(cell)) {
130
+ count++;
131
+ if (a1s) {
132
+ const colLetter = columnIndexToLetter(colIdx);
133
+ const rowNum = rowIdx + 1;
134
+ a1Array.push(`${colLetter}${rowNum}`);
135
+ }
136
+ if (values) {
137
+ valuesArray.push(cell !== null && cell !== void 0 ? cell : null);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ } else if (select === 'rows') {
143
+ const matchingRows = [];
144
+ for(let rowIdx = 0; rowIdx < allRows.length; rowIdx++){
145
+ const row = allRows[rowIdx];
146
+ if (!row) continue;
147
+ const matches = row.some((cell)=>cellMatches(cell));
148
+ if (matches) {
149
+ matchingRows.push(rowIdx);
150
+ }
151
+ }
152
+ count = matchingRows.length;
153
+ for (const rowIdx of matchingRows){
154
+ const row = allRows[rowIdx];
155
+ if (!row) continue; // Skip if row is undefined
156
+ const rowNum = rowIdx + 1;
157
+ if (a1s) {
158
+ const colEnd = columnIndexToLetter(Math.max(0, row.length - 1));
159
+ a1Array.push(`A${rowNum}:${colEnd}${rowNum}`);
160
+ }
161
+ if (values) {
162
+ valuesArray.push(row);
163
+ }
164
+ }
165
+ } else if (select === 'columns') {
166
+ const headerRow = allRows[0] || [];
167
+ const matchingCols = [];
168
+ for(let colIdx = 0; colIdx < headerRow.length; colIdx++){
169
+ const header = headerRow[colIdx];
170
+ if (cellMatches(header)) {
171
+ matchingCols.push(colIdx);
172
+ }
173
+ }
174
+ count = matchingCols.length;
175
+ for (const colIdx of matchingCols){
176
+ const colLetter = columnIndexToLetter(colIdx);
177
+ if (a1s) {
178
+ a1Array.push(`${colLetter}:${colLetter}`);
179
+ }
180
+ if (values) {
181
+ const columnValues = allRows.map((row)=>row && row[colIdx] !== undefined ? row[colIdx] : null);
182
+ valuesArray.push(columnValues);
183
+ }
184
+ }
185
+ }
186
+ logger.info('sheets.values-search results', {
187
+ count,
188
+ select,
189
+ hasA1s: a1s,
190
+ hasValues: values
191
+ });
192
+ const result = {
193
+ type: 'success',
194
+ count,
195
+ ...a1s && a1Array.length > 0 && {
196
+ a1s: a1Array
197
+ },
198
+ ...values && valuesArray.length > 0 && {
199
+ values: valuesArray
200
+ }
201
+ };
202
+ return {
203
+ content: [
204
+ {
205
+ type: 'text',
206
+ text: JSON.stringify(result)
207
+ }
208
+ ],
209
+ structuredContent: {
210
+ result
211
+ }
212
+ };
213
+ } catch (error) {
214
+ const message = error instanceof Error ? error.message : String(error);
215
+ logger.error('sheets.values-search error', {
216
+ error: message
217
+ });
218
+ throw new McpError(ErrorCode.InternalError, `Error searching spreadsheet: ${message}`, {
219
+ stack: error instanceof Error ? error.stack : undefined
220
+ });
221
+ }
222
+ }
223
+ export default function createTool() {
224
+ return {
225
+ name: 'values-search',
226
+ config,
227
+ handler
228
+ };
229
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/mcp/tools/values-search.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport { schemas } from '@mcp-z/oauth-google';\n\nconst { AuthRequiredBranchSchema } = schemas;\n\nimport type { ToolModule } from '@mcp-z/server';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';\nimport { google } from 'googleapis';\nimport { z } from 'zod';\nimport { SheetCellSchema, SheetGidSchema, SpreadsheetIdSchema } from '../../schemas/index.js';\n\n// Helper to convert column index to letter (0 = A, 1 = B, etc.)\nfunction columnIndexToLetter(index: number): string {\n let letter = '';\n let num = index + 1;\n while (num > 0) {\n const remainder = (num - 1) % 26;\n letter = String.fromCharCode(65 + remainder) + letter;\n num = Math.floor((num - 1) / 26);\n }\n return letter;\n}\n\nconst inputSchema = z.object({\n id: SpreadsheetIdSchema,\n gid: SheetGidSchema,\n query: z.coerce.string().trim().optional().describe('Text to search for in sheet cells. If empty, returns all data at specified granularity.'),\n select: z.enum(['cells', 'rows', 'columns']).describe('Granularity: cells (individual matches), rows (full matching rows), columns (columns with matching headers)'),\n values: z.boolean().optional().describe('Include cell values in response'),\n a1s: z.boolean().optional().describe('Include A1 notation references in response'),\n render: z.enum(['FORMATTED_VALUE', 'UNFORMATTED_VALUE', 'FORMULA']).optional().describe('How to render cell values. FORMATTED_VALUE (default): calculated with formatting. UNFORMATTED_VALUE: calculated without formatting. FORMULA: show formula text instead of result.'),\n matchCase: z.boolean().optional().describe('Case-sensitive matching. Default is false (case-insensitive).'),\n});\n\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n count: z.number().int().nonnegative().describe('Number of matches found'),\n a1s: z.array(z.string()).optional().describe('A1 notation references for matches (e.g., \"B5\", \"A5:D5\", \"B:B\")'),\n values: z\n .array(z.union([z.array(SheetCellSchema), SheetCellSchema]))\n .optional()\n .describe('Cell values for matches (arrays for rows/columns, single values for cells)'),\n});\n\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description: 'Search spreadsheet and return matches at cell, row, or column granularity. Use a1-notation prompt for range syntax.',\n inputSchema,\n outputSchema: z.object({\n result: outputSchema,\n }),\n} as const;\n\nexport type Input = z.infer<typeof inputSchema>;\nexport type Output = z.infer<typeof outputSchema>;\n\nasync function handler({ id, gid, query, select, values = false, a1s = false, render, matchCase = false }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.values-search called', { id, gid, query, select, values, a1s, render, matchCase });\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n\n // Get sheet details including grid dimensions\n const spreadsheetResponse = await sheets.spreadsheets.get({\n spreadsheetId: id,\n fields: 'sheets.properties.sheetId,sheets.properties.title,sheets.properties.gridProperties',\n });\n\n const sheet = spreadsheetResponse.data.sheets?.find((s) => String(s.properties?.sheetId) === gid);\n\n if (!sheet) {\n logger.info('sheets.values-search sheet not found', { id, gid, query });\n throw new McpError(ErrorCode.InvalidParams, 'Sheet not found');\n }\n\n const sheetTitle = sheet.properties?.title ?? '';\n\n // Use actual sheet dimensions from gridProperties, with sensible defaults\n // Google Sheets default for new sheets is 1000 rows x 26 columns\n const rowCount = sheet.properties?.gridProperties?.rowCount ?? 1000;\n const columnCount = sheet.properties?.gridProperties?.columnCount ?? 26;\n const endColumn = columnIndexToLetter(columnCount - 1);\n const fullRange = `${sheetTitle}!A1:${endColumn}${rowCount}`;\n\n logger.debug?.('sheets.values-search fetching range', { fullRange, rowCount, columnCount });\n\n const response = await sheets.spreadsheets.values.get({\n spreadsheetId: id,\n range: fullRange,\n valueRenderOption: render || 'FORMATTED_VALUE',\n });\n const res = response.data;\n const allRows = Array.isArray(res.values) ? (res.values as (string | number | boolean | null)[][]) : [];\n\n // Prepare query for matching (case-insensitive by default)\n const searchQuery = query ? (matchCase ? query : query.toLowerCase()) : null;\n\n let count = 0;\n const a1Array: string[] = [];\n const valuesArray: (string | number | boolean | null | (string | number | boolean | null)[])[] = [];\n\n // Helper to check if a cell matches the query\n const cellMatches = (cell: string | number | boolean | null): boolean => {\n if (!searchQuery) return true; // If no query, match all\n if (typeof cell !== 'string') return false;\n const cellValue = matchCase ? cell : cell.toLowerCase();\n return cellValue.includes(searchQuery);\n };\n\n if (select === 'cells') {\n for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n const row = allRows[rowIdx];\n if (!row) continue;\n\n for (let colIdx = 0; colIdx < row.length; colIdx++) {\n const cell = row[colIdx];\n if (cellMatches(cell)) {\n count++;\n if (a1s) {\n const colLetter = columnIndexToLetter(colIdx);\n const rowNum = rowIdx + 1;\n a1Array.push(`${colLetter}${rowNum}`);\n }\n if (values) {\n valuesArray.push(cell ?? null);\n }\n }\n }\n }\n } else if (select === 'rows') {\n const matchingRows: number[] = [];\n for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n const row = allRows[rowIdx];\n if (!row) continue;\n\n const matches = row.some((cell) => cellMatches(cell));\n if (matches) {\n matchingRows.push(rowIdx);\n }\n }\n\n count = matchingRows.length;\n for (const rowIdx of matchingRows) {\n const row = allRows[rowIdx];\n if (!row) continue; // Skip if row is undefined\n const rowNum = rowIdx + 1;\n\n if (a1s) {\n const colEnd = columnIndexToLetter(Math.max(0, row.length - 1));\n a1Array.push(`A${rowNum}:${colEnd}${rowNum}`);\n }\n if (values) {\n valuesArray.push(row);\n }\n }\n } else if (select === 'columns') {\n const headerRow = allRows[0] || [];\n const matchingCols: number[] = [];\n\n for (let colIdx = 0; colIdx < headerRow.length; colIdx++) {\n const header = headerRow[colIdx];\n if (cellMatches(header)) {\n matchingCols.push(colIdx);\n }\n }\n\n count = matchingCols.length;\n for (const colIdx of matchingCols) {\n const colLetter = columnIndexToLetter(colIdx);\n\n if (a1s) {\n a1Array.push(`${colLetter}:${colLetter}`);\n }\n if (values) {\n const columnValues = allRows.map((row) => (row && row[colIdx] !== undefined ? row[colIdx] : null));\n valuesArray.push(columnValues);\n }\n }\n }\n\n logger.info('sheets.values-search results', { count, select, hasA1s: a1s, hasValues: values });\n\n const result: Output = {\n type: 'success' as const,\n count,\n ...(a1s && a1Array.length > 0 && { a1s: a1Array }),\n ...(values && valuesArray.length > 0 && { values: valuesArray }),\n };\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result) }],\n structuredContent: { result },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('sheets.values-search error', { error: message });\n\n throw new McpError(ErrorCode.InternalError, `Error searching spreadsheet: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'values-search',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["schemas","AuthRequiredBranchSchema","ErrorCode","McpError","google","z","SheetCellSchema","SheetGidSchema","SpreadsheetIdSchema","columnIndexToLetter","index","letter","num","remainder","String","fromCharCode","Math","floor","inputSchema","object","id","gid","query","coerce","string","trim","optional","describe","select","enum","values","boolean","a1s","render","matchCase","successBranchSchema","type","literal","count","number","int","nonnegative","array","union","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","info","spreadsheetResponse","sheet","sheets","version","auth","authContext","spreadsheets","get","spreadsheetId","fields","data","find","s","properties","sheetId","InvalidParams","sheetTitle","title","rowCount","gridProperties","columnCount","endColumn","fullRange","debug","response","range","valueRenderOption","res","allRows","Array","isArray","searchQuery","toLowerCase","a1Array","valuesArray","cellMatches","cell","cellValue","includes","rowIdx","length","row","colIdx","colLetter","rowNum","push","matchingRows","matches","some","colEnd","max","headerRow","matchingCols","header","columnValues","map","undefined","hasA1s","hasValues","content","text","JSON","stringify","structuredContent","error","message","Error","InternalError","stack","createTool","name"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ { "type": "module" }
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const SpreadsheetRefSchema: z.ZodString;
3
+ export declare const SheetRefSchema: z.ZodString;
4
+ export declare const SpreadsheetIdSchema: z.ZodString;
5
+ export declare const SheetGidSchema: z.ZodCoercedString<unknown>;
6
+ export declare const SpreadsheetIdOutput: z.ZodString;
7
+ export declare const SheetGidOutput: z.ZodString;
8
+ export declare const SheetCellSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodLiteral<number>, z.ZodLiteral<number>, z.ZodBoolean, z.ZodNull]>;
9
+ export declare const SheetRowSchema: z.ZodObject<{
10
+ rowIndex: z.ZodNumber;
11
+ values: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodLiteral<number>, z.ZodLiteral<number>, z.ZodBoolean, z.ZodNull]>>>;
12
+ range: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ export declare const A1NotationSchema: z.ZodString;
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ // Spreadsheet and sheet reference schemas
3
+ export const SpreadsheetRefSchema = z.string().min(1).describe('Spreadsheet reference: full URL, exact name, or partial name (not ID - use spreadsheet-find to get ID)');
4
+ export const SheetRefSchema = z.string().min(1).describe('Sheet reference: exact title or partial name match (not ID - use sheet-find to get ID)');
5
+ // Shared descriptions for consistency
6
+ const SPREADSHEET_ID_DESC = 'Spreadsheet ID (from URL d/{id})';
7
+ const SHEET_ID_DESC = 'Sheet ID (from URL gid={gid})';
8
+ // Input schemas (with validation)
9
+ // Note: z.coerce.string() converts numbers to strings, handling cases where MCP clients
10
+ // pass gid: 0 (number) instead of gid: "0" (string). This is critical for gid=0 which
11
+ // is the default sheet ID in new spreadsheets.
12
+ export const SpreadsheetIdSchema = z.string().min(1).describe(SPREADSHEET_ID_DESC);
13
+ export const SheetGidSchema = z.coerce.string().min(1).describe(SHEET_ID_DESC);
14
+ // Output schemas (for use in output/response schemas)
15
+ export const SpreadsheetIdOutput = z.string().describe(SPREADSHEET_ID_DESC);
16
+ export const SheetGidOutput = z.string().describe(SHEET_ID_DESC);
17
+ // Schema for individual sheet cells (can be string, number, boolean, or null)
18
+ // null represents empty cells - JSON cannot represent undefined, and Google API uses null for empty cells
19
+ // Infinity values are allowed as Google Sheets can contain them, but NaN is still rejected
20
+ export const SheetCellSchema = z.union([
21
+ z.string(),
22
+ z.number(),
23
+ z.literal(Infinity),
24
+ z.literal(-Infinity),
25
+ z.boolean(),
26
+ z.null()
27
+ ]);
28
+ // Schema for a row in a sheet search result
29
+ export const SheetRowSchema = z.object({
30
+ rowIndex: z.number().int().positive().describe('1-based row number in the sheet'),
31
+ values: z.array(SheetCellSchema).optional().describe('Cell values for this row (included when includeData=true)'),
32
+ range: z.string().optional().describe('A1 notation range for this row (e.g., A5:D5)')
33
+ });
34
+ // A1 notation validation - simplified for zod compatibility
35
+ export const A1NotationSchema = z.string().min(1).describe('A1 notation for cell range (e.g., A1, A1:B2, A:B, 1:2)');
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/schemas/index.ts"],"sourcesContent":["import { z } from 'zod';\n\n// Spreadsheet and sheet reference schemas\nexport const SpreadsheetRefSchema = z.string().min(1).describe('Spreadsheet reference: full URL, exact name, or partial name (not ID - use spreadsheet-find to get ID)');\n\nexport const SheetRefSchema = z.string().min(1).describe('Sheet reference: exact title or partial name match (not ID - use sheet-find to get ID)');\n\n// Shared descriptions for consistency\nconst SPREADSHEET_ID_DESC = 'Spreadsheet ID (from URL d/{id})';\nconst SHEET_ID_DESC = 'Sheet ID (from URL gid={gid})';\n\n// Input schemas (with validation)\n// Note: z.coerce.string() converts numbers to strings, handling cases where MCP clients\n// pass gid: 0 (number) instead of gid: \"0\" (string). This is critical for gid=0 which\n// is the default sheet ID in new spreadsheets.\nexport const SpreadsheetIdSchema = z.string().min(1).describe(SPREADSHEET_ID_DESC);\nexport const SheetGidSchema = z.coerce.string().min(1).describe(SHEET_ID_DESC);\n\n// Output schemas (for use in output/response schemas)\nexport const SpreadsheetIdOutput = z.string().describe(SPREADSHEET_ID_DESC);\nexport const SheetGidOutput = z.string().describe(SHEET_ID_DESC);\n\n// Schema for individual sheet cells (can be string, number, boolean, or null)\n// null represents empty cells - JSON cannot represent undefined, and Google API uses null for empty cells\n// Infinity values are allowed as Google Sheets can contain them, but NaN is still rejected\nexport const SheetCellSchema = z.union([z.string(), z.number(), z.literal(Infinity), z.literal(-Infinity), z.boolean(), z.null()]);\n\n// Schema for a row in a sheet search result\nexport const SheetRowSchema = z.object({\n rowIndex: z.number().int().positive().describe('1-based row number in the sheet'),\n values: z.array(SheetCellSchema).optional().describe('Cell values for this row (included when includeData=true)'),\n range: z.string().optional().describe('A1 notation range for this row (e.g., A5:D5)'),\n});\n\n// A1 notation validation - simplified for zod compatibility\nexport const A1NotationSchema = z.string().min(1).describe('A1 notation for cell range (e.g., A1, A1:B2, A:B, 1:2)');\n"],"names":["z","SpreadsheetRefSchema","string","min","describe","SheetRefSchema","SPREADSHEET_ID_DESC","SHEET_ID_DESC","SpreadsheetIdSchema","SheetGidSchema","coerce","SpreadsheetIdOutput","SheetGidOutput","SheetCellSchema","union","number","literal","Infinity","boolean","null","SheetRowSchema","object","rowIndex","int","positive","values","array","optional","range","A1NotationSchema"],"mappings":"AAAA,SAASA,CAAC,QAAQ,MAAM;AAExB,0CAA0C;AAC1C,OAAO,MAAMC,uBAAuBD,EAAEE,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAAC,0GAA0G;AAEzK,OAAO,MAAMC,iBAAiBL,EAAEE,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAAC,0FAA0F;AAEnJ,sCAAsC;AACtC,MAAME,sBAAsB;AAC5B,MAAMC,gBAAgB;AAEtB,kCAAkC;AAClC,wFAAwF;AACxF,sFAAsF;AACtF,+CAA+C;AAC/C,OAAO,MAAMC,sBAAsBR,EAAEE,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAACE,qBAAqB;AACnF,OAAO,MAAMG,iBAAiBT,EAAEU,MAAM,CAACR,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAACG,eAAe;AAE/E,sDAAsD;AACtD,OAAO,MAAMI,sBAAsBX,EAAEE,MAAM,GAAGE,QAAQ,CAACE,qBAAqB;AAC5E,OAAO,MAAMM,iBAAiBZ,EAAEE,MAAM,GAAGE,QAAQ,CAACG,eAAe;AAEjE,8EAA8E;AAC9E,0GAA0G;AAC1G,2FAA2F;AAC3F,OAAO,MAAMM,kBAAkBb,EAAEc,KAAK,CAAC;IAACd,EAAEE,MAAM;IAAIF,EAAEe,MAAM;IAAIf,EAAEgB,OAAO,CAACC;IAAWjB,EAAEgB,OAAO,CAAC,CAACC;IAAWjB,EAAEkB,OAAO;IAAIlB,EAAEmB,IAAI;CAAG,EAAE;AAEnI,4CAA4C;AAC5C,OAAO,MAAMC,iBAAiBpB,EAAEqB,MAAM,CAAC;IACrCC,UAAUtB,EAAEe,MAAM,GAAGQ,GAAG,GAAGC,QAAQ,GAAGpB,QAAQ,CAAC;IAC/CqB,QAAQzB,EAAE0B,KAAK,CAACb,iBAAiBc,QAAQ,GAAGvB,QAAQ,CAAC;IACrDwB,OAAO5B,EAAEE,MAAM,GAAGyB,QAAQ,GAAGvB,QAAQ,CAAC;AACxC,GAAG;AAEH,4DAA4D;AAC5D,OAAO,MAAMyB,mBAAmB7B,EAAEE,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAAC,0DAA0D"}
@@ -0,0 +1,44 @@
1
+ import type { ServerConfig } from '../types.js';
2
+ /**
3
+ * Handle --version and --help flags before config parsing.
4
+ * These should work without requiring any configuration.
5
+ */
6
+ export declare function handleVersionHelp(args: string[]): {
7
+ handled: boolean;
8
+ output?: string;
9
+ };
10
+ /**
11
+ * Parse Sheets server configuration from CLI arguments and environment.
12
+ *
13
+ * CLI Arguments (all optional):
14
+ * - --auth=<mode> Authentication mode (default: loopback-oauth)
15
+ * Modes: loopback-oauth, service-account, dcr
16
+ * - --headless Disable browser auto-open, return auth URL instead
17
+ * - --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)
18
+ * - --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)
19
+ * - --dcr-verify-url=<url> External verification endpoint (required for external mode)
20
+ * - --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)
21
+ * - --port=<port> Enable HTTP transport on specified port
22
+ * - --stdio Enable stdio transport (default if no port)
23
+ * - --log-level=<level> Logging level (default: info)
24
+ *
25
+ * Environment Variables:
26
+ * - GOOGLE_CLIENT_ID OAuth client ID (REQUIRED)
27
+ * - GOOGLE_CLIENT_SECRET OAuth client secret (optional)
28
+ * - AUTH_MODE Default authentication mode (optional)
29
+ * - HEADLESS Disable browser auto-open (optional)
30
+ * - DCR_MODE DCR mode (optional, same format as --dcr-mode)
31
+ * - DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)
32
+ * - DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)
33
+ * - PORT Default HTTP port (optional)
34
+ * - LOG_LEVEL Default logging level (optional)
35
+ *
36
+ * OAuth Scopes (from constants.ts):
37
+ * openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive
38
+ */
39
+ export declare function parseConfig(args: string[], env: Record<string, string | undefined>): ServerConfig;
40
+ /**
41
+ * Build production configuration from process globals.
42
+ * Entry point for production server.
43
+ */
44
+ export declare function createConfig(): ServerConfig;
@@ -0,0 +1,151 @@
1
+ import { parseDcrConfig, parseConfig as parseOAuthConfig } from '@mcp-z/oauth-google';
2
+ import { parseConfig as parseTransportConfig } from '@mcp-z/server';
3
+ import * as fs from 'fs';
4
+ import moduleRoot from 'module-root-sync';
5
+ import { homedir } from 'os';
6
+ import * as path from 'path';
7
+ import * as url from 'url';
8
+ import { parseArgs } from 'util';
9
+ import { GOOGLE_SCOPE } from '../constants.js';
10
+ const pkg = JSON.parse(fs.readFileSync(path.join(moduleRoot(url.fileURLToPath(import.meta.url)), 'package.json'), 'utf-8'));
11
+ const HELP_TEXT = `
12
+ Usage: mcp-sheets [options]
13
+
14
+ MCP server for Google Sheets spreadsheet management with OAuth authentication.
15
+
16
+ Options:
17
+ --version Show version number
18
+ --help Show this help message
19
+ --auth=<mode> Authentication mode (default: loopback-oauth)
20
+ Modes: loopback-oauth, service-account, dcr
21
+ --headless Disable browser auto-open, return auth URL instead
22
+ --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)
23
+ --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)
24
+ --dcr-verify-url=<url> External verification endpoint (required for external mode)
25
+ --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)
26
+ --port=<port> Enable HTTP transport on specified port
27
+ --stdio Enable stdio transport (default if no port)
28
+ --log-level=<level> Logging level (default: info)
29
+
30
+ Environment Variables:
31
+ GOOGLE_CLIENT_ID OAuth client ID (REQUIRED)
32
+ GOOGLE_CLIENT_SECRET OAuth client secret (optional)
33
+ AUTH_MODE Default authentication mode (optional)
34
+ HEADLESS Disable browser auto-open (optional)
35
+ DCR_MODE DCR mode (optional, same format as --dcr-mode)
36
+ DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)
37
+ DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)
38
+ PORT Default HTTP port (optional)
39
+ LOG_LEVEL Default logging level (optional)
40
+
41
+ OAuth Scopes:
42
+ openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive
43
+
44
+ Examples:
45
+ mcp-sheets # Use default settings
46
+ mcp-sheets --auth=service-account # Use service account auth
47
+ mcp-sheets --port=3000 # HTTP transport on port 3000
48
+ GOOGLE_CLIENT_ID=xxx mcp-sheets # Set client ID via env var
49
+ `.trim();
50
+ /**
51
+ * Handle --version and --help flags before config parsing.
52
+ * These should work without requiring any configuration.
53
+ */ export function handleVersionHelp(args) {
54
+ const { values } = parseArgs({
55
+ args,
56
+ options: {
57
+ version: {
58
+ type: 'boolean'
59
+ },
60
+ help: {
61
+ type: 'boolean'
62
+ }
63
+ },
64
+ strict: false
65
+ });
66
+ if (values.version) return {
67
+ handled: true,
68
+ output: pkg.version
69
+ };
70
+ if (values.help) return {
71
+ handled: true,
72
+ output: HELP_TEXT
73
+ };
74
+ return {
75
+ handled: false
76
+ };
77
+ }
78
+ /**
79
+ * Parse Sheets server configuration from CLI arguments and environment.
80
+ *
81
+ * CLI Arguments (all optional):
82
+ * - --auth=<mode> Authentication mode (default: loopback-oauth)
83
+ * Modes: loopback-oauth, service-account, dcr
84
+ * - --headless Disable browser auto-open, return auth URL instead
85
+ * - --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)
86
+ * - --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)
87
+ * - --dcr-verify-url=<url> External verification endpoint (required for external mode)
88
+ * - --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)
89
+ * - --port=<port> Enable HTTP transport on specified port
90
+ * - --stdio Enable stdio transport (default if no port)
91
+ * - --log-level=<level> Logging level (default: info)
92
+ *
93
+ * Environment Variables:
94
+ * - GOOGLE_CLIENT_ID OAuth client ID (REQUIRED)
95
+ * - GOOGLE_CLIENT_SECRET OAuth client secret (optional)
96
+ * - AUTH_MODE Default authentication mode (optional)
97
+ * - HEADLESS Disable browser auto-open (optional)
98
+ * - DCR_MODE DCR mode (optional, same format as --dcr-mode)
99
+ * - DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)
100
+ * - DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)
101
+ * - PORT Default HTTP port (optional)
102
+ * - LOG_LEVEL Default logging level (optional)
103
+ *
104
+ * OAuth Scopes (from constants.ts):
105
+ * openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive
106
+ */ export function parseConfig(args, env) {
107
+ var _ref, _ref1;
108
+ const transportConfig = parseTransportConfig(args, env);
109
+ const oauthConfig = parseOAuthConfig(args, env);
110
+ // Parse DCR configuration if DCR mode is enabled
111
+ const dcrConfig = oauthConfig.auth === 'dcr' ? parseDcrConfig(args, env, GOOGLE_SCOPE) : undefined;
112
+ // Parse application-level config (LOG_LEVEL)
113
+ const { values } = parseArgs({
114
+ args,
115
+ options: {
116
+ 'log-level': {
117
+ type: 'string'
118
+ }
119
+ },
120
+ strict: false,
121
+ allowPositionals: true
122
+ });
123
+ const name = pkg.name.replace(/^@[^/]+\//, '');
124
+ // Parse repository URL from package.json, stripping git+ prefix and .git suffix
125
+ const rawRepoUrl = typeof pkg.repository === 'object' ? pkg.repository.url : pkg.repository;
126
+ const repositoryUrl = (_ref = rawRepoUrl === null || rawRepoUrl === void 0 ? void 0 : rawRepoUrl.replace(/^git\+/, '').replace(/\.git$/, '')) !== null && _ref !== void 0 ? _ref : `https://github.com/mcp-z/${name}`;
127
+ const rootDir = process.cwd() === '/' ? homedir() : process.cwd();
128
+ const baseDir = path.join(rootDir, '.mcp-z');
129
+ const cliLogLevel = typeof values['log-level'] === 'string' ? values['log-level'] : undefined;
130
+ const envLogLevel = env.LOG_LEVEL;
131
+ const logLevel = (_ref1 = cliLogLevel !== null && cliLogLevel !== void 0 ? cliLogLevel : envLogLevel) !== null && _ref1 !== void 0 ? _ref1 : 'info';
132
+ // Combine configs
133
+ return {
134
+ ...oauthConfig,
135
+ transport: transportConfig.transport,
136
+ logLevel,
137
+ baseDir,
138
+ name,
139
+ version: pkg.version,
140
+ repositoryUrl,
141
+ ...dcrConfig && {
142
+ dcrConfig
143
+ }
144
+ };
145
+ }
146
+ /**
147
+ * Build production configuration from process globals.
148
+ * Entry point for production server.
149
+ */ export function createConfig() {
150
+ return parseConfig(process.argv, process.env);
151
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/config.ts"],"sourcesContent":["import { parseDcrConfig, parseConfig as parseOAuthConfig } from '@mcp-z/oauth-google';\nimport { parseConfig as parseTransportConfig } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport moduleRoot from 'module-root-sync';\nimport { homedir } from 'os';\nimport * as path from 'path';\nimport * as url from 'url';\nimport { parseArgs } from 'util';\nimport { GOOGLE_SCOPE } from '../constants.ts';\nimport type { ServerConfig } from '../types.js';\n\nconst pkg = JSON.parse(fs.readFileSync(path.join(moduleRoot(url.fileURLToPath(import.meta.url)), 'package.json'), 'utf-8'));\n\nconst HELP_TEXT = `\nUsage: mcp-sheets [options]\n\nMCP server for Google Sheets spreadsheet management with OAuth authentication.\n\nOptions:\n --version Show version number\n --help Show this help message\n --auth=<mode> Authentication mode (default: loopback-oauth)\n Modes: loopback-oauth, service-account, dcr\n --headless Disable browser auto-open, return auth URL instead\n --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)\n --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)\n --dcr-verify-url=<url> External verification endpoint (required for external mode)\n --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)\n --port=<port> Enable HTTP transport on specified port\n --stdio Enable stdio transport (default if no port)\n --log-level=<level> Logging level (default: info)\n\nEnvironment Variables:\n GOOGLE_CLIENT_ID OAuth client ID (REQUIRED)\n GOOGLE_CLIENT_SECRET OAuth client secret (optional)\n AUTH_MODE Default authentication mode (optional)\n HEADLESS Disable browser auto-open (optional)\n DCR_MODE DCR mode (optional, same format as --dcr-mode)\n DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)\n DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)\n PORT Default HTTP port (optional)\n LOG_LEVEL Default logging level (optional)\n\nOAuth Scopes:\n openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive\n\nExamples:\n mcp-sheets # Use default settings\n mcp-sheets --auth=service-account # Use service account auth\n mcp-sheets --port=3000 # HTTP transport on port 3000\n GOOGLE_CLIENT_ID=xxx mcp-sheets # Set client ID via env var\n`.trim();\n\n/**\n * Handle --version and --help flags before config parsing.\n * These should work without requiring any configuration.\n */\nexport function handleVersionHelp(args: string[]): { handled: boolean; output?: string } {\n const { values } = parseArgs({\n args,\n options: {\n version: { type: 'boolean' },\n help: { type: 'boolean' },\n },\n strict: false,\n });\n\n if (values.version) return { handled: true, output: pkg.version };\n if (values.help) return { handled: true, output: HELP_TEXT };\n return { handled: false };\n}\n\n/**\n * Parse Sheets server configuration from CLI arguments and environment.\n *\n * CLI Arguments (all optional):\n * - --auth=<mode> Authentication mode (default: loopback-oauth)\n * Modes: loopback-oauth, service-account, dcr\n * - --headless Disable browser auto-open, return auth URL instead\n * - --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)\n * - --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)\n * - --dcr-verify-url=<url> External verification endpoint (required for external mode)\n * - --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)\n * - --port=<port> Enable HTTP transport on specified port\n * - --stdio Enable stdio transport (default if no port)\n * - --log-level=<level> Logging level (default: info)\n *\n * Environment Variables:\n * - GOOGLE_CLIENT_ID OAuth client ID (REQUIRED)\n * - GOOGLE_CLIENT_SECRET OAuth client secret (optional)\n * - AUTH_MODE Default authentication mode (optional)\n * - HEADLESS Disable browser auto-open (optional)\n * - DCR_MODE DCR mode (optional, same format as --dcr-mode)\n * - DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)\n * - DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)\n * - PORT Default HTTP port (optional)\n * - LOG_LEVEL Default logging level (optional)\n *\n * OAuth Scopes (from constants.ts):\n * openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive\n */\nexport function parseConfig(args: string[], env: Record<string, string | undefined>): ServerConfig {\n const transportConfig = parseTransportConfig(args, env);\n const oauthConfig = parseOAuthConfig(args, env);\n\n // Parse DCR configuration if DCR mode is enabled\n const dcrConfig = oauthConfig.auth === 'dcr' ? parseDcrConfig(args, env, GOOGLE_SCOPE) : undefined;\n\n // Parse application-level config (LOG_LEVEL)\n const { values } = parseArgs({\n args,\n options: {\n 'log-level': { type: 'string' },\n },\n strict: false, // Allow other arguments\n allowPositionals: true,\n });\n\n const name = pkg.name.replace(/^@[^/]+\\//, '');\n // Parse repository URL from package.json, stripping git+ prefix and .git suffix\n const rawRepoUrl = typeof pkg.repository === 'object' ? pkg.repository.url : pkg.repository;\n const repositoryUrl = rawRepoUrl?.replace(/^git\\+/, '').replace(/\\.git$/, '') ?? `https://github.com/mcp-z/${name}`;\n const rootDir = process.cwd() === '/' ? homedir() : process.cwd();\n const baseDir = path.join(rootDir, '.mcp-z');\n const cliLogLevel = typeof values['log-level'] === 'string' ? values['log-level'] : undefined;\n const envLogLevel = env.LOG_LEVEL;\n const logLevel = cliLogLevel ?? envLogLevel ?? 'info';\n\n // Combine configs\n return {\n ...oauthConfig, // Includes clientId, auth, headless, redirectUri\n transport: transportConfig.transport,\n logLevel,\n baseDir,\n name,\n version: pkg.version,\n repositoryUrl,\n ...(dcrConfig && { dcrConfig }),\n };\n}\n\n/**\n * Build production configuration from process globals.\n * Entry point for production server.\n */\nexport function createConfig(): ServerConfig {\n return parseConfig(process.argv, process.env);\n}\n"],"names":["parseDcrConfig","parseConfig","parseOAuthConfig","parseTransportConfig","fs","moduleRoot","homedir","path","url","parseArgs","GOOGLE_SCOPE","pkg","JSON","parse","readFileSync","join","fileURLToPath","HELP_TEXT","trim","handleVersionHelp","args","values","options","version","type","help","strict","handled","output","env","cliLogLevel","transportConfig","oauthConfig","dcrConfig","auth","undefined","allowPositionals","name","replace","rawRepoUrl","repository","repositoryUrl","rootDir","process","cwd","baseDir","envLogLevel","LOG_LEVEL","logLevel","transport","createConfig","argv"],"mappings":"AAAA,SAASA,cAAc,EAAEC,eAAeC,gBAAgB,QAAQ,sBAAsB;AACtF,SAASD,eAAeE,oBAAoB,QAAQ,gBAAgB;AACpE,YAAYC,QAAQ,KAAK;AACzB,OAAOC,gBAAgB,mBAAmB;AAC1C,SAASC,OAAO,QAAQ,KAAK;AAC7B,YAAYC,UAAU,OAAO;AAC7B,YAAYC,SAAS,MAAM;AAC3B,SAASC,SAAS,QAAQ,OAAO;AACjC,SAASC,YAAY,QAAQ,kBAAkB;AAG/C,MAAMC,MAAMC,KAAKC,KAAK,CAACT,GAAGU,YAAY,CAACP,KAAKQ,IAAI,CAACV,WAAWG,IAAIQ,aAAa,CAAC,YAAYR,GAAG,IAAI,iBAAiB;AAElH,MAAMS,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCnB,CAAC,CAACC,IAAI;AAEN;;;CAGC,GACD,OAAO,SAASC,kBAAkBC,IAAc;IAC9C,MAAM,EAAEC,MAAM,EAAE,GAAGZ,UAAU;QAC3BW;QACAE,SAAS;YACPC,SAAS;gBAAEC,MAAM;YAAU;YAC3BC,MAAM;gBAAED,MAAM;YAAU;QAC1B;QACAE,QAAQ;IACV;IAEA,IAAIL,OAAOE,OAAO,EAAE,OAAO;QAAEI,SAAS;QAAMC,QAAQjB,IAAIY,OAAO;IAAC;IAChE,IAAIF,OAAOI,IAAI,EAAE,OAAO;QAAEE,SAAS;QAAMC,QAAQX;IAAU;IAC3D,OAAO;QAAEU,SAAS;IAAM;AAC1B;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,SAAS1B,YAAYmB,IAAc,EAAES,GAAuC;cAyBhEC;IAxBjB,MAAMC,kBAAkB5B,qBAAqBiB,MAAMS;IACnD,MAAMG,cAAc9B,iBAAiBkB,MAAMS;IAE3C,iDAAiD;IACjD,MAAMI,YAAYD,YAAYE,IAAI,KAAK,QAAQlC,eAAeoB,MAAMS,KAAKnB,gBAAgByB;IAEzF,6CAA6C;IAC7C,MAAM,EAAEd,MAAM,EAAE,GAAGZ,UAAU;QAC3BW;QACAE,SAAS;YACP,aAAa;gBAAEE,MAAM;YAAS;QAChC;QACAE,QAAQ;QACRU,kBAAkB;IACpB;IAEA,MAAMC,OAAO1B,IAAI0B,IAAI,CAACC,OAAO,CAAC,aAAa;IAC3C,gFAAgF;IAChF,MAAMC,aAAa,OAAO5B,IAAI6B,UAAU,KAAK,WAAW7B,IAAI6B,UAAU,CAAChC,GAAG,GAAGG,IAAI6B,UAAU;IAC3F,MAAMC,wBAAgBF,uBAAAA,iCAAAA,WAAYD,OAAO,CAAC,UAAU,IAAIA,OAAO,CAAC,UAAU,0CAAO,CAAC,yBAAyB,EAAED,MAAM;IACnH,MAAMK,UAAUC,QAAQC,GAAG,OAAO,MAAMtC,YAAYqC,QAAQC,GAAG;IAC/D,MAAMC,UAAUtC,KAAKQ,IAAI,CAAC2B,SAAS;IACnC,MAAMZ,cAAc,OAAOT,MAAM,CAAC,YAAY,KAAK,WAAWA,MAAM,CAAC,YAAY,GAAGc;IACpF,MAAMW,cAAcjB,IAAIkB,SAAS;IACjC,MAAMC,YAAWlB,QAAAA,wBAAAA,yBAAAA,cAAegB,yBAAfhB,mBAAAA,QAA8B;IAE/C,kBAAkB;IAClB,OAAO;QACL,GAAGE,WAAW;QACdiB,WAAWlB,gBAAgBkB,SAAS;QACpCD;QACAH;QACAR;QACAd,SAASZ,IAAIY,OAAO;QACpBkB;QACA,GAAIR,aAAa;YAAEA;QAAU,CAAC;IAChC;AACF;AAEA;;;CAGC,GACD,OAAO,SAASiB;IACd,OAAOjD,YAAY0C,QAAQQ,IAAI,EAAER,QAAQd,GAAG;AAC9C"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { RuntimeOverrides, ServerConfig } from '../types.js';
3
+ export declare function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides): Promise<{
4
+ httpServer: import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
5
+ mcpServer: McpServer;
6
+ logger: import("@mcp-z/server").Logger;
7
+ close: () => Promise<void>;
8
+ }>;
@@ -0,0 +1,54 @@
1
+ import { composeMiddleware, connectHttp, registerPrompts, registerResources, registerTools } from '@mcp-z/server';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import cors from 'cors';
4
+ import express from 'express';
5
+ import { createDefaultRuntime } from './runtime.js';
6
+ export async function createHTTPServer(config, overrides) {
7
+ const runtime = await createDefaultRuntime(config, overrides);
8
+ const modules = runtime.createDomainModules();
9
+ const layers = runtime.middlewareFactories.map((factory)=>factory(runtime.deps));
10
+ const composed = composeMiddleware(modules, layers);
11
+ const logger = runtime.deps.logger;
12
+ const port = config.transport.port;
13
+ if (!port) throw new Error('Port is required for HTTP transport');
14
+ const tools = [
15
+ ...composed.tools,
16
+ ...runtime.deps.oauthAdapters.accountTools
17
+ ];
18
+ const prompts = [
19
+ ...composed.prompts,
20
+ ...runtime.deps.oauthAdapters.accountPrompts
21
+ ];
22
+ const mcpServer = new McpServer({
23
+ name: config.name,
24
+ version: config.version
25
+ });
26
+ registerTools(mcpServer, tools);
27
+ registerResources(mcpServer, composed.resources);
28
+ registerPrompts(mcpServer, prompts);
29
+ const app = express();
30
+ app.use(cors());
31
+ app.use(express.json({
32
+ limit: '10mb'
33
+ }));
34
+ if (runtime.deps.oauthAdapters.dcrRouter) {
35
+ app.use('/', runtime.deps.oauthAdapters.dcrRouter);
36
+ logger.info('Mounted DCR router with OAuth endpoints');
37
+ }
38
+ logger.info(`Starting ${config.name} MCP server (http)`);
39
+ const { close, httpServer } = await connectHttp(mcpServer, {
40
+ logger,
41
+ app,
42
+ port
43
+ });
44
+ logger.info('http transport ready');
45
+ return {
46
+ httpServer,
47
+ mcpServer,
48
+ logger,
49
+ close: async ()=>{
50
+ await close();
51
+ await runtime.close();
52
+ }
53
+ };
54
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.js';\nimport { createDefaultRuntime } from './runtime.js';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n const app = express();\n app.use(cors());\n app.use(express.json({ limit: '10mb' }));\n\n if (runtime.deps.oauthAdapters.dcrRouter) {\n app.use('/', runtime.deps.oauthAdapters.dcrRouter);\n logger.info('Mounted DCR router with OAuth endpoints');\n }\n\n logger.info(`Starting ${config.name} MCP server (http)`);\n const { close, httpServer } = await connectHttp(mcpServer, { logger, app, port });\n logger.info('http transport ready');\n\n return {\n httpServer,\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["composeMiddleware","connectHttp","registerPrompts","registerResources","registerTools","McpServer","cors","express","createDefaultRuntime","createHTTPServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","port","transport","Error","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","app","use","json","limit","dcrRouter","info","close","httpServer"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,WAAW,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AAClH,SAASC,SAAS,QAAQ,0CAA0C;AACpE,OAAOC,UAAU,OAAO;AACxB,OAAOC,aAAa,UAAU;AAE9B,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,iBAAiBC,MAAoB,EAAEC,SAA4B;IACvF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWpB,kBAAkBa,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAClC,MAAMC,OAAOZ,OAAOa,SAAS,CAACD,IAAI;IAClC,IAAI,CAACA,MAAM,MAAM,IAAIE,MAAM;IAE3B,MAAMC,QAAQ;WAAIL,SAASK,KAAK;WAAKb,QAAQO,IAAI,CAACO,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIR,SAASQ,OAAO;WAAKhB,QAAQO,IAAI,CAACO,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIzB,UAAU;QAAE0B,MAAMrB,OAAOqB,IAAI;QAAEC,SAAStB,OAAOsB,OAAO;IAAC;IAC7E5B,cAAc0B,WAAWL;IACzBtB,kBAAkB2B,WAAWV,SAASa,SAAS;IAC/C/B,gBAAgB4B,WAAWF;IAE3B,MAAMM,MAAM3B;IACZ2B,IAAIC,GAAG,CAAC7B;IACR4B,IAAIC,GAAG,CAAC5B,QAAQ6B,IAAI,CAAC;QAAEC,OAAO;IAAO;IAErC,IAAIzB,QAAQO,IAAI,CAACO,aAAa,CAACY,SAAS,EAAE;QACxCJ,IAAIC,GAAG,CAAC,KAAKvB,QAAQO,IAAI,CAACO,aAAa,CAACY,SAAS;QACjDjB,OAAOkB,IAAI,CAAC;IACd;IAEAlB,OAAOkB,IAAI,CAAC,CAAC,SAAS,EAAE7B,OAAOqB,IAAI,CAAC,kBAAkB,CAAC;IACvD,MAAM,EAAES,KAAK,EAAEC,UAAU,EAAE,GAAG,MAAMxC,YAAY6B,WAAW;QAAET;QAAQa;QAAKZ;IAAK;IAC/ED,OAAOkB,IAAI,CAAC;IAEZ,OAAO;QACLE;QACAX;QACAT;QACAmB,OAAO;YACL,MAAMA;YACN,MAAM5B,QAAQ4B,KAAK;QACrB;IACF;AACF"}
@@ -0,0 +1,5 @@
1
+ export { createConfig, parseConfig } from './config.js';
2
+ export { createHTTPServer } from './http.js';
3
+ export { createOAuthAdapters } from './oauth-google.js';
4
+ export * from './runtime.js';
5
+ export { createStdioServer } from './stdio.js';
@@ -0,0 +1,5 @@
1
+ export { createConfig, parseConfig } from './config.js';
2
+ export { createHTTPServer } from './http.js';
3
+ export { createOAuthAdapters } from './oauth-google.js';
4
+ export * from './runtime.js';
5
+ export { createStdioServer } from './stdio.js';