@dizzlkheinz/ynab-mcpb 0.12.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +3 -0
- package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +3 -0
- package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +1 -0
- package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +5 -0
- package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +1569 -0
- package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +3 -0
- package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +2832 -0
- package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +2709 -0
- package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +2832 -0
- package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +2832 -0
- package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +2709 -0
- package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +1 -0
- package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +5217 -0
- package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +2594 -0
- package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +2594 -0
- package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +231 -0
- package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +2590 -0
- package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +5195 -0
- package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +286 -0
- package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +218 -0
- package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +180 -0
- package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +3 -0
- package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +1 -0
- package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +747 -0
- package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +1 -0
- package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +2594 -0
- package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +2594 -0
- package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +144 -0
- package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +416 -0
- package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +2590 -0
- package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +2590 -0
- package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +2590 -0
- package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +790 -0
- package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +766 -0
- package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +790 -0
- package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +2594 -0
- package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +1000 -0
- package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +3489 -0
- package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +766 -0
- package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +2594 -0
- package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +2456 -0
- package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +2594 -0
- package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +18 -0
- package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +48 -0
- package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +1 -0
- package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +1 -0
- package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +1 -0
- package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +1 -0
- package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +1271 -0
- package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +1570 -0
- package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +2590 -0
- package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +3 -0
- package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +3299 -0
- package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +3299 -0
- package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +1882 -0
- package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +2594 -0
- package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +1 -0
- package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +170 -0
- package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +1 -0
- package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +3 -0
- package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +1 -0
- package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +1 -0
- package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +3 -0
- package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +1 -0
- package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +1 -0
- package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +5 -0
- package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +1 -0
- package/.github/workflows/ci-tests.yml +6 -2
- package/.github/workflows/publish.yml +3 -3
- package/.github/workflows/release.yml +4 -0
- package/CHANGELOG.md +89 -1
- package/NUL +1 -1
- package/README.md +36 -10
- package/dist/bundle/index.cjs +65 -42
- package/dist/index.js +9 -20
- package/dist/server/YNABMCPServer.d.ts +2 -1
- package/dist/server/YNABMCPServer.js +61 -27
- package/dist/server/cacheKeys.d.ts +8 -0
- package/dist/server/cacheKeys.js +8 -0
- package/dist/server/config.d.ts +22 -3
- package/dist/server/config.js +16 -17
- package/dist/server/errorHandler.d.ts +2 -0
- package/dist/server/errorHandler.js +49 -5
- package/dist/server/securityMiddleware.js +3 -6
- package/dist/server/toolRegistry.js +8 -10
- package/dist/tools/accountTools.js +4 -3
- package/dist/tools/categoryTools.js +8 -7
- package/dist/tools/monthTools.js +2 -1
- package/dist/tools/payeeTools.js +2 -1
- package/dist/tools/reconcileAdapter.js +10 -5
- package/dist/tools/reconciliation/analyzer.d.ts +4 -2
- package/dist/tools/reconciliation/analyzer.js +120 -404
- package/dist/tools/reconciliation/csvParser.d.ts +51 -0
- package/dist/tools/reconciliation/csvParser.js +413 -0
- package/dist/tools/reconciliation/executor.d.ts +8 -0
- package/dist/tools/reconciliation/executor.js +277 -50
- package/dist/tools/reconciliation/index.d.ts +7 -7
- package/dist/tools/reconciliation/index.js +115 -39
- package/dist/tools/reconciliation/matcher.d.ts +24 -3
- package/dist/tools/reconciliation/matcher.js +175 -133
- package/dist/tools/reconciliation/recommendationEngine.js +22 -18
- package/dist/tools/reconciliation/reportFormatter.js +9 -8
- package/dist/tools/reconciliation/signDetector.d.ts +2 -0
- package/dist/tools/reconciliation/signDetector.js +54 -0
- package/dist/tools/reconciliation/types.d.ts +20 -34
- package/dist/tools/reconciliation/types.js +1 -7
- package/dist/tools/reconciliation/ynabAdapter.d.ts +4 -0
- package/dist/tools/reconciliation/ynabAdapter.js +15 -0
- package/dist/tools/transactionTools.d.ts +3 -17
- package/dist/tools/transactionTools.js +5 -17
- package/dist/types/reconciliation.d.ts +24 -0
- package/dist/types/reconciliation.js +1 -0
- package/dist/utils/baseError.d.ts +3 -0
- package/dist/utils/baseError.js +7 -0
- package/dist/utils/errors.d.ts +13 -0
- package/dist/utils/errors.js +15 -0
- package/dist/utils/validationError.d.ts +3 -0
- package/dist/utils/validationError.js +3 -0
- package/docs/guides/ARCHITECTURE.md +12 -129
- package/docs/plans/2025-11-20-reloadable-config-token-validation.md +93 -0
- package/docs/plans/2025-11-21-fix-transaction-cached-property.md +362 -0
- package/docs/plans/2025-11-21-reconciliation-error-handling.md +90 -0
- package/docs/plans/2025-11-21-v014-hardening.md +153 -0
- package/docs/plans/reconciliation-v2-redesign.md +1571 -0
- package/package.json +8 -2
- package/scripts/run-throttled-integration-tests.js +9 -3
- package/scripts/test-recommendations.ts +1 -1
- package/src/__tests__/performance.test.ts +12 -5
- package/src/__tests__/testUtils.ts +62 -5
- package/src/__tests__/tools/reconciliation/csvParser.integration.test.ts +129 -0
- package/src/__tests__/tools/reconciliation/real-world.integration.test.ts +53 -0
- package/src/__tests__/workflows.e2e.test.ts +33 -0
- package/src/index.ts +8 -31
- package/src/server/YNABMCPServer.ts +81 -42
- package/src/server/__tests__/YNABMCPServer.integration.test.ts +10 -12
- package/src/server/__tests__/YNABMCPServer.test.ts +27 -15
- package/src/server/__tests__/config.test.ts +76 -152
- package/src/server/__tests__/server-startup.integration.test.ts +42 -14
- package/src/server/__tests__/toolRegistry.test.ts +1 -1
- package/src/server/cacheKeys.ts +8 -0
- package/src/server/config.ts +20 -38
- package/src/server/errorHandler.ts +52 -5
- package/src/server/securityMiddleware.ts +3 -7
- package/src/server/toolRegistry.ts +14 -10
- package/src/tools/__tests__/categoryTools.test.ts +37 -19
- package/src/tools/__tests__/transactionTools.test.ts +58 -2
- package/src/tools/accountTools.ts +8 -3
- package/src/tools/categoryTools.ts +12 -7
- package/src/tools/monthTools.ts +7 -1
- package/src/tools/payeeTools.ts +7 -1
- package/src/tools/reconcileAdapter.ts +10 -5
- package/src/tools/reconciliation/__tests__/adapter.test.ts +28 -22
- package/src/tools/reconciliation/__tests__/analyzer.test.ts +114 -180
- package/src/tools/reconciliation/__tests__/csvParser.test.ts +87 -0
- package/src/tools/reconciliation/__tests__/executor.integration.test.ts +26 -6
- package/src/tools/reconciliation/__tests__/executor.test.ts +133 -60
- package/src/tools/reconciliation/__tests__/matcher.test.ts +68 -54
- package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +37 -30
- package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +6 -5
- package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +30 -11
- package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +50 -15
- package/src/tools/reconciliation/__tests__/signDetector.test.ts +211 -0
- package/src/tools/reconciliation/__tests__/ynabAdapter.test.ts +61 -0
- package/src/tools/reconciliation/analyzer.ts +174 -545
- package/src/tools/reconciliation/csvParser.ts +617 -0
- package/src/tools/reconciliation/executor.ts +344 -58
- package/src/tools/reconciliation/index.ts +141 -48
- package/src/tools/reconciliation/matcher.ts +234 -214
- package/src/tools/reconciliation/recommendationEngine.ts +23 -19
- package/src/tools/reconciliation/reportFormatter.ts +16 -11
- package/src/tools/reconciliation/signDetector.ts +117 -0
- package/src/tools/reconciliation/types.ts +39 -61
- package/src/tools/reconciliation/ynabAdapter.ts +33 -0
- package/src/tools/schemas/outputs/utilityOutputs.ts +1 -1
- package/src/tools/transactionTools.ts +7 -18
- package/src/types/reconciliation.ts +49 -0
- package/src/utils/baseError.ts +7 -0
- package/src/utils/errors.ts +21 -0
- package/src/utils/validationError.ts +3 -0
- package/temp-recon.ts +126 -0
- package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +3662 -0
- package/test_mcp_tools.mjs +75 -0
- package/.code/agents/0427d95e-edca-431f-a214-5e53264e29c4/error.txt +0 -8
- package/.code/agents/0d675174-d1e1-41c3-9975-4c2e275819a9/error.txt +0 -3
- package/.code/agents/0d8c5afd-4787-422b-abf8-2e5943fc7e67/error.txt +0 -3
- package/.code/agents/0ec34a70-ed5d-4b9e-bee4-bb0e4cccbc4b/error.txt +0 -1
- package/.code/agents/0ef51a21-1ab1-49d7-9561-0eaa43875ebc/error.txt +0 -12
- package/.code/agents/15db95d7-abad-4b4d-9c3b-8446089cb61d/error.txt +0 -1
- package/.code/agents/19ab9acb-f675-4ff0-902a-09a5476f8149/error.txt +0 -1
- package/.code/agents/1ef7e12d-f6ff-4897-8a9b-152d523d898e/error.txt +0 -5
- package/.code/agents/2465/exec-call_lroN9KKzJVWC7t5423DK1nT9.txt +0 -1453
- package/.code/agents/28edb6fe-95a9-41a0-ae69-aa0100d26c0c/error.txt +0 -8
- package/.code/agents/2ae40cf5-b4bf-42e2-92bf-7ea350a7755e/error.txt +0 -9
- package/.code/agents/2bfc4e1f-ac4b-45a5-b6df-bf89d4dbb54c/error.txt +0 -1
- package/.code/agents/2e2e1134-eff0-49be-ba25-8e2c3468a564/error.txt +0 -5
- package/.code/agents/3/exec-call_203OC4TNVkLxW7z2HCVEQ1cM.txt +0 -81
- package/.code/agents/3/exec-call_SS5T0XSiXB4LSNzUKTl75wkh.txt +0 -610
- package/.code/agents/3322c003-ce5e-48e3-a342-f5049c5bf9a2/error.txt +0 -1
- package/.code/agents/391e9b08-1ebc-468c-9bcd-6d0cc3193b37/error.txt +0 -1
- package/.code/agents/3ab0aa84-b7bb-4054-afa3-40b8fd7d3be0/error.txt +0 -1
- package/.code/agents/3bed368d-50fe-477e-aee3-a6707eaa1ab9/error.txt +0 -3
- package/.code/agents/3e40b925-db12-442f-8d7a-a25fc69a6672/error.txt +0 -8
- package/.code/agents/414d5776-cf58-41f3-9328-a6daed503a50/error.txt +0 -5
- package/.code/agents/42687751-4565-4610-b240-67835b17d861/error.txt +0 -1
- package/.code/agents/46b98876-1a39-43c9-9e2f-507ca6d47335/error.txt +0 -9
- package/.code/agents/4a7d9491-b26f-43dd-850d-2ecdc49b5d1b/error.txt +0 -1
- package/.code/agents/4e60f00a-1b3e-447f-87f3-7faf9deddec3/error.txt +0 -13
- package/.code/agents/5138fc1c-4d49-4b74-a7da-ccdb3a8e44e7/error.txt +0 -14
- package/.code/agents/521cff39-a7a3-42e5-a557-134f0f7daaa0/error.txt +0 -5
- package/.code/agents/53302dc5-3857-4413-9a47-9e0f64a51dc4/error.txt +0 -5
- package/.code/agents/567c7c2e-6a6f-4761-a08d-d36deeb2e0ac/error.txt +0 -5
- package/.code/agents/57b00845-80dc-47c9-953c-3028d16275d6/error.txt +0 -3
- package/.code/agents/593d9005-c2a5-48fd-8813-ece0d3f2de96/error.txt +0 -1
- package/.code/agents/5a112e66-0e1a-42f9-877c-53af56ea3551/error.txt +0 -1
- package/.code/agents/5b05e8ed-7788-4738-b7ee-9faa8180f992/error.txt +0 -5
- package/.code/agents/5f888d6f-d7ca-4ac8-be23-9ea1bf753951/error.txt +0 -5
- package/.code/agents/607db3ab-e4b0-435b-b497-93e9aa525549/error.txt +0 -8
- package/.code/agents/67dcb2a2-900f-4c78-b3fc-80b5213e0ddf/error.txt +0 -8
- package/.code/agents/69ad848c-4e98-49b3-b16c-0094ac2d1759/error.txt +0 -5
- package/.code/agents/6c9cfc5f-0d0b-445c-b121-9f60082c4f70/error.txt +0 -1
- package/.code/agents/6f6f8f77-4ab0-4f6e-9f30-40e8be0bd8f5/error.txt +0 -1
- package/.code/agents/72a7cde4-fa8a-4024-9038-27faa550539b/error.txt +0 -1
- package/.code/agents/7b48335c-8247-43aa-9949-5f820ba8e199/error.txt +0 -1
- package/.code/agents/80944249-bea9-4ac5-87de-a666c4df306e/error.txt +0 -1
- package/.code/agents/826099df-1b66-4186-a915-7eb59f9db19d/error.txt +0 -5
- package/.code/agents/8291d158-18a8-4a92-b799-4e9a4d9cce88/error.txt +0 -1
- package/.code/agents/82fb71a3-20fb-4341-804a-a2fc900f95bc/error.txt +0 -1
- package/.code/agents/855790ea-54ee-43e4-8209-a66994e37590/error.txt +0 -1
- package/.code/agents/88ce3a2e-04f2-42be-9062-bf97aa798da0/error.txt +0 -3
- package/.code/agents/9a17e398-b6ed-4218-bb55-bc64a8d38ce8/error.txt +0 -8
- package/.code/agents/9a4f4bfc-a2a6-4f40-a896-9335b41a7ed1/error.txt +0 -1
- package/.code/agents/9b633e55-ef84-47d6-94bb-fd3dd172ad97/error.txt +0 -1
- package/.code/agents/9b81f3ab-c72b-4a81-9a8f-28a49ddba84a/error.txt +0 -8
- package/.code/agents/a35daf29-b2d1-4aef-9b42-dad63a76bd47/error.txt +0 -3
- package/.code/agents/a81990cc-69ee-44d2-b907-17403c9bc5d7/error.txt +0 -5
- package/.code/agents/ab56260a-4a83-4ad4-9410-f88a23d6520a/error.txt +0 -1
- package/.code/agents/ad722c31-2d1d-45f7-bae2-3f02ca455b60/error.txt +0 -1
- package/.code/agents/b62e8690-3324-4b97-9309-731bee79416b/error.txt +0 -5
- package/.code/agents/baf60a3a-752b-4ad8-99d6-df32423ed2eb/error.txt +0 -1
- package/.code/agents/be049042-7dcb-4ac8-9beb-c8f1aea67742/error.txt +0 -14
- package/.code/agents/bed1dcb4-bfce-4a9f-8594-0f994962aafd/error.txt +0 -1
- package/.code/agents/c324a6cf-e935-4ede-9529-b3ebc18e8d6b/error.txt +0 -5
- package/.code/agents/c37c06ff-dfe3-43f2-9bbc-3ec73ec8f41d/error.txt +0 -5
- package/.code/agents/c8cd6671-433a-456b-9f88-e51cb2df6bfc/error.txt +0 -11
- package/.code/agents/ca2ccb67-2f24-428e-b27d-9365beadd140/error.txt +0 -1
- package/.code/agents/cf08c0c8-e7f0-423e-93ba-547e8e818340/error.txt +0 -8
- package/.code/agents/d579c74f-874b-40a4-9d56-ced1eb6a701d/error.txt +0 -1
- package/.code/agents/df412c98-7378-4deb-8e1e-76c416931181/error.txt +0 -3
- package/.code/agents/e5134eb3-2af4-45b0-8998-051cb4afdb45/error.txt +0 -3
- package/.code/agents/e6308471-aa45-4e9e-9496-2e9404164d97/error.txt +0 -8
- package/.code/agents/e7bd8bc7-23fb-4f46-98dc-b0dcf11b75a1/error.txt +0 -1
- package/.code/agents/e92bec35-378d-4fe1-8ac0-6e1bb3c86911/error.txt +0 -5
- package/.code/agents/ed918fbf-2dc4-4aa2-bfc5-04b65d9471ea/error.txt +0 -1
- package/.code/agents/ef1d756f-b272-48fc-8729-f05c494674f7/error.txt +0 -1
- package/.code/agents/ef359853-0249-4e41-a804-c0fc459fe456/error.txt +0 -1
- package/.code/agents/effc7b4a-4b90-40a0-8c86-a7a99d2d5fd2/error.txt +0 -1
- package/.code/agents/fa15f8d5-8359-4a8b-83a3-2f2056b3ff40/error.txt +0 -3
- package/.code/agents/fbef4193-eadf-4c8a-83ff-4878a6310f25/error.txt +0 -8
- package/.code/agents/fd0a4b4a-fda4-4964-a6d6-2b8a2da387c6/error.txt +0 -1
- package/.gemini/settings.json +0 -8
- package/ADOS-2-Module-1-Complete-Manual.md +0 -757
- package/WARP.md +0 -245
package/WARP.md
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
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.
|