@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.
- package/.chunkhound.json +11 -0
- package/.code/agents/0427d95e-edca-431f-a214-5e53264e29c4/error.txt +8 -0
- package/.code/agents/0d675174-d1e1-41c3-9975-4c2e275819a9/error.txt +3 -0
- package/.code/agents/0d8c5afd-4787-422b-abf8-2e5943fc7e67/error.txt +3 -0
- package/.code/agents/0ec34a70-ed5d-4b9e-bee4-bb0e4cccbc4b/error.txt +1 -0
- package/.code/agents/0ef51a21-1ab1-49d7-9561-0eaa43875ebc/error.txt +12 -0
- package/.code/agents/15db95d7-abad-4b4d-9c3b-8446089cb61d/error.txt +1 -0
- package/.code/agents/19ab9acb-f675-4ff0-902a-09a5476f8149/error.txt +1 -0
- package/.code/agents/1ef7e12d-f6ff-4897-8a9b-152d523d898e/error.txt +5 -0
- package/.code/agents/2465/exec-call_lroN9KKzJVWC7t5423DK1nT9.txt +1453 -0
- package/.code/agents/28edb6fe-95a9-41a0-ae69-aa0100d26c0c/error.txt +8 -0
- package/.code/agents/2ae40cf5-b4bf-42e2-92bf-7ea350a7755e/error.txt +9 -0
- package/.code/agents/2bfc4e1f-ac4b-45a5-b6df-bf89d4dbb54c/error.txt +1 -0
- package/.code/agents/2e2e1134-eff0-49be-ba25-8e2c3468a564/error.txt +5 -0
- package/.code/agents/3/exec-call_203OC4TNVkLxW7z2HCVEQ1cM.txt +81 -0
- package/.code/agents/3/exec-call_SS5T0XSiXB4LSNzUKTl75wkh.txt +610 -0
- package/.code/agents/3322c003-ce5e-48e3-a342-f5049c5bf9a2/error.txt +1 -0
- package/.code/agents/391e9b08-1ebc-468c-9bcd-6d0cc3193b37/error.txt +1 -0
- package/.code/agents/3ab0aa84-b7bb-4054-afa3-40b8fd7d3be0/error.txt +1 -0
- package/.code/agents/3bed368d-50fe-477e-aee3-a6707eaa1ab9/error.txt +3 -0
- package/.code/agents/3e40b925-db12-442f-8d7a-a25fc69a6672/error.txt +8 -0
- package/.code/agents/414d5776-cf58-41f3-9328-a6daed503a50/error.txt +5 -0
- package/.code/agents/42687751-4565-4610-b240-67835b17d861/error.txt +1 -0
- package/.code/agents/46b98876-1a39-43c9-9e2f-507ca6d47335/error.txt +9 -0
- package/.code/agents/4a7d9491-b26f-43dd-850d-2ecdc49b5d1b/error.txt +1 -0
- package/.code/agents/4e60f00a-1b3e-447f-87f3-7faf9deddec3/error.txt +13 -0
- package/.code/agents/5138fc1c-4d49-4b74-a7da-ccdb3a8e44e7/error.txt +14 -0
- package/.code/agents/521cff39-a7a3-42e5-a557-134f0f7daaa0/error.txt +5 -0
- package/.code/agents/53302dc5-3857-4413-9a47-9e0f64a51dc4/error.txt +5 -0
- package/.code/agents/567c7c2e-6a6f-4761-a08d-d36deeb2e0ac/error.txt +5 -0
- package/.code/agents/57b00845-80dc-47c9-953c-3028d16275d6/error.txt +3 -0
- package/.code/agents/593d9005-c2a5-48fd-8813-ece0d3f2de96/error.txt +1 -0
- package/.code/agents/5a112e66-0e1a-42f9-877c-53af56ea3551/error.txt +1 -0
- package/.code/agents/5b05e8ed-7788-4738-b7ee-9faa8180f992/error.txt +5 -0
- package/.code/agents/5f888d6f-d7ca-4ac8-be23-9ea1bf753951/error.txt +5 -0
- package/.code/agents/607db3ab-e4b0-435b-b497-93e9aa525549/error.txt +8 -0
- package/.code/agents/67dcb2a2-900f-4c78-b3fc-80b5213e0ddf/error.txt +8 -0
- package/.code/agents/69ad848c-4e98-49b3-b16c-0094ac2d1759/error.txt +5 -0
- package/.code/agents/6c9cfc5f-0d0b-445c-b121-9f60082c4f70/error.txt +1 -0
- package/.code/agents/6f6f8f77-4ab0-4f6e-9f30-40e8be0bd8f5/error.txt +1 -0
- package/.code/agents/72a7cde4-fa8a-4024-9038-27faa550539b/error.txt +1 -0
- package/.code/agents/7b48335c-8247-43aa-9949-5f820ba8e199/error.txt +1 -0
- package/.code/agents/80944249-bea9-4ac5-87de-a666c4df306e/error.txt +1 -0
- package/.code/agents/826099df-1b66-4186-a915-7eb59f9db19d/error.txt +5 -0
- package/.code/agents/8291d158-18a8-4a92-b799-4e9a4d9cce88/error.txt +1 -0
- package/.code/agents/82fb71a3-20fb-4341-804a-a2fc900f95bc/error.txt +1 -0
- package/.code/agents/855790ea-54ee-43e4-8209-a66994e37590/error.txt +1 -0
- package/.code/agents/88ce3a2e-04f2-42be-9062-bf97aa798da0/error.txt +3 -0
- package/.code/agents/9a17e398-b6ed-4218-bb55-bc64a8d38ce8/error.txt +8 -0
- package/.code/agents/9a4f4bfc-a2a6-4f40-a896-9335b41a7ed1/error.txt +1 -0
- package/.code/agents/9b633e55-ef84-47d6-94bb-fd3dd172ad97/error.txt +1 -0
- package/.code/agents/9b81f3ab-c72b-4a81-9a8f-28a49ddba84a/error.txt +8 -0
- package/.code/agents/a35daf29-b2d1-4aef-9b42-dad63a76bd47/error.txt +3 -0
- package/.code/agents/a81990cc-69ee-44d2-b907-17403c9bc5d7/error.txt +5 -0
- package/.code/agents/ab56260a-4a83-4ad4-9410-f88a23d6520a/error.txt +1 -0
- package/.code/agents/ad722c31-2d1d-45f7-bae2-3f02ca455b60/error.txt +1 -0
- package/.code/agents/b62e8690-3324-4b97-9309-731bee79416b/error.txt +5 -0
- package/.code/agents/baf60a3a-752b-4ad8-99d6-df32423ed2eb/error.txt +1 -0
- package/.code/agents/be049042-7dcb-4ac8-9beb-c8f1aea67742/error.txt +14 -0
- package/.code/agents/bed1dcb4-bfce-4a9f-8594-0f994962aafd/error.txt +1 -0
- package/.code/agents/c324a6cf-e935-4ede-9529-b3ebc18e8d6b/error.txt +5 -0
- package/.code/agents/c37c06ff-dfe3-43f2-9bbc-3ec73ec8f41d/error.txt +5 -0
- package/.code/agents/c8cd6671-433a-456b-9f88-e51cb2df6bfc/error.txt +11 -0
- package/.code/agents/ca2ccb67-2f24-428e-b27d-9365beadd140/error.txt +1 -0
- package/.code/agents/cf08c0c8-e7f0-423e-93ba-547e8e818340/error.txt +8 -0
- package/.code/agents/d579c74f-874b-40a4-9d56-ced1eb6a701d/error.txt +1 -0
- package/.code/agents/df412c98-7378-4deb-8e1e-76c416931181/error.txt +3 -0
- package/.code/agents/e5134eb3-2af4-45b0-8998-051cb4afdb45/error.txt +3 -0
- package/.code/agents/e6308471-aa45-4e9e-9496-2e9404164d97/error.txt +8 -0
- package/.code/agents/e7bd8bc7-23fb-4f46-98dc-b0dcf11b75a1/error.txt +1 -0
- package/.code/agents/e92bec35-378d-4fe1-8ac0-6e1bb3c86911/error.txt +5 -0
- package/.code/agents/ed918fbf-2dc4-4aa2-bfc5-04b65d9471ea/error.txt +1 -0
- package/.code/agents/ef1d756f-b272-48fc-8729-f05c494674f7/error.txt +1 -0
- package/.code/agents/ef359853-0249-4e41-a804-c0fc459fe456/error.txt +1 -0
- package/.code/agents/effc7b4a-4b90-40a0-8c86-a7a99d2d5fd2/error.txt +1 -0
- package/.code/agents/fa15f8d5-8359-4a8b-83a3-2f2056b3ff40/error.txt +3 -0
- package/.code/agents/fbef4193-eadf-4c8a-83ff-4878a6310f25/error.txt +8 -0
- package/.code/agents/fd0a4b4a-fda4-4964-a6d6-2b8a2da387c6/error.txt +1 -0
- package/.dxtignore +57 -0
- package/.env.example +44 -0
- package/.gemini/settings.json +8 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- package/.github/ISSUE_TEMPLATE/release_checklist.md +31 -0
- package/.github/pull_request_template.md +41 -0
- package/.github/workflows/ci-tests.yml +41 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +50 -0
- package/.github/workflows/full-integration.yml +22 -0
- package/.github/workflows/pr-description-check.yml +88 -0
- package/.github/workflows/publish.yml +33 -0
- package/.github/workflows/release.yml +89 -0
- package/.mcpbignore +58 -0
- package/.prettierignore +10 -0
- package/.prettierrc.json +10 -0
- package/ADOS-2-Module-1-Complete-Manual.md +757 -0
- package/AGENTS.md +36 -0
- package/CHANGELOG.md +187 -0
- package/CLAUDE.md +414 -0
- package/CODEREVIEW_RESPONSE.md +128 -0
- package/LICENSE +17 -0
- package/NUL +1 -0
- package/README.md +222 -0
- package/SCHEMA_IMPROVEMENT_SUMMARY.md +120 -0
- package/TESTING_NOTES.md +217 -0
- package/WARP.md +245 -0
- package/accountactivity-merged.csv +149 -0
- package/bin/ynab-mcp-server.cjs +4 -0
- package/bin/ynab-mcp-server.js +8 -0
- package/bundle-analysis.html +13110 -0
- package/dist/bundle/index.cjs +124 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +85 -0
- package/dist/server/YNABMCPServer.d.ts +264 -0
- package/dist/server/YNABMCPServer.js +845 -0
- package/dist/server/budgetResolver.d.ts +15 -0
- package/dist/server/budgetResolver.js +99 -0
- package/dist/server/cacheManager.d.ts +74 -0
- package/dist/server/cacheManager.js +306 -0
- package/dist/server/config.d.ts +3 -0
- package/dist/server/config.js +19 -0
- package/dist/server/deltaCache.d.ts +61 -0
- package/dist/server/deltaCache.js +206 -0
- package/dist/server/deltaCache.merge.d.ts +9 -0
- package/dist/server/deltaCache.merge.js +111 -0
- package/dist/server/diagnostics.d.ts +90 -0
- package/dist/server/diagnostics.js +163 -0
- package/dist/server/errorHandler.d.ts +69 -0
- package/dist/server/errorHandler.js +524 -0
- package/dist/server/prompts.d.ts +31 -0
- package/dist/server/prompts.js +205 -0
- package/dist/server/rateLimiter.d.ts +27 -0
- package/dist/server/rateLimiter.js +82 -0
- package/dist/server/requestLogger.d.ts +62 -0
- package/dist/server/requestLogger.js +190 -0
- package/dist/server/resources.d.ts +39 -0
- package/dist/server/resources.js +85 -0
- package/dist/server/responseFormatter.d.ts +14 -0
- package/dist/server/responseFormatter.js +42 -0
- package/dist/server/securityMiddleware.d.ts +87 -0
- package/dist/server/securityMiddleware.js +117 -0
- package/dist/server/serverKnowledgeStore.d.ts +11 -0
- package/dist/server/serverKnowledgeStore.js +42 -0
- package/dist/server/toolRegistry.d.ts +85 -0
- package/dist/server/toolRegistry.js +272 -0
- package/dist/tools/__tests__/deltaTestUtils.d.ts +18 -0
- package/dist/tools/__tests__/deltaTestUtils.js +26 -0
- package/dist/tools/accountTools.d.ts +37 -0
- package/dist/tools/accountTools.js +175 -0
- package/dist/tools/budgetTools.d.ts +10 -0
- package/dist/tools/budgetTools.js +68 -0
- package/dist/tools/categoryTools.d.ts +27 -0
- package/dist/tools/categoryTools.js +232 -0
- package/dist/tools/compareTransactions/formatter.d.ts +71 -0
- package/dist/tools/compareTransactions/formatter.js +97 -0
- package/dist/tools/compareTransactions/index.d.ts +30 -0
- package/dist/tools/compareTransactions/index.js +160 -0
- package/dist/tools/compareTransactions/matcher.d.ts +12 -0
- package/dist/tools/compareTransactions/matcher.js +140 -0
- package/dist/tools/compareTransactions/parser.d.ts +14 -0
- package/dist/tools/compareTransactions/parser.js +430 -0
- package/dist/tools/compareTransactions/types.d.ts +27 -0
- package/dist/tools/compareTransactions/types.js +1 -0
- package/dist/tools/compareTransactions.d.ts +1 -0
- package/dist/tools/compareTransactions.js +1 -0
- package/dist/tools/deltaFetcher.d.ts +22 -0
- package/dist/tools/deltaFetcher.js +137 -0
- package/dist/tools/deltaSupport.d.ts +20 -0
- package/dist/tools/deltaSupport.js +176 -0
- package/dist/tools/exportTransactions.d.ts +17 -0
- package/dist/tools/exportTransactions.js +191 -0
- package/dist/tools/monthTools.d.ts +16 -0
- package/dist/tools/monthTools.js +107 -0
- package/dist/tools/payeeTools.d.ts +17 -0
- package/dist/tools/payeeTools.js +82 -0
- package/dist/tools/reconcileAdapter.d.ts +25 -0
- package/dist/tools/reconcileAdapter.js +167 -0
- package/dist/tools/reconciliation/analyzer.d.ts +3 -0
- package/dist/tools/reconciliation/analyzer.js +567 -0
- package/dist/tools/reconciliation/executor.d.ts +94 -0
- package/dist/tools/reconciliation/executor.js +611 -0
- package/dist/tools/reconciliation/index.d.ts +54 -0
- package/dist/tools/reconciliation/index.js +249 -0
- package/dist/tools/reconciliation/matcher.d.ts +3 -0
- package/dist/tools/reconciliation/matcher.js +160 -0
- package/dist/tools/reconciliation/payeeNormalizer.d.ts +6 -0
- package/dist/tools/reconciliation/payeeNormalizer.js +77 -0
- package/dist/tools/reconciliation/recommendationEngine.d.ts +2 -0
- package/dist/tools/reconciliation/recommendationEngine.js +273 -0
- package/dist/tools/reconciliation/reportFormatter.d.ts +13 -0
- package/dist/tools/reconciliation/reportFormatter.js +214 -0
- package/dist/tools/reconciliation/types.d.ts +172 -0
- package/dist/tools/reconciliation/types.js +7 -0
- package/dist/tools/schemas/outputs/accountOutputs.d.ts +58 -0
- package/dist/tools/schemas/outputs/accountOutputs.js +24 -0
- package/dist/tools/schemas/outputs/budgetOutputs.d.ts +48 -0
- package/dist/tools/schemas/outputs/budgetOutputs.js +15 -0
- package/dist/tools/schemas/outputs/categoryOutputs.d.ts +93 -0
- package/dist/tools/schemas/outputs/categoryOutputs.js +37 -0
- package/dist/tools/schemas/outputs/comparisonOutputs.d.ts +269 -0
- package/dist/tools/schemas/outputs/comparisonOutputs.js +181 -0
- package/dist/tools/schemas/outputs/index.d.ts +14 -0
- package/dist/tools/schemas/outputs/index.js +14 -0
- package/dist/tools/schemas/outputs/monthOutputs.d.ts +122 -0
- package/dist/tools/schemas/outputs/monthOutputs.js +51 -0
- package/dist/tools/schemas/outputs/payeeOutputs.d.ts +34 -0
- package/dist/tools/schemas/outputs/payeeOutputs.js +16 -0
- package/dist/tools/schemas/outputs/reconciliationOutputs.d.ts +1275 -0
- package/dist/tools/schemas/outputs/reconciliationOutputs.js +377 -0
- package/dist/tools/schemas/outputs/transactionMutationOutputs.d.ts +717 -0
- package/dist/tools/schemas/outputs/transactionMutationOutputs.js +260 -0
- package/dist/tools/schemas/outputs/transactionOutputs.d.ts +98 -0
- package/dist/tools/schemas/outputs/transactionOutputs.js +49 -0
- package/dist/tools/schemas/outputs/utilityOutputs.d.ts +219 -0
- package/dist/tools/schemas/outputs/utilityOutputs.js +120 -0
- package/dist/tools/schemas/shared/commonOutputs.d.ts +24 -0
- package/dist/tools/schemas/shared/commonOutputs.js +27 -0
- package/dist/tools/toolCategories.d.ts +32 -0
- package/dist/tools/toolCategories.js +32 -0
- package/dist/tools/transactionTools.d.ts +315 -0
- package/dist/tools/transactionTools.js +1722 -0
- package/dist/tools/utilityTools.d.ts +10 -0
- package/dist/tools/utilityTools.js +56 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.js +16 -0
- package/dist/types/toolAnnotations.d.ts +7 -0
- package/dist/types/toolAnnotations.js +1 -0
- package/dist/utils/amountUtils.d.ts +3 -0
- package/dist/utils/amountUtils.js +10 -0
- package/dist/utils/dateUtils.d.ts +9 -0
- package/dist/utils/dateUtils.js +43 -0
- package/dist/utils/money.d.ts +21 -0
- package/dist/utils/money.js +51 -0
- package/docs/README.md +72 -0
- package/docs/assets/examples/reconciliation-with-recommendations.json +68 -0
- package/docs/assets/schemas/reconciliation-v2.json +338 -0
- package/docs/getting-started/CONFIGURATION.md +175 -0
- package/docs/getting-started/INSTALLATION.md +333 -0
- package/docs/getting-started/QUICKSTART.md +282 -0
- package/docs/guides/ARCHITECTURE.md +650 -0
- package/docs/guides/DEPLOYMENT.md +189 -0
- package/docs/guides/INTEGRATION_TESTING.md +730 -0
- package/docs/guides/TESTING.md +591 -0
- package/docs/reconciliation-flow.md +83 -0
- package/docs/reference/API.md +1450 -0
- package/docs/reference/EXAMPLES.md +946 -0
- package/docs/reference/TOOLS.md +348 -0
- package/docs/reference/TROUBLESHOOTING.md +481 -0
- package/esbuild.config.mjs +68 -0
- package/eslint.config.js +49 -0
- package/fix-types.sh +17 -0
- package/meta.json +12550 -0
- package/package.json +105 -0
- package/package.json.tmp +105 -0
- package/scripts/analyze-bundle.mjs +41 -0
- package/scripts/create-pr-description.js +203 -0
- package/scripts/generate-mcpb.ps1 +96 -0
- package/scripts/run-domain-integration-tests.js +33 -0
- package/scripts/run-generate-mcpb.js +29 -0
- package/scripts/run-throttled-integration-tests.js +116 -0
- package/scripts/test-delta-params.mjs +140 -0
- package/scripts/test-recommendations.ts +53 -0
- package/scripts/tmpTransaction.ts +48 -0
- package/scripts/validate-env.js +122 -0
- package/scripts/verify-build.js +105 -0
- package/scripts/watch-and-restart.ps1 +50 -0
- package/src/__tests__/comprehensive.integration.test.ts +1196 -0
- package/src/__tests__/delta.performance.test.ts +80 -0
- package/src/__tests__/performance.test.ts +725 -0
- package/src/__tests__/setup.ts +449 -0
- package/src/__tests__/testRunner.ts +444 -0
- package/src/__tests__/testUtils.ts +563 -0
- package/src/__tests__/workflows.e2e.test.ts +1675 -0
- package/src/index.ts +124 -0
- package/src/server/.gitkeep +1 -0
- package/src/server/YNABMCPServer.ts +1188 -0
- package/src/server/__tests__/YNABMCPServer.integration.test.ts +903 -0
- package/src/server/__tests__/YNABMCPServer.test.ts +894 -0
- package/src/server/__tests__/budgetResolver.test.ts +425 -0
- package/src/server/__tests__/cacheManager.test.ts +880 -0
- package/src/server/__tests__/config.test.ts +166 -0
- package/src/server/__tests__/deltaCache.merge.test.ts +724 -0
- package/src/server/__tests__/deltaCache.swr.test.ts +168 -0
- package/src/server/__tests__/deltaCache.test.ts +774 -0
- package/src/server/__tests__/diagnostics.test.ts +823 -0
- package/src/server/__tests__/errorHandler.integration.test.ts +466 -0
- package/src/server/__tests__/errorHandler.test.ts +416 -0
- package/src/server/__tests__/prompts.test.ts +354 -0
- package/src/server/__tests__/rateLimiter.test.ts +314 -0
- package/src/server/__tests__/requestLogger.test.ts +408 -0
- package/src/server/__tests__/resources.test.ts +299 -0
- package/src/server/__tests__/security.integration.test.ts +426 -0
- package/src/server/__tests__/securityMiddleware.test.ts +449 -0
- package/src/server/__tests__/server-startup.integration.test.ts +477 -0
- package/src/server/__tests__/serverKnowledgeStore.test.ts +174 -0
- package/src/server/__tests__/toolRegistry.test.ts +855 -0
- package/src/server/budgetResolver.ts +235 -0
- package/src/server/cacheManager.ts +503 -0
- package/src/server/config.ts +41 -0
- package/src/server/deltaCache.merge.ts +149 -0
- package/src/server/deltaCache.ts +341 -0
- package/src/server/diagnostics.ts +338 -0
- package/src/server/errorHandler.ts +756 -0
- package/src/server/prompts.ts +291 -0
- package/src/server/rateLimiter.ts +156 -0
- package/src/server/requestLogger.ts +344 -0
- package/src/server/resources.ts +168 -0
- package/src/server/responseFormatter.ts +51 -0
- package/src/server/securityMiddleware.ts +236 -0
- package/src/server/serverKnowledgeStore.ts +91 -0
- package/src/server/toolRegistry.ts +489 -0
- package/src/tools/.gitkeep +1 -0
- package/src/tools/__tests__/accountTools.delta.integration.test.ts +128 -0
- package/src/tools/__tests__/accountTools.integration.test.ts +117 -0
- package/src/tools/__tests__/accountTools.test.ts +653 -0
- package/src/tools/__tests__/budgetTools.delta.integration.test.ts +90 -0
- package/src/tools/__tests__/budgetTools.integration.test.ts +134 -0
- package/src/tools/__tests__/budgetTools.test.ts +423 -0
- package/src/tools/__tests__/categoryTools.delta.integration.test.ts +80 -0
- package/src/tools/__tests__/categoryTools.integration.test.ts +295 -0
- package/src/tools/__tests__/categoryTools.test.ts +622 -0
- package/src/tools/__tests__/compareTransactions/formatter.test.ts +486 -0
- package/src/tools/__tests__/compareTransactions/index.test.ts +383 -0
- package/src/tools/__tests__/compareTransactions/matcher.test.ts +410 -0
- package/src/tools/__tests__/compareTransactions/parser.test.ts +764 -0
- package/src/tools/__tests__/compareTransactions.test.ts +342 -0
- package/src/tools/__tests__/compareTransactions.window.test.ts +147 -0
- package/src/tools/__tests__/deltaFetcher.scheduled.integration.test.ts +76 -0
- package/src/tools/__tests__/deltaFetcher.test.ts +270 -0
- package/src/tools/__tests__/deltaSupport.test.ts +188 -0
- package/src/tools/__tests__/deltaTestUtils.ts +46 -0
- package/src/tools/__tests__/exportTransactions.test.ts +213 -0
- package/src/tools/__tests__/monthTools.delta.integration.test.ts +80 -0
- package/src/tools/__tests__/monthTools.integration.test.ts +174 -0
- package/src/tools/__tests__/monthTools.test.ts +523 -0
- package/src/tools/__tests__/payeeTools.delta.integration.test.ts +80 -0
- package/src/tools/__tests__/payeeTools.integration.test.ts +150 -0
- package/src/tools/__tests__/payeeTools.test.ts +445 -0
- package/src/tools/__tests__/transactionTools.integration.test.ts +762 -0
- package/src/tools/__tests__/transactionTools.test.ts +3521 -0
- package/src/tools/__tests__/utilityTools.integration.test.ts +128 -0
- package/src/tools/__tests__/utilityTools.test.ts +205 -0
- package/src/tools/accountTools.ts +283 -0
- package/src/tools/budgetTools.ts +112 -0
- package/src/tools/categoryTools.ts +366 -0
- package/src/tools/compareTransactions/formatter.ts +163 -0
- package/src/tools/compareTransactions/index.ts +228 -0
- package/src/tools/compareTransactions/matcher.ts +240 -0
- package/src/tools/compareTransactions/parser.ts +557 -0
- package/src/tools/compareTransactions/types.ts +60 -0
- package/src/tools/compareTransactions.ts +3 -0
- package/src/tools/deltaFetcher.ts +278 -0
- package/src/tools/deltaSupport.ts +293 -0
- package/src/tools/exportTransactions.ts +273 -0
- package/src/tools/monthTools.ts +164 -0
- package/src/tools/payeeTools.ts +140 -0
- package/src/tools/reconcileAdapter.ts +312 -0
- package/src/tools/reconciliation/__tests__/adapter.causes.test.ts +122 -0
- package/src/tools/reconciliation/__tests__/adapter.test.ts +234 -0
- package/src/tools/reconciliation/__tests__/analyzer.test.ts +406 -0
- package/src/tools/reconciliation/__tests__/executor.integration.test.ts +366 -0
- package/src/tools/reconciliation/__tests__/executor.test.ts +779 -0
- package/src/tools/reconciliation/__tests__/matcher.test.ts +650 -0
- package/src/tools/reconciliation/__tests__/payeeNormalizer.test.ts +278 -0
- package/src/tools/reconciliation/__tests__/recommendationEngine.integration.test.ts +658 -0
- package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +1000 -0
- package/src/tools/reconciliation/__tests__/reconciliation.delta.integration.test.ts +151 -0
- package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +573 -0
- package/src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts +78 -0
- package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +47 -0
- package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +61 -0
- package/src/tools/reconciliation/__tests__/schemaUrl.test.ts +49 -0
- package/src/tools/reconciliation/analyzer.ts +824 -0
- package/src/tools/reconciliation/executor.ts +880 -0
- package/src/tools/reconciliation/index.ts +400 -0
- package/src/tools/reconciliation/matcher.ts +269 -0
- package/src/tools/reconciliation/payeeNormalizer.ts +167 -0
- package/src/tools/reconciliation/recommendationEngine.ts +506 -0
- package/src/tools/reconciliation/reportFormatter.ts +363 -0
- package/src/tools/reconciliation/types.ts +314 -0
- package/src/tools/schemas/outputs/__tests__/accountOutputs.test.ts +424 -0
- package/src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts +310 -0
- package/src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts +448 -0
- package/src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts +519 -0
- package/src/tools/schemas/outputs/__tests__/dateValidation.test.ts +155 -0
- package/src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts +288 -0
- package/src/tools/schemas/outputs/__tests__/monthOutputs.test.ts +478 -0
- package/src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts +370 -0
- package/src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts +401 -0
- package/src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts +213 -0
- package/src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts +474 -0
- package/src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts +333 -0
- package/src/tools/schemas/outputs/accountOutputs.ts +137 -0
- package/src/tools/schemas/outputs/budgetOutputs.ts +86 -0
- package/src/tools/schemas/outputs/categoryOutputs.ts +194 -0
- package/src/tools/schemas/outputs/comparisonOutputs.ts +600 -0
- package/src/tools/schemas/outputs/index.ts +270 -0
- package/src/tools/schemas/outputs/monthOutputs.ts +243 -0
- package/src/tools/schemas/outputs/payeeOutputs.ts +105 -0
- package/src/tools/schemas/outputs/reconciliationOutputs.ts +796 -0
- package/src/tools/schemas/outputs/transactionMutationOutputs.ts +758 -0
- package/src/tools/schemas/outputs/transactionOutputs.ts +243 -0
- package/src/tools/schemas/outputs/utilityOutputs.ts +411 -0
- package/src/tools/schemas/shared/commonOutputs.ts +140 -0
- package/src/tools/toolCategories.ts +140 -0
- package/src/tools/transactionTools.ts +2509 -0
- package/src/tools/utilityTools.ts +90 -0
- package/src/types/.gitkeep +1 -0
- package/src/types/__tests__/index.test.ts +52 -0
- package/src/types/index.ts +67 -0
- package/src/types/integration-tests.d.ts +35 -0
- package/src/types/toolAnnotations.ts +44 -0
- package/src/utils/__tests__/dateUtils.test.ts +170 -0
- package/src/utils/__tests__/money.test.ts +189 -0
- package/src/utils/amountUtils.ts +32 -0
- package/src/utils/dateUtils.ts +108 -0
- package/src/utils/money.ts +123 -0
- package/test-csv-sample.csv +28 -0
- package/test-exports/sample_bank_statement.csv +7 -0
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +23 -0
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +23 -0
- package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +44 -0
- package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +58 -0
- package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +115 -0
- package/test-reconcile-autodetect.js +40 -0
- package/test-reconcile-tool.js +152 -0
- package/test-reconcile-with-csv.cjs +89 -0
- package/test-statement.csv +8 -0
- package/test_debug.js +47 -0
- package/test_simple.mjs +16 -0
- package/tsconfig.json +31 -0
- package/tsconfig.prod.json +18 -0
- package/vitest-reporters/split-json-reporter.ts +211 -0
- 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>;
|