@mind-your-now/myn 0.6.4 → 0.7.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/dist/src/tools/ynab.d.ts +28 -3
- package/dist/src/tools/ynab.d.ts.map +1 -1
- package/dist/src/tools/ynab.js +323 -40
- package/dist/src/tools/ynab.js.map +1 -1
- package/package.json +1 -1
package/dist/src/tools/ynab.d.ts
CHANGED
|
@@ -1,15 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* myn_ynab tool - YNAB budget management
|
|
3
|
+
*
|
|
4
|
+
* Full coverage of MYN backend YNAB endpoints:
|
|
5
|
+
* - Budget: overview, categories, accounts, months, payees, goals
|
|
6
|
+
* - Transactions: create, create_bulk, list, update, delete
|
|
7
|
+
* - Scheduled: list, create, update, delete, subscriptions view
|
|
8
|
+
* - Analytics: spending, payees, trends, net worth, debt
|
|
9
|
+
* - Connection: status check
|
|
3
10
|
*/
|
|
4
11
|
import type { MynApiClient } from '../client.js';
|
|
5
12
|
export declare const YnabInputSchema: import("@sinclair/typebox").TObject<{
|
|
6
|
-
action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"budget_overview">, import("@sinclair/typebox").TLiteral<"category_balance">, import("@sinclair/typebox").TLiteral<"account_balances">, import("@sinclair/typebox").TLiteral<"set_category_goal">, import("@sinclair/typebox").TLiteral<"
|
|
13
|
+
action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"budget_overview">, import("@sinclair/typebox").TLiteral<"category_balance">, import("@sinclair/typebox").TLiteral<"list_categories">, import("@sinclair/typebox").TLiteral<"account_balances">, import("@sinclair/typebox").TLiteral<"set_category_goal">, import("@sinclair/typebox").TLiteral<"goal_progress">, import("@sinclair/typebox").TLiteral<"budget_months">, import("@sinclair/typebox").TLiteral<"search_payees">, import("@sinclair/typebox").TLiteral<"create_transaction">, import("@sinclair/typebox").TLiteral<"create_transactions_bulk">, import("@sinclair/typebox").TLiteral<"list_transactions">, import("@sinclair/typebox").TLiteral<"update_transaction">, import("@sinclair/typebox").TLiteral<"delete_transaction">, import("@sinclair/typebox").TLiteral<"scheduled_transactions">, import("@sinclair/typebox").TLiteral<"create_scheduled_transaction">, import("@sinclair/typebox").TLiteral<"update_scheduled_transaction">, import("@sinclair/typebox").TLiteral<"delete_scheduled_transaction">, import("@sinclair/typebox").TLiteral<"subscriptions">, import("@sinclair/typebox").TLiteral<"upcoming_bills">, import("@sinclair/typebox").TLiteral<"spending_insights">, import("@sinclair/typebox").TLiteral<"payee_analysis">, import("@sinclair/typebox").TLiteral<"spending_trends">, import("@sinclair/typebox").TLiteral<"net_worth">, import("@sinclair/typebox").TLiteral<"debt_tracking">, import("@sinclair/typebox").TLiteral<"connection_status">]>;
|
|
7
14
|
categoryName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
+
accountId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
|
+
payeeName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
17
|
+
amount: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
18
|
+
date: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
+
memo: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
20
|
+
months: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
21
|
+
days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
8
22
|
goalType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
9
23
|
goalTargetDollars: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
10
24
|
goalTargetMonth: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
11
|
-
|
|
12
|
-
|
|
25
|
+
transactionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
26
|
+
cleared: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
27
|
+
flagColor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
28
|
+
frequency: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
29
|
+
dateFirst: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
30
|
+
transactions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
31
|
+
accountId: import("@sinclair/typebox").TString;
|
|
32
|
+
payeeName: import("@sinclair/typebox").TString;
|
|
33
|
+
amount: import("@sinclair/typebox").TNumber;
|
|
34
|
+
categoryName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
35
|
+
date: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
36
|
+
memo: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
37
|
+
}>>>;
|
|
13
38
|
}>;
|
|
14
39
|
export type YnabInput = typeof YnabInputSchema.static;
|
|
15
40
|
export declare function executeYnab(client: MynApiClient, input: YnabInput): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ynab.d.ts","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ynab.d.ts","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EAoE1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC;AAuDtD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAgFlG;AA+OD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;CACV;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAkBnF"}
|
package/dist/src/tools/ynab.js
CHANGED
|
@@ -1,27 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* myn_ynab tool - YNAB budget management
|
|
3
|
+
*
|
|
4
|
+
* Full coverage of MYN backend YNAB endpoints:
|
|
5
|
+
* - Budget: overview, categories, accounts, months, payees, goals
|
|
6
|
+
* - Transactions: create, create_bulk, list, update, delete
|
|
7
|
+
* - Scheduled: list, create, update, delete, subscriptions view
|
|
8
|
+
* - Analytics: spending, payees, trends, net worth, debt
|
|
9
|
+
* - Connection: status check
|
|
3
10
|
*/
|
|
4
11
|
import { Type } from '@sinclair/typebox';
|
|
5
12
|
import { jsonResult, errorResult } from '../client.js';
|
|
6
13
|
export const YnabInputSchema = Type.Object({
|
|
7
14
|
action: Type.Union([
|
|
15
|
+
// Budget & accounts
|
|
8
16
|
Type.Literal('budget_overview'),
|
|
9
17
|
Type.Literal('category_balance'),
|
|
18
|
+
Type.Literal('list_categories'),
|
|
10
19
|
Type.Literal('account_balances'),
|
|
11
20
|
Type.Literal('set_category_goal'),
|
|
21
|
+
Type.Literal('goal_progress'),
|
|
22
|
+
Type.Literal('budget_months'),
|
|
23
|
+
Type.Literal('search_payees'),
|
|
24
|
+
// Transactions
|
|
25
|
+
Type.Literal('create_transaction'),
|
|
26
|
+
Type.Literal('create_transactions_bulk'),
|
|
27
|
+
Type.Literal('list_transactions'),
|
|
28
|
+
Type.Literal('update_transaction'),
|
|
29
|
+
Type.Literal('delete_transaction'),
|
|
30
|
+
// Scheduled transactions & subscriptions
|
|
31
|
+
Type.Literal('scheduled_transactions'),
|
|
32
|
+
Type.Literal('create_scheduled_transaction'),
|
|
33
|
+
Type.Literal('update_scheduled_transaction'),
|
|
34
|
+
Type.Literal('delete_scheduled_transaction'),
|
|
35
|
+
Type.Literal('subscriptions'),
|
|
36
|
+
Type.Literal('upcoming_bills'),
|
|
37
|
+
// Analytics
|
|
12
38
|
Type.Literal('spending_insights'),
|
|
13
|
-
Type.Literal('
|
|
39
|
+
Type.Literal('payee_analysis'),
|
|
40
|
+
Type.Literal('spending_trends'),
|
|
41
|
+
Type.Literal('net_worth'),
|
|
42
|
+
Type.Literal('debt_tracking'),
|
|
43
|
+
// Connection
|
|
44
|
+
Type.Literal('connection_status')
|
|
14
45
|
]),
|
|
15
|
-
//
|
|
16
|
-
categoryName: Type.Optional(Type.String({ description: 'Category name
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
months: Type.Optional(Type.Number({ description: 'Number of months
|
|
23
|
-
|
|
24
|
-
|
|
46
|
+
// Shared parameters
|
|
47
|
+
categoryName: Type.Optional(Type.String({ description: 'Category name (fuzzy match). Used by category_balance, set_category_goal, create_transaction, create_transactions_bulk.' })),
|
|
48
|
+
accountId: Type.Optional(Type.String({ description: 'YNAB account ID. Use account_balances to find IDs.' })),
|
|
49
|
+
payeeName: Type.Optional(Type.String({ description: 'Payee name. Used by create_transaction, create_transactions_bulk, search_payees, create_scheduled_transaction.' })),
|
|
50
|
+
amount: Type.Optional(Type.Number({ description: 'Amount in dollars. Negative for expenses (e.g., -45.50), positive for income.' })),
|
|
51
|
+
date: Type.Optional(Type.String({ description: 'Date in YYYY-MM-DD format. Defaults to today for transactions. Used as sinceDate filter for list_transactions.' })),
|
|
52
|
+
memo: Type.Optional(Type.String({ description: 'Optional memo/note.' })),
|
|
53
|
+
months: Type.Optional(Type.Number({ description: 'Number of months for analytics (default: 3 for spending, 6 for trends).' })),
|
|
54
|
+
days: Type.Optional(Type.Number({ description: 'Number of days to look ahead for upcoming_bills (default: 7).' })),
|
|
55
|
+
// Goal parameters
|
|
56
|
+
goalType: Type.Optional(Type.String({ description: 'Goal type: TB (Target Balance), TBD (Target Balance by Date), MF (Monthly Funding), NEED (Plan Your Spending).' })),
|
|
57
|
+
goalTargetDollars: Type.Optional(Type.Number({ description: 'Goal target in dollars (e.g., 500.00).' })),
|
|
58
|
+
goalTargetMonth: Type.Optional(Type.String({ description: 'Target month YYYY-MM (e.g., 2026-06). Required for TBD goals.' })),
|
|
59
|
+
// Scheduled transaction parameters
|
|
60
|
+
transactionId: Type.Optional(Type.String({ description: 'Transaction ID. Required for update/delete_transaction and update/delete_scheduled_transaction.' })),
|
|
61
|
+
cleared: Type.Optional(Type.String({ description: 'Cleared status: "cleared", "uncleared", or "reconciled". Used by update_transaction.' })),
|
|
62
|
+
flagColor: Type.Optional(Type.String({ description: 'Flag color: red, orange, yellow, green, blue, purple. Used by update_transaction.' })),
|
|
63
|
+
frequency: Type.Optional(Type.String({ description: 'Recurrence frequency: never, daily, weekly, everyOtherWeek, twiceAMonth, every4Weeks, monthly, everyOtherMonth, every3Months, every4Months, twiceAYear, yearly, everyOtherYear.' })),
|
|
64
|
+
dateFirst: Type.Optional(Type.String({ description: 'First occurrence date YYYY-MM-DD for create_scheduled_transaction.' })),
|
|
65
|
+
// Bulk transaction parameters
|
|
66
|
+
transactions: Type.Optional(Type.Array(Type.Object({
|
|
67
|
+
accountId: Type.String({ description: 'YNAB account ID.' }),
|
|
68
|
+
payeeName: Type.String({ description: 'Payee name.' }),
|
|
69
|
+
amount: Type.Number({ description: 'Amount in dollars. Negative for expenses.' }),
|
|
70
|
+
categoryName: Type.Optional(Type.String({ description: 'Category name (fuzzy match).' })),
|
|
71
|
+
date: Type.Optional(Type.String({ description: 'Date YYYY-MM-DD. Defaults to today.' })),
|
|
72
|
+
memo: Type.Optional(Type.String({ description: 'Optional memo.' }))
|
|
73
|
+
}), { description: 'Array of transactions for create_transactions_bulk.' }))
|
|
25
74
|
});
|
|
26
75
|
/**
|
|
27
76
|
* Convert YNAB milliunits to formatted dollar string.
|
|
@@ -38,7 +87,8 @@ const MILLIUNIT_FIELDS = new Set([
|
|
|
38
87
|
'readyToAssign', 'totalIncome', 'totalBudgeted', 'totalActivity',
|
|
39
88
|
'balance', 'budgeted', 'activity', 'clearedBalance', 'unclearedBalance',
|
|
40
89
|
'goalTarget', 'goalUnderFunded', 'goalOverFunded', 'goalOverallFunded', 'goalOverallLeft',
|
|
41
|
-
'amount', 'total', 'totalSpending'
|
|
90
|
+
'amount', 'total', 'totalSpending', 'monthlyTotal', 'annualTotal',
|
|
91
|
+
'amountMilliunits', 'totalSpent', 'monthlyAverage'
|
|
42
92
|
]);
|
|
43
93
|
/**
|
|
44
94
|
* Recursively convert milliunit fields to dollar strings in API responses.
|
|
@@ -62,21 +112,81 @@ function convertMilliunits(obj) {
|
|
|
62
112
|
}
|
|
63
113
|
return obj;
|
|
64
114
|
}
|
|
115
|
+
/** Resolve a category name to its ID via fuzzy search. Returns null if not found. */
|
|
116
|
+
async function resolveCategoryId(client, name) {
|
|
117
|
+
const result = await client.get(`/api/v1/ynab/budget/categories/search?query=${encodeURIComponent(name)}`);
|
|
118
|
+
return result?.id || null;
|
|
119
|
+
}
|
|
120
|
+
/** Today's date as YYYY-MM-DD */
|
|
121
|
+
function today() {
|
|
122
|
+
return new Date().toISOString().split('T')[0];
|
|
123
|
+
}
|
|
65
124
|
export async function executeYnab(client, input) {
|
|
66
125
|
try {
|
|
67
126
|
switch (input.action) {
|
|
127
|
+
// Budget & accounts
|
|
68
128
|
case 'budget_overview':
|
|
69
|
-
return await
|
|
129
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/budget/overview')));
|
|
70
130
|
case 'category_balance':
|
|
71
131
|
return await getCategoryBalance(client, input);
|
|
132
|
+
case 'list_categories':
|
|
133
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/budget/categories')));
|
|
72
134
|
case 'account_balances':
|
|
73
|
-
return await
|
|
135
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/budget/accounts')));
|
|
74
136
|
case 'set_category_goal':
|
|
75
137
|
return await setCategoryGoal(client, input);
|
|
76
|
-
case '
|
|
77
|
-
return await
|
|
78
|
-
case '
|
|
79
|
-
return await
|
|
138
|
+
case 'goal_progress':
|
|
139
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/budget/categories')));
|
|
140
|
+
case 'budget_months':
|
|
141
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/budget/months')));
|
|
142
|
+
case 'search_payees':
|
|
143
|
+
return await searchPayees(client, input);
|
|
144
|
+
// Transactions
|
|
145
|
+
case 'create_transaction':
|
|
146
|
+
return await createTransaction(client, input);
|
|
147
|
+
case 'create_transactions_bulk':
|
|
148
|
+
return await createTransactionsBulk(client, input);
|
|
149
|
+
case 'list_transactions':
|
|
150
|
+
return await listTransactions(client, input);
|
|
151
|
+
case 'update_transaction':
|
|
152
|
+
return await updateTransaction(client, input);
|
|
153
|
+
case 'delete_transaction':
|
|
154
|
+
return await deleteTransactionAction(client, input);
|
|
155
|
+
// Scheduled transactions & subscriptions
|
|
156
|
+
case 'scheduled_transactions':
|
|
157
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/scheduled-transactions')));
|
|
158
|
+
case 'create_scheduled_transaction':
|
|
159
|
+
return await createScheduledTransaction(client, input);
|
|
160
|
+
case 'update_scheduled_transaction':
|
|
161
|
+
return await updateScheduledTransaction(client, input);
|
|
162
|
+
case 'delete_scheduled_transaction':
|
|
163
|
+
return await deleteScheduledTransaction(client, input);
|
|
164
|
+
case 'subscriptions':
|
|
165
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/subscriptions')));
|
|
166
|
+
case 'upcoming_bills': {
|
|
167
|
+
const days = input.days || 7;
|
|
168
|
+
return jsonResult(convertMilliunits(await client.get(`/api/v1/ynab/scheduled?days=${days}`)));
|
|
169
|
+
}
|
|
170
|
+
// Analytics
|
|
171
|
+
case 'spending_insights': {
|
|
172
|
+
const months = input.months || 3;
|
|
173
|
+
return jsonResult(convertMilliunits(await client.get(`/api/v1/ynab/analytics/spending?months=${months}`)));
|
|
174
|
+
}
|
|
175
|
+
case 'payee_analysis': {
|
|
176
|
+
const months = input.months || 3;
|
|
177
|
+
return jsonResult(convertMilliunits(await client.get(`/api/v1/ynab/analytics/payees?months=${months}`)));
|
|
178
|
+
}
|
|
179
|
+
case 'spending_trends': {
|
|
180
|
+
const months = input.months || 6;
|
|
181
|
+
return jsonResult(convertMilliunits(await client.get(`/api/v1/ynab/analytics/trends?months=${months}`)));
|
|
182
|
+
}
|
|
183
|
+
case 'net_worth':
|
|
184
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/analytics/net-worth')));
|
|
185
|
+
case 'debt_tracking':
|
|
186
|
+
return jsonResult(convertMilliunits(await client.get('/api/v1/ynab/analytics/debt')));
|
|
187
|
+
// Connection
|
|
188
|
+
case 'connection_status':
|
|
189
|
+
return jsonResult(await client.get('/api/v1/ynab/status'));
|
|
80
190
|
default:
|
|
81
191
|
return errorResult(`Unknown action: ${input.action}`);
|
|
82
192
|
}
|
|
@@ -88,10 +198,7 @@ export async function executeYnab(client, input) {
|
|
|
88
198
|
return errorResult('Unknown error occurred');
|
|
89
199
|
}
|
|
90
200
|
}
|
|
91
|
-
|
|
92
|
-
const data = await client.get('/api/v1/ynab/budget/overview');
|
|
93
|
-
return jsonResult(convertMilliunits(data));
|
|
94
|
-
}
|
|
201
|
+
// ==================== Action implementations ====================
|
|
95
202
|
async function getCategoryBalance(client, input) {
|
|
96
203
|
if (!input.categoryName) {
|
|
97
204
|
return errorResult('categoryName is required for category_balance action');
|
|
@@ -99,9 +206,14 @@ async function getCategoryBalance(client, input) {
|
|
|
99
206
|
const data = await client.get(`/api/v1/ynab/budget/categories/search?query=${encodeURIComponent(input.categoryName)}`);
|
|
100
207
|
return jsonResult(convertMilliunits(data));
|
|
101
208
|
}
|
|
102
|
-
async function
|
|
103
|
-
|
|
104
|
-
|
|
209
|
+
async function searchPayees(client, input) {
|
|
210
|
+
if (input.payeeName) {
|
|
211
|
+
const data = await client.get(`/api/v1/ynab/budget/payees/search?query=${encodeURIComponent(input.payeeName)}`);
|
|
212
|
+
return jsonResult(data);
|
|
213
|
+
}
|
|
214
|
+
// No search query — return all payees
|
|
215
|
+
const data = await client.get('/api/v1/ynab/budget/payees');
|
|
216
|
+
return jsonResult(data);
|
|
105
217
|
}
|
|
106
218
|
async function setCategoryGoal(client, input) {
|
|
107
219
|
if (!input.categoryName) {
|
|
@@ -110,41 +222,212 @@ async function setCategoryGoal(client, input) {
|
|
|
110
222
|
if (!input.goalType) {
|
|
111
223
|
return errorResult('goalType is required for set_category_goal action (TB, TBD, MF, NEED)');
|
|
112
224
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (!searchResult || !searchResult.id) {
|
|
225
|
+
const categoryId = await resolveCategoryId(client, input.categoryName);
|
|
226
|
+
if (!categoryId) {
|
|
116
227
|
return errorResult(`Category '${input.categoryName}' not found`);
|
|
117
228
|
}
|
|
118
|
-
// Format target month as YYYY-MM-01 if provided
|
|
119
229
|
let goalTargetMonth = input.goalTargetMonth;
|
|
120
230
|
if (goalTargetMonth && !goalTargetMonth.endsWith('-01')) {
|
|
121
231
|
goalTargetMonth = goalTargetMonth + '-01';
|
|
122
232
|
}
|
|
123
|
-
const body = {
|
|
124
|
-
goalType: input.goalType
|
|
125
|
-
};
|
|
233
|
+
const body = { goalType: input.goalType };
|
|
126
234
|
if (input.goalTargetDollars != null)
|
|
127
235
|
body.goalTargetDollars = input.goalTargetDollars;
|
|
128
236
|
if (goalTargetMonth)
|
|
129
237
|
body.goalTargetMonth = goalTargetMonth;
|
|
130
|
-
const data = await client.patch(`/api/v1/ynab/budget/categories/${
|
|
238
|
+
const data = await client.patch(`/api/v1/ynab/budget/categories/${categoryId}/goal`, body);
|
|
239
|
+
return jsonResult(convertMilliunits(data));
|
|
240
|
+
}
|
|
241
|
+
async function createTransaction(client, input) {
|
|
242
|
+
if (!input.accountId) {
|
|
243
|
+
return errorResult('accountId is required for create_transaction. Use account_balances to find IDs.');
|
|
244
|
+
}
|
|
245
|
+
if (!input.payeeName) {
|
|
246
|
+
return errorResult('payeeName is required for create_transaction.');
|
|
247
|
+
}
|
|
248
|
+
if (input.amount == null) {
|
|
249
|
+
return errorResult('amount is required for create_transaction (in dollars, negative for expenses).');
|
|
250
|
+
}
|
|
251
|
+
const amountMilliunits = Math.round(input.amount * 1000);
|
|
252
|
+
let categoryId;
|
|
253
|
+
if (input.categoryName) {
|
|
254
|
+
const resolved = await resolveCategoryId(client, input.categoryName);
|
|
255
|
+
if (!resolved) {
|
|
256
|
+
return errorResult(`Category '${input.categoryName}' not found. Use list_categories to browse.`);
|
|
257
|
+
}
|
|
258
|
+
categoryId = resolved;
|
|
259
|
+
}
|
|
260
|
+
// YNAB API defaults to "uncleared" when cleared status not specified
|
|
261
|
+
const body = {
|
|
262
|
+
accountId: input.accountId,
|
|
263
|
+
payeeName: input.payeeName,
|
|
264
|
+
amountMilliunits,
|
|
265
|
+
date: input.date || today()
|
|
266
|
+
};
|
|
267
|
+
if (input.memo)
|
|
268
|
+
body.memo = input.memo;
|
|
269
|
+
if (categoryId)
|
|
270
|
+
body.categoryId = categoryId;
|
|
271
|
+
const data = await client.post('/api/v1/ynab/transactions', body);
|
|
272
|
+
return jsonResult(convertMilliunits(data));
|
|
273
|
+
}
|
|
274
|
+
async function createTransactionsBulk(client, input) {
|
|
275
|
+
if (!input.transactions || input.transactions.length === 0) {
|
|
276
|
+
return errorResult('transactions array is required for create_transactions_bulk. Each needs accountId, payeeName, amount.');
|
|
277
|
+
}
|
|
278
|
+
// Resolve category names and convert amounts for all transactions
|
|
279
|
+
const resolved = [];
|
|
280
|
+
for (const txn of input.transactions) {
|
|
281
|
+
const amountMilliunits = Math.round(txn.amount * 1000);
|
|
282
|
+
let categoryId;
|
|
283
|
+
if (txn.categoryName) {
|
|
284
|
+
const id = await resolveCategoryId(client, txn.categoryName);
|
|
285
|
+
if (!id) {
|
|
286
|
+
return errorResult(`Category '${txn.categoryName}' not found for transaction "${txn.payeeName}". Use list_categories to browse.`);
|
|
287
|
+
}
|
|
288
|
+
categoryId = id;
|
|
289
|
+
}
|
|
290
|
+
const entry = {
|
|
291
|
+
accountId: txn.accountId,
|
|
292
|
+
payeeName: txn.payeeName,
|
|
293
|
+
amount: amountMilliunits,
|
|
294
|
+
date: txn.date || today()
|
|
295
|
+
};
|
|
296
|
+
if (txn.memo)
|
|
297
|
+
entry.memo = txn.memo;
|
|
298
|
+
if (categoryId)
|
|
299
|
+
entry.categoryId = categoryId;
|
|
300
|
+
resolved.push(entry);
|
|
301
|
+
}
|
|
302
|
+
const data = await client.post('/api/v1/ynab/transactions/bulk', { transactions: resolved });
|
|
303
|
+
return jsonResult(data);
|
|
304
|
+
}
|
|
305
|
+
async function listTransactions(client, input) {
|
|
306
|
+
const params = input.date ? `?sinceDate=${encodeURIComponent(input.date)}` : '';
|
|
307
|
+
const data = await client.get(`/api/v1/ynab/transactions${params}`);
|
|
131
308
|
return jsonResult(convertMilliunits(data));
|
|
132
309
|
}
|
|
133
|
-
async function
|
|
134
|
-
|
|
135
|
-
|
|
310
|
+
async function updateTransaction(client, input) {
|
|
311
|
+
if (!input.transactionId) {
|
|
312
|
+
return errorResult('transactionId is required for update_transaction.');
|
|
313
|
+
}
|
|
314
|
+
const body = {};
|
|
315
|
+
if (input.accountId)
|
|
316
|
+
body.accountId = input.accountId;
|
|
317
|
+
if (input.payeeName)
|
|
318
|
+
body.payeeName = input.payeeName;
|
|
319
|
+
if (input.amount != null)
|
|
320
|
+
body.amountMilliunits = Math.round(input.amount * 1000);
|
|
321
|
+
if (input.date)
|
|
322
|
+
body.date = input.date;
|
|
323
|
+
if (input.memo)
|
|
324
|
+
body.memo = input.memo;
|
|
325
|
+
if (input.cleared)
|
|
326
|
+
body.cleared = input.cleared;
|
|
327
|
+
if (input.flagColor)
|
|
328
|
+
body.flagColor = input.flagColor;
|
|
329
|
+
if (input.categoryName) {
|
|
330
|
+
const categoryId = await resolveCategoryId(client, input.categoryName);
|
|
331
|
+
if (!categoryId) {
|
|
332
|
+
return errorResult(`Category '${input.categoryName}' not found.`);
|
|
333
|
+
}
|
|
334
|
+
body.categoryId = categoryId;
|
|
335
|
+
}
|
|
336
|
+
const data = await client.put(`/api/v1/ynab/transactions/${input.transactionId}`, body);
|
|
136
337
|
return jsonResult(convertMilliunits(data));
|
|
137
338
|
}
|
|
138
|
-
async function
|
|
139
|
-
|
|
140
|
-
|
|
339
|
+
async function deleteTransactionAction(client, input) {
|
|
340
|
+
if (!input.transactionId) {
|
|
341
|
+
return errorResult('transactionId is required for delete_transaction.');
|
|
342
|
+
}
|
|
343
|
+
const data = await client.delete(`/api/v1/ynab/transactions/${input.transactionId}`);
|
|
141
344
|
return jsonResult(convertMilliunits(data));
|
|
142
345
|
}
|
|
346
|
+
async function createScheduledTransaction(client, input) {
|
|
347
|
+
if (!input.accountId) {
|
|
348
|
+
return errorResult('accountId is required for create_scheduled_transaction.');
|
|
349
|
+
}
|
|
350
|
+
if (!input.payeeName) {
|
|
351
|
+
return errorResult('payeeName is required for create_scheduled_transaction.');
|
|
352
|
+
}
|
|
353
|
+
if (input.amount == null) {
|
|
354
|
+
return errorResult('amount is required for create_scheduled_transaction (in dollars).');
|
|
355
|
+
}
|
|
356
|
+
if (!input.frequency) {
|
|
357
|
+
return errorResult('frequency is required (e.g., monthly, weekly, yearly).');
|
|
358
|
+
}
|
|
359
|
+
if (!input.dateFirst) {
|
|
360
|
+
return errorResult('dateFirst is required (YYYY-MM-DD, first occurrence date).');
|
|
361
|
+
}
|
|
362
|
+
const amountMilliunits = Math.round(input.amount * 1000);
|
|
363
|
+
let categoryId;
|
|
364
|
+
if (input.categoryName) {
|
|
365
|
+
const resolved = await resolveCategoryId(client, input.categoryName);
|
|
366
|
+
if (!resolved) {
|
|
367
|
+
return errorResult(`Category '${input.categoryName}' not found.`);
|
|
368
|
+
}
|
|
369
|
+
categoryId = resolved;
|
|
370
|
+
}
|
|
371
|
+
const body = {
|
|
372
|
+
accountId: input.accountId,
|
|
373
|
+
payeeName: input.payeeName,
|
|
374
|
+
amountMilliunits,
|
|
375
|
+
dateFirst: input.dateFirst,
|
|
376
|
+
dateNext: input.dateFirst,
|
|
377
|
+
frequency: input.frequency
|
|
378
|
+
};
|
|
379
|
+
if (input.memo)
|
|
380
|
+
body.memo = input.memo;
|
|
381
|
+
if (categoryId)
|
|
382
|
+
body.categoryId = categoryId;
|
|
383
|
+
const data = await client.post('/api/v1/ynab/scheduled-transactions', body);
|
|
384
|
+
return jsonResult(convertMilliunits(data));
|
|
385
|
+
}
|
|
386
|
+
async function updateScheduledTransaction(client, input) {
|
|
387
|
+
if (!input.transactionId) {
|
|
388
|
+
return errorResult('transactionId is required for update_scheduled_transaction.');
|
|
389
|
+
}
|
|
390
|
+
const body = {};
|
|
391
|
+
if (input.payeeName)
|
|
392
|
+
body.payeeName = input.payeeName;
|
|
393
|
+
if (input.amount != null)
|
|
394
|
+
body.amountMilliunits = Math.round(input.amount * 1000);
|
|
395
|
+
if (input.date)
|
|
396
|
+
body.dateNext = input.date;
|
|
397
|
+
if (input.frequency)
|
|
398
|
+
body.frequency = input.frequency;
|
|
399
|
+
if (input.memo)
|
|
400
|
+
body.memo = input.memo;
|
|
401
|
+
if (input.categoryName) {
|
|
402
|
+
const categoryId = await resolveCategoryId(client, input.categoryName);
|
|
403
|
+
if (!categoryId) {
|
|
404
|
+
return errorResult(`Category '${input.categoryName}' not found.`);
|
|
405
|
+
}
|
|
406
|
+
body.categoryId = categoryId;
|
|
407
|
+
}
|
|
408
|
+
const data = await client.put(`/api/v1/ynab/scheduled-transactions/${input.transactionId}`, body);
|
|
409
|
+
return jsonResult(convertMilliunits(data));
|
|
410
|
+
}
|
|
411
|
+
async function deleteScheduledTransaction(client, input) {
|
|
412
|
+
if (!input.transactionId) {
|
|
413
|
+
return errorResult('transactionId is required for delete_scheduled_transaction.');
|
|
414
|
+
}
|
|
415
|
+
const data = await client.delete(`/api/v1/ynab/scheduled-transactions/${input.transactionId}`);
|
|
416
|
+
return jsonResult(data);
|
|
417
|
+
}
|
|
143
418
|
export function registerYnabTool(api, client) {
|
|
144
419
|
api.registerTool({
|
|
145
420
|
id: 'myn_ynab',
|
|
146
421
|
name: 'MYN YNAB',
|
|
147
|
-
description:
|
|
422
|
+
description: [
|
|
423
|
+
'YNAB budget management with full read/write access.',
|
|
424
|
+
'Budget: budget_overview, category_balance, list_categories, account_balances, set_category_goal, goal_progress, budget_months, search_payees.',
|
|
425
|
+
'Transactions: create_transaction, create_transactions_bulk, list_transactions, update_transaction, delete_transaction.',
|
|
426
|
+
'Scheduled: scheduled_transactions, create_scheduled_transaction, update_scheduled_transaction, delete_scheduled_transaction, subscriptions, upcoming_bills.',
|
|
427
|
+
'Analytics: spending_insights, payee_analysis, spending_trends, net_worth, debt_tracking.',
|
|
428
|
+
'Connection: connection_status.',
|
|
429
|
+
'Amounts in dollars (negative=expense). Categories resolved by name (fuzzy match).'
|
|
430
|
+
].join(' '),
|
|
148
431
|
inputSchema: YnabInputSchema,
|
|
149
432
|
async execute(input) {
|
|
150
433
|
return executeYnab(client, input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ynab.js","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ynab.js","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"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"}
|