@daften/fireflyiii-mcp 0.1.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.
Files changed (101) hide show
  1. package/.env.example +15 -0
  2. package/CHANGELOG.md +28 -0
  3. package/LICENSE +21 -0
  4. package/README.md +605 -0
  5. package/dist/args.d.ts +10 -0
  6. package/dist/args.d.ts.map +1 -0
  7. package/dist/args.js +65 -0
  8. package/dist/args.js.map +1 -0
  9. package/dist/client.d.ts +25 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +146 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/http.d.ts +13 -0
  14. package/dist/http.d.ts.map +1 -0
  15. package/dist/http.js +271 -0
  16. package/dist/http.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +44 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/server.d.ts +5 -0
  22. package/dist/server.d.ts.map +1 -0
  23. package/dist/server.js +13 -0
  24. package/dist/server.js.map +1 -0
  25. package/dist/tools/_annotations.d.ts +17 -0
  26. package/dist/tools/_annotations.d.ts.map +1 -0
  27. package/dist/tools/_annotations.js +9 -0
  28. package/dist/tools/_annotations.js.map +1 -0
  29. package/dist/tools/_helpers.d.ts +17 -0
  30. package/dist/tools/_helpers.d.ts.map +1 -0
  31. package/dist/tools/_helpers.js +24 -0
  32. package/dist/tools/_helpers.js.map +1 -0
  33. package/dist/tools/accounts.d.ts +48 -0
  34. package/dist/tools/accounts.d.ts.map +1 -0
  35. package/dist/tools/accounts.js +151 -0
  36. package/dist/tools/accounts.js.map +1 -0
  37. package/dist/tools/attachments.d.ts +31 -0
  38. package/dist/tools/attachments.d.ts.map +1 -0
  39. package/dist/tools/attachments.js +112 -0
  40. package/dist/tools/attachments.js.map +1 -0
  41. package/dist/tools/bills.d.ts +43 -0
  42. package/dist/tools/bills.d.ts.map +1 -0
  43. package/dist/tools/bills.js +112 -0
  44. package/dist/tools/bills.js.map +1 -0
  45. package/dist/tools/budgets.d.ts +65 -0
  46. package/dist/tools/budgets.d.ts.map +1 -0
  47. package/dist/tools/budgets.js +209 -0
  48. package/dist/tools/budgets.js.map +1 -0
  49. package/dist/tools/categories.d.ts +27 -0
  50. package/dist/tools/categories.d.ts.map +1 -0
  51. package/dist/tools/categories.js +83 -0
  52. package/dist/tools/categories.js.map +1 -0
  53. package/dist/tools/currencies.d.ts +32 -0
  54. package/dist/tools/currencies.d.ts.map +1 -0
  55. package/dist/tools/currencies.js +104 -0
  56. package/dist/tools/currencies.js.map +1 -0
  57. package/dist/tools/exports.d.ts +10 -0
  58. package/dist/tools/exports.d.ts.map +1 -0
  59. package/dist/tools/exports.js +37 -0
  60. package/dist/tools/exports.js.map +1 -0
  61. package/dist/tools/index.d.ts +14 -0
  62. package/dist/tools/index.d.ts.map +1 -0
  63. package/dist/tools/index.js +94 -0
  64. package/dist/tools/index.js.map +1 -0
  65. package/dist/tools/object-groups.d.ts +30 -0
  66. package/dist/tools/object-groups.d.ts.map +1 -0
  67. package/dist/tools/object-groups.js +107 -0
  68. package/dist/tools/object-groups.js.map +1 -0
  69. package/dist/tools/piggy-banks.d.ts +41 -0
  70. package/dist/tools/piggy-banks.d.ts.map +1 -0
  71. package/dist/tools/piggy-banks.js +110 -0
  72. package/dist/tools/piggy-banks.js.map +1 -0
  73. package/dist/tools/recurring.d.ts +70 -0
  74. package/dist/tools/recurring.d.ts.map +1 -0
  75. package/dist/tools/recurring.js +279 -0
  76. package/dist/tools/recurring.js.map +1 -0
  77. package/dist/tools/reports.d.ts +40 -0
  78. package/dist/tools/reports.d.ts.map +1 -0
  79. package/dist/tools/reports.js +413 -0
  80. package/dist/tools/reports.js.map +1 -0
  81. package/dist/tools/rules.d.ts +105 -0
  82. package/dist/tools/rules.d.ts.map +1 -0
  83. package/dist/tools/rules.js +361 -0
  84. package/dist/tools/rules.js.map +1 -0
  85. package/dist/tools/transaction-links.d.ts +30 -0
  86. package/dist/tools/transaction-links.d.ts.map +1 -0
  87. package/dist/tools/transaction-links.js +91 -0
  88. package/dist/tools/transaction-links.js.map +1 -0
  89. package/dist/tools/transactions.d.ts +72 -0
  90. package/dist/tools/transactions.d.ts.map +1 -0
  91. package/dist/tools/transactions.js +262 -0
  92. package/dist/tools/transactions.js.map +1 -0
  93. package/dist/transform.d.ts +48 -0
  94. package/dist/transform.d.ts.map +1 -0
  95. package/dist/transform.js +29 -0
  96. package/dist/transform.js.map +1 -0
  97. package/dist/types.d.ts +2 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +2 -0
  100. package/dist/types.js.map +1 -0
  101. package/package.json +61 -0
@@ -0,0 +1,70 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FireflyClient } from '../client.js';
3
+ import { type UnwrappedList, type UnwrappedSingle } from '../transform.js';
4
+ export declare function fetchRecurrences(client: FireflyClient, params: {
5
+ page?: number;
6
+ limit?: number;
7
+ }): Promise<UnwrappedList>;
8
+ export declare function fetchRecurrence(client: FireflyClient, id: string): Promise<UnwrappedSingle>;
9
+ export declare function createRecurrence(client: FireflyClient, params: {
10
+ type: 'withdrawal' | 'deposit' | 'transfer';
11
+ title: string;
12
+ description?: string;
13
+ notes?: string;
14
+ first_date: string;
15
+ repeat_until?: string | null;
16
+ nr_of_repetitions?: number;
17
+ apply_rules?: boolean;
18
+ active?: boolean;
19
+ repeat_type: 'daily' | 'weekly' | 'monthly' | 'ndom' | 'yearly';
20
+ repeat_moment: string;
21
+ skip?: number;
22
+ weekend?: number;
23
+ amount: string;
24
+ transaction_description: string;
25
+ source_id: string;
26
+ destination_id: string;
27
+ category_id?: string;
28
+ budget_id?: string;
29
+ currency_code?: string;
30
+ tags?: string[];
31
+ transaction_notes?: string;
32
+ }): Promise<UnwrappedSingle>;
33
+ export declare function updateRecurrence(client: FireflyClient, id: string, params: {
34
+ type?: 'withdrawal' | 'deposit' | 'transfer';
35
+ title?: string;
36
+ description?: string;
37
+ notes?: string;
38
+ first_date?: string;
39
+ repeat_until?: string | null;
40
+ nr_of_repetitions?: number;
41
+ apply_rules?: boolean;
42
+ active?: boolean;
43
+ repeat_type?: 'daily' | 'weekly' | 'monthly' | 'ndom' | 'yearly';
44
+ repeat_moment?: string;
45
+ skip?: number;
46
+ weekend?: number;
47
+ amount?: string;
48
+ transaction_description?: string;
49
+ source_id?: string;
50
+ destination_id?: string;
51
+ category_id?: string;
52
+ budget_id?: string;
53
+ currency_code?: string;
54
+ tags?: string[];
55
+ transaction_notes?: string;
56
+ }): Promise<UnwrappedSingle>;
57
+ export declare function deleteRecurrence(client: FireflyClient, id: string): Promise<{
58
+ deleted: true;
59
+ id: string;
60
+ }>;
61
+ export declare function fetchRecurrenceTransactions(client: FireflyClient, id: string, params: {
62
+ page?: number;
63
+ limit?: number;
64
+ }): Promise<UnwrappedList>;
65
+ export declare function triggerRecurrence(client: FireflyClient, id: string, date?: string): Promise<{
66
+ triggered: true;
67
+ id: string;
68
+ }>;
69
+ export declare function registerRecurringTools(server: McpServer, client: FireflyClient): void;
70
+ //# sourceMappingURL=recurring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ import { z } from 'zod';
2
+ import { unwrapList, unwrapSingle, } from '../transform.js';
3
+ import { DELETE_ANNOTATIONS, READ_ANNOTATIONS, UPDATE_ANNOTATIONS, WRITE_ANNOTATIONS } from './_annotations.js';
4
+ import { dateSchema, defineTool } from './_helpers.js';
5
+ export async function fetchRecurrences(client, params) {
6
+ const query = { page: params.page, limit: params.limit };
7
+ const response = await client.get('/recurrences', query);
8
+ return unwrapList(response);
9
+ }
10
+ export async function fetchRecurrence(client, id) {
11
+ const response = await client.get(`/recurrences/${id}`);
12
+ return unwrapSingle(response);
13
+ }
14
+ export async function createRecurrence(client, params) {
15
+ const repetition = { type: params.repeat_type, moment: params.repeat_moment };
16
+ if (params.skip !== undefined)
17
+ repetition.skip = params.skip;
18
+ if (params.weekend !== undefined)
19
+ repetition.weekend = params.weekend;
20
+ const transaction = {
21
+ description: params.transaction_description,
22
+ amount: params.amount,
23
+ source_id: params.source_id,
24
+ destination_id: params.destination_id,
25
+ };
26
+ if (params.category_id !== undefined)
27
+ transaction.category_id = params.category_id;
28
+ if (params.budget_id !== undefined)
29
+ transaction.budget_id = params.budget_id;
30
+ if (params.currency_code !== undefined)
31
+ transaction.currency_code = params.currency_code;
32
+ if (params.tags !== undefined)
33
+ transaction.tags = params.tags;
34
+ if (params.transaction_notes !== undefined)
35
+ transaction.notes = params.transaction_notes;
36
+ const body = {
37
+ type: params.type,
38
+ title: params.title,
39
+ first_date: params.first_date,
40
+ repeat_until: params.repeat_until ?? null,
41
+ apply_rules: params.apply_rules ?? true,
42
+ active: params.active ?? true,
43
+ repetitions: [repetition],
44
+ transactions: [transaction],
45
+ };
46
+ if (params.description !== undefined)
47
+ body.description = params.description;
48
+ if (params.notes !== undefined)
49
+ body.notes = params.notes;
50
+ if (params.nr_of_repetitions !== undefined)
51
+ body.nr_of_repetitions = params.nr_of_repetitions;
52
+ const response = await client.post('/recurrences', body);
53
+ return unwrapSingle(response);
54
+ }
55
+ export async function updateRecurrence(client, id, params) {
56
+ const body = {};
57
+ if (params.type !== undefined)
58
+ body.type = params.type;
59
+ if (params.title !== undefined)
60
+ body.title = params.title;
61
+ if (params.description !== undefined)
62
+ body.description = params.description;
63
+ if (params.notes !== undefined)
64
+ body.notes = params.notes;
65
+ if (params.first_date !== undefined)
66
+ body.first_date = params.first_date;
67
+ if (params.repeat_until !== undefined)
68
+ body.repeat_until = params.repeat_until;
69
+ if (params.nr_of_repetitions !== undefined)
70
+ body.nr_of_repetitions = params.nr_of_repetitions;
71
+ if (params.apply_rules !== undefined)
72
+ body.apply_rules = params.apply_rules;
73
+ if (params.active !== undefined)
74
+ body.active = params.active;
75
+ const hasRepetitionFields = params.repeat_type !== undefined ||
76
+ params.repeat_moment !== undefined ||
77
+ params.skip !== undefined ||
78
+ params.weekend !== undefined;
79
+ if (hasRepetitionFields) {
80
+ const repetition = {};
81
+ if (params.repeat_type !== undefined)
82
+ repetition.type = params.repeat_type;
83
+ if (params.repeat_moment !== undefined)
84
+ repetition.moment = params.repeat_moment;
85
+ if (params.skip !== undefined)
86
+ repetition.skip = params.skip;
87
+ if (params.weekend !== undefined)
88
+ repetition.weekend = params.weekend;
89
+ body.repetitions = [repetition];
90
+ }
91
+ const hasTransactionFields = params.amount !== undefined ||
92
+ params.transaction_description !== undefined ||
93
+ params.source_id !== undefined ||
94
+ params.destination_id !== undefined ||
95
+ params.category_id !== undefined ||
96
+ params.budget_id !== undefined ||
97
+ params.currency_code !== undefined ||
98
+ params.tags !== undefined ||
99
+ params.transaction_notes !== undefined;
100
+ if (hasTransactionFields) {
101
+ const transaction = {};
102
+ if (params.amount !== undefined)
103
+ transaction.amount = params.amount;
104
+ if (params.transaction_description !== undefined)
105
+ transaction.description = params.transaction_description;
106
+ if (params.source_id !== undefined)
107
+ transaction.source_id = params.source_id;
108
+ if (params.destination_id !== undefined)
109
+ transaction.destination_id = params.destination_id;
110
+ if (params.category_id !== undefined)
111
+ transaction.category_id = params.category_id;
112
+ if (params.budget_id !== undefined)
113
+ transaction.budget_id = params.budget_id;
114
+ if (params.currency_code !== undefined)
115
+ transaction.currency_code = params.currency_code;
116
+ if (params.tags !== undefined)
117
+ transaction.tags = params.tags;
118
+ if (params.transaction_notes !== undefined)
119
+ transaction.notes = params.transaction_notes;
120
+ body.transactions = [transaction];
121
+ }
122
+ const response = await client.put(`/recurrences/${id}`, body);
123
+ return unwrapSingle(response);
124
+ }
125
+ export async function deleteRecurrence(client, id) {
126
+ await client.delete(`/recurrences/${id}`);
127
+ return { deleted: true, id };
128
+ }
129
+ export async function fetchRecurrenceTransactions(client, id, params) {
130
+ const query = { page: params.page, limit: params.limit };
131
+ const response = await client.get(`/recurrences/${id}/transactions`, query);
132
+ return unwrapList(response);
133
+ }
134
+ export async function triggerRecurrence(client, id, date) {
135
+ const query = {};
136
+ if (date)
137
+ query.date = date;
138
+ await client.post(`/recurrences/${id}/trigger`, {}, query);
139
+ return { triggered: true, id };
140
+ }
141
+ export function registerRecurringTools(server, client) {
142
+ defineTool(server, 'get_recurring', {
143
+ title: 'Get Recurring Transactions',
144
+ description: 'Get all recurring transactions from Firefly III.',
145
+ inputSchema: {
146
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
147
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
148
+ },
149
+ annotations: READ_ANNOTATIONS,
150
+ }, ({ page, limit }) => fetchRecurrences(client, { page: page, limit: limit }));
151
+ defineTool(server, 'get_recurrence', {
152
+ title: 'Get Recurring Transaction',
153
+ description: 'Get a single recurring transaction by its numeric ID. Use get_recurring to find valid IDs.',
154
+ inputSchema: {
155
+ id: z.string().describe('Recurrence ID'),
156
+ },
157
+ annotations: READ_ANNOTATIONS,
158
+ }, ({ id }) => fetchRecurrence(client, id));
159
+ defineTool(server, 'create_recurring', {
160
+ title: 'Create Recurring Transaction',
161
+ description: 'Create a new recurring transaction in Firefly III. Use get_accounts to find source and destination account IDs. Use get_categories to find category IDs.',
162
+ inputSchema: {
163
+ type: z.enum(['withdrawal', 'deposit', 'transfer']).describe('Transaction type for all generated transactions'),
164
+ title: z.string().describe('Name of the recurring transaction'),
165
+ description: z.string().optional().describe('Description of the recurrence (not the individual transactions)'),
166
+ notes: z.string().optional().describe('Notes'),
167
+ first_date: dateSchema.describe('First recurrence date (YYYY-MM-DD)'),
168
+ repeat_until: dateSchema
169
+ .optional()
170
+ .nullable()
171
+ .describe('Stop after this date (YYYY-MM-DD). Omit or pass null for no end date.'),
172
+ nr_of_repetitions: z
173
+ .number()
174
+ .int()
175
+ .positive()
176
+ .optional()
177
+ .describe('Stop after N occurrences. Do not combine with repeat_until.'),
178
+ apply_rules: z.boolean().optional().default(true).describe('Apply rules to generated transactions'),
179
+ active: z.boolean().optional().default(true).describe('Whether the recurrence is active'),
180
+ repeat_type: z.enum(['daily', 'weekly', 'monthly', 'ndom', 'yearly']).describe('Repetition frequency'),
181
+ repeat_moment: z
182
+ .string()
183
+ .describe('Repetition moment: empty string for daily; 1–7 (Mon–Sun) for weekly; 1–31 for monthly; "week,day" e.g. "2,3" for ndom (2nd Wednesday); YYYY-MM-DD for yearly (year value ignored)'),
184
+ skip: z.number().int().min(0).optional().describe('Skip every N occurrences (0 = none, 1 = every other)'),
185
+ weekend: z
186
+ .number()
187
+ .int()
188
+ .min(1)
189
+ .max(4)
190
+ .optional()
191
+ .describe('Weekend handling: 1=do nothing, 2=skip (no transaction), 3=previous Friday, 4=next Monday'),
192
+ amount: z.string().describe('Transaction amount as a positive number string, e.g. "950.00"'),
193
+ transaction_description: z.string().describe('Description of each generated transaction'),
194
+ source_id: z.string().describe('Source account ID'),
195
+ destination_id: z.string().describe('Destination account ID'),
196
+ category_id: z.string().optional().describe('Category ID — use get_categories to find valid IDs'),
197
+ budget_id: z.string().optional().describe('Budget ID — use get_budgets to find valid IDs'),
198
+ currency_code: z.string().optional().describe('Currency code (e.g. EUR, USD)'),
199
+ tags: z.array(z.string()).optional().describe('Tags'),
200
+ transaction_notes: z.string().optional().describe('Notes for each generated transaction'),
201
+ },
202
+ annotations: WRITE_ANNOTATIONS,
203
+ }, (params) => createRecurrence(client, params));
204
+ defineTool(server, 'update_recurring', {
205
+ title: 'Update Recurring Transaction',
206
+ description: 'Update an existing recurring transaction in Firefly III. Only fields provided will be changed. Use get_recurrence to confirm the ID before updating.',
207
+ inputSchema: {
208
+ id: z.string().describe('Recurrence ID — use get_recurring to find valid IDs'),
209
+ type: z.enum(['withdrawal', 'deposit', 'transfer']).optional().describe('Transaction type'),
210
+ title: z.string().optional().describe('Name of the recurring transaction'),
211
+ description: z.string().optional().describe('Description of the recurrence'),
212
+ notes: z.string().optional().describe('Notes'),
213
+ first_date: dateSchema.optional().describe('Date of first occurrence (YYYY-MM-DD)'),
214
+ repeat_until: dateSchema
215
+ .optional()
216
+ .nullable()
217
+ .describe('Stop after this date (YYYY-MM-DD). Pass null to remove end date.'),
218
+ nr_of_repetitions: z.number().int().positive().optional().describe('Stop after N occurrences'),
219
+ apply_rules: z.boolean().optional().describe('Apply rules to generated transactions'),
220
+ active: z.boolean().optional().describe('Whether the recurrence is active'),
221
+ repeat_type: z
222
+ .enum(['daily', 'weekly', 'monthly', 'ndom', 'yearly'])
223
+ .optional()
224
+ .describe('Repetition frequency'),
225
+ repeat_moment: z.string().optional().describe('Repetition moment (see create_recurring for format details)'),
226
+ skip: z.number().int().min(0).optional().describe('Skip every N occurrences'),
227
+ weekend: z
228
+ .number()
229
+ .int()
230
+ .min(1)
231
+ .max(4)
232
+ .optional()
233
+ .describe('Weekend handling: 1=do nothing, 2=skip, 3=previous Friday, 4=next Monday'),
234
+ amount: z.string().optional().describe('Transaction amount'),
235
+ transaction_description: z.string().optional().describe('Description of each generated transaction'),
236
+ source_id: z.string().optional().describe('Source account ID'),
237
+ destination_id: z.string().optional().describe('Destination account ID'),
238
+ category_id: z.string().optional().describe('Category ID'),
239
+ budget_id: z.string().optional().describe('Budget ID'),
240
+ currency_code: z.string().optional().describe('Currency code'),
241
+ tags: z.array(z.string()).optional().describe('Tags'),
242
+ transaction_notes: z.string().optional().describe('Notes for each generated transaction'),
243
+ },
244
+ annotations: UPDATE_ANNOTATIONS,
245
+ }, ({ id, ...params }) => updateRecurrence(client, id, params));
246
+ defineTool(server, 'delete_recurring', {
247
+ title: 'Delete Recurring Transaction',
248
+ description: 'Permanently delete a recurring transaction from Firefly III. **This action cannot be undone.** This deletes the recurrence schedule only — previously generated transactions are not affected. Use get_recurrence to confirm before deleting.',
249
+ inputSchema: {
250
+ id: z.string().describe('Recurrence ID — use get_recurring to find valid IDs'),
251
+ },
252
+ annotations: DELETE_ANNOTATIONS,
253
+ }, ({ id }) => deleteRecurrence(client, id));
254
+ defineTool(server, 'get_recurrence_transactions', {
255
+ title: 'Get Recurrence Transactions',
256
+ description: 'Get all transactions that have been created by a recurring transaction rule. Use get_recurring to find valid IDs.',
257
+ inputSchema: {
258
+ id: z.string().describe('Recurring transaction ID'),
259
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
260
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
261
+ },
262
+ annotations: READ_ANNOTATIONS,
263
+ }, ({ id, page, limit }) => fetchRecurrenceTransactions(client, id, {
264
+ page: page,
265
+ limit: limit,
266
+ }));
267
+ defineTool(server, 'trigger_recurrence', {
268
+ title: 'Trigger Recurrence',
269
+ description: 'Manually fire a recurring transaction rule to create its transaction immediately. Optionally specify a date (YYYY-MM-DD) to use instead of today.',
270
+ inputSchema: {
271
+ id: z.string().describe('Recurring transaction ID'),
272
+ date: dateSchema
273
+ .optional()
274
+ .describe('Date to use for the triggered transaction (YYYY-MM-DD). Defaults to today.'),
275
+ },
276
+ annotations: WRITE_ANNOTATIONS,
277
+ }, ({ id, date }) => triggerRecurrence(client, id, date));
278
+ }
279
+ //# sourceMappingURL=recurring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FireflyClient } from '../client.js';
3
+ import { type CleanSummaryItem, type UnwrappedList, type UnwrappedSingle } from '../transform.js';
4
+ export declare function fetchTags(client: FireflyClient, params: {
5
+ page?: number;
6
+ limit?: number;
7
+ }): Promise<UnwrappedList>;
8
+ export declare function fetchTagTransactions(client: FireflyClient, tag: string, params: {
9
+ start?: string;
10
+ end?: string;
11
+ page?: number;
12
+ limit?: number;
13
+ }): Promise<UnwrappedList>;
14
+ export declare function fetchSummary(client: FireflyClient, start: string, end: string, currencyCode?: string): Promise<CleanSummaryItem[]>;
15
+ export declare function fetchInsightExpenses(client: FireflyClient, start: string, end: string): Promise<unknown>;
16
+ export declare function fetchInsightIncome(client: FireflyClient, start: string, end: string): Promise<unknown>;
17
+ type InsightNoXEndpoint = '/insight/expense/no-bill' | '/insight/expense/no-budget' | '/insight/expense/no-category' | '/insight/expense/no-tag' | '/insight/income/no-category' | '/insight/income/no-tag' | '/insight/transfer/no-category' | '/insight/transfer/no-tag';
18
+ export declare function fetchInsightNoX(client: FireflyClient, endpoint: InsightNoXEndpoint, start: string, end: string): Promise<unknown>;
19
+ export declare function createTag(client: FireflyClient, params: {
20
+ tag: string;
21
+ date?: string;
22
+ description?: string;
23
+ }): Promise<UnwrappedSingle>;
24
+ export declare function updateTag(client: FireflyClient, id: string, params: {
25
+ tag?: string;
26
+ date?: string;
27
+ description?: string;
28
+ }): Promise<UnwrappedSingle>;
29
+ export declare function deleteTag(client: FireflyClient, id: string): Promise<{
30
+ deleted: true;
31
+ id: string;
32
+ }>;
33
+ export declare function fetchAbout(client: FireflyClient): Promise<unknown>;
34
+ export declare function fetchNetWorth(client: FireflyClient, start: string, end: string, currencyCode?: string): Promise<unknown>;
35
+ export declare function fetchChart(client: FireflyClient, endpoint: string, start: string, end: string): Promise<unknown>;
36
+ export declare function fetchExchangeRate(client: FireflyClient, from: string, to: string, date?: string): Promise<unknown>;
37
+ export declare function fetchInsightGrouped(client: FireflyClient, endpoint: string, start: string, end: string, filters?: Record<string, string[]>): Promise<unknown>;
38
+ export declare function registerReportTools(server: McpServer, client: FireflyClient): void;
39
+ export {};
40
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/tools/reports.ts"],"names":[],"mappings":"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"}