@goodsamsoftware/freshbooks-mcp 1.0.2 → 1.0.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expense-update.d.ts","sourceRoot":"","sources":["../../../src/tools/expense/expense-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKhE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwC5B;;OAEG;mBAEM,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,UACvC,uBAAuB,GAC9B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"expense-update.d.ts","sourceRoot":"","sources":["../../../src/tools/expense/expense-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKhE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwC5B;;OAEG;mBAEM,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,UACvC,uBAAuB,GAC9B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;CAqHtD,CAAC"}
|
|
@@ -11,39 +11,39 @@ import { logger } from '../../utils/logger.js';
|
|
|
11
11
|
*/
|
|
12
12
|
export const expenseUpdateTool = {
|
|
13
13
|
name: 'expense_update',
|
|
14
|
-
description: `Update an existing expense in FreshBooks.
|
|
15
|
-
|
|
16
|
-
WHEN TO USE:
|
|
17
|
-
- User wants to modify an existing expense
|
|
18
|
-
- User says "update expense", "change expense", "edit expense"
|
|
19
|
-
- Correcting expense details or amounts
|
|
20
|
-
- Updating expense billing information
|
|
21
|
-
- Archiving/deleting expenses (via visState)
|
|
22
|
-
|
|
23
|
-
REQUIRED:
|
|
24
|
-
- accountId: FreshBooks account ID (get from auth_status if not specified)
|
|
25
|
-
- expenseId: ID of expense to update
|
|
26
|
-
|
|
27
|
-
OPTIONAL FIELDS (only include what needs to change):
|
|
28
|
-
- categoryId: Change expense category
|
|
29
|
-
- date: Update expense date
|
|
30
|
-
- amount: Modify expense amount/currency
|
|
31
|
-
- vendor: Change vendor name
|
|
32
|
-
- notes: Update description
|
|
33
|
-
- clientId: Change client billing
|
|
34
|
-
- projectId: Change project association
|
|
35
|
-
- markupPercent: Adjust markup percentage (0-100)
|
|
36
|
-
- taxName1/taxPercent1: Update first tax
|
|
37
|
-
- taxName2/taxPercent2: Update second tax
|
|
38
|
-
- visState: Archive or restore (0=active, 1=deleted, 2=archived)
|
|
39
|
-
|
|
40
|
-
EXAMPLE PROMPTS:
|
|
41
|
-
- "Update expense 12345 to $175.50"
|
|
42
|
-
- "Change the vendor on expense 67890 to 'Acme Corp'"
|
|
43
|
-
- "Update expense 11111: add client 99 for billing"
|
|
44
|
-
- "Archive expense 54321"
|
|
45
|
-
|
|
46
|
-
RETURNS:
|
|
14
|
+
description: `Update an existing expense in FreshBooks.
|
|
15
|
+
|
|
16
|
+
WHEN TO USE:
|
|
17
|
+
- User wants to modify an existing expense
|
|
18
|
+
- User says "update expense", "change expense", "edit expense"
|
|
19
|
+
- Correcting expense details or amounts
|
|
20
|
+
- Updating expense billing information
|
|
21
|
+
- Archiving/deleting expenses (via visState)
|
|
22
|
+
|
|
23
|
+
REQUIRED:
|
|
24
|
+
- accountId: FreshBooks account ID (get from auth_status if not specified)
|
|
25
|
+
- expenseId: ID of expense to update
|
|
26
|
+
|
|
27
|
+
OPTIONAL FIELDS (only include what needs to change):
|
|
28
|
+
- categoryId: Change expense category
|
|
29
|
+
- date: Update expense date
|
|
30
|
+
- amount: Modify expense amount/currency
|
|
31
|
+
- vendor: Change vendor name
|
|
32
|
+
- notes: Update description
|
|
33
|
+
- clientId: Change client billing
|
|
34
|
+
- projectId: Change project association
|
|
35
|
+
- markupPercent: Adjust markup percentage (0-100)
|
|
36
|
+
- taxName1/taxPercent1: Update first tax
|
|
37
|
+
- taxName2/taxPercent2: Update second tax
|
|
38
|
+
- visState: Archive or restore (0=active, 1=deleted, 2=archived)
|
|
39
|
+
|
|
40
|
+
EXAMPLE PROMPTS:
|
|
41
|
+
- "Update expense 12345 to $175.50"
|
|
42
|
+
- "Change the vendor on expense 67890 to 'Acme Corp'"
|
|
43
|
+
- "Update expense 11111: add client 99 for billing"
|
|
44
|
+
- "Archive expense 54321"
|
|
45
|
+
|
|
46
|
+
RETURNS:
|
|
47
47
|
Updated expense with all current details.`,
|
|
48
48
|
inputSchema: ExpenseUpdateInputSchema,
|
|
49
49
|
outputSchema: ExpenseSingleOutputSchema,
|
|
@@ -73,9 +73,27 @@ Updated expense with all current details.`,
|
|
|
73
73
|
}
|
|
74
74
|
// Extract expense from response (FreshBooks returns { expense: { ... } })
|
|
75
75
|
const existingExpense = existingResponse.data.expense ?? existingResponse.data;
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
76
|
+
const existing = existingExpense;
|
|
77
|
+
// Build expense update object with ONLY updatable fields
|
|
78
|
+
// Do NOT spread the entire object - API returns extra read-only fields
|
|
79
|
+
// (accountId, isDuplicate, profileId, bankName, status, updated, hasReceipt, etc.)
|
|
80
|
+
// that cause the SDK to hang if included in update requests
|
|
81
|
+
const expense = {
|
|
82
|
+
categoryId: existing.categoryId,
|
|
83
|
+
staffId: existing.staffId,
|
|
84
|
+
date: existing.date,
|
|
85
|
+
amount: existing.amount,
|
|
86
|
+
vendor: existing.vendor,
|
|
87
|
+
notes: existing.notes,
|
|
88
|
+
clientId: existing.clientId,
|
|
89
|
+
projectId: existing.projectId,
|
|
90
|
+
markupPercent: existing.markupPercent,
|
|
91
|
+
taxName1: existing.taxName1,
|
|
92
|
+
taxPercent1: existing.taxPercent1,
|
|
93
|
+
taxName2: existing.taxName2,
|
|
94
|
+
taxPercent2: existing.taxPercent2,
|
|
95
|
+
visState: existing.visState,
|
|
96
|
+
};
|
|
79
97
|
// Overlay only the fields user provided
|
|
80
98
|
if (updateData.categoryId !== undefined)
|
|
81
99
|
expense.categoryId = updateData.categoryId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expense-update.js","sourceRoot":"","sources":["../../../src/tools/expense/expense-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAiC2B;IAExC,WAAW,EAAE,wBAAwB;IACrC,YAAY,EAAE,yBAAyB;IAEvC;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAA+C,EAC/C,MAA+B;QAE/B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CACtC,gBAAgB,EAChB,KAAK,EACH,KAA+C,EAC/C,QAAqB,EACrB,EAAE;YACF,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;YAEtD,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;gBAC/B,SAAS;gBACT,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aAChC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,gBAAgB,EAChB,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACjB,+DAA+D;gBAC/D,qEAAqE;gBACrE,0CAA0C;gBAC1C,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEtF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;oBACzB,MAAM,gBAAgB,CAAC,KAAK,CAAC;gBAC/B,CAAC;gBAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;oBAC3B,MAAM,YAAY,CAAC,mBAAmB,CACpC,SAAS,EACT,SAAS,EACT;wBACE,SAAS;qBACV,CACF,CAAC;gBACJ,CAAC;gBAED,0EAA0E;gBAC1E,MAAM,eAAe,GAAI,gBAAgB,CAAC,IAA8B,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"expense-update.js","sourceRoot":"","sources":["../../../src/tools/expense/expense-update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodsamsoftware/freshbooks-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "FreshBooks MCP server providing 1:1 parity with the FreshBooks Node.js SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"bin": {
|
|
41
|
-
"freshbooks-mcp": "dist/server.js"
|
|
41
|
+
"freshbooks-mcp": "./dist/server.js"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"dist",
|