@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,104 @@
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 { defineTool } from './_helpers.js';
5
+ export async function fetchCurrencies(client, params) {
6
+ const response = await client.get('/currencies', { page: params.page, limit: params.limit });
7
+ return unwrapList(response);
8
+ }
9
+ export async function fetchCurrency(client, code) {
10
+ const response = await client.get(`/currencies/${encodeURIComponent(code)}`);
11
+ return unwrapSingle(response);
12
+ }
13
+ export async function createCurrency(client, params) {
14
+ const response = await client.post('/currencies', params);
15
+ return unwrapSingle(response);
16
+ }
17
+ export async function updateCurrency(client, code, params) {
18
+ const response = await client.put(`/currencies/${encodeURIComponent(code)}`, params);
19
+ return unwrapSingle(response);
20
+ }
21
+ export async function deleteCurrency(client, code) {
22
+ await client.delete(`/currencies/${encodeURIComponent(code)}`);
23
+ return { deleted: true, code };
24
+ }
25
+ export async function enableCurrency(client, code) {
26
+ const response = await client.post(`/currencies/${encodeURIComponent(code)}/enable`, {});
27
+ return unwrapSingle(response);
28
+ }
29
+ export async function disableCurrency(client, code) {
30
+ const response = await client.post(`/currencies/${encodeURIComponent(code)}/disable`, {});
31
+ return unwrapSingle(response);
32
+ }
33
+ export async function setPrimaryCurrency(client, code) {
34
+ const response = await client.post(`/currencies/${encodeURIComponent(code)}/primary`, {});
35
+ return unwrapSingle(response);
36
+ }
37
+ export function registerCurrencyTools(server, client) {
38
+ defineTool(server, 'get_currencies', {
39
+ title: 'Get Currencies',
40
+ description: 'Get all currencies configured in Firefly III.',
41
+ inputSchema: {
42
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
43
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
44
+ },
45
+ annotations: READ_ANNOTATIONS,
46
+ }, ({ page, limit }) => fetchCurrencies(client, { page: page, limit: limit }));
47
+ defineTool(server, 'get_currency', {
48
+ title: 'Get Currency',
49
+ description: 'Get a single currency by its currency code (e.g. EUR, USD).',
50
+ inputSchema: { code: z.string().describe('Currency code (e.g. EUR, USD)') },
51
+ annotations: READ_ANNOTATIONS,
52
+ }, ({ code }) => fetchCurrency(client, code));
53
+ defineTool(server, 'create_currency', {
54
+ title: 'Create Currency',
55
+ description: 'Create a new currency in Firefly III.',
56
+ inputSchema: {
57
+ name: z.string().describe('Currency name (e.g. Euro)'),
58
+ code: z.string().describe('Currency code (e.g. EUR)'),
59
+ symbol: z.string().describe('Currency symbol (e.g. €)'),
60
+ decimal_places: z.number().int().min(0).max(10).optional().describe('Number of decimal places (default 2)'),
61
+ enabled: z.boolean().optional().describe('Whether the currency is enabled'),
62
+ default: z.boolean().optional().describe('Whether this is the default currency'),
63
+ },
64
+ annotations: WRITE_ANNOTATIONS,
65
+ }, (params) => createCurrency(client, params));
66
+ defineTool(server, 'update_currency', {
67
+ title: 'Update Currency',
68
+ description: 'Update an existing currency. Only fields provided will be changed. Use get_currencies to find valid currency codes.',
69
+ inputSchema: {
70
+ code: z.string().describe('Currency code to update (e.g. EUR)'),
71
+ name: z.string().optional().describe('Currency name'),
72
+ symbol: z.string().optional().describe('Currency symbol'),
73
+ decimal_places: z.number().int().min(0).max(10).optional().describe('Number of decimal places'),
74
+ enabled: z.boolean().optional().describe('Whether the currency is enabled'),
75
+ default: z.boolean().optional().describe('Whether this is the default currency'),
76
+ },
77
+ annotations: UPDATE_ANNOTATIONS,
78
+ }, ({ code, ...params }) => updateCurrency(client, code, params));
79
+ defineTool(server, 'delete_currency', {
80
+ title: 'Delete Currency',
81
+ description: 'Permanently delete a currency from Firefly III. **This action cannot be undone.** Use get_currencies to confirm the code before deleting.',
82
+ inputSchema: { code: z.string().describe('Currency code to delete (e.g. EUR)') },
83
+ annotations: DELETE_ANNOTATIONS,
84
+ }, ({ code }) => deleteCurrency(client, code));
85
+ defineTool(server, 'enable_currency', {
86
+ title: 'Enable Currency',
87
+ description: 'Enable a currency so it can be used in transactions.',
88
+ inputSchema: { code: z.string().describe('Currency code (e.g. EUR)') },
89
+ annotations: UPDATE_ANNOTATIONS,
90
+ }, ({ code }) => enableCurrency(client, code));
91
+ defineTool(server, 'disable_currency', {
92
+ title: 'Disable Currency',
93
+ description: 'Disable a currency so it no longer appears in transaction forms.',
94
+ inputSchema: { code: z.string().describe('Currency code (e.g. EUR)') },
95
+ annotations: UPDATE_ANNOTATIONS,
96
+ }, ({ code }) => disableCurrency(client, code));
97
+ defineTool(server, 'set_primary_currency', {
98
+ title: 'Set Primary Currency',
99
+ description: 'Set a currency as the primary/default currency for Firefly III.',
100
+ inputSchema: { code: z.string().describe('Currency code to set as primary (e.g. EUR)') },
101
+ annotations: UPDATE_ANNOTATIONS,
102
+ }, ({ code }) => setPrimaryCurrency(client, code));
103
+ }
104
+ //# sourceMappingURL=currencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"currencies.js","sourceRoot":"","sources":["../../src/tools/currencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FireflyClient } from '../client.js';
3
+ type ExportEntity = 'transactions' | 'accounts' | 'bills' | 'budgets' | 'categories' | 'tags' | 'recurring' | 'rules' | 'piggy-banks';
4
+ export declare function exportEntity(client: FireflyClient, entity: ExportEntity, params: {
5
+ start?: string;
6
+ end?: string;
7
+ }): Promise<string>;
8
+ export declare function registerExportTools(server: McpServer, client: FireflyClient): void;
9
+ export {};
10
+ //# sourceMappingURL=exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/tools/exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,KAAK,YAAY,GACb,cAAc,GACd,UAAU,GACV,OAAO,GACP,SAAS,GACT,YAAY,GACZ,MAAM,GACN,WAAW,GACX,OAAO,GACP,aAAa,CAAC;AAElB,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,MAAM,CAAC,CAKjB;AAcD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAqBlF"}
@@ -0,0 +1,37 @@
1
+ import { READ_ANNOTATIONS } from './_annotations.js';
2
+ import { dateSchema, defineTool } from './_helpers.js';
3
+ export async function exportEntity(client, entity, params) {
4
+ const query = { type: 'csv' };
5
+ if (params.start)
6
+ query.start = params.start;
7
+ if (params.end)
8
+ query.end = params.end;
9
+ return client.getText(`/data/export/${entity}`, query);
10
+ }
11
+ const EXPORT_TOOLS = [
12
+ { name: 'export_transactions', title: 'Export Transactions', entity: 'transactions', hasDates: true },
13
+ { name: 'export_accounts', title: 'Export Accounts', entity: 'accounts', hasDates: false },
14
+ { name: 'export_bills', title: 'Export Bills', entity: 'bills', hasDates: false },
15
+ { name: 'export_budgets', title: 'Export Budgets', entity: 'budgets', hasDates: false },
16
+ { name: 'export_categories', title: 'Export Categories', entity: 'categories', hasDates: false },
17
+ { name: 'export_tags', title: 'Export Tags', entity: 'tags', hasDates: false },
18
+ { name: 'export_recurring', title: 'Export Recurring Transactions', entity: 'recurring', hasDates: false },
19
+ { name: 'export_rules', title: 'Export Rules', entity: 'rules', hasDates: false },
20
+ { name: 'export_piggy_banks', title: 'Export Piggy Banks', entity: 'piggy-banks', hasDates: false },
21
+ ];
22
+ export function registerExportTools(server, client) {
23
+ for (const { name, title, entity, hasDates } of EXPORT_TOOLS) {
24
+ const inputSchema = {};
25
+ if (hasDates) {
26
+ inputSchema.start = dateSchema.optional().describe('Start date (YYYY-MM-DD)');
27
+ inputSchema.end = dateSchema.optional().describe('End date (YYYY-MM-DD)');
28
+ }
29
+ defineTool(server, name, {
30
+ title,
31
+ description: `Export all ${entity} as a CSV file. Returns raw CSV text.${hasDates ? ' Optionally filter by date range.' : ''}`,
32
+ inputSchema,
33
+ annotations: READ_ANNOTATIONS,
34
+ }, ({ start, end }) => exportEntity(client, entity, { start: start, end: end }));
35
+ }
36
+ }
37
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/tools/exports.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAavD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAqB,EACrB,MAAoB,EACpB,MAAwC;IAExC,MAAM,KAAK,GAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7C,IAAI,MAAM,CAAC,GAAG;QAAE,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,YAAY,GAAoF;IACpG,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrG,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1F,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjF,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvF,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;IAChG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC9E,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1G,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjF,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;CACpG,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAiC,EAAE,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YAC9E,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAC5E,CAAC;QAED,UAAU,CACR,MAAM,EACN,IAAI,EACJ;YACE,KAAK;YACL,WAAW,EAAE,cAAc,MAAM,wCAAwC,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9H,WAAW;YACX,WAAW,EAAE,gBAAgB;SAC9B,EACD,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACjB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAA2B,EAAE,GAAG,EAAE,GAAyB,EAAE,CAAC,CACvG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FireflyClient } from '../client.js';
3
+ export declare const TOOL_GROUPS: readonly ["accounts", "transactions", "budgets", "categories", "bills", "piggy-banks", "reports", "rules", "recurring", "attachments", "currencies", "exports", "object-groups", "transaction-links"];
4
+ export type ToolGroup = (typeof TOOL_GROUPS)[number];
5
+ export declare const PRESETS: Record<string, ToolGroup[]>;
6
+ export type PresetName = keyof typeof PRESETS;
7
+ export interface ToolFilterOptions {
8
+ preset?: PresetName;
9
+ groups?: ToolGroup[];
10
+ readOnly?: boolean;
11
+ }
12
+ export declare function makeReadOnlyProxy(server: McpServer): McpServer;
13
+ export declare function registerAllTools(server: McpServer, client: FireflyClient, options?: ToolFilterOptions): void;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgBlD,eAAO,MAAM,WAAW,uMAed,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAO/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAc9D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAyBhH"}
@@ -0,0 +1,94 @@
1
+ import { registerAccountTools } from './accounts.js';
2
+ import { registerAttachmentTools } from './attachments.js';
3
+ import { registerBillTools } from './bills.js';
4
+ import { registerBudgetTools } from './budgets.js';
5
+ import { registerCategoryTools } from './categories.js';
6
+ import { registerCurrencyTools } from './currencies.js';
7
+ import { registerExportTools } from './exports.js';
8
+ import { registerObjectGroupTools } from './object-groups.js';
9
+ import { registerPiggyBankTools } from './piggy-banks.js';
10
+ import { registerRecurringTools } from './recurring.js';
11
+ import { registerReportTools } from './reports.js';
12
+ import { registerRuleTools } from './rules.js';
13
+ import { registerTransactionLinkTools } from './transaction-links.js';
14
+ import { registerTransactionTools } from './transactions.js';
15
+ export const TOOL_GROUPS = [
16
+ 'accounts',
17
+ 'transactions',
18
+ 'budgets',
19
+ 'categories',
20
+ 'bills',
21
+ 'piggy-banks',
22
+ 'reports',
23
+ 'rules',
24
+ 'recurring',
25
+ 'attachments',
26
+ 'currencies',
27
+ 'exports',
28
+ 'object-groups',
29
+ 'transaction-links',
30
+ ];
31
+ export const PRESETS = {
32
+ minimal: ['accounts', 'transactions'],
33
+ default: ['accounts', 'transactions', 'budgets', 'categories', 'bills'],
34
+ budgeting: ['accounts', 'transactions', 'budgets', 'categories', 'bills', 'piggy-banks'],
35
+ insights: ['accounts', 'transactions', 'categories', 'reports'],
36
+ automation: ['accounts', 'transactions', 'rules', 'recurring'],
37
+ full: [...TOOL_GROUPS],
38
+ };
39
+ function isReadOnlyTool(name) {
40
+ return name.startsWith('get_') || name.startsWith('search_') || name.startsWith('test_');
41
+ }
42
+ export function makeReadOnlyProxy(server) {
43
+ return new Proxy(server, {
44
+ get(target, prop) {
45
+ if (prop === 'registerTool') {
46
+ return (name, config, handler) => {
47
+ if (isReadOnlyTool(name)) {
48
+ target.registerTool(name, config, handler);
49
+ }
50
+ };
51
+ }
52
+ const v = target[prop];
53
+ return typeof v === 'function' ? v.bind(target) : v;
54
+ },
55
+ });
56
+ }
57
+ export function registerAllTools(server, client, options = {}) {
58
+ const { preset, groups, readOnly = false } = options;
59
+ const activeGroups = preset
60
+ ? new Set(PRESETS[preset])
61
+ : groups
62
+ ? new Set(groups)
63
+ : new Set(TOOL_GROUPS);
64
+ const s = readOnly ? makeReadOnlyProxy(server) : server;
65
+ if (activeGroups.has('accounts'))
66
+ registerAccountTools(s, client);
67
+ if (activeGroups.has('transactions'))
68
+ registerTransactionTools(s, client);
69
+ if (activeGroups.has('budgets'))
70
+ registerBudgetTools(s, client);
71
+ if (activeGroups.has('categories'))
72
+ registerCategoryTools(s, client);
73
+ if (activeGroups.has('bills'))
74
+ registerBillTools(s, client);
75
+ if (activeGroups.has('piggy-banks'))
76
+ registerPiggyBankTools(s, client);
77
+ if (activeGroups.has('reports'))
78
+ registerReportTools(s, client);
79
+ if (activeGroups.has('rules'))
80
+ registerRuleTools(s, client);
81
+ if (activeGroups.has('recurring'))
82
+ registerRecurringTools(s, client);
83
+ if (activeGroups.has('attachments'))
84
+ registerAttachmentTools(s, client);
85
+ if (activeGroups.has('currencies'))
86
+ registerCurrencyTools(s, client);
87
+ if (activeGroups.has('exports'))
88
+ registerExportTools(s, client);
89
+ if (activeGroups.has('object-groups'))
90
+ registerObjectGroupTools(s, client);
91
+ if (activeGroups.has('transaction-links'))
92
+ registerTransactionLinkTools(s, client);
93
+ }
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
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 fetchObjectGroups(client: FireflyClient, params: {
5
+ page?: number;
6
+ limit?: number;
7
+ }): Promise<UnwrappedList>;
8
+ export declare function fetchObjectGroup(client: FireflyClient, id: string): Promise<UnwrappedSingle>;
9
+ export declare function createObjectGroup(client: FireflyClient, params: {
10
+ title: string;
11
+ order?: number;
12
+ }): Promise<UnwrappedSingle>;
13
+ export declare function updateObjectGroup(client: FireflyClient, id: string, params: {
14
+ title?: string;
15
+ order?: number;
16
+ }): Promise<UnwrappedSingle>;
17
+ export declare function deleteObjectGroup(client: FireflyClient, id: string): Promise<{
18
+ deleted: true;
19
+ id: string;
20
+ }>;
21
+ export declare function fetchObjectGroupBills(client: FireflyClient, id: string, params: {
22
+ page?: number;
23
+ limit?: number;
24
+ }): Promise<UnwrappedList>;
25
+ export declare function fetchObjectGroupPiggyBanks(client: FireflyClient, id: string, params: {
26
+ page?: number;
27
+ limit?: number;
28
+ }): Promise<UnwrappedList>;
29
+ export declare function registerObjectGroupTools(server: McpServer, client: FireflyClient): void;
30
+ //# sourceMappingURL=object-groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-groups.d.ts","sourceRoot":"","sources":["../../src/tools/object-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAIzB,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAGlG;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAGjH;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAMxB;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAMxB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAiHvF"}
@@ -0,0 +1,107 @@
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 { defineTool } from './_helpers.js';
5
+ export async function fetchObjectGroups(client, params) {
6
+ const response = await client.get('/object-groups', { page: params.page, limit: params.limit });
7
+ return unwrapList(response);
8
+ }
9
+ export async function fetchObjectGroup(client, id) {
10
+ const response = await client.get(`/object-groups/${id}`);
11
+ return unwrapSingle(response);
12
+ }
13
+ export async function createObjectGroup(client, params) {
14
+ const response = await client.post('/object-groups', params);
15
+ return unwrapSingle(response);
16
+ }
17
+ export async function updateObjectGroup(client, id, params) {
18
+ const response = await client.put(`/object-groups/${id}`, params);
19
+ return unwrapSingle(response);
20
+ }
21
+ export async function deleteObjectGroup(client, id) {
22
+ await client.delete(`/object-groups/${id}`);
23
+ return { deleted: true, id };
24
+ }
25
+ export async function fetchObjectGroupBills(client, id, params) {
26
+ const response = await client.get(`/object-groups/${id}/bills`, {
27
+ page: params.page,
28
+ limit: params.limit,
29
+ });
30
+ return unwrapList(response);
31
+ }
32
+ export async function fetchObjectGroupPiggyBanks(client, id, params) {
33
+ const response = await client.get(`/object-groups/${id}/piggy-banks`, {
34
+ page: params.page,
35
+ limit: params.limit,
36
+ });
37
+ return unwrapList(response);
38
+ }
39
+ export function registerObjectGroupTools(server, client) {
40
+ defineTool(server, 'get_object_groups', {
41
+ title: 'Get Object Groups',
42
+ description: 'Get all object groups from Firefly III. Object groups organise accounts and piggy banks.',
43
+ inputSchema: {
44
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
45
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
46
+ },
47
+ annotations: READ_ANNOTATIONS,
48
+ }, ({ page, limit }) => fetchObjectGroups(client, { page: page, limit: limit }));
49
+ defineTool(server, 'get_object_group', {
50
+ title: 'Get Object Group',
51
+ description: 'Get a single object group by ID. Use get_object_groups to find valid IDs.',
52
+ inputSchema: { id: z.string().describe('Object group ID') },
53
+ annotations: READ_ANNOTATIONS,
54
+ }, ({ id }) => fetchObjectGroup(client, id));
55
+ defineTool(server, 'create_object_group', {
56
+ title: 'Create Object Group',
57
+ description: 'Create a new object group to organise accounts and piggy banks.',
58
+ inputSchema: {
59
+ title: z.string().describe('Object group title'),
60
+ order: z.number().int().positive().optional().describe('Display order'),
61
+ },
62
+ annotations: WRITE_ANNOTATIONS,
63
+ }, (params) => createObjectGroup(client, params));
64
+ defineTool(server, 'update_object_group', {
65
+ title: 'Update Object Group',
66
+ description: 'Update an existing object group. Only fields provided will be changed. Use get_object_groups to find valid IDs.',
67
+ inputSchema: {
68
+ id: z.string().describe('Object group ID'),
69
+ title: z.string().optional().describe('Object group title'),
70
+ order: z.number().int().positive().optional().describe('Display order'),
71
+ },
72
+ annotations: UPDATE_ANNOTATIONS,
73
+ }, ({ id, ...params }) => updateObjectGroup(client, id, params));
74
+ defineTool(server, 'delete_object_group', {
75
+ title: 'Delete Object Group',
76
+ description: 'Permanently delete an object group. **This action cannot be undone.** Use get_object_groups to confirm the ID before deleting.',
77
+ inputSchema: { id: z.string().describe('Object group ID') },
78
+ annotations: DELETE_ANNOTATIONS,
79
+ }, ({ id }) => deleteObjectGroup(client, id));
80
+ defineTool(server, 'get_object_group_bills', {
81
+ title: 'Get Object Group Bills',
82
+ description: 'Get all bills belonging to a specific object group. Use get_object_groups to find valid IDs.',
83
+ inputSchema: {
84
+ id: z.string().describe('Object group ID'),
85
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
86
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
87
+ },
88
+ annotations: READ_ANNOTATIONS,
89
+ }, ({ id, page, limit }) => fetchObjectGroupBills(client, id, {
90
+ page: page,
91
+ limit: limit,
92
+ }));
93
+ defineTool(server, 'get_object_group_piggy_banks', {
94
+ title: 'Get Object Group Piggy Banks',
95
+ description: 'Get all piggy banks belonging to a specific object group. Use get_object_groups to find valid IDs.',
96
+ inputSchema: {
97
+ id: z.string().describe('Object group ID'),
98
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
99
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
100
+ },
101
+ annotations: READ_ANNOTATIONS,
102
+ }, ({ id, page, limit }) => fetchObjectGroupPiggyBanks(client, id, {
103
+ page: page,
104
+ limit: limit,
105
+ }));
106
+ }
107
+ //# sourceMappingURL=object-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-groups.js","sourceRoot":"","sources":["../../src/tools/object-groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
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 fetchPiggyBanks(client: FireflyClient, params: {
5
+ page?: number;
6
+ limit?: number;
7
+ }): Promise<UnwrappedList>;
8
+ export declare function createPiggyBank(client: FireflyClient, params: {
9
+ name: string;
10
+ account_id: string;
11
+ target_amount?: string;
12
+ start_date?: string;
13
+ target_date?: string;
14
+ notes?: string;
15
+ }): Promise<UnwrappedSingle>;
16
+ export declare function updatePiggyBank(client: FireflyClient, id: string, params: {
17
+ name?: string;
18
+ account_id?: string;
19
+ target_amount?: string;
20
+ start_date?: string;
21
+ target_date?: string;
22
+ notes?: string;
23
+ }): Promise<UnwrappedSingle>;
24
+ export declare function deletePiggyBank(client: FireflyClient, id: string): Promise<{
25
+ deleted: true;
26
+ id: string;
27
+ }>;
28
+ export declare function fetchPiggyBankEvents(client: FireflyClient, id: string, params: {
29
+ page?: number;
30
+ limit?: number;
31
+ }): Promise<UnwrappedList>;
32
+ export declare function createPiggyBankEvent(client: FireflyClient, id: string, params: {
33
+ amount: string;
34
+ date: string;
35
+ }): Promise<UnwrappedSingle>;
36
+ export declare function deletePiggyBankEvent(client: FireflyClient, id: string, eventId: string): Promise<{
37
+ deleted: true;
38
+ id: string;
39
+ }>;
40
+ export declare function registerPiggyBankTools(server: McpServer, client: FireflyClient): void;
41
+ //# sourceMappingURL=piggy-banks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piggy-banks.d.ts","sourceRoot":"","sources":["../../src/tools/piggy-banks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAKzB,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IACN,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAG/G;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAIxB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAGxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA6HrF"}
@@ -0,0 +1,110 @@
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 fetchPiggyBanks(client, params) {
6
+ const response = await client.get('/piggy-banks', { page: params.page, limit: params.limit });
7
+ return unwrapList(response);
8
+ }
9
+ export async function createPiggyBank(client, params) {
10
+ const response = await client.post('/piggy-banks', params);
11
+ return unwrapSingle(response);
12
+ }
13
+ export async function updatePiggyBank(client, id, params) {
14
+ const response = await client.put(`/piggy-banks/${id}`, params);
15
+ return unwrapSingle(response);
16
+ }
17
+ export async function deletePiggyBank(client, id) {
18
+ await client.delete(`/piggy-banks/${id}`);
19
+ return { deleted: true, id };
20
+ }
21
+ export async function fetchPiggyBankEvents(client, id, params) {
22
+ const query = { page: params.page, limit: params.limit };
23
+ const response = await client.get(`/piggy-banks/${id}/events`, query);
24
+ return unwrapList(response);
25
+ }
26
+ export async function createPiggyBankEvent(client, id, params) {
27
+ const response = await client.post(`/piggy-banks/${id}/events`, params);
28
+ return unwrapSingle(response);
29
+ }
30
+ export async function deletePiggyBankEvent(client, id, eventId) {
31
+ await client.delete(`/piggy-banks/${id}/events/${eventId}`);
32
+ return { deleted: true, id: eventId };
33
+ }
34
+ export function registerPiggyBankTools(server, client) {
35
+ defineTool(server, 'get_piggy_banks', {
36
+ title: 'Get Piggy Banks',
37
+ description: 'Get all piggy banks (savings goals) from Firefly III, including current saved amount and target amount.',
38
+ inputSchema: {
39
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
40
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
41
+ },
42
+ annotations: READ_ANNOTATIONS,
43
+ }, ({ page, limit }) => fetchPiggyBanks(client, { page: page, limit: limit }));
44
+ defineTool(server, 'create_piggy_bank', {
45
+ title: 'Create Piggy Bank',
46
+ description: 'Create a new savings goal (piggy bank) in Firefly III. Requires an asset account ID to link to.',
47
+ inputSchema: {
48
+ name: z.string().describe('Piggy bank name'),
49
+ account_id: z.string().describe('Asset account ID to link to — use get_accounts to find valid IDs'),
50
+ target_amount: z.string().optional().describe('Savings goal amount as a number string'),
51
+ start_date: dateSchema.optional().describe('Start date (YYYY-MM-DD)'),
52
+ target_date: dateSchema.optional().describe('Target completion date (YYYY-MM-DD)'),
53
+ notes: z.string().optional().describe('Notes'),
54
+ },
55
+ annotations: WRITE_ANNOTATIONS,
56
+ }, (params) => createPiggyBank(client, params));
57
+ defineTool(server, 'update_piggy_bank', {
58
+ title: 'Update Piggy Bank',
59
+ description: 'Update an existing piggy bank in Firefly III. Only fields provided will be changed. Use get_piggy_banks to find valid IDs.',
60
+ inputSchema: {
61
+ id: z.string().describe('Piggy bank ID — use get_piggy_banks to find valid IDs'),
62
+ name: z.string().optional().describe('Piggy bank name'),
63
+ account_id: z.string().optional().describe('Asset account ID to link to'),
64
+ target_amount: z.string().optional().describe('Savings goal amount as a number string'),
65
+ start_date: dateSchema.optional().describe('Start date (YYYY-MM-DD)'),
66
+ target_date: dateSchema.optional().describe('Target completion date (YYYY-MM-DD)'),
67
+ notes: z.string().optional().describe('Notes'),
68
+ },
69
+ annotations: UPDATE_ANNOTATIONS,
70
+ }, ({ id, ...params }) => updatePiggyBank(client, id, params));
71
+ defineTool(server, 'delete_piggy_bank', {
72
+ title: 'Delete Piggy Bank',
73
+ description: 'Permanently delete a piggy bank (savings goal) from Firefly III. **This action cannot be undone.** Use get_piggy_banks to confirm the ID before deleting.',
74
+ inputSchema: { id: z.string().describe('Piggy bank ID — use get_piggy_banks to find valid IDs') },
75
+ annotations: DELETE_ANNOTATIONS,
76
+ }, ({ id }) => deletePiggyBank(client, id));
77
+ defineTool(server, 'get_piggy_bank_events', {
78
+ title: 'Get Piggy Bank Events',
79
+ description: 'Get all deposit/withdrawal events for a specific piggy bank. Use get_piggy_banks to find valid IDs.',
80
+ inputSchema: {
81
+ id: z.string().describe('Piggy bank ID'),
82
+ page: z.number().int().positive().optional().default(1).describe('Page number'),
83
+ limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
84
+ },
85
+ annotations: READ_ANNOTATIONS,
86
+ }, ({ id, page, limit }) => fetchPiggyBankEvents(client, id, {
87
+ page: page,
88
+ limit: limit,
89
+ }));
90
+ defineTool(server, 'create_piggy_bank_event', {
91
+ title: 'Create Piggy Bank Event',
92
+ description: 'Add a deposit or withdrawal event to a piggy bank. Use a positive amount for a deposit and a negative amount for a withdrawal.',
93
+ inputSchema: {
94
+ id: z.string().describe('Piggy bank ID'),
95
+ amount: z.string().describe('Amount as a number string. Positive for deposit, negative for withdrawal.'),
96
+ date: z.string().describe('Event date (YYYY-MM-DD)'),
97
+ },
98
+ annotations: WRITE_ANNOTATIONS,
99
+ }, ({ id, amount, date }) => createPiggyBankEvent(client, id, { amount: amount, date: date }));
100
+ defineTool(server, 'delete_piggy_bank_event', {
101
+ title: 'Delete Piggy Bank Event',
102
+ description: 'Permanently delete a deposit/withdrawal event from a piggy bank. **This action cannot be undone.** Use get_piggy_bank_events to confirm the event ID.',
103
+ inputSchema: {
104
+ id: z.string().describe('Piggy bank ID'),
105
+ event_id: z.string().describe('Event ID — use get_piggy_bank_events to find valid IDs'),
106
+ },
107
+ annotations: DELETE_ANNOTATIONS,
108
+ }, ({ id, event_id }) => deletePiggyBankEvent(client, id, event_id));
109
+ }
110
+ //# sourceMappingURL=piggy-banks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piggy-banks.js","sourceRoot":"","sources":["../../src/tools/piggy-banks.ts"],"names":[],"mappings":"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"}