@dizzlkheinz/ynab-mcpb 0.12.1

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 (435) hide show
  1. package/.chunkhound.json +11 -0
  2. package/.code/agents/0427d95e-edca-431f-a214-5e53264e29c4/error.txt +8 -0
  3. package/.code/agents/0d675174-d1e1-41c3-9975-4c2e275819a9/error.txt +3 -0
  4. package/.code/agents/0d8c5afd-4787-422b-abf8-2e5943fc7e67/error.txt +3 -0
  5. package/.code/agents/0ec34a70-ed5d-4b9e-bee4-bb0e4cccbc4b/error.txt +1 -0
  6. package/.code/agents/0ef51a21-1ab1-49d7-9561-0eaa43875ebc/error.txt +12 -0
  7. package/.code/agents/15db95d7-abad-4b4d-9c3b-8446089cb61d/error.txt +1 -0
  8. package/.code/agents/19ab9acb-f675-4ff0-902a-09a5476f8149/error.txt +1 -0
  9. package/.code/agents/1ef7e12d-f6ff-4897-8a9b-152d523d898e/error.txt +5 -0
  10. package/.code/agents/2465/exec-call_lroN9KKzJVWC7t5423DK1nT9.txt +1453 -0
  11. package/.code/agents/28edb6fe-95a9-41a0-ae69-aa0100d26c0c/error.txt +8 -0
  12. package/.code/agents/2ae40cf5-b4bf-42e2-92bf-7ea350a7755e/error.txt +9 -0
  13. package/.code/agents/2bfc4e1f-ac4b-45a5-b6df-bf89d4dbb54c/error.txt +1 -0
  14. package/.code/agents/2e2e1134-eff0-49be-ba25-8e2c3468a564/error.txt +5 -0
  15. package/.code/agents/3/exec-call_203OC4TNVkLxW7z2HCVEQ1cM.txt +81 -0
  16. package/.code/agents/3/exec-call_SS5T0XSiXB4LSNzUKTl75wkh.txt +610 -0
  17. package/.code/agents/3322c003-ce5e-48e3-a342-f5049c5bf9a2/error.txt +1 -0
  18. package/.code/agents/391e9b08-1ebc-468c-9bcd-6d0cc3193b37/error.txt +1 -0
  19. package/.code/agents/3ab0aa84-b7bb-4054-afa3-40b8fd7d3be0/error.txt +1 -0
  20. package/.code/agents/3bed368d-50fe-477e-aee3-a6707eaa1ab9/error.txt +3 -0
  21. package/.code/agents/3e40b925-db12-442f-8d7a-a25fc69a6672/error.txt +8 -0
  22. package/.code/agents/414d5776-cf58-41f3-9328-a6daed503a50/error.txt +5 -0
  23. package/.code/agents/42687751-4565-4610-b240-67835b17d861/error.txt +1 -0
  24. package/.code/agents/46b98876-1a39-43c9-9e2f-507ca6d47335/error.txt +9 -0
  25. package/.code/agents/4a7d9491-b26f-43dd-850d-2ecdc49b5d1b/error.txt +1 -0
  26. package/.code/agents/4e60f00a-1b3e-447f-87f3-7faf9deddec3/error.txt +13 -0
  27. package/.code/agents/5138fc1c-4d49-4b74-a7da-ccdb3a8e44e7/error.txt +14 -0
  28. package/.code/agents/521cff39-a7a3-42e5-a557-134f0f7daaa0/error.txt +5 -0
  29. package/.code/agents/53302dc5-3857-4413-9a47-9e0f64a51dc4/error.txt +5 -0
  30. package/.code/agents/567c7c2e-6a6f-4761-a08d-d36deeb2e0ac/error.txt +5 -0
  31. package/.code/agents/57b00845-80dc-47c9-953c-3028d16275d6/error.txt +3 -0
  32. package/.code/agents/593d9005-c2a5-48fd-8813-ece0d3f2de96/error.txt +1 -0
  33. package/.code/agents/5a112e66-0e1a-42f9-877c-53af56ea3551/error.txt +1 -0
  34. package/.code/agents/5b05e8ed-7788-4738-b7ee-9faa8180f992/error.txt +5 -0
  35. package/.code/agents/5f888d6f-d7ca-4ac8-be23-9ea1bf753951/error.txt +5 -0
  36. package/.code/agents/607db3ab-e4b0-435b-b497-93e9aa525549/error.txt +8 -0
  37. package/.code/agents/67dcb2a2-900f-4c78-b3fc-80b5213e0ddf/error.txt +8 -0
  38. package/.code/agents/69ad848c-4e98-49b3-b16c-0094ac2d1759/error.txt +5 -0
  39. package/.code/agents/6c9cfc5f-0d0b-445c-b121-9f60082c4f70/error.txt +1 -0
  40. package/.code/agents/6f6f8f77-4ab0-4f6e-9f30-40e8be0bd8f5/error.txt +1 -0
  41. package/.code/agents/72a7cde4-fa8a-4024-9038-27faa550539b/error.txt +1 -0
  42. package/.code/agents/7b48335c-8247-43aa-9949-5f820ba8e199/error.txt +1 -0
  43. package/.code/agents/80944249-bea9-4ac5-87de-a666c4df306e/error.txt +1 -0
  44. package/.code/agents/826099df-1b66-4186-a915-7eb59f9db19d/error.txt +5 -0
  45. package/.code/agents/8291d158-18a8-4a92-b799-4e9a4d9cce88/error.txt +1 -0
  46. package/.code/agents/82fb71a3-20fb-4341-804a-a2fc900f95bc/error.txt +1 -0
  47. package/.code/agents/855790ea-54ee-43e4-8209-a66994e37590/error.txt +1 -0
  48. package/.code/agents/88ce3a2e-04f2-42be-9062-bf97aa798da0/error.txt +3 -0
  49. package/.code/agents/9a17e398-b6ed-4218-bb55-bc64a8d38ce8/error.txt +8 -0
  50. package/.code/agents/9a4f4bfc-a2a6-4f40-a896-9335b41a7ed1/error.txt +1 -0
  51. package/.code/agents/9b633e55-ef84-47d6-94bb-fd3dd172ad97/error.txt +1 -0
  52. package/.code/agents/9b81f3ab-c72b-4a81-9a8f-28a49ddba84a/error.txt +8 -0
  53. package/.code/agents/a35daf29-b2d1-4aef-9b42-dad63a76bd47/error.txt +3 -0
  54. package/.code/agents/a81990cc-69ee-44d2-b907-17403c9bc5d7/error.txt +5 -0
  55. package/.code/agents/ab56260a-4a83-4ad4-9410-f88a23d6520a/error.txt +1 -0
  56. package/.code/agents/ad722c31-2d1d-45f7-bae2-3f02ca455b60/error.txt +1 -0
  57. package/.code/agents/b62e8690-3324-4b97-9309-731bee79416b/error.txt +5 -0
  58. package/.code/agents/baf60a3a-752b-4ad8-99d6-df32423ed2eb/error.txt +1 -0
  59. package/.code/agents/be049042-7dcb-4ac8-9beb-c8f1aea67742/error.txt +14 -0
  60. package/.code/agents/bed1dcb4-bfce-4a9f-8594-0f994962aafd/error.txt +1 -0
  61. package/.code/agents/c324a6cf-e935-4ede-9529-b3ebc18e8d6b/error.txt +5 -0
  62. package/.code/agents/c37c06ff-dfe3-43f2-9bbc-3ec73ec8f41d/error.txt +5 -0
  63. package/.code/agents/c8cd6671-433a-456b-9f88-e51cb2df6bfc/error.txt +11 -0
  64. package/.code/agents/ca2ccb67-2f24-428e-b27d-9365beadd140/error.txt +1 -0
  65. package/.code/agents/cf08c0c8-e7f0-423e-93ba-547e8e818340/error.txt +8 -0
  66. package/.code/agents/d579c74f-874b-40a4-9d56-ced1eb6a701d/error.txt +1 -0
  67. package/.code/agents/df412c98-7378-4deb-8e1e-76c416931181/error.txt +3 -0
  68. package/.code/agents/e5134eb3-2af4-45b0-8998-051cb4afdb45/error.txt +3 -0
  69. package/.code/agents/e6308471-aa45-4e9e-9496-2e9404164d97/error.txt +8 -0
  70. package/.code/agents/e7bd8bc7-23fb-4f46-98dc-b0dcf11b75a1/error.txt +1 -0
  71. package/.code/agents/e92bec35-378d-4fe1-8ac0-6e1bb3c86911/error.txt +5 -0
  72. package/.code/agents/ed918fbf-2dc4-4aa2-bfc5-04b65d9471ea/error.txt +1 -0
  73. package/.code/agents/ef1d756f-b272-48fc-8729-f05c494674f7/error.txt +1 -0
  74. package/.code/agents/ef359853-0249-4e41-a804-c0fc459fe456/error.txt +1 -0
  75. package/.code/agents/effc7b4a-4b90-40a0-8c86-a7a99d2d5fd2/error.txt +1 -0
  76. package/.code/agents/fa15f8d5-8359-4a8b-83a3-2f2056b3ff40/error.txt +3 -0
  77. package/.code/agents/fbef4193-eadf-4c8a-83ff-4878a6310f25/error.txt +8 -0
  78. package/.code/agents/fd0a4b4a-fda4-4964-a6d6-2b8a2da387c6/error.txt +1 -0
  79. package/.dxtignore +57 -0
  80. package/.env.example +44 -0
  81. package/.gemini/settings.json +8 -0
  82. package/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  83. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  84. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
  85. package/.github/ISSUE_TEMPLATE/release_checklist.md +31 -0
  86. package/.github/pull_request_template.md +41 -0
  87. package/.github/workflows/ci-tests.yml +41 -0
  88. package/.github/workflows/claude-code-review.yml +57 -0
  89. package/.github/workflows/claude.yml +50 -0
  90. package/.github/workflows/full-integration.yml +22 -0
  91. package/.github/workflows/pr-description-check.yml +88 -0
  92. package/.github/workflows/publish.yml +33 -0
  93. package/.github/workflows/release.yml +89 -0
  94. package/.mcpbignore +58 -0
  95. package/.prettierignore +10 -0
  96. package/.prettierrc.json +10 -0
  97. package/ADOS-2-Module-1-Complete-Manual.md +757 -0
  98. package/AGENTS.md +36 -0
  99. package/CHANGELOG.md +187 -0
  100. package/CLAUDE.md +414 -0
  101. package/CODEREVIEW_RESPONSE.md +128 -0
  102. package/LICENSE +17 -0
  103. package/NUL +1 -0
  104. package/README.md +222 -0
  105. package/SCHEMA_IMPROVEMENT_SUMMARY.md +120 -0
  106. package/TESTING_NOTES.md +217 -0
  107. package/WARP.md +245 -0
  108. package/accountactivity-merged.csv +149 -0
  109. package/bin/ynab-mcp-server.cjs +4 -0
  110. package/bin/ynab-mcp-server.js +8 -0
  111. package/bundle-analysis.html +13110 -0
  112. package/dist/bundle/index.cjs +124 -0
  113. package/dist/index.d.ts +2 -0
  114. package/dist/index.js +85 -0
  115. package/dist/server/YNABMCPServer.d.ts +264 -0
  116. package/dist/server/YNABMCPServer.js +845 -0
  117. package/dist/server/budgetResolver.d.ts +15 -0
  118. package/dist/server/budgetResolver.js +99 -0
  119. package/dist/server/cacheManager.d.ts +74 -0
  120. package/dist/server/cacheManager.js +306 -0
  121. package/dist/server/config.d.ts +3 -0
  122. package/dist/server/config.js +19 -0
  123. package/dist/server/deltaCache.d.ts +61 -0
  124. package/dist/server/deltaCache.js +206 -0
  125. package/dist/server/deltaCache.merge.d.ts +9 -0
  126. package/dist/server/deltaCache.merge.js +111 -0
  127. package/dist/server/diagnostics.d.ts +90 -0
  128. package/dist/server/diagnostics.js +163 -0
  129. package/dist/server/errorHandler.d.ts +69 -0
  130. package/dist/server/errorHandler.js +524 -0
  131. package/dist/server/prompts.d.ts +31 -0
  132. package/dist/server/prompts.js +205 -0
  133. package/dist/server/rateLimiter.d.ts +27 -0
  134. package/dist/server/rateLimiter.js +82 -0
  135. package/dist/server/requestLogger.d.ts +62 -0
  136. package/dist/server/requestLogger.js +190 -0
  137. package/dist/server/resources.d.ts +39 -0
  138. package/dist/server/resources.js +85 -0
  139. package/dist/server/responseFormatter.d.ts +14 -0
  140. package/dist/server/responseFormatter.js +42 -0
  141. package/dist/server/securityMiddleware.d.ts +87 -0
  142. package/dist/server/securityMiddleware.js +117 -0
  143. package/dist/server/serverKnowledgeStore.d.ts +11 -0
  144. package/dist/server/serverKnowledgeStore.js +42 -0
  145. package/dist/server/toolRegistry.d.ts +85 -0
  146. package/dist/server/toolRegistry.js +272 -0
  147. package/dist/tools/__tests__/deltaTestUtils.d.ts +18 -0
  148. package/dist/tools/__tests__/deltaTestUtils.js +26 -0
  149. package/dist/tools/accountTools.d.ts +37 -0
  150. package/dist/tools/accountTools.js +175 -0
  151. package/dist/tools/budgetTools.d.ts +10 -0
  152. package/dist/tools/budgetTools.js +68 -0
  153. package/dist/tools/categoryTools.d.ts +27 -0
  154. package/dist/tools/categoryTools.js +232 -0
  155. package/dist/tools/compareTransactions/formatter.d.ts +71 -0
  156. package/dist/tools/compareTransactions/formatter.js +97 -0
  157. package/dist/tools/compareTransactions/index.d.ts +30 -0
  158. package/dist/tools/compareTransactions/index.js +160 -0
  159. package/dist/tools/compareTransactions/matcher.d.ts +12 -0
  160. package/dist/tools/compareTransactions/matcher.js +140 -0
  161. package/dist/tools/compareTransactions/parser.d.ts +14 -0
  162. package/dist/tools/compareTransactions/parser.js +430 -0
  163. package/dist/tools/compareTransactions/types.d.ts +27 -0
  164. package/dist/tools/compareTransactions/types.js +1 -0
  165. package/dist/tools/compareTransactions.d.ts +1 -0
  166. package/dist/tools/compareTransactions.js +1 -0
  167. package/dist/tools/deltaFetcher.d.ts +22 -0
  168. package/dist/tools/deltaFetcher.js +137 -0
  169. package/dist/tools/deltaSupport.d.ts +20 -0
  170. package/dist/tools/deltaSupport.js +176 -0
  171. package/dist/tools/exportTransactions.d.ts +17 -0
  172. package/dist/tools/exportTransactions.js +191 -0
  173. package/dist/tools/monthTools.d.ts +16 -0
  174. package/dist/tools/monthTools.js +107 -0
  175. package/dist/tools/payeeTools.d.ts +17 -0
  176. package/dist/tools/payeeTools.js +82 -0
  177. package/dist/tools/reconcileAdapter.d.ts +25 -0
  178. package/dist/tools/reconcileAdapter.js +167 -0
  179. package/dist/tools/reconciliation/analyzer.d.ts +3 -0
  180. package/dist/tools/reconciliation/analyzer.js +567 -0
  181. package/dist/tools/reconciliation/executor.d.ts +94 -0
  182. package/dist/tools/reconciliation/executor.js +611 -0
  183. package/dist/tools/reconciliation/index.d.ts +54 -0
  184. package/dist/tools/reconciliation/index.js +249 -0
  185. package/dist/tools/reconciliation/matcher.d.ts +3 -0
  186. package/dist/tools/reconciliation/matcher.js +160 -0
  187. package/dist/tools/reconciliation/payeeNormalizer.d.ts +6 -0
  188. package/dist/tools/reconciliation/payeeNormalizer.js +77 -0
  189. package/dist/tools/reconciliation/recommendationEngine.d.ts +2 -0
  190. package/dist/tools/reconciliation/recommendationEngine.js +273 -0
  191. package/dist/tools/reconciliation/reportFormatter.d.ts +13 -0
  192. package/dist/tools/reconciliation/reportFormatter.js +214 -0
  193. package/dist/tools/reconciliation/types.d.ts +172 -0
  194. package/dist/tools/reconciliation/types.js +7 -0
  195. package/dist/tools/schemas/outputs/accountOutputs.d.ts +58 -0
  196. package/dist/tools/schemas/outputs/accountOutputs.js +24 -0
  197. package/dist/tools/schemas/outputs/budgetOutputs.d.ts +48 -0
  198. package/dist/tools/schemas/outputs/budgetOutputs.js +15 -0
  199. package/dist/tools/schemas/outputs/categoryOutputs.d.ts +93 -0
  200. package/dist/tools/schemas/outputs/categoryOutputs.js +37 -0
  201. package/dist/tools/schemas/outputs/comparisonOutputs.d.ts +269 -0
  202. package/dist/tools/schemas/outputs/comparisonOutputs.js +181 -0
  203. package/dist/tools/schemas/outputs/index.d.ts +14 -0
  204. package/dist/tools/schemas/outputs/index.js +14 -0
  205. package/dist/tools/schemas/outputs/monthOutputs.d.ts +122 -0
  206. package/dist/tools/schemas/outputs/monthOutputs.js +51 -0
  207. package/dist/tools/schemas/outputs/payeeOutputs.d.ts +34 -0
  208. package/dist/tools/schemas/outputs/payeeOutputs.js +16 -0
  209. package/dist/tools/schemas/outputs/reconciliationOutputs.d.ts +1275 -0
  210. package/dist/tools/schemas/outputs/reconciliationOutputs.js +377 -0
  211. package/dist/tools/schemas/outputs/transactionMutationOutputs.d.ts +717 -0
  212. package/dist/tools/schemas/outputs/transactionMutationOutputs.js +260 -0
  213. package/dist/tools/schemas/outputs/transactionOutputs.d.ts +98 -0
  214. package/dist/tools/schemas/outputs/transactionOutputs.js +49 -0
  215. package/dist/tools/schemas/outputs/utilityOutputs.d.ts +219 -0
  216. package/dist/tools/schemas/outputs/utilityOutputs.js +120 -0
  217. package/dist/tools/schemas/shared/commonOutputs.d.ts +24 -0
  218. package/dist/tools/schemas/shared/commonOutputs.js +27 -0
  219. package/dist/tools/toolCategories.d.ts +32 -0
  220. package/dist/tools/toolCategories.js +32 -0
  221. package/dist/tools/transactionTools.d.ts +315 -0
  222. package/dist/tools/transactionTools.js +1722 -0
  223. package/dist/tools/utilityTools.d.ts +10 -0
  224. package/dist/tools/utilityTools.js +56 -0
  225. package/dist/types/index.d.ts +20 -0
  226. package/dist/types/index.js +16 -0
  227. package/dist/types/toolAnnotations.d.ts +7 -0
  228. package/dist/types/toolAnnotations.js +1 -0
  229. package/dist/utils/amountUtils.d.ts +3 -0
  230. package/dist/utils/amountUtils.js +10 -0
  231. package/dist/utils/dateUtils.d.ts +9 -0
  232. package/dist/utils/dateUtils.js +43 -0
  233. package/dist/utils/money.d.ts +21 -0
  234. package/dist/utils/money.js +51 -0
  235. package/docs/README.md +72 -0
  236. package/docs/assets/examples/reconciliation-with-recommendations.json +68 -0
  237. package/docs/assets/schemas/reconciliation-v2.json +338 -0
  238. package/docs/getting-started/CONFIGURATION.md +175 -0
  239. package/docs/getting-started/INSTALLATION.md +333 -0
  240. package/docs/getting-started/QUICKSTART.md +282 -0
  241. package/docs/guides/ARCHITECTURE.md +650 -0
  242. package/docs/guides/DEPLOYMENT.md +189 -0
  243. package/docs/guides/INTEGRATION_TESTING.md +730 -0
  244. package/docs/guides/TESTING.md +591 -0
  245. package/docs/reconciliation-flow.md +83 -0
  246. package/docs/reference/API.md +1450 -0
  247. package/docs/reference/EXAMPLES.md +946 -0
  248. package/docs/reference/TOOLS.md +348 -0
  249. package/docs/reference/TROUBLESHOOTING.md +481 -0
  250. package/esbuild.config.mjs +68 -0
  251. package/eslint.config.js +49 -0
  252. package/fix-types.sh +17 -0
  253. package/meta.json +12550 -0
  254. package/package.json +105 -0
  255. package/package.json.tmp +105 -0
  256. package/scripts/analyze-bundle.mjs +41 -0
  257. package/scripts/create-pr-description.js +203 -0
  258. package/scripts/generate-mcpb.ps1 +96 -0
  259. package/scripts/run-domain-integration-tests.js +33 -0
  260. package/scripts/run-generate-mcpb.js +29 -0
  261. package/scripts/run-throttled-integration-tests.js +116 -0
  262. package/scripts/test-delta-params.mjs +140 -0
  263. package/scripts/test-recommendations.ts +53 -0
  264. package/scripts/tmpTransaction.ts +48 -0
  265. package/scripts/validate-env.js +122 -0
  266. package/scripts/verify-build.js +105 -0
  267. package/scripts/watch-and-restart.ps1 +50 -0
  268. package/src/__tests__/comprehensive.integration.test.ts +1196 -0
  269. package/src/__tests__/delta.performance.test.ts +80 -0
  270. package/src/__tests__/performance.test.ts +725 -0
  271. package/src/__tests__/setup.ts +449 -0
  272. package/src/__tests__/testRunner.ts +444 -0
  273. package/src/__tests__/testUtils.ts +563 -0
  274. package/src/__tests__/workflows.e2e.test.ts +1675 -0
  275. package/src/index.ts +124 -0
  276. package/src/server/.gitkeep +1 -0
  277. package/src/server/YNABMCPServer.ts +1188 -0
  278. package/src/server/__tests__/YNABMCPServer.integration.test.ts +903 -0
  279. package/src/server/__tests__/YNABMCPServer.test.ts +894 -0
  280. package/src/server/__tests__/budgetResolver.test.ts +425 -0
  281. package/src/server/__tests__/cacheManager.test.ts +880 -0
  282. package/src/server/__tests__/config.test.ts +166 -0
  283. package/src/server/__tests__/deltaCache.merge.test.ts +724 -0
  284. package/src/server/__tests__/deltaCache.swr.test.ts +168 -0
  285. package/src/server/__tests__/deltaCache.test.ts +774 -0
  286. package/src/server/__tests__/diagnostics.test.ts +823 -0
  287. package/src/server/__tests__/errorHandler.integration.test.ts +466 -0
  288. package/src/server/__tests__/errorHandler.test.ts +416 -0
  289. package/src/server/__tests__/prompts.test.ts +354 -0
  290. package/src/server/__tests__/rateLimiter.test.ts +314 -0
  291. package/src/server/__tests__/requestLogger.test.ts +408 -0
  292. package/src/server/__tests__/resources.test.ts +299 -0
  293. package/src/server/__tests__/security.integration.test.ts +426 -0
  294. package/src/server/__tests__/securityMiddleware.test.ts +449 -0
  295. package/src/server/__tests__/server-startup.integration.test.ts +477 -0
  296. package/src/server/__tests__/serverKnowledgeStore.test.ts +174 -0
  297. package/src/server/__tests__/toolRegistry.test.ts +855 -0
  298. package/src/server/budgetResolver.ts +235 -0
  299. package/src/server/cacheManager.ts +503 -0
  300. package/src/server/config.ts +41 -0
  301. package/src/server/deltaCache.merge.ts +149 -0
  302. package/src/server/deltaCache.ts +341 -0
  303. package/src/server/diagnostics.ts +338 -0
  304. package/src/server/errorHandler.ts +756 -0
  305. package/src/server/prompts.ts +291 -0
  306. package/src/server/rateLimiter.ts +156 -0
  307. package/src/server/requestLogger.ts +344 -0
  308. package/src/server/resources.ts +168 -0
  309. package/src/server/responseFormatter.ts +51 -0
  310. package/src/server/securityMiddleware.ts +236 -0
  311. package/src/server/serverKnowledgeStore.ts +91 -0
  312. package/src/server/toolRegistry.ts +489 -0
  313. package/src/tools/.gitkeep +1 -0
  314. package/src/tools/__tests__/accountTools.delta.integration.test.ts +128 -0
  315. package/src/tools/__tests__/accountTools.integration.test.ts +117 -0
  316. package/src/tools/__tests__/accountTools.test.ts +653 -0
  317. package/src/tools/__tests__/budgetTools.delta.integration.test.ts +90 -0
  318. package/src/tools/__tests__/budgetTools.integration.test.ts +134 -0
  319. package/src/tools/__tests__/budgetTools.test.ts +423 -0
  320. package/src/tools/__tests__/categoryTools.delta.integration.test.ts +80 -0
  321. package/src/tools/__tests__/categoryTools.integration.test.ts +295 -0
  322. package/src/tools/__tests__/categoryTools.test.ts +622 -0
  323. package/src/tools/__tests__/compareTransactions/formatter.test.ts +486 -0
  324. package/src/tools/__tests__/compareTransactions/index.test.ts +383 -0
  325. package/src/tools/__tests__/compareTransactions/matcher.test.ts +410 -0
  326. package/src/tools/__tests__/compareTransactions/parser.test.ts +764 -0
  327. package/src/tools/__tests__/compareTransactions.test.ts +342 -0
  328. package/src/tools/__tests__/compareTransactions.window.test.ts +147 -0
  329. package/src/tools/__tests__/deltaFetcher.scheduled.integration.test.ts +76 -0
  330. package/src/tools/__tests__/deltaFetcher.test.ts +270 -0
  331. package/src/tools/__tests__/deltaSupport.test.ts +188 -0
  332. package/src/tools/__tests__/deltaTestUtils.ts +46 -0
  333. package/src/tools/__tests__/exportTransactions.test.ts +213 -0
  334. package/src/tools/__tests__/monthTools.delta.integration.test.ts +80 -0
  335. package/src/tools/__tests__/monthTools.integration.test.ts +174 -0
  336. package/src/tools/__tests__/monthTools.test.ts +523 -0
  337. package/src/tools/__tests__/payeeTools.delta.integration.test.ts +80 -0
  338. package/src/tools/__tests__/payeeTools.integration.test.ts +150 -0
  339. package/src/tools/__tests__/payeeTools.test.ts +445 -0
  340. package/src/tools/__tests__/transactionTools.integration.test.ts +762 -0
  341. package/src/tools/__tests__/transactionTools.test.ts +3521 -0
  342. package/src/tools/__tests__/utilityTools.integration.test.ts +128 -0
  343. package/src/tools/__tests__/utilityTools.test.ts +205 -0
  344. package/src/tools/accountTools.ts +283 -0
  345. package/src/tools/budgetTools.ts +112 -0
  346. package/src/tools/categoryTools.ts +366 -0
  347. package/src/tools/compareTransactions/formatter.ts +163 -0
  348. package/src/tools/compareTransactions/index.ts +228 -0
  349. package/src/tools/compareTransactions/matcher.ts +240 -0
  350. package/src/tools/compareTransactions/parser.ts +557 -0
  351. package/src/tools/compareTransactions/types.ts +60 -0
  352. package/src/tools/compareTransactions.ts +3 -0
  353. package/src/tools/deltaFetcher.ts +278 -0
  354. package/src/tools/deltaSupport.ts +293 -0
  355. package/src/tools/exportTransactions.ts +273 -0
  356. package/src/tools/monthTools.ts +164 -0
  357. package/src/tools/payeeTools.ts +140 -0
  358. package/src/tools/reconcileAdapter.ts +312 -0
  359. package/src/tools/reconciliation/__tests__/adapter.causes.test.ts +122 -0
  360. package/src/tools/reconciliation/__tests__/adapter.test.ts +234 -0
  361. package/src/tools/reconciliation/__tests__/analyzer.test.ts +406 -0
  362. package/src/tools/reconciliation/__tests__/executor.integration.test.ts +366 -0
  363. package/src/tools/reconciliation/__tests__/executor.test.ts +779 -0
  364. package/src/tools/reconciliation/__tests__/matcher.test.ts +650 -0
  365. package/src/tools/reconciliation/__tests__/payeeNormalizer.test.ts +278 -0
  366. package/src/tools/reconciliation/__tests__/recommendationEngine.integration.test.ts +658 -0
  367. package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +1000 -0
  368. package/src/tools/reconciliation/__tests__/reconciliation.delta.integration.test.ts +151 -0
  369. package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +573 -0
  370. package/src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts +78 -0
  371. package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +47 -0
  372. package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +61 -0
  373. package/src/tools/reconciliation/__tests__/schemaUrl.test.ts +49 -0
  374. package/src/tools/reconciliation/analyzer.ts +824 -0
  375. package/src/tools/reconciliation/executor.ts +880 -0
  376. package/src/tools/reconciliation/index.ts +400 -0
  377. package/src/tools/reconciliation/matcher.ts +269 -0
  378. package/src/tools/reconciliation/payeeNormalizer.ts +167 -0
  379. package/src/tools/reconciliation/recommendationEngine.ts +506 -0
  380. package/src/tools/reconciliation/reportFormatter.ts +363 -0
  381. package/src/tools/reconciliation/types.ts +314 -0
  382. package/src/tools/schemas/outputs/__tests__/accountOutputs.test.ts +424 -0
  383. package/src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts +310 -0
  384. package/src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts +448 -0
  385. package/src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts +519 -0
  386. package/src/tools/schemas/outputs/__tests__/dateValidation.test.ts +155 -0
  387. package/src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts +288 -0
  388. package/src/tools/schemas/outputs/__tests__/monthOutputs.test.ts +478 -0
  389. package/src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts +370 -0
  390. package/src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts +401 -0
  391. package/src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts +213 -0
  392. package/src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts +474 -0
  393. package/src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts +333 -0
  394. package/src/tools/schemas/outputs/accountOutputs.ts +137 -0
  395. package/src/tools/schemas/outputs/budgetOutputs.ts +86 -0
  396. package/src/tools/schemas/outputs/categoryOutputs.ts +194 -0
  397. package/src/tools/schemas/outputs/comparisonOutputs.ts +600 -0
  398. package/src/tools/schemas/outputs/index.ts +270 -0
  399. package/src/tools/schemas/outputs/monthOutputs.ts +243 -0
  400. package/src/tools/schemas/outputs/payeeOutputs.ts +105 -0
  401. package/src/tools/schemas/outputs/reconciliationOutputs.ts +796 -0
  402. package/src/tools/schemas/outputs/transactionMutationOutputs.ts +758 -0
  403. package/src/tools/schemas/outputs/transactionOutputs.ts +243 -0
  404. package/src/tools/schemas/outputs/utilityOutputs.ts +411 -0
  405. package/src/tools/schemas/shared/commonOutputs.ts +140 -0
  406. package/src/tools/toolCategories.ts +140 -0
  407. package/src/tools/transactionTools.ts +2509 -0
  408. package/src/tools/utilityTools.ts +90 -0
  409. package/src/types/.gitkeep +1 -0
  410. package/src/types/__tests__/index.test.ts +52 -0
  411. package/src/types/index.ts +67 -0
  412. package/src/types/integration-tests.d.ts +35 -0
  413. package/src/types/toolAnnotations.ts +44 -0
  414. package/src/utils/__tests__/dateUtils.test.ts +170 -0
  415. package/src/utils/__tests__/money.test.ts +189 -0
  416. package/src/utils/amountUtils.ts +32 -0
  417. package/src/utils/dateUtils.ts +108 -0
  418. package/src/utils/money.ts +123 -0
  419. package/test-csv-sample.csv +28 -0
  420. package/test-exports/sample_bank_statement.csv +7 -0
  421. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +23 -0
  422. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +23 -0
  423. package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +44 -0
  424. package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +58 -0
  425. package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +115 -0
  426. package/test-reconcile-autodetect.js +40 -0
  427. package/test-reconcile-tool.js +152 -0
  428. package/test-reconcile-with-csv.cjs +89 -0
  429. package/test-statement.csv +8 -0
  430. package/test_debug.js +47 -0
  431. package/test_simple.mjs +16 -0
  432. package/tsconfig.json +31 -0
  433. package/tsconfig.prod.json +18 -0
  434. package/vitest-reporters/split-json-reporter.ts +211 -0
  435. package/vitest.config.ts +96 -0
@@ -0,0 +1,243 @@
1
+ /**
2
+ * @fileoverview Output schemas for transaction-related tools.
3
+ *
4
+ * Defines Zod schemas and TypeScript types for responses from transaction tools:
5
+ * - `list_transactions`: Returns transactions with two modes (normal and preview for large responses)
6
+ * - `get_transaction`: Returns a single transaction with cache metadata
7
+ *
8
+ * The list_transactions tool implements special handling for large responses:
9
+ * - Normal mode: Returns all transactions with cache metadata
10
+ * - Preview mode: Returns a preview of first 10 transactions when count > 100
11
+ *
12
+ * @see src/tools/transactionTools.ts:745-864 for list_transactions handler
13
+ * @see src/tools/transactionTools.ts:870-944 for get_transaction handler
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Normal mode (count <= 100)
18
+ * const listOutput: ListTransactionsOutput = {
19
+ * total_count: 50,
20
+ * cached: true,
21
+ * cache_info: {
22
+ * cache_key: 'transactions:budget-123:2025-11-01',
23
+ * age_ms: 2000,
24
+ * stale: false
25
+ * },
26
+ * transactions: [
27
+ * {
28
+ * id: 'txn-123',
29
+ * date: '2025-11-17',
30
+ * amount: -45.50,
31
+ * memo: 'Grocery shopping',
32
+ * cleared: 'cleared',
33
+ * approved: true,
34
+ * flag_color: 'red',
35
+ * account_id: 'account-123',
36
+ * payee_id: 'payee-456',
37
+ * category_id: 'category-789',
38
+ * deleted: false,
39
+ * account_name: 'Checking',
40
+ * payee_name: 'Whole Foods',
41
+ * category_name: 'Groceries'
42
+ * }
43
+ * ]
44
+ * };
45
+ *
46
+ * // Preview mode (count > 100)
47
+ * const previewOutput: ListTransactionsOutput = {
48
+ * message: 'Large result set detected',
49
+ * suggestion: 'Use filter parameters to narrow results',
50
+ * showing: 'First 50 transactions:',
51
+ * total_count: 250,
52
+ * estimated_size_kb: 150,
53
+ * preview_transactions: [
54
+ * {
55
+ * id: 'txn-123',
56
+ * date: '2025-11-17',
57
+ * amount: -45.50,
58
+ * memo: 'Grocery shopping',
59
+ * payee_name: 'Whole Foods',
60
+ * category_name: 'Groceries'
61
+ * }
62
+ * ]
63
+ * };
64
+ *
65
+ * // Get single transaction
66
+ * const getOutput: GetTransactionOutput = {
67
+ * transaction: {
68
+ * id: 'txn-123',
69
+ * date: '2025-11-17',
70
+ * amount: -45.50,
71
+ * memo: 'Grocery shopping',
72
+ * cleared: 'cleared',
73
+ * approved: true,
74
+ * account_id: 'account-123',
75
+ * payee_id: 'payee-456',
76
+ * category_id: 'category-789',
77
+ * deleted: false,
78
+ * account_name: 'Checking',
79
+ * payee_name: 'Whole Foods',
80
+ * category_name: 'Groceries'
81
+ * },
82
+ * cached: false,
83
+ * cache_info: {
84
+ * cache_key: 'transaction:budget-123:txn-123',
85
+ * age_ms: 0,
86
+ * stale: false
87
+ * }
88
+ * };
89
+ * ```
90
+ */
91
+
92
+ import { z } from 'zod/v4';
93
+ import { CacheMetadataSchema } from '../shared/commonOutputs.js';
94
+
95
+ /**
96
+ * Schema for a complete transaction object.
97
+ *
98
+ * Represents full transaction data with amounts in dollars (converted from YNAB milliunits).
99
+ */
100
+ export const TransactionSchema = z.object({
101
+ /** Unique identifier for the transaction */
102
+ id: z.string().describe('Transaction ID'),
103
+
104
+ /** Transaction date (YYYY-MM-DD format) */
105
+ date: z.string().describe('Transaction date'),
106
+
107
+ /** Transaction amount in dollars (negative for outflows, positive for inflows) */
108
+ amount: z.number().describe('Transaction amount in dollars'),
109
+
110
+ /** Optional transaction memo */
111
+ memo: z.string().optional().describe('Transaction memo'),
112
+
113
+ /** Cleared status (uncleared, cleared, reconciled) */
114
+ cleared: z.string().describe('Cleared status'),
115
+
116
+ /** Whether transaction is approved */
117
+ approved: z.boolean().describe('Approved flag'),
118
+
119
+ /** Optional flag color */
120
+ flag_color: z.string().optional().describe('Flag color'),
121
+
122
+ /** Account ID for this transaction */
123
+ account_id: z.string().describe('Account ID'),
124
+
125
+ /** Optional payee ID */
126
+ payee_id: z.string().nullish().describe('Payee ID'),
127
+
128
+ /** Optional category ID */
129
+ category_id: z.string().nullish().describe('Category ID'),
130
+
131
+ /** Optional transfer account ID (for transfer transactions) */
132
+ transfer_account_id: z.string().nullish().describe('Transfer account ID'),
133
+
134
+ /** Optional transfer transaction ID (for transfer transactions) */
135
+ transfer_transaction_id: z.string().nullish().describe('Transfer transaction ID'),
136
+
137
+ /** Optional matched transaction ID (for imported transactions) */
138
+ matched_transaction_id: z.string().nullish().describe('Matched transaction ID'),
139
+
140
+ /** Optional import ID */
141
+ import_id: z.string().optional().describe('Import ID'),
142
+
143
+ /** Whether transaction is deleted */
144
+ deleted: z.boolean().describe('Deleted flag'),
145
+
146
+ /** Account name (enriched field, optional) */
147
+ account_name: z.string().optional().describe('Account name'),
148
+
149
+ /** Payee name (enriched field, optional) */
150
+ payee_name: z.string().optional().describe('Payee name'),
151
+
152
+ /** Category name (enriched field, optional) */
153
+ category_name: z.string().optional().describe('Category name'),
154
+ });
155
+
156
+ /**
157
+ * Schema for a transaction preview object.
158
+ *
159
+ * Subset of transaction fields shown in preview mode for large result sets.
160
+ */
161
+ export const TransactionPreviewSchema = z.object({
162
+ /** Unique identifier for the transaction */
163
+ id: z.string().describe('Transaction ID'),
164
+
165
+ /** Transaction date (YYYY-MM-DD format) */
166
+ date: z.string().describe('Transaction date'),
167
+
168
+ /** Transaction amount in dollars */
169
+ amount: z.number().describe('Transaction amount in dollars'),
170
+
171
+ /** Optional transaction memo */
172
+ memo: z.string().optional().describe('Transaction memo'),
173
+
174
+ /** Payee name (enriched field, optional) */
175
+ payee_name: z.string().optional().describe('Payee name'),
176
+
177
+ /** Category name (enriched field, optional) */
178
+ category_name: z.string().optional().describe('Category name'),
179
+ });
180
+
181
+ /**
182
+ * Schema for `list_transactions` tool output (normal mode).
183
+ *
184
+ * Returns all transactions when count <= 100.
185
+ */
186
+ const ListTransactionsNormalSchema = CacheMetadataSchema.extend({
187
+ /** Total number of transactions */
188
+ total_count: z.number().int().describe('Total transaction count'),
189
+
190
+ /** Array of complete transaction objects */
191
+ transactions: z.array(TransactionSchema).describe('List of transactions'),
192
+ });
193
+
194
+ /**
195
+ * Schema for `list_transactions` tool output (preview mode).
196
+ *
197
+ * Returns a preview when count > 100 to avoid overwhelming responses.
198
+ */
199
+ const ListTransactionsPreviewSchema = z.object({
200
+ /** Message explaining large result set */
201
+ message: z.string().describe('Large result set message'),
202
+
203
+ /** Suggestion to narrow results */
204
+ suggestion: z.string().describe('Suggestion to narrow results'),
205
+
206
+ /** Human-readable summary of transactions shown in preview (e.g., "First 50 transactions:") */
207
+ showing: z.string().describe('Human-readable summary of transactions shown'),
208
+
209
+ /** Total number of transactions */
210
+ total_count: z.number().int().describe('Total transaction count'),
211
+
212
+ /** Estimated response size in KB if all transactions returned */
213
+ estimated_size_kb: z.number().describe('Estimated response size in KB'),
214
+
215
+ /** Array of preview transaction objects */
216
+ preview_transactions: z.array(TransactionPreviewSchema).describe('Preview transactions'),
217
+ });
218
+
219
+ /**
220
+ * Schema for `list_transactions` tool output.
221
+ *
222
+ * Discriminated union supporting both normal and preview response modes.
223
+ */
224
+ export const ListTransactionsOutputSchema = z.union([
225
+ ListTransactionsNormalSchema,
226
+ ListTransactionsPreviewSchema,
227
+ ]);
228
+
229
+ /**
230
+ * Schema for `get_transaction` tool output.
231
+ *
232
+ * Returns a single transaction by ID with cache metadata.
233
+ */
234
+ export const GetTransactionOutputSchema = CacheMetadataSchema.extend({
235
+ /** Single transaction object */
236
+ transaction: TransactionSchema.describe('Transaction details'),
237
+ });
238
+
239
+ // Export inferred TypeScript types
240
+ export type Transaction = z.infer<typeof TransactionSchema>;
241
+ export type TransactionPreview = z.infer<typeof TransactionPreviewSchema>;
242
+ export type ListTransactionsOutput = z.infer<typeof ListTransactionsOutputSchema>;
243
+ export type GetTransactionOutput = z.infer<typeof GetTransactionOutputSchema>;
@@ -0,0 +1,411 @@
1
+ /**
2
+ * @fileoverview Output schemas for utility tools
3
+ *
4
+ * This file contains comprehensive Zod schemas for validating the output
5
+ * of utility tools including user info, amount conversion, budget defaults,
6
+ * cache management, output formatting, and diagnostic information.
7
+ *
8
+ * All schemas include TypeScript type inference for type-safe usage throughout
9
+ * the codebase. Reference the corresponding handler implementations for
10
+ * exact response shape details.
11
+ */
12
+
13
+ import { z } from 'zod/v4';
14
+ import { SuccessResponseSchema } from '../shared/commonOutputs.js';
15
+
16
+ // ============================================================================
17
+ // GET USER OUTPUT
18
+ // ============================================================================
19
+
20
+ /**
21
+ * Schema for YNAB user object
22
+ *
23
+ * Represents the authenticated user's information from YNAB API.
24
+ */
25
+ export const UserSchema = z.object({
26
+ id: z.string(),
27
+ });
28
+
29
+ /**
30
+ * Output schema for get_user tool
31
+ *
32
+ * Returns information about the authenticated YNAB user.
33
+ *
34
+ * @see src/tools/utilityTools.ts:23-45 - Handler implementation
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const output: GetUserOutput = {
39
+ * user: { id: "abc123" }
40
+ * };
41
+ * ```
42
+ */
43
+ export const GetUserOutputSchema = z.object({
44
+ user: UserSchema,
45
+ });
46
+
47
+ export type GetUserOutput = z.infer<typeof GetUserOutputSchema>;
48
+
49
+ // ============================================================================
50
+ // CONVERT AMOUNT OUTPUT
51
+ // ============================================================================
52
+
53
+ /**
54
+ * Schema for amount conversion details
55
+ *
56
+ * Contains the conversion result between dollars and YNAB milliunits.
57
+ */
58
+ export const ConversionSchema = z.object({
59
+ original_amount: z.number(),
60
+ converted_amount: z.number(),
61
+ to_milliunits: z.boolean(),
62
+ description: z.string(),
63
+ });
64
+
65
+ /**
66
+ * Output schema for convert_amount tool
67
+ *
68
+ * Converts between dollars and YNAB milliunits (1 dollar = 1000 milliunits).
69
+ *
70
+ * @see src/tools/utilityTools.ts:51-90 - Handler implementation
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const output: ConvertAmountOutput = {
75
+ * conversion: {
76
+ * original_amount: 25.50,
77
+ * converted_amount: 25500,
78
+ * to_milliunits: true,
79
+ * description: "$25.50 converted to 25500 milliunits"
80
+ * }
81
+ * };
82
+ * ```
83
+ */
84
+ export const ConvertAmountOutputSchema = z.object({
85
+ conversion: ConversionSchema,
86
+ });
87
+
88
+ export type ConvertAmountOutput = z.infer<typeof ConvertAmountOutputSchema>;
89
+
90
+ // ============================================================================
91
+ // GET DEFAULT BUDGET OUTPUT
92
+ // ============================================================================
93
+
94
+ /**
95
+ * Output schema for get_default_budget tool
96
+ *
97
+ * Returns the currently configured default budget ID (if any).
98
+ *
99
+ * @see src/server/YNABMCPServer.ts:474-510 - Handler implementation
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const output: GetDefaultBudgetOutput = {
104
+ * default_budget_id: "abc123",
105
+ * has_default: true,
106
+ * message: "Default budget ID: abc123"
107
+ * };
108
+ * ```
109
+ */
110
+ export const GetDefaultBudgetOutputSchema = z.object({
111
+ default_budget_id: z.string().nullable(),
112
+ has_default: z.boolean(),
113
+ message: z.string(),
114
+ });
115
+
116
+ export type GetDefaultBudgetOutput = z.infer<typeof GetDefaultBudgetOutputSchema>;
117
+
118
+ // ============================================================================
119
+ // SET DEFAULT BUDGET OUTPUT
120
+ // ============================================================================
121
+
122
+ /**
123
+ * Output schema for set_default_budget tool
124
+ *
125
+ * Confirms the default budget has been set and indicates whether cache warming started.
126
+ *
127
+ * @see src/server/YNABMCPServer.ts:437-471 - Handler implementation
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * const output: SetDefaultBudgetOutput = {
132
+ * success: true,
133
+ * message: "Default budget set to 'My Budget' and cache warming started",
134
+ * default_budget_id: "abc123",
135
+ * cache_warm_started: true
136
+ * };
137
+ * ```
138
+ */
139
+ export const SetDefaultBudgetOutputSchema = SuccessResponseSchema.extend({
140
+ default_budget_id: z.string(),
141
+ cache_warm_started: z.boolean(),
142
+ });
143
+
144
+ export type SetDefaultBudgetOutput = z.infer<typeof SetDefaultBudgetOutputSchema>;
145
+
146
+ // ============================================================================
147
+ // CLEAR CACHE OUTPUT
148
+ // ============================================================================
149
+
150
+ /**
151
+ * Output schema for clear_cache tool
152
+ *
153
+ * Simple success confirmation for cache clearing operation.
154
+ *
155
+ * @see src/server/YNABMCPServer.ts:852-868 - Handler implementation
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const output: ClearCacheOutput = {
160
+ * success: true
161
+ * };
162
+ * ```
163
+ */
164
+ export const ClearCacheOutputSchema = SuccessResponseSchema.pick({ success: true });
165
+
166
+ export type ClearCacheOutput = z.infer<typeof ClearCacheOutputSchema>;
167
+
168
+ // ============================================================================
169
+ // SET OUTPUT FORMAT OUTPUT
170
+ // ============================================================================
171
+
172
+ /**
173
+ * Output schema for set_output_format tool
174
+ *
175
+ * Confirms output format settings have been updated.
176
+ *
177
+ * @see src/server/YNABMCPServer.ts:870-898 - Handler implementation
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * const output: SetOutputFormatOutput = {
182
+ * success: true,
183
+ * message: "Output format configured: minify=true, spaces=2",
184
+ * options: { defaultMinify: true, prettySpaces: 2 }
185
+ * };
186
+ * ```
187
+ */
188
+ export const SetOutputFormatOutputSchema = SuccessResponseSchema.extend({
189
+ options: z.object({
190
+ defaultMinify: z.boolean().optional(),
191
+ prettySpaces: z.number().optional(),
192
+ }),
193
+ });
194
+
195
+ export type SetOutputFormatOutput = z.infer<typeof SetOutputFormatOutputSchema>;
196
+
197
+ // ============================================================================
198
+ // DIAGNOSTIC INFO OUTPUT
199
+ // ============================================================================
200
+
201
+ /**
202
+ * Schema for server diagnostic information
203
+ *
204
+ * Contains runtime information about the MCP server process.
205
+ */
206
+ export const ServerInfoSchema = z.object({
207
+ name: z.string(),
208
+ version: z.string(),
209
+ node_version: z.string(),
210
+ platform: z.string(),
211
+ arch: z.string(),
212
+ pid: z.number(),
213
+ uptime_ms: z.number(),
214
+ uptime_readable: z.string(),
215
+ env: z.record(z.string(), z.unknown()),
216
+ });
217
+
218
+ /**
219
+ * Schema for memory usage information
220
+ *
221
+ * Reports memory consumption of the MCP server process.
222
+ */
223
+ export const MemoryInfoSchema = z.object({
224
+ rss_mb: z.number(),
225
+ heap_used_mb: z.number(),
226
+ heap_total_mb: z.number(),
227
+ external_mb: z.number(),
228
+ array_buffers_mb: z.number(),
229
+ description: z.record(z.string(), z.string()),
230
+ });
231
+
232
+ /**
233
+ * Schema for environment configuration information
234
+ *
235
+ * Shows environment variable configuration status.
236
+ */
237
+ export const EnvironmentInfoSchema = z.object({
238
+ token_present: z.boolean(),
239
+ token_length: z.number(),
240
+ token_preview: z.string().nullable(),
241
+ ynab_env_keys_present: z.array(z.string()),
242
+ working_directory: z.string(),
243
+ });
244
+
245
+ /**
246
+ * Schema for cache diagnostic information
247
+ *
248
+ * Reports cache status and performance metrics.
249
+ */
250
+ export const CacheInfoSchema = z.object({
251
+ entries: z.number(),
252
+ estimated_size_kb: z.number(),
253
+ keys: z.array(z.string()),
254
+ // Optional performance metrics
255
+ hits: z.number().optional(),
256
+ misses: z.number().optional(),
257
+ evictions: z.number().optional(),
258
+ lastCleanup: z.string().nullable().optional(),
259
+ maxEntries: z.number().optional(),
260
+ hitRate: z.string().optional(),
261
+ performance_summary: z.string().optional(),
262
+ });
263
+
264
+ /**
265
+ * Schema for delta request optimization information
266
+ *
267
+ * Reports status of delta request feature and knowledge base.
268
+ */
269
+ export const DeltaInfoSchema = z.object({
270
+ enabled: z.boolean(),
271
+ knowledge_entries: z.number(),
272
+ knowledge_stats: z.record(z.string(), z.unknown()),
273
+ feature_flag: z.string(),
274
+ delta_hits: z.number(),
275
+ delta_misses: z.number(),
276
+ delta_hit_rate: z.number(),
277
+ merge_operations: z.number(),
278
+ knowledge_gap_events: z.number(),
279
+ });
280
+
281
+ /**
282
+ * Output schema for diagnostic_info tool
283
+ *
284
+ * Returns comprehensive diagnostic information about the MCP server,
285
+ * including runtime info, memory usage, environment configuration,
286
+ * cache status, and delta request optimization metrics.
287
+ *
288
+ * @see src/server/diagnostics.ts:181-337 - Handler implementation
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * const output: DiagnosticInfoOutput = {
293
+ * timestamp: "2025-01-17T12:34:56.789Z",
294
+ * server: {
295
+ * name: "ynab-mcp-server",
296
+ * version: "0.12.0",
297
+ * node_version: "v20.10.0",
298
+ * // ... other server info
299
+ * },
300
+ * memory: {
301
+ * rss_mb: 45.2,
302
+ * heap_used_mb: 32.1,
303
+ * // ... other memory info
304
+ * },
305
+ * // ... other diagnostic sections
306
+ * };
307
+ * ```
308
+ */
309
+ export const DiagnosticInfoOutputSchema = z.object({
310
+ timestamp: z.string(),
311
+ server: ServerInfoSchema.optional(),
312
+ memory: MemoryInfoSchema.optional(),
313
+ environment: EnvironmentInfoSchema.optional(),
314
+ cache: CacheInfoSchema.optional(),
315
+ delta: DeltaInfoSchema.optional(),
316
+ });
317
+
318
+ export type DiagnosticInfoOutput = z.infer<typeof DiagnosticInfoOutputSchema>;
319
+
320
+ // ============================================================================
321
+ // GET BUDGET OUTPUT
322
+ // ============================================================================
323
+
324
+ /**
325
+ * Schema for YNAB date format configuration
326
+ *
327
+ * Represents how dates are formatted in the YNAB budget.
328
+ */
329
+ export const DateFormatSchema = z.object({
330
+ format: z.string(),
331
+ });
332
+
333
+ /**
334
+ * Schema for YNAB currency format configuration
335
+ *
336
+ * Represents how currency values are formatted in the YNAB budget.
337
+ */
338
+ export const CurrencyFormatSchema = z.object({
339
+ iso_code: z.string(),
340
+ example_format: z.string(),
341
+ decimal_digits: z.number(),
342
+ decimal_separator: z.string().optional(),
343
+ symbol_first: z.boolean().optional(),
344
+ group_separator: z.string().optional(),
345
+ currency_symbol: z.string().optional(),
346
+ display_symbol: z.boolean().optional(),
347
+ });
348
+
349
+ /**
350
+ * Schema for detailed budget information
351
+ *
352
+ * Contains comprehensive details about a YNAB budget including
353
+ * format settings and entity counts.
354
+ */
355
+ export const BudgetDetailSchema = z.object({
356
+ id: z.string(),
357
+ name: z.string(),
358
+ last_modified_on: z.string().optional(),
359
+ first_month: z.string().optional(),
360
+ last_month: z.string().optional(),
361
+ date_format: DateFormatSchema.optional(),
362
+ currency_format: CurrencyFormatSchema.optional(),
363
+ accounts_count: z.number(),
364
+ categories_count: z.number(),
365
+ payees_count: z.number(),
366
+ months_count: z.number(),
367
+ message: z.string(),
368
+ });
369
+
370
+ /**
371
+ * Output schema for get_budget tool
372
+ *
373
+ * Returns detailed information about a specific budget including
374
+ * format settings, date ranges, and counts of budget entities.
375
+ *
376
+ * @see src/tools/budgetTools.ts:73-112 - Handler implementation
377
+ *
378
+ * @example
379
+ * ```typescript
380
+ * const output: GetBudgetOutput = {
381
+ * budget: {
382
+ * id: "abc123",
383
+ * name: "My Budget",
384
+ * last_modified_on: "2025-01-17T12:00:00Z",
385
+ * first_month: "2024-01",
386
+ * last_month: "2025-12",
387
+ * date_format: { format: "MM/DD/YYYY" },
388
+ * currency_format: {
389
+ * iso_code: "USD",
390
+ * example_format: "$1,234.56",
391
+ * decimal_digits: 2,
392
+ * decimal_separator: ".",
393
+ * symbol_first: true,
394
+ * group_separator: ",",
395
+ * currency_symbol: "$",
396
+ * display_symbol: true
397
+ * },
398
+ * accounts_count: 5,
399
+ * categories_count: 25,
400
+ * payees_count: 100,
401
+ * months_count: 24,
402
+ * message: "Budget 'My Budget' retrieved successfully"
403
+ * }
404
+ * };
405
+ * ```
406
+ */
407
+ export const GetBudgetOutputSchema = z.object({
408
+ budget: BudgetDetailSchema,
409
+ });
410
+
411
+ export type GetBudgetOutput = z.infer<typeof GetBudgetOutputSchema>;