@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
package/TESTING_NOTES.md
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# MCP Testing Progress Notes
|
|
2
|
+
|
|
3
|
+
**Date:** 2025-11-16
|
|
4
|
+
**Context:** Testing YNAB MCP server directly through MCP interface
|
|
5
|
+
|
|
6
|
+
## ✅ Completed Testing
|
|
7
|
+
|
|
8
|
+
### Basic Operations (All Working)
|
|
9
|
+
|
|
10
|
+
1. **Budget Operations**
|
|
11
|
+
- ✅ `list_budgets` - Successfully retrieved all budgets
|
|
12
|
+
- ✅ `get_budget` - Successfully retrieved specific budget details (now returns counts instead of full arrays)
|
|
13
|
+
- ✅ `set_default_budget` & `get_default_budget` - Successfully set and retrieved default budget
|
|
14
|
+
|
|
15
|
+
2. **Account Operations**
|
|
16
|
+
- ✅ `list_accounts` - Successfully listed all accounts with new `limit` parameter and count metadata
|
|
17
|
+
- ✅ `get_account` - Successfully retrieved specific account details
|
|
18
|
+
|
|
19
|
+
3. **Transaction Operations**
|
|
20
|
+
- ✅ `list_transactions` - Successfully listed transactions with filters
|
|
21
|
+
- ✅ `get_transaction` - Successfully retrieved specific transaction with enriched data
|
|
22
|
+
- ✅ `create_transaction` - Successfully created test transaction (with dry-run validation)
|
|
23
|
+
- ✅ `update_transaction` - Successfully updated transaction
|
|
24
|
+
- ✅ `delete_transaction` - Successfully deleted transaction
|
|
25
|
+
|
|
26
|
+
4. **Category & Payee Operations**
|
|
27
|
+
- ✅ `list_categories` - Successfully listed all categories with groups
|
|
28
|
+
- ✅ `list_payees` - Successfully listed payees with new `limit` parameter and count metadata
|
|
29
|
+
|
|
30
|
+
5. **Utility Operations**
|
|
31
|
+
- ✅ `convert_amount` - Successfully converted between dollars and milliunits
|
|
32
|
+
- ✅ `diagnostic_info` - Successfully retrieved comprehensive system diagnostics
|
|
33
|
+
|
|
34
|
+
6. **Export Operations**
|
|
35
|
+
- ✅ `export_transactions` - Successfully exported transactions to JSON file (minimal mode tested)
|
|
36
|
+
|
|
37
|
+
### Issues Found & Fixed
|
|
38
|
+
|
|
39
|
+
#### Session 1
|
|
40
|
+
|
|
41
|
+
1. **budgetTools.test.ts** - Test expected old response format with full arrays
|
|
42
|
+
- Fixed in commit (updated test to expect `accounts_count` instead of `accounts`, etc.)
|
|
43
|
+
- All 1078 tests now passing
|
|
44
|
+
|
|
45
|
+
#### Session 2
|
|
46
|
+
|
|
47
|
+
2. **reconcile_account creating double transactions** - Batch update including unnecessary fields
|
|
48
|
+
- **Root Cause**: The `reconcile_account` tool was including ALL transaction fields (amount, payee_name, memo, account_id, approved) in the batch update payload when updating cleared status or dates. Including unnecessary fields (especially memo) can cause YNAB API to exhibit unexpected behavior, potentially creating duplicate transactions.
|
|
49
|
+
- **Fix**: Modified `src/tools/reconciliation/executor.ts` to only include the transaction ID and the fields that are actually changing (cleared status and/or date). This creates a minimal update payload following API best practices for partial updates.
|
|
50
|
+
- **Impact**: Prevents duplicate/ghost transactions with $0 balances when reconciling accounts
|
|
51
|
+
- **Testing**:
|
|
52
|
+
- All 1078 unit tests passing
|
|
53
|
+
- Real MCP test: reconciled with auto_match_threshold=30, 1 transaction updated, no duplicates created
|
|
54
|
+
- Verified clean transaction list with no ghost transactions
|
|
55
|
+
- **File Changed**: `src/tools/reconciliation/executor.ts` (lines 455-467, 546)
|
|
56
|
+
- **Released**: v0.11.2 (2025-11-16)
|
|
57
|
+
- **Commit**: e0d9d33
|
|
58
|
+
|
|
59
|
+
### Code Changes Made
|
|
60
|
+
|
|
61
|
+
#### Session 1
|
|
62
|
+
|
|
63
|
+
- `src/tools/accountTools.ts` - Added `limit` parameter and count metadata
|
|
64
|
+
- `src/tools/budgetTools.ts` - Optimized to return counts instead of full arrays
|
|
65
|
+
- `src/tools/payeeTools.ts` - Added `limit` parameter and count metadata
|
|
66
|
+
- `src/tools/__tests__/budgetTools.test.ts` - Updated test expectations
|
|
67
|
+
|
|
68
|
+
#### Session 2
|
|
69
|
+
|
|
70
|
+
- `src/tools/reconciliation/executor.ts` - Fixed batch update to only include changed fields (prevents duplicate transactions)
|
|
71
|
+
|
|
72
|
+
## ✅ Advanced Tools Testing (Session 2)
|
|
73
|
+
|
|
74
|
+
### Successfully Tested
|
|
75
|
+
|
|
76
|
+
1. **compare_transactions** ✅
|
|
77
|
+
- CSV auto-detection working perfectly
|
|
78
|
+
- Parsed 6 bank transactions from test CSV
|
|
79
|
+
- Compared with YNAB transactions
|
|
80
|
+
- Found 4 matches, 2 missing in YNAB, 12 missing in bank
|
|
81
|
+
- Match scoring and suggestions working correctly
|
|
82
|
+
|
|
83
|
+
2. **reconcile_account** ✅
|
|
84
|
+
- Comprehensive guided reconciliation narrative
|
|
85
|
+
- Balance discrepancy analysis ($3,628.28 difference detected)
|
|
86
|
+
- Transaction matching statistics (0 auto-matched, 6 unmatched bank, 105 unmatched YNAB)
|
|
87
|
+
- Key insights and recommendations provided
|
|
88
|
+
- Dry run mode working correctly
|
|
89
|
+
- Human-readable report format excellent
|
|
90
|
+
- **Bug fix verified**: Tested with real updates (1 transaction updated), no duplicates created
|
|
91
|
+
|
|
92
|
+
3. **get_month** / **list_months** ✅
|
|
93
|
+
- `list_months` returns summary of all months with income/budgeted/activity/age of money
|
|
94
|
+
- `get_month` returns detailed category breakdowns for specific month
|
|
95
|
+
- Both tools working perfectly with proper caching info
|
|
96
|
+
|
|
97
|
+
4. **get_category** ✅
|
|
98
|
+
- Successfully retrieved category details
|
|
99
|
+
- Includes budgeted amount, activity, balance, goal information
|
|
100
|
+
- Cache info included in response
|
|
101
|
+
|
|
102
|
+
5. **update_category** ✅
|
|
103
|
+
- Dry run validation working correctly
|
|
104
|
+
- Amount conversion from milliunits to dollars working
|
|
105
|
+
- Returns preview of update request
|
|
106
|
+
|
|
107
|
+
6. **get_user** ✅
|
|
108
|
+
- Successfully retrieves user information
|
|
109
|
+
- Returns user ID
|
|
110
|
+
|
|
111
|
+
7. **set_output_format** ✅
|
|
112
|
+
- Successfully configures JSON output formatting
|
|
113
|
+
- Can toggle minify mode and set pretty-print spacing
|
|
114
|
+
- Confirmed settings update
|
|
115
|
+
|
|
116
|
+
8. **clear_cache** ✅
|
|
117
|
+
- Successfully clears in-memory cache
|
|
118
|
+
- Returns success confirmation
|
|
119
|
+
|
|
120
|
+
9. **get_payee** ✅ (error handling verified)
|
|
121
|
+
- Error handling working correctly (tested with invalid payee ID)
|
|
122
|
+
- Returns proper 404 error with helpful suggestions
|
|
123
|
+
|
|
124
|
+
## 🔄 To Continue Testing
|
|
125
|
+
|
|
126
|
+
### Advanced Tools (Not Yet Tested)
|
|
127
|
+
|
|
128
|
+
1. **create_transactions** (batch) - Bulk transaction creation (MCP parameter serialization issue - needs different approach)
|
|
129
|
+
2. **update_transactions** (batch) - Bulk transaction updates (same serialization issue)
|
|
130
|
+
3. **create_receipt_split_transaction** - Receipt splitting with tax allocation
|
|
131
|
+
|
|
132
|
+
### Test Budget Info
|
|
133
|
+
|
|
134
|
+
- Default Budget ID: `bf00f94f-f532-4b2c-a39c-e8d9a963effd` (name: "2025")
|
|
135
|
+
- Test Account ID: `4c18e9f0-8aa6-4427-98f5-55ce81d109cf` (name: "🍊✔️ Tang Cheq")
|
|
136
|
+
|
|
137
|
+
## 📋 Build Status
|
|
138
|
+
|
|
139
|
+
- ✅ TypeScript type checking passes
|
|
140
|
+
- ✅ All 1078 unit tests passing (47 test files)
|
|
141
|
+
- ✅ Build successful
|
|
142
|
+
- ✅ MCPB package generated: `ynab-mcp-server-0.11.2.mcpb`
|
|
143
|
+
- ✅ Bug fix release v0.11.2 tagged and pushed
|
|
144
|
+
|
|
145
|
+
## 🎯 Testing Summary
|
|
146
|
+
|
|
147
|
+
### Session 1 - Basic Operations (All Passing ✅)
|
|
148
|
+
|
|
149
|
+
- Budget operations (list, get, set/get default)
|
|
150
|
+
- Account operations (list, get)
|
|
151
|
+
- Transaction operations (list, get, create, update, delete)
|
|
152
|
+
- Category operations (list)
|
|
153
|
+
- Payee operations (list)
|
|
154
|
+
- Utility operations (convert_amount, diagnostic_info)
|
|
155
|
+
- Export operations (export_transactions)
|
|
156
|
+
|
|
157
|
+
### Session 2 - Advanced Operations (9/12 Tested ✅)
|
|
158
|
+
|
|
159
|
+
- ✅ compare_transactions - CSV comparison working perfectly
|
|
160
|
+
- ✅ reconcile_account - Comprehensive reconciliation with insights
|
|
161
|
+
- ✅ get_month / list_months - Monthly budget data working
|
|
162
|
+
- ✅ get_category - Category details retrieval working
|
|
163
|
+
- ✅ update_category - Category budget updates with dry-run
|
|
164
|
+
- ✅ get_user - User information retrieval
|
|
165
|
+
- ✅ set_output_format - JSON formatting configuration
|
|
166
|
+
- ✅ clear_cache - Cache management working
|
|
167
|
+
- ✅ get_payee - Error handling verified (404 response correct)
|
|
168
|
+
- ⏸️ create_transactions (batch) - MCP parameter serialization limitation
|
|
169
|
+
- ⏸️ update_transactions (batch) - MCP parameter serialization limitation
|
|
170
|
+
- ⏸️ create_receipt_split_transaction - Not yet tested
|
|
171
|
+
|
|
172
|
+
### Overall Status
|
|
173
|
+
|
|
174
|
+
- **21 out of 24 tools fully tested and working** ✅
|
|
175
|
+
- **3 tools remaining** (2 blocked by MCP limitation, 1 pending)
|
|
176
|
+
- All tested tools functioning correctly
|
|
177
|
+
- Error handling working properly
|
|
178
|
+
- Cache system operational
|
|
179
|
+
- Delta fetcher integration working
|
|
180
|
+
- Response formatting functional
|
|
181
|
+
|
|
182
|
+
## 🎯 Next Steps
|
|
183
|
+
|
|
184
|
+
When resuming:
|
|
185
|
+
|
|
186
|
+
1. Test `create_receipt_split_transaction` with sample receipt data
|
|
187
|
+
2. For batch operations, consider testing via unit/integration tests instead of MCP interface
|
|
188
|
+
3. Verify error handling and edge cases for remaining complex tools
|
|
189
|
+
4. Consider performance testing with larger datasets
|
|
190
|
+
|
|
191
|
+
## 💡 Notes
|
|
192
|
+
|
|
193
|
+
- MCP interface is working correctly for all non-batch operations
|
|
194
|
+
- All basic CRUD operations function as expected
|
|
195
|
+
- Cache system is working (invalidation and TTL working correctly)
|
|
196
|
+
- Delta fetcher integration working properly
|
|
197
|
+
- Response formatting (minify/pretty) working - can be toggled via set_output_format
|
|
198
|
+
- Rate limiting active and tracking requests
|
|
199
|
+
- Error responses are consistent and helpful
|
|
200
|
+
- CSV auto-detection in compare/reconcile tools is robust
|
|
201
|
+
- Reconciliation narrative format is excellent and user-friendly
|
|
202
|
+
- **Reconciliation bug fix validated**: Minimal update payloads prevent duplicate transactions
|
|
203
|
+
|
|
204
|
+
## 🐛 Known Issues & Fixes
|
|
205
|
+
|
|
206
|
+
### Fixed in v0.11.2
|
|
207
|
+
|
|
208
|
+
- **Duplicate transactions in reconciliation**: Fixed by sending only changed fields in batch updates
|
|
209
|
+
- Issue: Including unnecessary fields (amount, payee_name, memo, account_id) caused YNAB to create ghost transactions
|
|
210
|
+
- Solution: Minimal update payloads with only transaction ID + changed fields
|
|
211
|
+
- Status: ✅ Fixed, tested, and released
|
|
212
|
+
|
|
213
|
+
## 📦 Release History
|
|
214
|
+
|
|
215
|
+
- **v0.11.2** (2025-11-16) - Bug fix: Prevent duplicate transactions in reconcile_account
|
|
216
|
+
- **v0.11.1** - Added invert_bank_amounts parameter to reconcile_account
|
|
217
|
+
- **v0.11.0** - Initial advanced reconciliation features
|
package/WARP.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# WARP.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to WARP (warp.dev) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project overview
|
|
6
|
+
|
|
7
|
+
This repo is a TypeScript Model Context Protocol (MCP) server that lets AI assistants interact with YNAB (You Need A Budget) via YNAB's REST API. It builds a bundled Node.js server (ES modules) and an MCPB package for Claude Desktop and other MCP clients.
|
|
8
|
+
|
|
9
|
+
Key tech: Node + TypeScript (strict), Vitest for tests, ESLint + Prettier for quality, esbuild for bundling.
|
|
10
|
+
|
|
11
|
+
## Common commands
|
|
12
|
+
|
|
13
|
+
All commands assume you are in the repo root.
|
|
14
|
+
|
|
15
|
+
### Install & environment
|
|
16
|
+
|
|
17
|
+
- Install dependencies:
|
|
18
|
+
- `npm install`
|
|
19
|
+
- Validate environment configuration (after creating `.env` from `.env.example`):
|
|
20
|
+
- `npm run validate-env`
|
|
21
|
+
|
|
22
|
+
Important environment variables (see `CLAUDE.md` for full list):
|
|
23
|
+
|
|
24
|
+
- Required: `YNAB_ACCESS_TOKEN`
|
|
25
|
+
- Caching (optional): `YNAB_MCP_CACHE_MAX_ENTRIES`, `YNAB_MCP_CACHE_DEFAULT_TTL_MS`, `YNAB_MCP_CACHE_STALE_MS`
|
|
26
|
+
- Output formatting (optional): `YNAB_MCP_MINIFY_OUTPUT`, `YNAB_MCP_PRETTY_SPACES`
|
|
27
|
+
- Export (optional): `YNAB_EXPORT_PATH`
|
|
28
|
+
- Testing (optional): `TEST_BUDGET_ID`, `TEST_ACCOUNT_ID`, `SKIP_E2E_TESTS`
|
|
29
|
+
|
|
30
|
+
### Build & development
|
|
31
|
+
|
|
32
|
+
The main build pipeline is wired through `package.json` scripts and esbuild.
|
|
33
|
+
|
|
34
|
+
- Fast dev loop (TypeScript watch only):
|
|
35
|
+
- `npm run dev`
|
|
36
|
+
- Development build (no lint, non-prod tsconfig):
|
|
37
|
+
- `npm run build:dev`
|
|
38
|
+
(cleans `dist/`, compiles TypeScript, then runs the dev bundle)
|
|
39
|
+
- Production build (preferred for anything user-facing):
|
|
40
|
+
- `npm run build`
|
|
41
|
+
alias for `npm run build:prod`
|
|
42
|
+
- Explicit production build:
|
|
43
|
+
- `npm run build:prod`
|
|
44
|
+
runs ESLint + Prettier fix, cleans, compiles with `tsconfig.prod.json`, bundles with esbuild, then runs `verify-build`.
|
|
45
|
+
|
|
46
|
+
### Running the server locally
|
|
47
|
+
|
|
48
|
+
Build first (at least once):
|
|
49
|
+
|
|
50
|
+
- `npm run build`
|
|
51
|
+
|
|
52
|
+
Then run the compiled MCP server:
|
|
53
|
+
|
|
54
|
+
- `npm start` — loads `dist/index.js` with `dotenv` (honors `.env`)
|
|
55
|
+
- `npm run start:mcp` — plain start of `dist/index.js` (useful for MCP clients that set env themselves)
|
|
56
|
+
- `npm run start:prod` — runs with `NODE_ENV=production`
|
|
57
|
+
|
|
58
|
+
### Linting, formatting, and type-checking
|
|
59
|
+
|
|
60
|
+
- Lint and formatting check (no writes):
|
|
61
|
+
- `npm run lint` — ESLint + `prettier --check`
|
|
62
|
+
- Auto-fix ESLint + format the repo:
|
|
63
|
+
- `npm run lint:fix`
|
|
64
|
+
- Format only:
|
|
65
|
+
- `npm run format`
|
|
66
|
+
- Type-check without emitting JS:
|
|
67
|
+
- `npm run type-check`
|
|
68
|
+
|
|
69
|
+
### Testing
|
|
70
|
+
|
|
71
|
+
Vitest is used with multiple projects (unit, integration, e2e, performance).
|
|
72
|
+
|
|
73
|
+
High-level commands:
|
|
74
|
+
|
|
75
|
+
- Run primary suite (unit, then filter results to only failures in `test-results.json`):
|
|
76
|
+
- `npm test`
|
|
77
|
+
- Watch mode while iterating:
|
|
78
|
+
- `npm run test:watch`
|
|
79
|
+
|
|
80
|
+
Targeted suites:
|
|
81
|
+
|
|
82
|
+
- Unit tests:
|
|
83
|
+
- `npm run test:unit`
|
|
84
|
+
- Core integration tests:
|
|
85
|
+
- `npm run test:integration:core`
|
|
86
|
+
- Domain-specific integration tests (throttled runners):
|
|
87
|
+
- `npm run test:integration:budgets`
|
|
88
|
+
- `npm run test:integration:accounts`
|
|
89
|
+
- `npm run test:integration:transactions`
|
|
90
|
+
- `npm run test:integration:categories`
|
|
91
|
+
- `npm run test:integration:payees`
|
|
92
|
+
- `npm run test:integration:months`
|
|
93
|
+
- `npm run test:integration:delta`
|
|
94
|
+
- `npm run test:integration:reconciliation`
|
|
95
|
+
- Full integration sweep with throttling:
|
|
96
|
+
- `npm run test:integration:full`
|
|
97
|
+
- End-to-end tests (real YNAB, requires `YNAB_ACCESS_TOKEN` and related test env vars):
|
|
98
|
+
- `npm run test:e2e`
|
|
99
|
+
- Coverage for unit tests:
|
|
100
|
+
- `npm run test:coverage`
|
|
101
|
+
- Performance tests:
|
|
102
|
+
- `npm run test:performance`
|
|
103
|
+
- Comprehensive orchestrated test runner:
|
|
104
|
+
- `npm run test:comprehensive`
|
|
105
|
+
- Run everything (unit + core integration + e2e + performance):
|
|
106
|
+
- `npm run test:all`
|
|
107
|
+
|
|
108
|
+
Test layout & naming (from `CLAUDE.md`):
|
|
109
|
+
|
|
110
|
+
- Unit: `*.test.ts`
|
|
111
|
+
- Integration: `*.integration.test.ts`
|
|
112
|
+
- E2E: `*.e2e.test.ts`
|
|
113
|
+
- Tests live in `src/__tests__/` alongside source, with shared utilities in `src/__tests__/testUtils.ts` and global setup in `src/__tests__/setup.ts`.
|
|
114
|
+
|
|
115
|
+
#### Running a single test file
|
|
116
|
+
|
|
117
|
+
Use Vitest directly for fine-grained runs:
|
|
118
|
+
|
|
119
|
+
- Single file:
|
|
120
|
+
- `npx vitest run src/tools/__tests__/budgetTools.test.ts`
|
|
121
|
+
- Single project:
|
|
122
|
+
- `npx vitest run --project unit`
|
|
123
|
+
- `npx vitest run --project integration`
|
|
124
|
+
|
|
125
|
+
You can also substitute any other test file path under `src/__tests__`.
|
|
126
|
+
|
|
127
|
+
### Packaging and release helpers
|
|
128
|
+
|
|
129
|
+
- Build and generate the MCPB package (used by Claude Desktop and other MCP clients):
|
|
130
|
+
- `npm run package:mcpb`
|
|
131
|
+
(runs `build:prod` then `generate:mcpb`; artifact ends up under `dist/`)
|
|
132
|
+
- Generate `.mcpb` from an existing build:
|
|
133
|
+
- `npm run generate:mcpb`
|
|
134
|
+
- PR helpers (used with GitHub CLI):
|
|
135
|
+
- `npm run pr:description` — refresh `.pr-description.md`
|
|
136
|
+
- `npm run pr:create` — update description and run `gh pr create` with it
|
|
137
|
+
|
|
138
|
+
## Architecture and layout (big picture)
|
|
139
|
+
|
|
140
|
+
This section summarizes the high-level architecture described in `CLAUDE.md`, `AGENTS.md`, and the docs.
|
|
141
|
+
|
|
142
|
+
### Top-level structure
|
|
143
|
+
|
|
144
|
+
- `src/` — TypeScript source
|
|
145
|
+
- `index.ts` — main entry, wires up the MCP server.
|
|
146
|
+
- `server/` — core server orchestration and cross-cutting services.
|
|
147
|
+
- `tools/` — domain-specific MCP tool implementations.
|
|
148
|
+
- `types/` — shared types and error classes.
|
|
149
|
+
- `utils/` — low-level helpers (money, dates, amount validation, etc.).
|
|
150
|
+
- `__tests__/` — unit, integration, e2e, and performance tests.
|
|
151
|
+
- `docs/` — user and contributor documentation (getting started, architecture, testing, deployment, reference).
|
|
152
|
+
- `dist/` and `dist/bundle/` — compiled output and bundles (do not edit by hand).
|
|
153
|
+
- `scripts/` — Node scripts for env validation, verifying builds, orchestrating integration tests, and generating PR descriptions / MCPB artifacts.
|
|
154
|
+
|
|
155
|
+
`AGENTS.md` has a concise summary of this structure; prefer working in `src/` and `docs/` and treat `dist/` and test artifacts as generated.
|
|
156
|
+
|
|
157
|
+
### Core server layer (`src/server/`)
|
|
158
|
+
|
|
159
|
+
The server layer is modular and service-oriented (see `CLAUDE.md`):
|
|
160
|
+
|
|
161
|
+
- `YNABMCPServer.ts` — central orchestration class that wires all services and registers tools.
|
|
162
|
+
- `toolRegistry.ts` — registry pattern for tools; centralizes metadata, Zod input schemas, annotations, and handler wiring.
|
|
163
|
+
- `cacheManager.ts` — caching layer with TTL presets and optional stale-while-revalidate behavior. Use its `wrap(...)` helper instead of ad-hoc caching.
|
|
164
|
+
- `budgetResolver.ts` — shared logic for resolving which YNAB budget to operate on (explicit `budget_id` vs default budget).
|
|
165
|
+
- `errorHandler.ts` — single place to construct structured error responses; use it instead of throwing raw errors from tools.
|
|
166
|
+
- `config.ts` — environment parsing/validation and configuration for the server.
|
|
167
|
+
- `resources.ts`, `prompts.ts` — MCP resource and prompt definitions and handlers.
|
|
168
|
+
- `diagnostics.ts` — health checks and diagnostic tooling (used by tools like `diagnostic_info`).
|
|
169
|
+
- `securityMiddleware.ts` — guards and validation wrappers around tool execution.
|
|
170
|
+
- `responseFormatter.ts` — centralized JSON response formatting (minified vs pretty based on env).
|
|
171
|
+
- `rateLimiter.ts` — respects YNAB rate limits; coordinate with caching when changing behavior.
|
|
172
|
+
- `requestLogger.ts` — logging around requests and responses.
|
|
173
|
+
|
|
174
|
+
When adding or modifying core behavior (e.g., caching, error shapes, security), prefer changing these shared services rather than duplicating logic in tools.
|
|
175
|
+
|
|
176
|
+
### Tool layer (`src/tools/`)
|
|
177
|
+
|
|
178
|
+
Tools are grouped by YNAB domain and MCP responsibility (see `CLAUDE.md` for the complete catalog):
|
|
179
|
+
|
|
180
|
+
- Budget and account tools: `budgetTools.ts`, `accountTools.ts`.
|
|
181
|
+
- Transaction tools: `transactionTools.ts`, including CRUD and export/reconciliation operations.
|
|
182
|
+
- Category and payee tools: `categoryTools.ts`, `payeeTools.ts`.
|
|
183
|
+
- Time-based tools: `monthTools.ts`.
|
|
184
|
+
- Utility tools: `utilityTools.ts` (e.g., `convert_amount`, `diagnostic_info`, cache clearing, output formatting).
|
|
185
|
+
- Specialized multi-file modules:
|
|
186
|
+
- `compareTransactions/` — CSV comparison split into parser, matcher, and formatter pieces.
|
|
187
|
+
- `financialOverview/` — higher-level analysis (schemas, handlers, insights, trends, formatters).
|
|
188
|
+
|
|
189
|
+
All tools register with the central `ToolRegistry` and attach MCP annotations via presets defined in `src/tools/toolCategories.ts` (`ToolAnnotationPresets`). These presets classify tools as:
|
|
190
|
+
|
|
191
|
+
- Read-only external (querying YNAB API only)
|
|
192
|
+
- Write external (create/update/delete)
|
|
193
|
+
- Local utilities
|
|
194
|
+
|
|
195
|
+
When introducing a new tool, follow the existing pattern:
|
|
196
|
+
|
|
197
|
+
1. Define a Zod input schema.
|
|
198
|
+
2. Implement a handler that uses injected services (cache manager, budget resolver, error handler, etc.).
|
|
199
|
+
3. Register via the registry with an appropriate annotation preset and human-readable `title`.
|
|
200
|
+
4. Add unit + integration tests next to the tool module.
|
|
201
|
+
|
|
202
|
+
### Types and utilities
|
|
203
|
+
|
|
204
|
+
- `src/types/index.ts` holds shared types, configuration types, error classes, and other cross-cutting definitions.
|
|
205
|
+
- `src/utils/money.ts` provides milliunit ↔ amount conversions; **always** go through these helpers when dealing with monetary values.
|
|
206
|
+
- `src/utils/dateUtils.ts` and `src/utils/amountUtils.ts` encapsulate validation and formatting rules for dates and amounts; reuse instead of reimplementing logic in tools.
|
|
207
|
+
|
|
208
|
+
YNAB uses milliunits internally (1 dollar = 1000 milliunits). All API calls should send milliunits; user-facing amounts should be presented in human-readable units.
|
|
209
|
+
|
|
210
|
+
### Testing architecture
|
|
211
|
+
|
|
212
|
+
Tests are aligned with the server/module structure (see `CLAUDE.md` and `AGENTS.md`):
|
|
213
|
+
|
|
214
|
+
- Unit tests target individual tools and services with mocked dependencies.
|
|
215
|
+
- Integration tests exercise YNAB interactions with more realistic flows (but often mocked HTTP).
|
|
216
|
+
- E2E tests talk to real YNAB budgets and accounts and therefore require specific env vars; these are slower and may be skipped via `SKIP_E2E_TESTS`.
|
|
217
|
+
- Performance tests (`src/__tests__/performance.test.ts`) measure throughput/latency for key operations.
|
|
218
|
+
|
|
219
|
+
Coverage targets are 80%+ across branches, functions, lines, and statements.
|
|
220
|
+
|
|
221
|
+
### Docs
|
|
222
|
+
|
|
223
|
+
`docs/README.md` is the entry point to detailed documentation:
|
|
224
|
+
|
|
225
|
+
- `docs/getting-started/` — Quick start, installation, configuration.
|
|
226
|
+
- `docs/guides/` — Architecture, testing, deployment, and development guidance.
|
|
227
|
+
- `docs/reference/` — Full API reference, tools catalog, examples, and troubleshooting.
|
|
228
|
+
|
|
229
|
+
When you need deeper context (e.g., designing a new tool, understanding architecture tradeoffs, or debugging tricky integration behavior), consult the relevant guide before making large changes.
|
|
230
|
+
|
|
231
|
+
## Repo-specific conventions and notes
|
|
232
|
+
|
|
233
|
+
- Branching & versioning (from `CLAUDE.md`):
|
|
234
|
+
- Main branch is `master`; semantic versioning is used (currently `0.x.y`).
|
|
235
|
+
- Commits and PRs (from `AGENTS.md`):
|
|
236
|
+
- Conventional Commits style is encouraged (`feat:`, `fix:`, `docs:`, `refactor:`, etc.).
|
|
237
|
+
- Before creating a PR, run the relevant build/test commands and refresh the PR description via `npm run pr:description`.
|
|
238
|
+
- Cache invalidation:
|
|
239
|
+
- Write operations (create/update/delete) are expected to invalidate or refresh related caches via `cacheManager`; avoid introducing new write paths that bypass this.
|
|
240
|
+
- Date format:
|
|
241
|
+
- Use ISO `YYYY-MM-DD` everywhere for dates.
|
|
242
|
+
- Error handling:
|
|
243
|
+
- Prefer returning structured errors via `ErrorHandler` utilities so that clients receive consistent JSON error payloads.
|
|
244
|
+
|
|
245
|
+
These conventions come from `CLAUDE.md` and `AGENTS.md` and should be preserved when extending or refactoring the codebase.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
Transaction Date,Posting Date,Description,Amount,Rewards,Currency
|
|
2
|
+
2024-12-14,2024-12-14,TIM HORTONS #1302 SUDBURY ON,-3.03,,
|
|
3
|
+
2024-12-13,2024-12-15,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
4
|
+
2024-12-13,2024-12-15,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
5
|
+
2024-12-13,2024-12-15,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
6
|
+
2024-12-13,2024-12-15,FD IN&OUT SAULT STE SUDBURY ON,-26.68,,
|
|
7
|
+
2024-12-12,2024-12-14,METRO #383 SUDBURY ON,-11.03,,
|
|
8
|
+
2024-12-12,2024-12-14,ESSO SUDBURY ON,-16.98,,
|
|
9
|
+
2024-12-12,2024-12-14,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
10
|
+
2024-12-12,2024-12-14,BEER STORE - 417 SUDBURY ON,-40.50,,
|
|
11
|
+
2024-12-11,2024-12-12,TIM HORTONS #1302 SUDBURY ON,-3.50,,
|
|
12
|
+
2024-12-11,2024-12-12,FRESHII - SUDBURY SUDBURY ON,-15.81,,
|
|
13
|
+
2024-12-10,2024-12-11,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
14
|
+
2024-12-10,2024-12-11,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
15
|
+
2024-12-10,2024-12-11,ESSO SUDBURY ON,-19.99,,
|
|
16
|
+
2024-12-10,2024-12-11,CANADIAN TIRE #00472SUDBURY ON,-106.18,,
|
|
17
|
+
2024-12-09,2024-12-10,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
18
|
+
2024-12-09,2024-12-10,TIM HORTONS #1302 SUDBURY ON,-2.84,,
|
|
19
|
+
2024-12-09,2024-12-10,AMZN MKTP CA*MZ7P17 WWW.AMAZON.CA/BILON,-39.04,3.12,
|
|
20
|
+
2024-12-07,2024-12-09,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
21
|
+
2024-12-07,2024-12-09,BEER STORE - 417 SUDBURY ON,-62.75,,
|
|
22
|
+
2024-12-06,2024-12-07,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
23
|
+
2024-12-06,2024-12-07,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
24
|
+
2024-12-06,2024-12-07,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
25
|
+
2024-12-06,2024-12-07,FIVE GUYS BURGERS ANSUDBURY ON,-26.05,,
|
|
26
|
+
2024-12-05,2024-12-06,TIM HORTONS #1302 SUDBURY ON,-3.50,,
|
|
27
|
+
2024-12-04,2024-12-05,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
28
|
+
2024-12-04,2024-12-05,A&W #2854 SUDBURY ON,-15.49,,
|
|
29
|
+
2024-12-04,2024-12-05,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
30
|
+
2024-12-03,2024-12-04,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
31
|
+
2024-12-03,2024-12-04,AMZN MKTP CA*MZ1I80 WWW.AMAZON.CA/BILON,-15.57,1.25,
|
|
32
|
+
2024-12-02,2024-12-03,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
33
|
+
2024-12-02,2024-12-03,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
34
|
+
2024-12-02,2024-12-03,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
35
|
+
2024-12-02,2024-12-04,CANADA POST 20 BRADY SUDBURY ON,-58.44,,
|
|
36
|
+
2024-12-01,2024-12-02,AMZN MKTP CA*MZ7RX3 WWW.AMAZON.CA/BILON,-66.57,5.33,
|
|
37
|
+
2024-11-30,2024-12-01,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
38
|
+
2024-11-29,2024-11-30,FRESHII - SUDBURY SUDBURY ON,-20.36,,
|
|
39
|
+
2024-11-29,2024-11-30,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
40
|
+
2024-11-29,2024-11-30,TIM HORTONS #1302 SUDBURY ON,-3.03,,
|
|
41
|
+
2024-11-29,2024-11-30,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
42
|
+
2024-11-28,2024-11-29,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
43
|
+
2024-11-28,2024-11-29,ESSO SUDBURY ON,-51.30,,
|
|
44
|
+
2024-11-28,2024-11-29,ESSO SUDBURY ON,-5.00,,
|
|
45
|
+
2024-11-28,2024-12-01,PAYMENT RECEIVED - THANK YOU/PAIEMENT RECU - MERCI,1917.02,,
|
|
46
|
+
2024-11-27,2024-11-28,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
47
|
+
2024-11-27,2024-11-28,METRO #383 SUDBURY ON,-23.90,,
|
|
48
|
+
2024-11-27,2024-11-28,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
49
|
+
2024-11-27,2024-11-28,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
50
|
+
2024-11-26,2024-11-27,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
51
|
+
2024-11-26,2024-11-27,AMZN MKTP CA*MZ3E06 WWW.AMAZON.CA/BILON,-52.21,4.18,
|
|
52
|
+
2024-11-25,2024-11-26,TIM HORTONS #1302 SUDBURY ON,-3.50,,
|
|
53
|
+
2024-11-25,2024-11-26,METRO #383 SUDBURY ON,-15.84,,
|
|
54
|
+
2024-11-25,2024-11-26,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
55
|
+
2024-11-22,2024-11-25,BEER STORE - 417 SUDBURY ON,-53.45,,
|
|
56
|
+
2024-11-22,2024-11-23,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
57
|
+
2024-11-22,2024-11-23,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
58
|
+
2024-11-22,2024-11-23,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
59
|
+
2024-11-21,2024-11-22,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
60
|
+
2024-11-21,2024-11-22,AMZN MKTP CA*MZ67I0 WWW.AMAZON.CA/BILON,-89.52,7.16,
|
|
61
|
+
2024-11-20,2024-11-21,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
62
|
+
2024-11-20,2024-11-21,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
63
|
+
2024-11-20,2024-11-21,TIM HORTONS #1302 SUDBURY ON,-3.50,,
|
|
64
|
+
2024-11-20,2024-11-21,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
65
|
+
2024-11-19,2024-11-20,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
66
|
+
2024-11-19,2024-11-20,HOME DEPOT #7259 SUDBURY ON,-36.15,,
|
|
67
|
+
2024-11-19,2024-11-20,HOME HARDWARE 1189 SUNDRIDGE ON,-85.38,,
|
|
68
|
+
2024-11-19,2024-11-20,ESSO SUNDRIDGE ON,-90.66,,
|
|
69
|
+
2024-11-19,2024-11-20,ESSO SUNDRIDGE ON,-100.00,,
|
|
70
|
+
2024-11-19,2024-11-20,FRESHII - SUDBURY SUDBURY ON,-15.81,,
|
|
71
|
+
2024-11-18,2024-11-19,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
72
|
+
2024-11-18,2024-11-19,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
73
|
+
2024-11-15,2024-11-18,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
74
|
+
2024-11-15,2024-11-16,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
75
|
+
2024-11-15,2024-11-16,KELSEY'S - 0126 SUDBURY ON,-37.35,,
|
|
76
|
+
2024-11-15,2024-11-16,HOME DEPOT #7259 SUDBURY ON,-48.02,,
|
|
77
|
+
2024-11-14,2024-11-15,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
78
|
+
2024-11-14,2024-11-15,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
79
|
+
2024-11-13,2024-11-14,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
80
|
+
2024-11-13,2024-11-14,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
81
|
+
2024-11-13,2024-11-14,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
82
|
+
2024-11-12,2024-11-13,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
83
|
+
2024-11-12,2024-11-13,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
84
|
+
2024-11-12,2024-11-13,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
85
|
+
2024-11-12,2024-11-13,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
86
|
+
2024-11-11,2024-11-12,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
87
|
+
2024-11-11,2024-11-12,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
88
|
+
2024-11-11,2024-11-12,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
89
|
+
2024-11-08,2024-11-09,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
90
|
+
2024-11-08,2024-11-09,BEER STORE - 417 SUDBURY ON,-40.50,,
|
|
91
|
+
2024-11-07,2024-11-08,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
92
|
+
2024-11-07,2024-11-08,METRO #383 SUDBURY ON,-23.79,,
|
|
93
|
+
2024-11-06,2024-11-07,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
94
|
+
2024-11-06,2024-11-07,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
95
|
+
2024-11-06,2024-11-07,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
96
|
+
2024-11-06,2024-11-07,AMZN MKTP CA*MZ59F9 WWW.AMAZON.CA/BILON,-54.56,4.36,
|
|
97
|
+
2024-11-05,2024-11-06,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
98
|
+
2024-11-05,2024-11-06,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
99
|
+
2024-11-04,2024-11-05,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
100
|
+
2024-11-04,2024-11-05,TIM HORTONS #1302 SUDBURY ON,-3.50,,
|
|
101
|
+
2024-11-04,2024-11-05,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
102
|
+
2024-11-04,2024-11-05,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
103
|
+
2024-11-01,2024-11-02,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
104
|
+
2024-11-01,2024-11-02,BEER STORE - 417 SUDBURY ON,-68.00,,
|
|
105
|
+
2024-10-31,2024-11-01,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
106
|
+
2024-10-31,2024-11-01,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
107
|
+
2024-10-31,2024-11-01,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
108
|
+
2024-10-31,2024-11-01,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
109
|
+
2024-10-30,2024-10-31,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
110
|
+
2024-10-30,2024-10-31,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
111
|
+
2024-10-30,2024-10-31,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
112
|
+
2024-10-29,2024-10-30,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
113
|
+
2024-10-29,2024-10-30,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
114
|
+
2024-10-29,2024-10-30,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
115
|
+
2024-10-28,2024-10-29,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
116
|
+
2024-10-28,2024-10-29,AMZN MKTP CA*MZ6VH9 WWW.AMAZON.CA/BILON,-53.85,4.31,
|
|
117
|
+
2024-10-25,2024-10-26,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
118
|
+
2024-10-25,2024-10-27,BEER STORE - 417 SUDBURY ON,-62.75,,
|
|
119
|
+
2024-10-24,2024-10-26,AMZN MKTP CA*MZ2OI1 WWW.AMAZON.CA/BILON,-39.57,3.17,
|
|
120
|
+
2024-10-24,2024-10-25,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
121
|
+
2024-10-24,2024-10-25,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
122
|
+
2024-10-24,2024-10-25,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
123
|
+
2024-10-24,2024-10-25,AMZN MKTP CA*MZ54K8 WWW.AMAZON.CA/BILON,-19.59,1.57,
|
|
124
|
+
2024-10-23,2024-10-24,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
125
|
+
2024-10-22,2024-10-23,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
126
|
+
2024-10-22,2024-10-23,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
127
|
+
2024-10-21,2024-10-22,SWISS CHALET SUDBURY ON,-34.86,,
|
|
128
|
+
2024-10-21,2024-10-22,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
129
|
+
2024-10-18,2024-10-19,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
130
|
+
2024-10-18,2024-10-19,BEER STORE - 417 SUDBURY ON,-58.70,,
|
|
131
|
+
2024-10-17,2024-10-18,METRO #383 SUDBURY ON,-45.84,,
|
|
132
|
+
2024-10-17,2024-10-18,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
133
|
+
2024-10-17,2024-10-18,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
134
|
+
2024-10-17,2024-10-18,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
135
|
+
2024-10-16,2024-10-17,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
136
|
+
2024-10-16,2024-10-17,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
137
|
+
2024-10-16,2024-10-17,HOME DEPOT #7259 SUDBURY ON,-60.71,,
|
|
138
|
+
2024-10-15,2024-10-16,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
139
|
+
2024-10-15,2024-10-16,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
140
|
+
2024-10-15,2024-10-16,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
141
|
+
2024-10-15,2024-10-16,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|
|
142
|
+
2024-10-15,2024-10-16,IKEA OTTAWA FRONT OTTAWA ON,-83.88,,
|
|
143
|
+
2024-10-14,2024-10-15,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
144
|
+
2024-10-11,2024-10-12,TIM HORTONS #1302 SUDBURY ON,-4.16,,
|
|
145
|
+
2024-10-11,2024-10-13,BEER STORE - 417 SUDBURY ON,-62.75,,
|
|
146
|
+
2024-10-11,2024-10-12,ESSO SUDBURY ON,-88.31,,
|
|
147
|
+
2024-10-10,2024-10-11,EVOCARSHARE SUDBURY ON,-22.22,,
|
|
148
|
+
2024-10-10,2024-10-11,TIM HORTONS #1302 SUDBURY ON,-3.28,,
|
|
149
|
+
2024-10-10,2024-10-11,TIM HORTONS #1302 SUDBURY ON,-3.62,,
|