@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,10 @@
|
|
|
1
|
+
import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import * as ynab from 'ynab';
|
|
3
|
+
import { z } from 'zod/v4';
|
|
4
|
+
export declare const ConvertAmountSchema: z.ZodObject<{
|
|
5
|
+
amount: z.ZodNumber;
|
|
6
|
+
to_milliunits: z.ZodBoolean;
|
|
7
|
+
}, z.core.$strict>;
|
|
8
|
+
export type ConvertAmountParams = z.infer<typeof ConvertAmountSchema>;
|
|
9
|
+
export declare function handleGetUser(ynabAPI: ynab.API): Promise<CallToolResult>;
|
|
10
|
+
export declare function handleConvertAmount(params: ConvertAmountParams): Promise<CallToolResult>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { withToolErrorHandling } from '../types/index.js';
|
|
3
|
+
import { responseFormatter } from '../server/responseFormatter.js';
|
|
4
|
+
export const ConvertAmountSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
amount: z.number().finite(),
|
|
7
|
+
to_milliunits: z.boolean(),
|
|
8
|
+
})
|
|
9
|
+
.strict();
|
|
10
|
+
export async function handleGetUser(ynabAPI) {
|
|
11
|
+
return await withToolErrorHandling(async () => {
|
|
12
|
+
const response = await ynabAPI.user.getUser();
|
|
13
|
+
const userInfo = response.data.user;
|
|
14
|
+
const user = {
|
|
15
|
+
id: userInfo.id,
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
text: responseFormatter.format({ user }),
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
}, 'ynab:get_user', 'getting user information');
|
|
26
|
+
}
|
|
27
|
+
export async function handleConvertAmount(params) {
|
|
28
|
+
return await withToolErrorHandling(async () => {
|
|
29
|
+
const { amount, to_milliunits } = params;
|
|
30
|
+
let result;
|
|
31
|
+
let description;
|
|
32
|
+
if (to_milliunits) {
|
|
33
|
+
result = Math.round(amount * 1000);
|
|
34
|
+
description = `$${amount.toFixed(2)} = ${result} milliunits`;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
result = amount / 1000;
|
|
38
|
+
description = `${amount} milliunits = $${result.toFixed(2)}`;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: responseFormatter.format({
|
|
45
|
+
conversion: {
|
|
46
|
+
original_amount: amount,
|
|
47
|
+
converted_amount: result,
|
|
48
|
+
to_milliunits,
|
|
49
|
+
description,
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}, 'ynab:convert_amount', 'converting amount');
|
|
56
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface AuthenticationConfig {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
validateToken(): Promise<boolean>;
|
|
4
|
+
}
|
|
5
|
+
export interface ServerConfig {
|
|
6
|
+
accessToken: string;
|
|
7
|
+
defaultBudgetId?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class AuthenticationError extends Error {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class ConfigurationError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export { ErrorHandler, YNABAPIError, ValidationError, YNABErrorCode, SecurityErrorCode, type ErrorResponse, handleToolError, withToolErrorHandling, } from '../server/errorHandler.js';
|
|
16
|
+
export { RateLimiter, RateLimitError, globalRateLimiter, type RateLimitConfig, type RateLimitInfo, } from '../server/rateLimiter.js';
|
|
17
|
+
export { RequestLogger, globalRequestLogger, type LogEntry, type LoggerConfig, } from '../server/requestLogger.js';
|
|
18
|
+
export { SecurityMiddleware, withSecurityWrapper, type SecurityContext, } from '../server/securityMiddleware.js';
|
|
19
|
+
export type { MCPToolAnnotations } from './toolAnnotations.js';
|
|
20
|
+
export type { ToolDefinition } from '../server/toolRegistry.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class AuthenticationError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'AuthenticationError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ConfigurationError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'ConfigurationError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export { ErrorHandler, YNABAPIError, ValidationError, handleToolError, withToolErrorHandling, } from '../server/errorHandler.js';
|
|
14
|
+
export { RateLimiter, RateLimitError, globalRateLimiter, } from '../server/rateLimiter.js';
|
|
15
|
+
export { RequestLogger, globalRequestLogger, } from '../server/requestLogger.js';
|
|
16
|
+
export { SecurityMiddleware, withSecurityWrapper, } from '../server/securityMiddleware.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function milliunitsToAmount(milliunits) {
|
|
2
|
+
return Math.round(milliunits) / 1000;
|
|
3
|
+
}
|
|
4
|
+
export function amountToMilliunits(amount) {
|
|
5
|
+
return Math.round(amount * 1000);
|
|
6
|
+
}
|
|
7
|
+
export function formatAmount(milliunits, currencySymbol = '$') {
|
|
8
|
+
const amount = milliunitsToAmount(milliunits);
|
|
9
|
+
return `${currencySymbol}${amount.toFixed(2)}`;
|
|
10
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function formatYNABMonth(date: Date): string;
|
|
2
|
+
export declare function formatISODate(date: Date): string;
|
|
3
|
+
export declare function getCurrentMonth(): string;
|
|
4
|
+
export declare function getToday(): string;
|
|
5
|
+
export declare function getHistoricalMonths(monthCount: number, startDate?: Date): string[];
|
|
6
|
+
export declare function subtractMonths(date: Date, months: number): Date;
|
|
7
|
+
export declare function isValidISODate(dateString: string): boolean;
|
|
8
|
+
export declare function isValidYNABMonth(monthString: string): boolean;
|
|
9
|
+
export declare function yearMonthToYNABMonth(yearMonth: string): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { format, subMonths, isValid, parse } from 'date-fns';
|
|
2
|
+
export function formatYNABMonth(date) {
|
|
3
|
+
return format(date, "yyyy-MM-'01'");
|
|
4
|
+
}
|
|
5
|
+
export function formatISODate(date) {
|
|
6
|
+
return format(date, 'yyyy-MM-dd');
|
|
7
|
+
}
|
|
8
|
+
export function getCurrentMonth() {
|
|
9
|
+
return formatYNABMonth(new Date());
|
|
10
|
+
}
|
|
11
|
+
export function getToday() {
|
|
12
|
+
return formatISODate(new Date());
|
|
13
|
+
}
|
|
14
|
+
export function getHistoricalMonths(monthCount, startDate) {
|
|
15
|
+
const baseDate = startDate || new Date();
|
|
16
|
+
return Array.from({ length: monthCount }, (_, i) => {
|
|
17
|
+
const date = subMonths(baseDate, i);
|
|
18
|
+
return formatYNABMonth(date);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export function subtractMonths(date, months) {
|
|
22
|
+
return subMonths(date, months);
|
|
23
|
+
}
|
|
24
|
+
export function isValidISODate(dateString) {
|
|
25
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const parsed = parse(dateString, 'yyyy-MM-dd', new Date());
|
|
29
|
+
return isValid(parsed);
|
|
30
|
+
}
|
|
31
|
+
export function isValidYNABMonth(monthString) {
|
|
32
|
+
if (!/^\d{4}-\d{2}-01$/.test(monthString)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const parsed = parse(monthString, "yyyy-MM-'01'", new Date());
|
|
36
|
+
return isValid(parsed);
|
|
37
|
+
}
|
|
38
|
+
export function yearMonthToYNABMonth(yearMonth) {
|
|
39
|
+
if (!/^\d{4}-\d{2}$/.test(yearMonth)) {
|
|
40
|
+
throw new Error('Invalid year-month format. Expected YYYY-MM');
|
|
41
|
+
}
|
|
42
|
+
return `${yearMonth}-01`;
|
|
43
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as ynab from 'ynab';
|
|
2
|
+
export type Milli = number;
|
|
3
|
+
export type MoneyDirection = 'credit' | 'debit' | 'balanced';
|
|
4
|
+
export interface MoneyValue {
|
|
5
|
+
value_milliunits: Milli;
|
|
6
|
+
value: number;
|
|
7
|
+
value_display: string;
|
|
8
|
+
currency: string;
|
|
9
|
+
direction: MoneyDirection;
|
|
10
|
+
}
|
|
11
|
+
export declare const getDecimalDigits: (currencyFormat: ynab.CurrencyFormat | null | undefined) => number;
|
|
12
|
+
export declare const getCurrencyCode: (currencyFormat: ynab.CurrencyFormat | null | undefined) => string;
|
|
13
|
+
export declare const toMilli: (x: number | string) => Milli;
|
|
14
|
+
export declare const fromMilli: (m: Milli, decimalDigits?: number) => number;
|
|
15
|
+
export declare const assertMilli: (m: number, msg?: string) => void;
|
|
16
|
+
export declare const addMilli: (a: Milli, b: Milli) => Milli;
|
|
17
|
+
export declare const inWindow: (iso: string, start?: string | undefined, end?: string | undefined) => boolean;
|
|
18
|
+
export declare const moneyDirection: (value: Milli) => MoneyDirection;
|
|
19
|
+
export declare const formatMoney: (value: Milli, currency?: string, decimalDigits?: number) => string;
|
|
20
|
+
export declare const toMoneyValue: (value: Milli, currency?: string, decimalDigits?: number) => MoneyValue;
|
|
21
|
+
export declare const toMoneyValueFromDecimal: (amount: number, currency?: string, decimalDigits?: number) => MoneyValue;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as ynab from 'ynab';
|
|
2
|
+
const DEFAULT_CURRENCY = 'USD';
|
|
3
|
+
const DEFAULT_DECIMAL_DIGITS = 2;
|
|
4
|
+
export const getDecimalDigits = (currencyFormat) => {
|
|
5
|
+
return currencyFormat?.decimal_digits ?? DEFAULT_DECIMAL_DIGITS;
|
|
6
|
+
};
|
|
7
|
+
export const getCurrencyCode = (currencyFormat) => {
|
|
8
|
+
return currencyFormat?.iso_code ?? DEFAULT_CURRENCY;
|
|
9
|
+
};
|
|
10
|
+
export const toMilli = (x) => {
|
|
11
|
+
const n = Number(x);
|
|
12
|
+
const m = Math.round(n * 1000);
|
|
13
|
+
if (!Number.isFinite(n) || !Number.isSafeInteger(m)) {
|
|
14
|
+
throw new Error(`Invalid/unsafe amount: ${x}`);
|
|
15
|
+
}
|
|
16
|
+
return m;
|
|
17
|
+
};
|
|
18
|
+
export const fromMilli = (m, decimalDigits = DEFAULT_DECIMAL_DIGITS) => {
|
|
19
|
+
return ynab.utils.convertMilliUnitsToCurrencyAmount(m, decimalDigits);
|
|
20
|
+
};
|
|
21
|
+
export const assertMilli = (m, msg = 'Expected safe integer milliunits') => {
|
|
22
|
+
if (!Number.isSafeInteger(m))
|
|
23
|
+
throw new Error(msg);
|
|
24
|
+
};
|
|
25
|
+
export const addMilli = (a, b) => {
|
|
26
|
+
const s = a + b;
|
|
27
|
+
if (!Number.isSafeInteger(s))
|
|
28
|
+
throw new Error('Milliunit sum overflow');
|
|
29
|
+
return s;
|
|
30
|
+
};
|
|
31
|
+
export const inWindow = (iso, start = undefined, end = undefined) => (!start || iso >= start) && (!end || iso <= end);
|
|
32
|
+
export const moneyDirection = (value) => {
|
|
33
|
+
if (value === 0)
|
|
34
|
+
return 'balanced';
|
|
35
|
+
return value > 0 ? 'credit' : 'debit';
|
|
36
|
+
};
|
|
37
|
+
const makeFormatter = (currency, decimalDigits = DEFAULT_DECIMAL_DIGITS) => new Intl.NumberFormat('en-US', {
|
|
38
|
+
style: 'currency',
|
|
39
|
+
currency,
|
|
40
|
+
minimumFractionDigits: decimalDigits,
|
|
41
|
+
maximumFractionDigits: decimalDigits,
|
|
42
|
+
});
|
|
43
|
+
export const formatMoney = (value, currency = DEFAULT_CURRENCY, decimalDigits = DEFAULT_DECIMAL_DIGITS) => makeFormatter(currency, decimalDigits).format(fromMilli(value, decimalDigits));
|
|
44
|
+
export const toMoneyValue = (value, currency = DEFAULT_CURRENCY, decimalDigits = DEFAULT_DECIMAL_DIGITS) => ({
|
|
45
|
+
value_milliunits: value,
|
|
46
|
+
value: fromMilli(value, decimalDigits),
|
|
47
|
+
value_display: formatMoney(value, currency, decimalDigits),
|
|
48
|
+
currency,
|
|
49
|
+
direction: moneyDirection(value),
|
|
50
|
+
});
|
|
51
|
+
export const toMoneyValueFromDecimal = (amount, currency = DEFAULT_CURRENCY, decimalDigits = DEFAULT_DECIMAL_DIGITS) => toMoneyValue(toMilli(amount), currency, decimalDigits);
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# YNAB MCP Server Documentation
|
|
2
|
+
|
|
3
|
+
Complete documentation for the YNAB Model Context Protocol Server.
|
|
4
|
+
|
|
5
|
+
## 📚 Documentation Overview
|
|
6
|
+
|
|
7
|
+
### Getting Started
|
|
8
|
+
New to the YNAB MCP Server? Start here:
|
|
9
|
+
|
|
10
|
+
- **[Quick Start](getting-started/QUICKSTART.md)** - Fast path to testing with Claude Desktop
|
|
11
|
+
- **[Installation](getting-started/INSTALLATION.md)** - Detailed installation instructions
|
|
12
|
+
- **[Configuration](getting-started/CONFIGURATION.md)** - Environment variables and settings
|
|
13
|
+
|
|
14
|
+
### Guides
|
|
15
|
+
Learn how to develop with and extend the server:
|
|
16
|
+
|
|
17
|
+
- **[Architecture](guides/ARCHITECTURE.md)** - Server architecture and core components
|
|
18
|
+
- **[Testing](guides/TESTING.md)** - Automated and manual testing strategies
|
|
19
|
+
- **[Deployment](guides/DEPLOYMENT.md)** - Production deployment instructions
|
|
20
|
+
|
|
21
|
+
### Reference
|
|
22
|
+
Complete API and technical reference:
|
|
23
|
+
|
|
24
|
+
- **[API Reference](reference/API.md)** - Complete tool documentation with examples
|
|
25
|
+
- **[Tools Quick Reference](reference/TOOLS.md)** - Quick tool catalog and parameter guide
|
|
26
|
+
- **[Examples](reference/EXAMPLES.md)** - Practical usage examples and workflows
|
|
27
|
+
- **[Troubleshooting](reference/TROUBLESHOOTING.md)** - Common issues, solutions, and debugging
|
|
28
|
+
|
|
29
|
+
## 🎯 Quick Navigation by Task
|
|
30
|
+
|
|
31
|
+
### I want to...
|
|
32
|
+
|
|
33
|
+
**Get Started**
|
|
34
|
+
- Install and configure → [Installation](getting-started/INSTALLATION.md)
|
|
35
|
+
- Test quickly → [Quick Start](getting-started/QUICKSTART.md)
|
|
36
|
+
- Understand the architecture → [Architecture](guides/ARCHITECTURE.md)
|
|
37
|
+
|
|
38
|
+
**Develop**
|
|
39
|
+
- Create a new tool → [Architecture Guide](guides/ARCHITECTURE.md#developing-tools-with-v08x)
|
|
40
|
+
- Understand the architecture → [Architecture](guides/ARCHITECTURE.md)
|
|
41
|
+
|
|
42
|
+
**Troubleshoot**
|
|
43
|
+
- Common issues → [Troubleshooting](reference/TROUBLESHOOTING.md)
|
|
44
|
+
|
|
45
|
+
**Test**
|
|
46
|
+
- Run automated tests → [Testing Guide](guides/TESTING.md)
|
|
47
|
+
|
|
48
|
+
**Deploy**
|
|
49
|
+
- Deploy to production → [Deployment Guide](guides/DEPLOYMENT.md)
|
|
50
|
+
- Configure for Claude Desktop → [Quick Start](getting-started/QUICKSTART.md#claude-desktop-integration)
|
|
51
|
+
|
|
52
|
+
## 🔗 External Resources
|
|
53
|
+
|
|
54
|
+
- **[YNAB API Documentation](https://api.youneedabudget.com/)** - Official YNAB API docs
|
|
55
|
+
- **[Model Context Protocol](https://modelcontextprotocol.io/)** - MCP specification
|
|
56
|
+
- **[Project Repository](https://github.com/dizzlkheinz/mcp-for-ynab)** - GitHub repository
|
|
57
|
+
- **[Release Notes](https://github.com/dizzlkheinz/mcp-for-ynab/releases)** - Version history and changelog
|
|
58
|
+
|
|
59
|
+
## 💡 Need Help?
|
|
60
|
+
|
|
61
|
+
- **Documentation Issue?** Check the [Troubleshooting Guide](reference/TROUBLESHOOTING.md)
|
|
62
|
+
- **Bug Report?** [Open an issue](https://github.com/dizzlkheinz/mcp-for-ynab/issues/new?template=bug_report.md)
|
|
63
|
+
- **Feature Request?** [Request a feature](https://github.com/dizzlkheinz/mcp-for-ynab/issues/new?template=feature_request.md)
|
|
64
|
+
- **Question?** Check existing [GitHub Discussions](https://github.com/dizzlkheinz/mcp-for-ynab/discussions)
|
|
65
|
+
|
|
66
|
+
## 📄 License
|
|
67
|
+
|
|
68
|
+
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the [LICENSE](../LICENSE) file for details.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
**Quick Links**: [Main README](../README.md) | [API Reference](reference/API.md) | [Quick Start](getting-started/QUICKSTART.md) | [Architecture](guides/ARCHITECTURE.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"schema_url": "https://raw.githubusercontent.com/dizzlkheinz/ynab-mcp-mcpb/master/docs/schemas/reconciliation-v2.json",
|
|
4
|
+
"timestamp": "2024-01-31T10:30:00Z",
|
|
5
|
+
"data": {
|
|
6
|
+
"balance_info": {
|
|
7
|
+
"current_cleared": {
|
|
8
|
+
"value": 100.0,
|
|
9
|
+
"value_display": "$100.00",
|
|
10
|
+
"currency": "USD",
|
|
11
|
+
"direction": "debit"
|
|
12
|
+
},
|
|
13
|
+
"target_statement": {
|
|
14
|
+
"value": 122.22,
|
|
15
|
+
"value_display": "$122.22",
|
|
16
|
+
"currency": "USD",
|
|
17
|
+
"direction": "debit"
|
|
18
|
+
},
|
|
19
|
+
"discrepancy": {
|
|
20
|
+
"value": 22.22,
|
|
21
|
+
"value_display": "$22.22",
|
|
22
|
+
"currency": "USD",
|
|
23
|
+
"direction": "debit"
|
|
24
|
+
},
|
|
25
|
+
"on_track": false
|
|
26
|
+
},
|
|
27
|
+
"insights": [
|
|
28
|
+
{
|
|
29
|
+
"id": "insight-1",
|
|
30
|
+
"type": "near_match",
|
|
31
|
+
"severity": "high",
|
|
32
|
+
"title": "Unmatched Transaction Found",
|
|
33
|
+
"description": "Transaction 'EvoCarShare' for $22.22 has no match in YNAB"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"recommendations": [
|
|
37
|
+
{
|
|
38
|
+
"id": "rec-abc123",
|
|
39
|
+
"action_type": "create_transaction",
|
|
40
|
+
"priority": "high",
|
|
41
|
+
"confidence": 0.95,
|
|
42
|
+
"message": "Create transaction for EvoCarShare",
|
|
43
|
+
"reason": "Transaction appears on bank statement but not in YNAB",
|
|
44
|
+
"estimated_impact": {
|
|
45
|
+
"value": 22.22,
|
|
46
|
+
"value_display": "$22.22",
|
|
47
|
+
"currency": "USD",
|
|
48
|
+
"direction": "debit"
|
|
49
|
+
},
|
|
50
|
+
"account_id": "account-xyz",
|
|
51
|
+
"source_insight_id": "insight-1",
|
|
52
|
+
"metadata": {
|
|
53
|
+
"version": "1.0",
|
|
54
|
+
"created_at": "2024-01-31T10:30:00Z"
|
|
55
|
+
},
|
|
56
|
+
"parameters": {
|
|
57
|
+
"account_id": "account-xyz",
|
|
58
|
+
"date": "2024-01-15",
|
|
59
|
+
"amount": 22.22,
|
|
60
|
+
"payee_name": "EvoCarShare",
|
|
61
|
+
"memo": "Car rental",
|
|
62
|
+
"cleared": "cleared",
|
|
63
|
+
"approved": true
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
}
|