@infamousendeavors/lunchmoney-mcp 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +288 -0
- package/SECURITY.md +130 -0
- package/dist/api/client.d.ts +11 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +82 -0
- package/dist/api/client.js.map +1 -0
- package/dist/auth-provider.d.ts +47 -0
- package/dist/auth-provider.d.ts.map +1 -0
- package/dist/auth-provider.js +111 -0
- package/dist/auth-provider.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +103 -0
- package/dist/cli.js.map +1 -0
- package/dist/credential-store.d.ts +25 -0
- package/dist/credential-store.d.ts.map +1 -0
- package/dist/credential-store.js +90 -0
- package/dist/credential-store.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +189 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +178 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +116 -0
- package/dist/server.js.map +1 -0
- package/dist/session-store.d.ts +28 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +50 -0
- package/dist/session-store.js.map +1 -0
- package/dist/setup.d.ts +21 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +104 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/assets.d.ts +4 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js +63 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/budgets.d.ts +4 -0
- package/dist/tools/budgets.d.ts.map +1 -0
- package/dist/tools/budgets.js +63 -0
- package/dist/tools/budgets.js.map +1 -0
- package/dist/tools/categories.d.ts +4 -0
- package/dist/tools/categories.d.ts.map +1 -0
- package/dist/tools/categories.js +105 -0
- package/dist/tools/categories.js.map +1 -0
- package/dist/tools/plaid.d.ts +4 -0
- package/dist/tools/plaid.d.ts.map +1 -0
- package/dist/tools/plaid.js +33 -0
- package/dist/tools/plaid.js.map +1 -0
- package/dist/tools/recurring.d.ts +4 -0
- package/dist/tools/recurring.d.ts.map +1 -0
- package/dist/tools/recurring.js +63 -0
- package/dist/tools/recurring.js.map +1 -0
- package/dist/tools/tags.d.ts +4 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +63 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/transactions.d.ts +4 -0
- package/dist/tools/transactions.d.ts.map +1 -0
- package/dist/tools/transactions.js +146 -0
- package/dist/tools/transactions.js.map +1 -0
- package/dist/tools/user.d.ts +4 -0
- package/dist/tools/user.d.ts.map +1 -0
- package/dist/tools/user.js +19 -0
- package/dist/tools/user.js.map +1 -0
- package/dist/types/index.d.ts +164 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +29 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/tools/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,kBAAkB,CAChC,MAAe,EACf,MAAwB;IAExB,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,kCAAkC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,SAAS,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAuC,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmB,SAAS,EAAE,IAAI,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sEAAsE;QACnF,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,IAAkE,EAAE,EAAE;YACpF,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;gBACnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAC5B,WAAW,EAAE,EAAE,EACf,UAAU,CACX,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK,EAAE,IAA8B,EAAE,EAAE;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,OAAO,SAAS,IAAI,CAAC,EAAE,uBAAuB,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/tools/budgets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,gBAAgB,QAgE3B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
import { createBudgetSchema, updateBudgetSchema, idSchema, } from "../schemas/index.js";
|
|
4
|
+
export function registerBudgetTools(server, client) {
|
|
5
|
+
server.addTool({
|
|
6
|
+
name: "getBudgets",
|
|
7
|
+
description: "List all budgets with their category assignments and date ranges",
|
|
8
|
+
parameters: z.object({}),
|
|
9
|
+
execute: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await client.get("/budgets");
|
|
12
|
+
return JSON.stringify(response, null, 2);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return formatErrorForMCP(error);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
server.addTool({
|
|
20
|
+
name: "createBudget",
|
|
21
|
+
description: "Create a new budget for a category with amount and date range",
|
|
22
|
+
parameters: createBudgetSchema,
|
|
23
|
+
execute: async (args) => {
|
|
24
|
+
try {
|
|
25
|
+
const budget = await client.post("/budgets", args);
|
|
26
|
+
return JSON.stringify(budget, null, 2);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return formatErrorForMCP(error);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
server.addTool({
|
|
34
|
+
name: "updateBudget",
|
|
35
|
+
description: "Update an existing budget's amount, category, or date range",
|
|
36
|
+
parameters: idSchema.merge(updateBudgetSchema),
|
|
37
|
+
execute: async (args) => {
|
|
38
|
+
try {
|
|
39
|
+
const { id, ...updateData } = args;
|
|
40
|
+
const budget = await client.put(`/budgets/${id}`, updateData);
|
|
41
|
+
return JSON.stringify(budget, null, 2);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return formatErrorForMCP(error);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
server.addTool({
|
|
49
|
+
name: "deleteBudget",
|
|
50
|
+
description: "Delete a budget by ID",
|
|
51
|
+
parameters: idSchema,
|
|
52
|
+
execute: async (args) => {
|
|
53
|
+
try {
|
|
54
|
+
await client.delete(`/budgets/${args.id}`);
|
|
55
|
+
return `Budget ${args.id} deleted successfully`;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return formatErrorForMCP(error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=budgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/tools/budgets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,mBAAmB,CAC/B,MAAe,EACf,MAAwB;IAExB,MAAM,CAAC,OAAO,CAAC;QACX,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,kEAAkE;QAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAkB,UAAU,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACX,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+DAA+D;QAC5E,UAAU,EAAE,kBAAkB;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAwC,EAAE,EAAE;YACxD,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC5B,UAAU,EACV,IAAI,CACP,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACX,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,6DAA6D;QAC1E,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,IAAmE,EAAE,EAAE;YACnF,IAAI,CAAC;gBACD,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,YAAY,EAAE,EAAE,EAChB,UAAU,CACb,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACX,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK,EAAE,IAA8B,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACD,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,OAAO,UAAU,IAAI,CAAC,EAAE,uBAAuB,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/tools/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAWpD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,gBAAgB,QAkHzB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
import { createCategorySchema, updateCategorySchema, createCategoryGroupSchema, addToGroupSchema, idSchema, } from "../schemas/index.js";
|
|
4
|
+
export function registerCategoryTools(server, client) {
|
|
5
|
+
server.addTool({
|
|
6
|
+
name: "getCategories",
|
|
7
|
+
description: "List all categories including category groups and parent categories",
|
|
8
|
+
parameters: z.object({}),
|
|
9
|
+
execute: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await client.get("/categories");
|
|
12
|
+
return JSON.stringify(response, null, 2);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return formatErrorForMCP(error);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
server.addTool({
|
|
20
|
+
name: "createCategory",
|
|
21
|
+
description: "Create a new spending or income category",
|
|
22
|
+
parameters: createCategorySchema,
|
|
23
|
+
execute: async (args) => {
|
|
24
|
+
try {
|
|
25
|
+
const category = await client.post("/categories", args);
|
|
26
|
+
return JSON.stringify(category, null, 2);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return formatErrorForMCP(error);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
server.addTool({
|
|
34
|
+
name: "updateCategory",
|
|
35
|
+
description: "Update an existing category's properties",
|
|
36
|
+
parameters: idSchema.merge(updateCategorySchema),
|
|
37
|
+
execute: async (args) => {
|
|
38
|
+
try {
|
|
39
|
+
const { id, ...updateData } = args;
|
|
40
|
+
const category = await client.put(`/categories/${id}`, updateData);
|
|
41
|
+
return JSON.stringify(category, null, 2);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return formatErrorForMCP(error);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
server.addTool({
|
|
49
|
+
name: "deleteCategory",
|
|
50
|
+
description: "Delete a category by ID",
|
|
51
|
+
parameters: idSchema,
|
|
52
|
+
execute: async (args) => {
|
|
53
|
+
try {
|
|
54
|
+
await client.delete(`/categories/${args.id}`);
|
|
55
|
+
return `Category ${args.id} deleted successfully`;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return formatErrorForMCP(error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
server.addTool({
|
|
63
|
+
name: "getCategory",
|
|
64
|
+
description: "Get a single category by ID",
|
|
65
|
+
parameters: idSchema,
|
|
66
|
+
execute: async (args) => {
|
|
67
|
+
try {
|
|
68
|
+
const category = await client.get(`/categories/${args.id}`);
|
|
69
|
+
return JSON.stringify(category, null, 2);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return formatErrorForMCP(error);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
server.addTool({
|
|
77
|
+
name: "createCategoryGroup",
|
|
78
|
+
description: "Create a new category group with an optional list of category IDs",
|
|
79
|
+
parameters: createCategoryGroupSchema,
|
|
80
|
+
execute: async (args) => {
|
|
81
|
+
try {
|
|
82
|
+
const response = await client.post("/categories/group", args);
|
|
83
|
+
return JSON.stringify(response, null, 2);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return formatErrorForMCP(error);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
server.addTool({
|
|
91
|
+
name: "addToGroup",
|
|
92
|
+
description: "Add existing categories to a category group",
|
|
93
|
+
parameters: addToGroupSchema,
|
|
94
|
+
execute: async (args) => {
|
|
95
|
+
try {
|
|
96
|
+
const response = await client.post(`/categories/group/${args.group_id}/add`, { category_ids: args.category_ids });
|
|
97
|
+
return JSON.stringify(response, null, 2);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return formatErrorForMCP(error);
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/tools/categories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaid.d.ts","sourceRoot":"","sources":["../../src/tools/plaid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,gBAAgB,QA8BzB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
export function registerPlaidTools(server, client) {
|
|
4
|
+
server.addTool({
|
|
5
|
+
name: "getPlaidAccounts",
|
|
6
|
+
description: "List all Plaid-connected accounts with balances",
|
|
7
|
+
parameters: z.object({}),
|
|
8
|
+
execute: async () => {
|
|
9
|
+
try {
|
|
10
|
+
const response = await client.get("/plaid_accounts");
|
|
11
|
+
return JSON.stringify(response, null, 2);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return formatErrorForMCP(error);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
server.addTool({
|
|
19
|
+
name: "fetchPlaidAccounts",
|
|
20
|
+
description: "Trigger a Plaid sync to update account balances",
|
|
21
|
+
parameters: z.object({}),
|
|
22
|
+
execute: async () => {
|
|
23
|
+
try {
|
|
24
|
+
const response = await client.post("/plaid_accounts/fetch");
|
|
25
|
+
return JSON.stringify(response, null, 2);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return formatErrorForMCP(error);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=plaid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaid.js","sourceRoot":"","sources":["../../src/tools/plaid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,UAAU,kBAAkB,CAChC,MAAe,EACf,MAAwB;IAExB,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iDAAiD;QAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GACZ,MAAM,MAAM,CAAC,GAAG,CAAwB,iBAAiB,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iDAAiD;QAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAU,uBAAuB,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,gBAAgB,QAkEzB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
import { createRecurringItemSchema, updateRecurringItemSchema, idSchema, } from "../schemas/index.js";
|
|
4
|
+
export function registerRecurringTools(server, client) {
|
|
5
|
+
server.addTool({
|
|
6
|
+
name: "getRecurringItems",
|
|
7
|
+
description: "List all recurring expense and income items",
|
|
8
|
+
parameters: z.object({}),
|
|
9
|
+
execute: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await client.get("/recurring_expenses");
|
|
12
|
+
return JSON.stringify(response, null, 2);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return formatErrorForMCP(error);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
server.addTool({
|
|
20
|
+
name: "createRecurringItem",
|
|
21
|
+
description: "Create a new recurring expense or income item",
|
|
22
|
+
parameters: createRecurringItemSchema,
|
|
23
|
+
execute: async (args) => {
|
|
24
|
+
try {
|
|
25
|
+
const item = await client.post("/recurring_expenses", args);
|
|
26
|
+
return JSON.stringify(item, null, 2);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return formatErrorForMCP(error);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
server.addTool({
|
|
34
|
+
name: "updateRecurringItem",
|
|
35
|
+
description: "Update an existing recurring item's properties",
|
|
36
|
+
parameters: idSchema.merge(updateRecurringItemSchema),
|
|
37
|
+
execute: async (args) => {
|
|
38
|
+
try {
|
|
39
|
+
const { id, ...updateData } = args;
|
|
40
|
+
const item = await client.put(`/recurring_expenses/${id}`, updateData);
|
|
41
|
+
return JSON.stringify(item, null, 2);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return formatErrorForMCP(error);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
server.addTool({
|
|
49
|
+
name: "deleteRecurringItem",
|
|
50
|
+
description: "Delete a recurring item by ID",
|
|
51
|
+
parameters: idSchema,
|
|
52
|
+
execute: async (args) => {
|
|
53
|
+
try {
|
|
54
|
+
await client.delete(`/recurring_expenses/${args.id}`);
|
|
55
|
+
return `Recurring item ${args.id} deleted successfully`;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return formatErrorForMCP(error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=recurring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,sBAAsB,CACpC,MAAe,EACf,MAAwB;IAExB,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,6CAA6C;QAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,qBAAqB,CACtB,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,+CAA+C;QAC5D,UAAU,EAAE,yBAAyB;QACrC,OAAO,EAAE,KAAK,EAAE,IAA+C,EAAE,EAAE;YACjE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC5B,qBAAqB,EACrB,IAAI,CACL,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,gDAAgD;QAC7D,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,IAA0E,EAAE,EAAE;YAC5F,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;gBACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,uBAAuB,EAAE,EAAE,EAC3B,UAAU,CACX,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,+BAA+B;QAC5C,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK,EAAE,IAA8B,EAAE,EAAE;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,OAAO,kBAAkB,IAAI,CAAC,EAAE,uBAAuB,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,QA4DzE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
import { createTagSchema, updateTagSchema, idSchema, } from "../schemas/index.js";
|
|
4
|
+
export function registerTagTools(server, client) {
|
|
5
|
+
server.addTool({
|
|
6
|
+
name: "getTags",
|
|
7
|
+
description: "List all transaction tags",
|
|
8
|
+
parameters: z.object({}),
|
|
9
|
+
execute: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await client.get("/tags");
|
|
12
|
+
return JSON.stringify(response, null, 2);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return formatErrorForMCP(error);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
server.addTool({
|
|
20
|
+
name: "createTag",
|
|
21
|
+
description: "Create a new tag for categorizing transactions",
|
|
22
|
+
parameters: createTagSchema,
|
|
23
|
+
execute: async (args) => {
|
|
24
|
+
try {
|
|
25
|
+
const tag = await client.post("/tags", args);
|
|
26
|
+
return JSON.stringify(tag, null, 2);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return formatErrorForMCP(error);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
server.addTool({
|
|
34
|
+
name: "updateTag",
|
|
35
|
+
description: "Update an existing tag's name",
|
|
36
|
+
parameters: idSchema.merge(updateTagSchema),
|
|
37
|
+
execute: async (args) => {
|
|
38
|
+
try {
|
|
39
|
+
const { id, ...updateData } = args;
|
|
40
|
+
const tag = await client.put(`/tags/${id}`, updateData);
|
|
41
|
+
return JSON.stringify(tag, null, 2);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return formatErrorForMCP(error);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
server.addTool({
|
|
49
|
+
name: "deleteTag",
|
|
50
|
+
description: "Delete a tag by ID",
|
|
51
|
+
parameters: idSchema,
|
|
52
|
+
execute: async (args) => {
|
|
53
|
+
try {
|
|
54
|
+
await client.delete(`/tags/${args.id}`);
|
|
55
|
+
return `Tag ${args.id} deleted successfully`;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return formatErrorForMCP(error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,eAAe,EACf,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,gBAAgB,CAAC,MAAe,EAAE,MAAwB;IACxE,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,2BAA2B;QACxC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAe,OAAO,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,gDAAgD;QAC7D,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAqC,EAAE,EAAE;YACvD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAe,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,+BAA+B;QAC5C,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,IAAgE,EAAE,EAAE;YAClF,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;gBACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,SAAS,EAAE,EAAE,EACb,UAAU,CACX,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oBAAoB;QACjC,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK,EAAE,IAA8B,EAAE,EAAE;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO,OAAO,IAAI,CAAC,EAAE,uBAAuB,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAapD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,gBAAgB,QAuKzB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
2
|
+
import { transactionFilterSchema, createTransactionSchema, updateTransactionSchema, bulkUpdateTransactionsSchema, createTransactionGroupSchema, unsplitTransactionsSchema, idSchema, } from "../schemas/index.js";
|
|
3
|
+
export function registerTransactionTools(server, client) {
|
|
4
|
+
server.addTool({
|
|
5
|
+
name: "getTransactions",
|
|
6
|
+
description: "List transactions with advanced filtering options including date range, category, tags, account, and status",
|
|
7
|
+
parameters: transactionFilterSchema,
|
|
8
|
+
execute: async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const response = await client.get("/transactions", args);
|
|
11
|
+
return JSON.stringify(response, null, 2);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return formatErrorForMCP(error);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
server.addTool({
|
|
19
|
+
name: "getTransaction",
|
|
20
|
+
description: "Get a single transaction by ID",
|
|
21
|
+
parameters: idSchema,
|
|
22
|
+
execute: async (args) => {
|
|
23
|
+
try {
|
|
24
|
+
const response = await client.get(`/transactions/${args.id}`);
|
|
25
|
+
return JSON.stringify(response, null, 2);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return formatErrorForMCP(error);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
server.addTool({
|
|
33
|
+
name: "createTransaction",
|
|
34
|
+
description: "Create a new transaction (expense, income, or transfer)",
|
|
35
|
+
parameters: createTransactionSchema,
|
|
36
|
+
execute: async (args) => {
|
|
37
|
+
try {
|
|
38
|
+
const transaction = await client.post("/transactions", args);
|
|
39
|
+
return JSON.stringify(transaction, null, 2);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return formatErrorForMCP(error);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
server.addTool({
|
|
47
|
+
name: "updateTransaction",
|
|
48
|
+
description: "Update an existing transaction's properties",
|
|
49
|
+
parameters: idSchema.merge(updateTransactionSchema),
|
|
50
|
+
execute: async (args) => {
|
|
51
|
+
try {
|
|
52
|
+
const { id, ...updateData } = args;
|
|
53
|
+
const transaction = await client.put(`/transactions/${id}`, updateData);
|
|
54
|
+
return JSON.stringify(transaction, null, 2);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return formatErrorForMCP(error);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
server.addTool({
|
|
62
|
+
name: "deleteTransaction",
|
|
63
|
+
description: "Delete a transaction by ID",
|
|
64
|
+
parameters: idSchema,
|
|
65
|
+
execute: async (args) => {
|
|
66
|
+
try {
|
|
67
|
+
await client.delete(`/transactions/${args.id}`);
|
|
68
|
+
return `Transaction ${args.id} deleted successfully`;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return formatErrorForMCP(error);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
server.addTool({
|
|
76
|
+
name: "bulkUpdateTransactions",
|
|
77
|
+
description: "Bulk update multiple transactions with the same changes (category, tags, notes, status)",
|
|
78
|
+
parameters: bulkUpdateTransactionsSchema,
|
|
79
|
+
execute: async (args) => {
|
|
80
|
+
try {
|
|
81
|
+
const result = await client.post("/transactions/bulk", args);
|
|
82
|
+
return JSON.stringify(result, null, 2);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return formatErrorForMCP(error);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
server.addTool({
|
|
90
|
+
name: "getTransactionGroup",
|
|
91
|
+
description: "Retrieve a transaction group with all child transactions",
|
|
92
|
+
parameters: idSchema,
|
|
93
|
+
execute: async (args) => {
|
|
94
|
+
try {
|
|
95
|
+
const response = await client.get("/transactions/group", { transaction_id: args.id });
|
|
96
|
+
return JSON.stringify(response, null, 2);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return formatErrorForMCP(error);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
server.addTool({
|
|
104
|
+
name: "createTransactionGroup",
|
|
105
|
+
description: "Group multiple transaction IDs under a single parent transaction",
|
|
106
|
+
parameters: createTransactionGroupSchema,
|
|
107
|
+
execute: async (args) => {
|
|
108
|
+
try {
|
|
109
|
+
const response = await client.post("/transactions/group", args);
|
|
110
|
+
return JSON.stringify(response, null, 2);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
return formatErrorForMCP(error);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
server.addTool({
|
|
118
|
+
name: "deleteTransactionGroup",
|
|
119
|
+
description: "Delete a transaction group, restoring individual transactions",
|
|
120
|
+
parameters: idSchema,
|
|
121
|
+
execute: async (args) => {
|
|
122
|
+
try {
|
|
123
|
+
await client.delete(`/transactions/group/${args.id}`);
|
|
124
|
+
return `Transaction group ${args.id} deleted successfully`;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return formatErrorForMCP(error);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
server.addTool({
|
|
132
|
+
name: "unsplitTransactions",
|
|
133
|
+
description: "Reverse a split, merging child transactions back into parent",
|
|
134
|
+
parameters: unsplitTransactionsSchema,
|
|
135
|
+
execute: async (args) => {
|
|
136
|
+
try {
|
|
137
|
+
const response = await client.post("/transactions/unsplit", args);
|
|
138
|
+
return JSON.stringify(response, null, 2);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return formatErrorForMCP(error);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/tools/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,QAc1E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatErrorForMCP } from "../utils/errors.js";
|
|
3
|
+
export function registerUserTools(server, client) {
|
|
4
|
+
server.addTool({
|
|
5
|
+
name: "getUser",
|
|
6
|
+
description: "Get the current user's account details including email, name, currency preferences, and settings",
|
|
7
|
+
parameters: z.object({}),
|
|
8
|
+
execute: async () => {
|
|
9
|
+
try {
|
|
10
|
+
const user = await client.get("/me");
|
|
11
|
+
return JSON.stringify(user, null, 2);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return formatErrorForMCP(error);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/tools/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,UAAU,iBAAiB,CAAC,MAAe,EAAE,MAAwB;IACvE,MAAM,CAAC,OAAO,CAAC;QACX,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,kGAAkG;QAC/G,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAO,KAAK,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|