@dizzlkheinz/ynab-mcpb 0.17.0 → 0.18.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/.env.example +33 -33
- package/.github/workflows/ci-tests.yml +45 -45
- package/.github/workflows/claude-code-review.yml +57 -57
- package/.github/workflows/claude.yml +50 -50
- package/.github/workflows/full-integration.yml +22 -22
- package/.github/workflows/publish.yml +12 -3
- package/.github/workflows/release.yml +2 -2
- package/CHANGELOG.md +10 -1
- package/CLAUDE.md +16 -12
- package/README.md +6 -1
- package/dist/bundle/index.cjs +49 -49
- package/dist/server/YNABMCPServer.d.ts +125 -54
- package/dist/server/YNABMCPServer.js +42 -11
- package/dist/server/cacheManager.js +6 -5
- package/dist/server/completions.d.ts +25 -0
- package/dist/server/completions.js +160 -0
- package/dist/server/config.d.ts +2 -2
- package/dist/server/errorHandler.js +1 -0
- package/dist/server/rateLimiter.js +3 -1
- package/dist/server/resources.d.ts +1 -0
- package/dist/server/resources.js +33 -16
- package/dist/server/securityMiddleware.d.ts +38 -8
- package/dist/server/securityMiddleware.js +1 -0
- package/dist/server/toolRegistry.d.ts +9 -0
- package/dist/server/toolRegistry.js +11 -0
- package/dist/tools/adapters.d.ts +3 -1
- package/dist/tools/adapters.js +1 -0
- package/dist/tools/reconciliation/executor.d.ts +2 -0
- package/dist/tools/reconciliation/executor.js +26 -1
- package/dist/tools/reconciliation/index.d.ts +3 -2
- package/dist/tools/reconciliation/index.js +4 -3
- package/dist/tools/schemas/outputs/index.d.ts +2 -2
- package/dist/tools/schemas/outputs/index.js +2 -2
- package/dist/tools/schemas/outputs/utilityOutputs.d.ts +0 -15
- package/dist/tools/schemas/outputs/utilityOutputs.js +0 -9
- package/dist/tools/utilityTools.d.ts +0 -7
- package/dist/tools/utilityTools.js +1 -50
- package/docs/maintainers/npm-publishing.md +27 -0
- package/docs/reference/API.md +83 -97
- package/docs/technical/reconciliation-system-architecture.md +2251 -2251
- package/package.json +6 -6
- package/scripts/analyze-bundle.mjs +41 -41
- package/scripts/generate-mcpb.ps1 +95 -95
- package/scripts/watch-and-restart.ps1 +49 -49
- package/src/__tests__/comprehensive.integration.test.ts +4 -32
- package/src/__tests__/performance.test.ts +5 -14
- package/src/__tests__/setup.ts +45 -14
- package/src/__tests__/smoke.e2e.test.ts +70 -0
- package/src/__tests__/testUtils.ts +2 -113
- package/src/server/YNABMCPServer.ts +64 -10
- package/src/server/__tests__/YNABMCPServer.test.ts +0 -1
- package/src/server/__tests__/completions.integration.test.ts +117 -0
- package/src/server/__tests__/completions.test.ts +319 -0
- package/src/server/__tests__/resources.template.test.ts +3 -3
- package/src/server/__tests__/resources.test.ts +3 -3
- package/src/server/__tests__/toolRegistration.test.ts +3 -3
- package/src/server/cacheManager.ts +7 -6
- package/src/server/completions.ts +279 -0
- package/src/server/errorHandler.ts +1 -0
- package/src/server/rateLimiter.ts +4 -1
- package/src/server/resources.ts +49 -13
- package/src/server/securityMiddleware.ts +1 -0
- package/src/server/toolRegistry.ts +42 -0
- package/src/tools/__tests__/transactionTools.integration.test.ts +63 -3
- package/src/tools/__tests__/utilityTools.integration.test.ts +1 -85
- package/src/tools/__tests__/utilityTools.test.ts +1 -123
- package/src/tools/adapters.ts +22 -1
- package/src/tools/reconciliation/__tests__/executor.progress.test.ts +462 -0
- package/src/tools/reconciliation/executor.ts +55 -1
- package/src/tools/reconciliation/index.ts +7 -3
- package/src/tools/schemas/outputs/index.ts +0 -3
- package/src/tools/schemas/outputs/utilityOutputs.ts +2 -43
- package/src/tools/toolCategories.ts +0 -1
- package/src/tools/utilityTools.ts +5 -76
- package/vitest.config.ts +4 -1
- package/.chunkhound.json +0 -11
- package/.code/agents/0098661e-0fa3-4990-beb9-c0cbf3f123aa/status.txt +0 -1
- package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +0 -3
- package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +0 -3
- package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +0 -1
- package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +0 -5
- package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +0 -1569
- package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +0 -3
- package/.code/agents/1324/exec-call_tIpx9uV1TpARbAMZonRQm8AO.txt +0 -757
- package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +0 -2832
- package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +0 -2709
- package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +0 -2832
- package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +0 -2832
- package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +0 -2709
- package/.code/agents/1572/exec-call_GjVFBFOWcY7lE0idc5nWlLNh.txt +0 -781
- package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +0 -1
- package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +0 -5217
- package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +0 -2594
- package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +0 -2594
- package/.code/agents/1846/exec-call_1YNAVD18RjrMN7JnfkkQhUP3.txt +0 -766
- package/.code/agents/1846/exec-call_lh3lDzE4WJAh1lFiomiiZ73D.txt +0 -766
- package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +0 -231
- package/.code/agents/2038/exec-call_DYwOukaYsL8VCONWmV2rUW5u.txt +0 -766
- package/.code/agents/2038/exec-call_c7fOQ7UrpVcTtvdfGBRM146V.txt +0 -652
- package/.code/agents/2038/exec-call_ySNyq9Mm55jWE480s54r5QcA.txt +0 -766
- package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +0 -2590
- package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +0 -5195
- package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +0 -286
- package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +0 -218
- package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +0 -180
- package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +0 -3
- package/.code/agents/2256/exec-call_AtPcRWPmFPMcmX6qOFm1fCEY.txt +0 -766
- package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +0 -1
- package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +0 -747
- package/.code/agents/2454/exec-call_aFJpupwjfZeOBm7ixI5Vc8z2.txt +0 -766
- package/.code/agents/2454/exec-call_wogZ4HfXTodTEXvdgXlVUBpv.txt +0 -766
- package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +0 -1
- package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +0 -2594
- package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +0 -2594
- package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +0 -144
- package/.code/agents/2e905864-aa07-4314-bcf9-c5b32277e4ac/result.txt +0 -36
- package/.code/agents/3073/exec-call_Peeagc9DxGYLgE6pNdMZhqIE.txt +0 -766
- package/.code/agents/3073/exec-call_d2YSE3hXF08KRSoUM3qd8Z3x.txt +0 -766
- package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +0 -416
- package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +0 -2590
- package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +0 -2590
- package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +0 -2590
- package/.code/agents/335aa031-466d-4fb7-925f-3cd864e264d0/result.txt +0 -191
- package/.code/agents/3364/exec-call_NbhIrsM5HhyDZDmJZG5CuCYL.txt +0 -766
- package/.code/agents/3364/exec-call_cKtJg0NrXiwXEFwlsE3uPZRA.txt +0 -766
- package/.code/agents/36d98414-5cde-4d9d-9a67-a240a18c1f07/result.txt +0 -189
- package/.code/agents/4604e866-b7b8-44f5-992f-2f683b0a523b/status.txt +0 -1
- package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +0 -790
- package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +0 -766
- package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +0 -790
- package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +0 -2594
- package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +0 -1000
- package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +0 -3489
- package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +0 -766
- package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +0 -2594
- package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +0 -2456
- package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +0 -2594
- package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +0 -18
- package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +0 -48
- package/.code/agents/5f8dc01c-47b3-4163-b0b3-aa31be89fcdc/status.txt +0 -1
- package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +0 -1
- package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +0 -1
- package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +0 -1
- package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +0 -1
- package/.code/agents/7/exec-call_HltHpkDox0Zm1vGEjdksUgpE.txt +0 -1120
- package/.code/agents/7/exec-call_LCATrOPPAgbxW9Q1z0XaVi2E.txt +0 -2646
- package/.code/agents/7/exec-call_W8DeRfNG9hvbgVFvf0clBf6R.txt +0 -2646
- package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +0 -1271
- package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +0 -1570
- package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +0 -2590
- package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +0 -3
- package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +0 -3299
- package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +0 -3299
- package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +0 -1882
- package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +0 -2594
- package/.code/agents/94a0ddf3-a304-4ec3-913e-3cceef509948/error.txt +0 -1
- package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +0 -1
- package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +0 -170
- package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +0 -1
- package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +0 -3
- package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +0 -1
- package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +0 -1
- package/.code/agents/e2c752b7-711d-423a-af57-f53c809deb84/result.txt +0 -160
- package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +0 -3
- package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +0 -1
- package/.code/agents/e6601719-c31f-4a0e-8c71-d70787d0ab71/status.txt +0 -1
- package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +0 -1
- package/.code/agents/f250b7ed-5bd5-4036-aa8c-ce63caee7d61/result.txt +0 -20
- package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +0 -5
- package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +0 -1
- package/AGENTS.md +0 -1
- package/NUL +0 -0
- package/package.json.tmp +0 -105
- package/src/__tests__/delta.performance.test.ts +0 -80
- package/src/__tests__/workflows.e2e.test.ts +0 -1702
- package/temp-recon.ts +0 -126
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +0 -23
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +0 -23
- package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +0 -44
- package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +0 -58
- package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +0 -3662
- package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +0 -115
package/docs/reference/API.md
CHANGED
|
@@ -8,6 +8,7 @@ This document provides comprehensive documentation for all tools available in th
|
|
|
8
8
|
- [Authentication](#authentication)
|
|
9
9
|
- [Data Formats](#data-formats)
|
|
10
10
|
- [MCP Resources](#mcp-resources)
|
|
11
|
+
- [MCP Client Features](#mcp-client-features)
|
|
11
12
|
- [Budget Management Tools](#budget-management-tools)
|
|
12
13
|
- [Account Management Tools](#account-management-tools)
|
|
13
14
|
- [Transaction Management Tools](#transaction-management-tools)
|
|
@@ -20,7 +21,7 @@ This document provides comprehensive documentation for all tools available in th
|
|
|
20
21
|
|
|
21
22
|
## Overview
|
|
22
23
|
|
|
23
|
-
The YNAB MCP Server provides
|
|
24
|
+
The YNAB MCP Server provides 29 tools that enable AI assistants to interact with YNAB data. All tools follow consistent patterns for parameters, responses, and error handling.
|
|
24
25
|
|
|
25
26
|
### Tool Naming Convention
|
|
26
27
|
|
|
@@ -49,10 +50,14 @@ The server automatically converts YNAB's internal milliunits to dollars in all r
|
|
|
49
50
|
- Budget amounts: `150.00` (instead of `150000` milliunits)
|
|
50
51
|
|
|
51
52
|
**Input formats**:
|
|
52
|
-
- When creating transactions, amounts should be provided in
|
|
53
|
-
-
|
|
53
|
+
- When creating transactions, amounts should be provided in dollars (e.g., `50.25`)
|
|
54
|
+
- The server automatically converts to YNAB's internal milliunit format
|
|
54
55
|
|
|
55
|
-
**
|
|
56
|
+
**Note**: YNAB's internal representation uses milliunits (1/1000th of currency unit), but this is now transparent to users - all inputs and outputs use standard dollar amounts
|
|
57
|
+
|
|
58
|
+
### Output Formatting Overrides
|
|
59
|
+
|
|
60
|
+
All tool calls accept optional boolean hints `minify`, `_minify`, or `__minify` in their arguments to override JSON formatting for that call. These keys are removed before validation and do not affect tool behavior.
|
|
56
61
|
|
|
57
62
|
### Dates
|
|
58
63
|
|
|
@@ -186,9 +191,9 @@ URI: ynab://budgets/12345678-1234-1234-1234-123456789012/accounts/87654321-4321-
|
|
|
186
191
|
### Caching
|
|
187
192
|
|
|
188
193
|
All MCP resources are cached for optimal performance:
|
|
189
|
-
- **Budgets**:
|
|
190
|
-
- **Accounts**:
|
|
191
|
-
- **User info**:
|
|
194
|
+
- **Budgets**: 10 minutes TTL (rarely change)
|
|
195
|
+
- **Accounts**: 5 minutes TTL (balances update periodically)
|
|
196
|
+
- **User info**: 30 minutes TTL (static data)
|
|
192
197
|
|
|
193
198
|
### Resource vs Tool: When to Use What
|
|
194
199
|
|
|
@@ -209,6 +214,27 @@ All MCP resources are cached for optimal performance:
|
|
|
209
214
|
- Get transactions for an account: Use `list_transactions` tool ✅
|
|
210
215
|
- Create a new transaction: Use `create_transaction` tool ✅
|
|
211
216
|
|
|
217
|
+
## MCP Client Features
|
|
218
|
+
|
|
219
|
+
These features depend on MCP client support. If your client doesn't surface them, tool calls still work normally.
|
|
220
|
+
|
|
221
|
+
### Completions (Autocomplete)
|
|
222
|
+
|
|
223
|
+
The server provides MCP completions for common arguments:
|
|
224
|
+
- `budget_id`
|
|
225
|
+
- `account_id`
|
|
226
|
+
- `account_name`
|
|
227
|
+
- `category`
|
|
228
|
+
- `category_id`
|
|
229
|
+
- `payee`
|
|
230
|
+
- `payee_id`
|
|
231
|
+
|
|
232
|
+
Clients can use these completions to suggest IDs or names while composing tool calls.
|
|
233
|
+
|
|
234
|
+
### Progress Notifications
|
|
235
|
+
|
|
236
|
+
When a client provides a `progressToken` in tool requests, the server emits `notifications/progress` events. Progress updates are most useful for long-running operations such as `reconcile_account`, which can create, update, or unclear large batches of transactions.
|
|
237
|
+
|
|
212
238
|
## Budget Management Tools
|
|
213
239
|
|
|
214
240
|
### list_budgets
|
|
@@ -291,7 +317,7 @@ Lists all accounts for a specific budget.
|
|
|
291
317
|
"content": [
|
|
292
318
|
{
|
|
293
319
|
"type": "text",
|
|
294
|
-
"text": "{\n \"accounts\": [\n {\n \"id\": \"87654321-4321-4321-4321-210987654321\",\n \"name\": \"Checking Account\",\n \"type\": \"checking\",\n \"on_budget\": true,\n \"closed\": false,\n \"note\": null,\n \"balance\":
|
|
320
|
+
"text": "{\n \"accounts\": [\n {\n \"id\": \"87654321-4321-4321-4321-210987654321\",\n \"name\": \"Checking Account\",\n \"type\": \"checking\",\n \"on_budget\": true,\n \"closed\": false,\n \"note\": null,\n \"balance\": 150.0,\n \"cleared_balance\": 145.0,\n \"uncleared_balance\": 5.0,\n \"transfer_payee_id\": \"transfer-payee-id\",\n \"direct_import_linked\": false,\n \"direct_import_in_error\": false,\n \"last_reconciled_at\": null,\n \"debt_original_balance\": null,\n \"debt_interest_rates\": {},\n \"debt_minimum_payments\": {},\n \"debt_escrow_amounts\": {}\n }\n ]\n}"
|
|
295
321
|
}
|
|
296
322
|
]
|
|
297
323
|
}
|
|
@@ -331,7 +357,7 @@ Creates a new account in the specified budget.
|
|
|
331
357
|
- `lineOfCredit` - Line of credit
|
|
332
358
|
- `otherAsset` - Other asset account
|
|
333
359
|
- `otherLiability` - Other liability account
|
|
334
|
-
- `balance` (number, optional): Initial balance in
|
|
360
|
+
- `balance` (number, optional): Initial balance in dollars
|
|
335
361
|
- `dry_run` (boolean, optional): Validate and return simulated result; no API call
|
|
336
362
|
|
|
337
363
|
**Example Request:**
|
|
@@ -342,7 +368,7 @@ Creates a new account in the specified budget.
|
|
|
342
368
|
"budget_id": "12345678-1234-1234-1234-123456789012",
|
|
343
369
|
"name": "New Savings Account",
|
|
344
370
|
"type": "savings",
|
|
345
|
-
"balance":
|
|
371
|
+
"balance": 100.0
|
|
346
372
|
}
|
|
347
373
|
}
|
|
348
374
|
```
|
|
@@ -353,7 +379,7 @@ Creates a new account in the specified budget.
|
|
|
353
379
|
"content": [
|
|
354
380
|
{
|
|
355
381
|
"type": "text",
|
|
356
|
-
"text": "{\n \"account\": {\n \"id\": \"new-account-id\",\n \"name\": \"New Savings Account\",\n \"type\": \"savings\",\n \"on_budget\": true,\n \"closed\": false,\n \"balance\":
|
|
382
|
+
"text": "{\n \"account\": {\n \"id\": \"new-account-id\",\n \"name\": \"New Savings Account\",\n \"type\": \"savings\",\n \"on_budget\": true,\n \"closed\": false,\n \"balance\": 100.0,\n \"cleared_balance\": 100.0,\n \"uncleared_balance\": 0\n }\n}"
|
|
357
383
|
}
|
|
358
384
|
]
|
|
359
385
|
}
|
|
@@ -390,7 +416,7 @@ Lists transactions for a budget with optional filtering.
|
|
|
390
416
|
"content": [
|
|
391
417
|
{
|
|
392
418
|
"type": "text",
|
|
393
|
-
"text": "{\n \"transactions\": [\n {\n \"id\": \"transaction-id\",\n \"date\": \"2024-01-15\",\n \"amount\": -
|
|
419
|
+
"text": "{\n \"transactions\": [\n {\n \"id\": \"transaction-id\",\n \"date\": \"2024-01-15\",\n \"amount\": -5.0,\n \"memo\": \"Coffee shop\",\n \"cleared\": \"cleared\",\n \"approved\": true,\n \"flag_color\": null,\n \"account_id\": \"87654321-4321-4321-4321-210987654321\",\n \"payee_id\": \"payee-id\",\n \"category_id\": \"category-id\",\n \"transfer_account_id\": null,\n \"transfer_transaction_id\": null,\n \"matched_transaction_id\": null,\n \"import_id\": null,\n \"import_payee_name\": null,\n \"import_payee_name_original\": null,\n \"debt_transaction_type\": null,\n \"deleted\": false\n }\n ]\n}"
|
|
394
420
|
}
|
|
395
421
|
]
|
|
396
422
|
}
|
|
@@ -426,7 +452,7 @@ Exports all transactions to a JSON file with descriptive filename and platform-s
|
|
|
426
452
|
"content": [
|
|
427
453
|
{
|
|
428
454
|
"type": "text",
|
|
429
|
-
"text": "{\n \"message\": \"Successfully exported 1247 transactions\",\n \"filename\": \"ynab_since_2024-01-01_1247items_2024-09-10_14-30-15.json\",\n \"full_path\": \"C:\\\\Users\\\\YourName\\\\Downloads\\\\ynab_since_2024-01-01_1247items_2024-09-10_14-30-15.json\",\n \"export_directory\": \"C:\\\\Users\\\\YourName\\\\Downloads\",\n \"filename_explanation\": \"Filename format: ynab_{filters}_{count}items_{timestamp}.json - identifies what data was exported, when, and how many transactions\",\n \"preview_count\": 10,\n \"total_count\": 1247,\n \"preview_transactions\": [\n {\n \"id\": \"transaction-id\",\n \"date\": \"2024-01-15\",\n \"amount\": -
|
|
455
|
+
"text": "{\n \"message\": \"Successfully exported 1247 transactions\",\n \"filename\": \"ynab_since_2024-01-01_1247items_2024-09-10_14-30-15.json\",\n \"full_path\": \"C:\\\\Users\\\\YourName\\\\Downloads\\\\ynab_since_2024-01-01_1247items_2024-09-10_14-30-15.json\",\n \"export_directory\": \"C:\\\\Users\\\\YourName\\\\Downloads\",\n \"filename_explanation\": \"Filename format: ynab_{filters}_{count}items_{timestamp}.json - identifies what data was exported, when, and how many transactions\",\n \"preview_count\": 10,\n \"total_count\": 1247,\n \"preview_transactions\": [\n {\n \"id\": \"transaction-id\",\n \"date\": \"2024-01-15\",\n \"amount\": -5.0,\n \"memo\": \"Coffee shop\",\n \"payee_name\": \"Starbucks\",\n \"category_name\": \"Dining Out\"\n }\n ]\n}"
|
|
430
456
|
}
|
|
431
457
|
]
|
|
432
458
|
}
|
|
@@ -678,16 +704,17 @@ The `reconcile_account_v2` tool now includes an optional `recommendations` array
|
|
|
678
704
|
|
|
679
705
|
Recommendations include complete parameters for YNAB MCP tool calls:
|
|
680
706
|
|
|
681
|
-
**CRITICAL**: Recommendation `parameters.amount` values are in **milliunits** (YNAB's internal format where 1 dollar = 1000 milliunits). These values are
|
|
707
|
+
**CRITICAL**: Recommendation `parameters.amount` values are in **milliunits** (YNAB's internal format where 1 dollar = 1000 milliunits). These values are intended for reconciliation execution; convert to dollars before calling `create_transaction`. `estimated_impact.value` remains in decimal dollars for human readability.
|
|
682
708
|
|
|
683
709
|
```typescript
|
|
684
710
|
// For create_transaction recommendations:
|
|
685
|
-
// Note: Recommendation amounts are already in milliunits
|
|
711
|
+
// Note: Recommendation amounts are already in milliunits; convert to dollars before tool calls
|
|
686
712
|
const rec = recommendations.find(r => r.action_type === 'create_transaction');
|
|
687
713
|
if (rec) {
|
|
688
714
|
await create_transaction({
|
|
689
715
|
budget_id: 'your-budget-id',
|
|
690
|
-
...rec.parameters
|
|
716
|
+
...rec.parameters,
|
|
717
|
+
amount: rec.parameters.amount / 1000 // Convert milliunits to dollars
|
|
691
718
|
});
|
|
692
719
|
}
|
|
693
720
|
|
|
@@ -880,7 +907,7 @@ Creates a new transaction in the specified budget and account.
|
|
|
880
907
|
**Parameters:**
|
|
881
908
|
- `budget_id` (string, required): The ID of the budget
|
|
882
909
|
- `account_id` (string, required): The ID of the account
|
|
883
|
-
- `amount` (number, required): Transaction amount in
|
|
910
|
+
- `amount` (number, required): Transaction amount in dollars (negative for outflows)
|
|
884
911
|
- `date` (string, required): Transaction date in ISO format (YYYY-MM-DD)
|
|
885
912
|
- `payee_name` (string, optional): The payee name
|
|
886
913
|
- `payee_id` (string, optional): The payee ID
|
|
@@ -890,7 +917,7 @@ Creates a new transaction in the specified budget and account.
|
|
|
890
917
|
- `approved` (boolean, optional): Whether the transaction is approved
|
|
891
918
|
- `flag_color` (string, optional): Transaction flag color (`red`, `orange`, `yellow`, `green`, `blue`, `purple`)
|
|
892
919
|
- `dry_run` (boolean, optional): Validate and return simulated result; no API call
|
|
893
|
-
- `subtransactions` (array, optional): Split line items; each entry accepts `amount` (
|
|
920
|
+
- `subtransactions` (array, optional): Split line items; each entry accepts `amount` (dollars), plus optional `memo`, `category_id`, `payee_id`, and `payee_name`
|
|
894
921
|
|
|
895
922
|
When `subtransactions` are supplied, their `amount` values must sum to the parent `amount`, matching YNAB API requirements.
|
|
896
923
|
|
|
@@ -901,7 +928,7 @@ When `subtransactions` are supplied, their `amount` values must sum to the paren
|
|
|
901
928
|
"arguments": {
|
|
902
929
|
"budget_id": "12345678-1234-1234-1234-123456789012",
|
|
903
930
|
"account_id": "87654321-4321-4321-4321-210987654321",
|
|
904
|
-
"amount": -
|
|
931
|
+
"amount": -5.0,
|
|
905
932
|
"date": "2024-01-15",
|
|
906
933
|
"payee_name": "Coffee Shop",
|
|
907
934
|
"category_id": "category-id",
|
|
@@ -919,12 +946,12 @@ When `subtransactions` are supplied, their `amount` values must sum to the paren
|
|
|
919
946
|
"arguments": {
|
|
920
947
|
"budget_id": "12345678-1234-1234-1234-123456789012",
|
|
921
948
|
"account_id": "87654321-4321-4321-4321-210987654321",
|
|
922
|
-
"amount": -
|
|
949
|
+
"amount": -125.0,
|
|
923
950
|
"date": "2024-02-01",
|
|
924
951
|
"memo": "Rent and utilities",
|
|
925
952
|
"subtransactions": [
|
|
926
|
-
{ "amount": -
|
|
927
|
-
{ "amount": -
|
|
953
|
+
{ "amount": -100.0, "category_id": "rent-category", "memo": "Rent" },
|
|
954
|
+
{ "amount": -25.0, "category_id": "utilities-category", "memo": "Utilities" }
|
|
928
955
|
]
|
|
929
956
|
}
|
|
930
957
|
}
|
|
@@ -1038,7 +1065,7 @@ Updates an existing transaction.
|
|
|
1038
1065
|
- `budget_id` (string, required): The ID of the budget
|
|
1039
1066
|
- `transaction_id` (string, required): The ID of the transaction to update
|
|
1040
1067
|
- `account_id` (string, optional): Update the account ID
|
|
1041
|
-
- `amount` (number, optional): Update the amount in
|
|
1068
|
+
- `amount` (number, optional): Update the amount in dollars
|
|
1042
1069
|
- `date` (string, optional): Update the date (YYYY-MM-DD)
|
|
1043
1070
|
- `payee_name` (string, optional): Update the payee name
|
|
1044
1071
|
- `payee_id` (string, optional): Update the payee ID
|
|
@@ -1056,7 +1083,7 @@ Updates an existing transaction.
|
|
|
1056
1083
|
"arguments": {
|
|
1057
1084
|
"budget_id": "12345678-1234-1234-1234-123456789012",
|
|
1058
1085
|
"transaction_id": "transaction-id",
|
|
1059
|
-
"amount": -
|
|
1086
|
+
"amount": -6.0,
|
|
1060
1087
|
"memo": "Updated memo",
|
|
1061
1088
|
"flag_color": "red"
|
|
1062
1089
|
}
|
|
@@ -1108,7 +1135,7 @@ Lists all categories for a specific budget.
|
|
|
1108
1135
|
"content": [
|
|
1109
1136
|
{
|
|
1110
1137
|
"type": "text",
|
|
1111
|
-
"text": "{\n \"category_groups\": [\n {\n \"id\": \"group-id\",\n \"name\": \"Monthly Bills\",\n \"hidden\": false,\n \"deleted\": false,\n \"categories\": [\n {\n \"id\": \"category-id\",\n \"category_group_id\": \"group-id\",\n \"name\": \"Rent/Mortgage\",\n \"hidden\": false,\n \"original_category_group_id\": null,\n \"note\": null,\n \"budgeted\":
|
|
1138
|
+
"text": "{\n \"category_groups\": [\n {\n \"id\": \"group-id\",\n \"name\": \"Monthly Bills\",\n \"hidden\": false,\n \"deleted\": false,\n \"categories\": [\n {\n \"id\": \"category-id\",\n \"category_group_id\": \"group-id\",\n \"name\": \"Rent/Mortgage\",\n \"hidden\": false,\n \"original_category_group_id\": null,\n \"note\": null,\n \"budgeted\": 150.0,\n \"activity\": -150.0,\n \"balance\": 0,\n \"goal_type\": null,\n \"goal_creation_month\": null,\n \"goal_target\": null,\n \"goal_target_month\": null,\n \"goal_percentage_complete\": null,\n \"goal_months_to_budget\": null,\n \"goal_under_funded\": null,\n \"goal_overall_funded\": null,\n \"goal_overall_left\": null,\n \"deleted\": false\n }\n ]\n }\n ]\n}"
|
|
1112
1139
|
}
|
|
1113
1140
|
]
|
|
1114
1141
|
}
|
|
@@ -1129,7 +1156,7 @@ Updates the budgeted amount for a category in the current month.
|
|
|
1129
1156
|
**Parameters:**
|
|
1130
1157
|
- `budget_id` (string, required): The ID of the budget
|
|
1131
1158
|
- `category_id` (string, required): The ID of the category
|
|
1132
|
-
- `budgeted` (number, required): The budgeted amount in
|
|
1159
|
+
- `budgeted` (number, required): The budgeted amount in dollars
|
|
1133
1160
|
- `dry_run` (boolean, optional): Validate and return simulated result; no API call
|
|
1134
1161
|
|
|
1135
1162
|
**Example Request:**
|
|
@@ -1139,7 +1166,7 @@ Updates the budgeted amount for a category in the current month.
|
|
|
1139
1166
|
"arguments": {
|
|
1140
1167
|
"budget_id": "12345678-1234-1234-1234-123456789012",
|
|
1141
1168
|
"category_id": "category-id",
|
|
1142
|
-
"budgeted":
|
|
1169
|
+
"budgeted": 50.0
|
|
1143
1170
|
}
|
|
1144
1171
|
}
|
|
1145
1172
|
```
|
|
@@ -1227,60 +1254,6 @@ Gets information about the authenticated user.
|
|
|
1227
1254
|
}
|
|
1228
1255
|
```
|
|
1229
1256
|
|
|
1230
|
-
### convert_amount
|
|
1231
|
-
|
|
1232
|
-
Converts between dollars and milliunits with integer arithmetic for precision.
|
|
1233
|
-
|
|
1234
|
-
**Parameters:**
|
|
1235
|
-
- `amount` (number, required): The amount to convert
|
|
1236
|
-
- `to_milliunits` (boolean, required): If true, convert from dollars to milliunits. If false, convert from milliunits to dollars
|
|
1237
|
-
|
|
1238
|
-
**Example Request (dollars to milliunits):**
|
|
1239
|
-
```json
|
|
1240
|
-
{
|
|
1241
|
-
"name": "convert_amount",
|
|
1242
|
-
"arguments": {
|
|
1243
|
-
"amount": 50.25,
|
|
1244
|
-
"to_milliunits": true
|
|
1245
|
-
}
|
|
1246
|
-
}
|
|
1247
|
-
```
|
|
1248
|
-
|
|
1249
|
-
**Example Response:**
|
|
1250
|
-
```json
|
|
1251
|
-
{
|
|
1252
|
-
"content": [
|
|
1253
|
-
{
|
|
1254
|
-
"type": "text",
|
|
1255
|
-
"text": "{\n \"original_amount\": 50.25,\n \"converted_amount\": 50250,\n \"conversion_type\": \"dollars_to_milliunits\"\n}"
|
|
1256
|
-
}
|
|
1257
|
-
]
|
|
1258
|
-
}
|
|
1259
|
-
```
|
|
1260
|
-
|
|
1261
|
-
**Example Request (milliunits to dollars):**
|
|
1262
|
-
```json
|
|
1263
|
-
{
|
|
1264
|
-
"name": "convert_amount",
|
|
1265
|
-
"arguments": {
|
|
1266
|
-
"amount": 50250,
|
|
1267
|
-
"to_milliunits": false
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
```
|
|
1271
|
-
|
|
1272
|
-
**Example Response:**
|
|
1273
|
-
```json
|
|
1274
|
-
{
|
|
1275
|
-
"content": [
|
|
1276
|
-
{
|
|
1277
|
-
"type": "text",
|
|
1278
|
-
"text": "{\n \"original_amount\": 50250,\n \"converted_amount\": 50.25,\n \"conversion_type\": \"milliunits_to_dollars\"\n}"
|
|
1279
|
-
}
|
|
1280
|
-
]
|
|
1281
|
-
}
|
|
1282
|
-
```
|
|
1283
|
-
|
|
1284
1257
|
## Diagnostic Tools
|
|
1285
1258
|
|
|
1286
1259
|
These tools help inspect the server, environment, and performance. They do not modify YNAB data.
|
|
@@ -1525,9 +1498,9 @@ if (!dateRegex.test(date)) {
|
|
|
1525
1498
|
throw new Error('Date must be in YYYY-MM-DD format');
|
|
1526
1499
|
}
|
|
1527
1500
|
|
|
1528
|
-
// Validate amount is in
|
|
1529
|
-
if (!Number.
|
|
1530
|
-
throw new Error('Amount must be
|
|
1501
|
+
// Validate amount is in dollars
|
|
1502
|
+
if (!Number.isFinite(amount)) {
|
|
1503
|
+
throw new Error('Amount must be a number in dollars');
|
|
1531
1504
|
}
|
|
1532
1505
|
```
|
|
1533
1506
|
|
|
@@ -1549,24 +1522,23 @@ const recentTransactions = await mcpClient.callTool('list_transactions', {
|
|
|
1549
1522
|
});
|
|
1550
1523
|
```
|
|
1551
1524
|
|
|
1552
|
-
### 4. Amount
|
|
1525
|
+
### 4. Amount Handling
|
|
1553
1526
|
|
|
1554
|
-
|
|
1527
|
+
All amounts are automatically handled in dollars:
|
|
1555
1528
|
|
|
1556
1529
|
```javascript
|
|
1557
|
-
//
|
|
1558
|
-
const
|
|
1559
|
-
|
|
1560
|
-
to_milliunits: false
|
|
1561
|
-
});
|
|
1562
|
-
console.log(`Amount: $${dollarsResult.converted_amount}`); // Amount: $50.25
|
|
1530
|
+
// All returned amounts are in dollars - no conversion needed
|
|
1531
|
+
const accounts = await mcpClient.callTool('list_accounts', { budget_id: budgetId });
|
|
1532
|
+
console.log(`Balance: $${accounts.accounts[0].balance}`); // Balance: $1234.56
|
|
1563
1533
|
|
|
1564
|
-
//
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1534
|
+
// When creating transactions, provide amounts in dollars
|
|
1535
|
+
await mcpClient.callTool('create_transaction', {
|
|
1536
|
+
budget_id: budgetId,
|
|
1537
|
+
account_id: accountId,
|
|
1538
|
+
amount: -50.25, // Negative for outflows
|
|
1539
|
+
date: '2024-01-15',
|
|
1540
|
+
payee_name: 'Coffee Shop'
|
|
1568
1541
|
});
|
|
1569
|
-
// Use milliUnitsResult.converted_amount in transaction creation
|
|
1570
1542
|
```
|
|
1571
1543
|
|
|
1572
1544
|
### 5. Caching Strategies
|
|
@@ -1592,3 +1564,17 @@ const transactions = await mcpClient.callTool('list_transactions', {
|
|
|
1592
1564
|
```
|
|
1593
1565
|
|
|
1594
1566
|
This API reference provides comprehensive documentation for all available tools. For additional information, see the [Developer Guide](DEVELOPER.md) for best practices and common usage patterns.
|
|
1567
|
+
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
|
|
1573
|
+
|
|
1574
|
+
|
|
1575
|
+
|
|
1576
|
+
|
|
1577
|
+
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
|