@frihet/mcp-server 1.2.3 → 1.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/README.md +124 -40
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +10 -0
- package/dist/client.js.map +1 -1
- package/dist/index.js +17 -3
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +46 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +90 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +28 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +81 -0
- package/dist/metrics.js.map +1 -0
- package/dist/tools/clients.d.ts.map +1 -1
- package/dist/tools/clients.js +36 -61
- package/dist/tools/clients.js.map +1 -1
- package/dist/tools/expenses.d.ts.map +1 -1
- package/dist/tools/expenses.js +36 -61
- package/dist/tools/expenses.js.map +1 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +45 -75
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/products.d.ts.map +1 -1
- package/dist/tools/products.js +36 -61
- package/dist/tools/products.js.map +1 -1
- package/dist/tools/quotes.d.ts.map +1 -1
- package/dist/tools/quotes.js +36 -61
- package/dist/tools/quotes.js.map +1 -1
- package/dist/tools/shared.d.ts +23 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +54 -5
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +36 -61
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +23 -14
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory tool usage metrics for the Frihet MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-tool call counts, error counts, and average duration.
|
|
5
|
+
* Metrics are logged on graceful shutdown (SIGINT/SIGTERM in Node.js)
|
|
6
|
+
* or can be retrieved at any time via getMetrics().
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Record a completed tool call.
|
|
10
|
+
*/
|
|
11
|
+
export declare function recordToolCall(tool: string, durationMs: number, success: boolean): void;
|
|
12
|
+
/**
|
|
13
|
+
* Get current metrics snapshot.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getMetrics(): {
|
|
16
|
+
tools: Record<string, {
|
|
17
|
+
calls: number;
|
|
18
|
+
errors: number;
|
|
19
|
+
avgMs: number;
|
|
20
|
+
}>;
|
|
21
|
+
uptime: number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Register shutdown handlers (Node.js only).
|
|
25
|
+
* In Workers, metrics are per-request and logged via console automatically.
|
|
26
|
+
*/
|
|
27
|
+
export declare function registerShutdownHook(): void;
|
|
28
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,EAAE,MAAM,CAAC;CAChB,CAeA;AA4BD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C"}
|
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory tool usage metrics for the Frihet MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-tool call counts, error counts, and average duration.
|
|
5
|
+
* Metrics are logged on graceful shutdown (SIGINT/SIGTERM in Node.js)
|
|
6
|
+
* or can be retrieved at any time via getMetrics().
|
|
7
|
+
*/
|
|
8
|
+
import { log } from "./logger.js";
|
|
9
|
+
const toolStats = new Map();
|
|
10
|
+
const startTime = Date.now();
|
|
11
|
+
/**
|
|
12
|
+
* Record a completed tool call.
|
|
13
|
+
*/
|
|
14
|
+
export function recordToolCall(tool, durationMs, success) {
|
|
15
|
+
let stats = toolStats.get(tool);
|
|
16
|
+
if (!stats) {
|
|
17
|
+
stats = { calls: 0, errors: 0, totalMs: 0 };
|
|
18
|
+
toolStats.set(tool, stats);
|
|
19
|
+
}
|
|
20
|
+
stats.calls++;
|
|
21
|
+
stats.totalMs += durationMs;
|
|
22
|
+
if (!success) {
|
|
23
|
+
stats.errors++;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get current metrics snapshot.
|
|
28
|
+
*/
|
|
29
|
+
export function getMetrics() {
|
|
30
|
+
const tools = {};
|
|
31
|
+
for (const [name, stats] of toolStats) {
|
|
32
|
+
tools[name] = {
|
|
33
|
+
calls: stats.calls,
|
|
34
|
+
errors: stats.errors,
|
|
35
|
+
avgMs: stats.calls > 0 ? Math.round(stats.totalMs / stats.calls) : 0,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
tools,
|
|
40
|
+
uptime: Math.round((Date.now() - startTime) / 1000),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Log the final metrics summary. Called on graceful shutdown.
|
|
45
|
+
*/
|
|
46
|
+
function logMetricsSummary() {
|
|
47
|
+
const metrics = getMetrics();
|
|
48
|
+
const totalCalls = Object.values(metrics.tools).reduce((sum, t) => sum + t.calls, 0);
|
|
49
|
+
const totalErrors = Object.values(metrics.tools).reduce((sum, t) => sum + t.errors, 0);
|
|
50
|
+
if (totalCalls === 0) {
|
|
51
|
+
log({
|
|
52
|
+
level: "info",
|
|
53
|
+
message: `Shutdown after ${metrics.uptime}s — no tool calls recorded`,
|
|
54
|
+
operation: "shutdown_metrics",
|
|
55
|
+
metadata: { uptime: metrics.uptime },
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
log({
|
|
60
|
+
level: "info",
|
|
61
|
+
message: `Shutdown after ${metrics.uptime}s — ${totalCalls} calls, ${totalErrors} errors`,
|
|
62
|
+
operation: "shutdown_metrics",
|
|
63
|
+
metadata: metrics,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Register shutdown handlers (Node.js only).
|
|
68
|
+
* In Workers, metrics are per-request and logged via console automatically.
|
|
69
|
+
*/
|
|
70
|
+
export function registerShutdownHook() {
|
|
71
|
+
if (typeof process !== "undefined" && process?.on && process?.exit) {
|
|
72
|
+
const exit = process.exit;
|
|
73
|
+
const handler = () => {
|
|
74
|
+
logMetricsSummary();
|
|
75
|
+
exit(0);
|
|
76
|
+
};
|
|
77
|
+
process.on("SIGINT", handler);
|
|
78
|
+
process.on("SIGTERM", handler);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAa5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAa5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAwIlF"}
|
package/dist/tools/clients.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Client tools for the Frihet MCP server.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
|
-
import {
|
|
5
|
+
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, deleteResultOutput, clientItemOutput } from "./shared.js";
|
|
6
6
|
const addressSchema = z
|
|
7
7
|
.object({
|
|
8
8
|
street: z.string().optional().describe("Street address / Direccion"),
|
|
@@ -26,18 +26,13 @@ export function registerClientTools(server, client) {
|
|
|
26
26
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
27
27
|
},
|
|
28
28
|
outputSchema: paginatedOutput(clientItemOutput),
|
|
29
|
-
}, async ({ limit, offset }) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
return handleToolError(error);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
29
|
+
}, async ({ limit, offset }) => withToolLogging("list_clients", async () => {
|
|
30
|
+
const result = await client.listClients({ limit, offset });
|
|
31
|
+
return {
|
|
32
|
+
content: [listContent(formatPaginatedResponse("clients", result))],
|
|
33
|
+
structuredContent: result,
|
|
34
|
+
};
|
|
35
|
+
}));
|
|
41
36
|
// -- get_client --
|
|
42
37
|
server.registerTool("get_client", {
|
|
43
38
|
title: "Get Client",
|
|
@@ -48,18 +43,13 @@ export function registerClientTools(server, client) {
|
|
|
48
43
|
id: z.string().describe("Client ID / ID del cliente"),
|
|
49
44
|
},
|
|
50
45
|
outputSchema: clientItemOutput,
|
|
51
|
-
}, async ({ id }) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
return handleToolError(error);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
46
|
+
}, async ({ id }) => withToolLogging("get_client", async () => {
|
|
47
|
+
const result = await client.getClient(id);
|
|
48
|
+
return {
|
|
49
|
+
content: [getContent(formatRecord("Client", result))],
|
|
50
|
+
structuredContent: result,
|
|
51
|
+
};
|
|
52
|
+
}));
|
|
63
53
|
// -- create_client --
|
|
64
54
|
server.registerTool("create_client", {
|
|
65
55
|
title: "Create Client",
|
|
@@ -76,18 +66,13 @@ export function registerClientTools(server, client) {
|
|
|
76
66
|
address: addressSchema,
|
|
77
67
|
},
|
|
78
68
|
outputSchema: clientItemOutput,
|
|
79
|
-
}, async (input) => {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
return handleToolError(error);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
69
|
+
}, async (input) => withToolLogging("create_client", async () => {
|
|
70
|
+
const result = await client.createClient(input);
|
|
71
|
+
return {
|
|
72
|
+
content: [mutateContent(formatRecord("Client created", result))],
|
|
73
|
+
structuredContent: result,
|
|
74
|
+
};
|
|
75
|
+
}));
|
|
91
76
|
// -- update_client --
|
|
92
77
|
server.registerTool("update_client", {
|
|
93
78
|
title: "Update Client",
|
|
@@ -103,18 +88,13 @@ export function registerClientTools(server, client) {
|
|
|
103
88
|
address: addressSchema,
|
|
104
89
|
},
|
|
105
90
|
outputSchema: clientItemOutput,
|
|
106
|
-
}, async ({ id, ...data }) => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
return handleToolError(error);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
91
|
+
}, async ({ id, ...data }) => withToolLogging("update_client", async () => {
|
|
92
|
+
const result = await client.updateClient(id, data);
|
|
93
|
+
return {
|
|
94
|
+
content: [mutateContent(formatRecord("Client updated", result))],
|
|
95
|
+
structuredContent: result,
|
|
96
|
+
};
|
|
97
|
+
}));
|
|
118
98
|
// -- delete_client --
|
|
119
99
|
server.registerTool("delete_client", {
|
|
120
100
|
title: "Delete Client",
|
|
@@ -127,17 +107,12 @@ export function registerClientTools(server, client) {
|
|
|
127
107
|
id: z.string().describe("Client ID / ID del cliente"),
|
|
128
108
|
},
|
|
129
109
|
outputSchema: deleteResultOutput,
|
|
130
|
-
}, async ({ id }) => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
return handleToolError(error);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
110
|
+
}, async ({ id }) => withToolLogging("delete_client", async () => {
|
|
111
|
+
await client.deleteClient(id);
|
|
112
|
+
return {
|
|
113
|
+
content: [mutateContent(`Client ${id} deleted successfully. / Cliente ${id} eliminado correctamente.`)],
|
|
114
|
+
structuredContent: { success: true, id },
|
|
115
|
+
};
|
|
116
|
+
}));
|
|
142
117
|
}
|
|
143
118
|
//# sourceMappingURL=clients.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvQ,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACrE,CAAC;KACD,QAAQ,EAAE;KACV,QAAQ,CAAC,wCAAwC,CAAC,CAAC;AAEtD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,qBAAqB;IAErB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,uDAAuD;YACvD,gDAAgD;YAChD,sDAAsD;YACtD,0DAA0D;QAC5D,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACvG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAC/E;QACD,YAAY,EAAE,eAAe,CAAC,gBAAgB,CAAC;KAChD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expenses.d.ts","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"expenses.d.ts","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+InF"}
|
package/dist/tools/expenses.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Expense tools for the Frihet MCP server.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
|
-
import {
|
|
5
|
+
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, deleteResultOutput, expenseItemOutput } from "./shared.js";
|
|
6
6
|
export function registerExpenseTools(server, client) {
|
|
7
7
|
// -- list_expenses --
|
|
8
8
|
server.registerTool("list_expenses", {
|
|
@@ -15,18 +15,13 @@ export function registerExpenseTools(server, client) {
|
|
|
15
15
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
16
16
|
},
|
|
17
17
|
outputSchema: paginatedOutput(expenseItemOutput),
|
|
18
|
-
}, async ({ limit, offset }) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
return handleToolError(error);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
18
|
+
}, async ({ limit, offset }) => withToolLogging("list_expenses", async () => {
|
|
19
|
+
const result = await client.listExpenses({ limit, offset });
|
|
20
|
+
return {
|
|
21
|
+
content: [listContent(formatPaginatedResponse("expenses", result))],
|
|
22
|
+
structuredContent: result,
|
|
23
|
+
};
|
|
24
|
+
}));
|
|
30
25
|
// -- get_expense --
|
|
31
26
|
server.registerTool("get_expense", {
|
|
32
27
|
title: "Get Expense",
|
|
@@ -37,18 +32,13 @@ export function registerExpenseTools(server, client) {
|
|
|
37
32
|
id: z.string().describe("Expense ID / ID del gasto"),
|
|
38
33
|
},
|
|
39
34
|
outputSchema: expenseItemOutput,
|
|
40
|
-
}, async ({ id }) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
return handleToolError(error);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
35
|
+
}, async ({ id }) => withToolLogging("get_expense", async () => {
|
|
36
|
+
const result = await client.getExpense(id);
|
|
37
|
+
return {
|
|
38
|
+
content: [getContent(formatRecord("Expense", result))],
|
|
39
|
+
structuredContent: result,
|
|
40
|
+
};
|
|
41
|
+
}));
|
|
52
42
|
// -- create_expense --
|
|
53
43
|
server.registerTool("create_expense", {
|
|
54
44
|
title: "Create Expense",
|
|
@@ -75,18 +65,13 @@ export function registerExpenseTools(server, client) {
|
|
|
75
65
|
.describe("Whether the expense is tax deductible / Si el gasto es deducible fiscalmente"),
|
|
76
66
|
},
|
|
77
67
|
outputSchema: expenseItemOutput,
|
|
78
|
-
}, async (input) => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
return handleToolError(error);
|
|
88
|
-
}
|
|
89
|
-
});
|
|
68
|
+
}, async (input) => withToolLogging("create_expense", async () => {
|
|
69
|
+
const result = await client.createExpense(input);
|
|
70
|
+
return {
|
|
71
|
+
content: [mutateContent(formatRecord("Expense created", result))],
|
|
72
|
+
structuredContent: result,
|
|
73
|
+
};
|
|
74
|
+
}));
|
|
90
75
|
// -- update_expense --
|
|
91
76
|
server.registerTool("update_expense", {
|
|
92
77
|
title: "Update Expense",
|
|
@@ -103,18 +88,13 @@ export function registerExpenseTools(server, client) {
|
|
|
103
88
|
taxDeductible: z.boolean().optional().describe("Tax deductible / Deducible"),
|
|
104
89
|
},
|
|
105
90
|
outputSchema: expenseItemOutput,
|
|
106
|
-
}, async ({ id, ...data }) => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
return handleToolError(error);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
91
|
+
}, async ({ id, ...data }) => withToolLogging("update_expense", async () => {
|
|
92
|
+
const result = await client.updateExpense(id, data);
|
|
93
|
+
return {
|
|
94
|
+
content: [mutateContent(formatRecord("Expense updated", result))],
|
|
95
|
+
structuredContent: result,
|
|
96
|
+
};
|
|
97
|
+
}));
|
|
118
98
|
// -- delete_expense --
|
|
119
99
|
server.registerTool("delete_expense", {
|
|
120
100
|
title: "Delete Expense",
|
|
@@ -125,17 +105,12 @@ export function registerExpenseTools(server, client) {
|
|
|
125
105
|
id: z.string().describe("Expense ID / ID del gasto"),
|
|
126
106
|
},
|
|
127
107
|
outputSchema: deleteResultOutput,
|
|
128
|
-
}, async ({ id }) => {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
return handleToolError(error);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
108
|
+
}, async ({ id }) => withToolLogging("delete_expense", async () => {
|
|
109
|
+
await client.deleteExpense(id);
|
|
110
|
+
return {
|
|
111
|
+
content: [mutateContent(`Expense ${id} deleted successfully. / Gasto ${id} eliminado correctamente.`)],
|
|
112
|
+
structuredContent: { success: true, id },
|
|
113
|
+
};
|
|
114
|
+
}));
|
|
140
115
|
}
|
|
141
116
|
//# sourceMappingURL=expenses.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expenses.js","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExQ,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAqB;IAC3E,sBAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,8CAA8C;YAC9C,mDAAmD;QACrD,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACvG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAC/E;QACD,YAAY,EAAE,eAAe,CAAC,iBAAiB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"expenses.js","sourceRoot":"","sources":["../../src/tools/expenses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAS5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAS5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAuMnF"}
|
package/dist/tools/invoices.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Invoice tools for the Frihet MCP server.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
|
-
import {
|
|
5
|
+
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, deleteResultOutput, invoiceItemOutput } from "./shared.js";
|
|
6
6
|
const invoiceItemSchema = z.object({
|
|
7
7
|
description: z.string().describe("Description of the line item / Descripcion del concepto"),
|
|
8
8
|
quantity: z.number().describe("Quantity / Cantidad"),
|
|
@@ -33,18 +33,13 @@ export function registerInvoiceTools(server, client) {
|
|
|
33
33
|
.describe("Number of results to skip / Resultados a saltar"),
|
|
34
34
|
},
|
|
35
35
|
outputSchema: paginatedOutput(invoiceItemOutput),
|
|
36
|
-
}, async ({ limit, offset }) => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
return handleToolError(error);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
36
|
+
}, async ({ limit, offset }) => withToolLogging("list_invoices", async () => {
|
|
37
|
+
const result = await client.listInvoices({ limit, offset });
|
|
38
|
+
return {
|
|
39
|
+
content: [listContent(formatPaginatedResponse("invoices", result))],
|
|
40
|
+
structuredContent: result,
|
|
41
|
+
};
|
|
42
|
+
}));
|
|
48
43
|
// -- get_invoice --
|
|
49
44
|
server.registerTool("get_invoice", {
|
|
50
45
|
title: "Get Invoice",
|
|
@@ -55,18 +50,13 @@ export function registerInvoiceTools(server, client) {
|
|
|
55
50
|
id: z.string().describe("Invoice ID / ID de la factura"),
|
|
56
51
|
},
|
|
57
52
|
outputSchema: invoiceItemOutput,
|
|
58
|
-
}, async ({ id }) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
return handleToolError(error);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
53
|
+
}, async ({ id }) => withToolLogging("get_invoice", async () => {
|
|
54
|
+
const result = await client.getInvoice(id);
|
|
55
|
+
return {
|
|
56
|
+
content: [getContent(formatRecord("Invoice", result))],
|
|
57
|
+
structuredContent: result,
|
|
58
|
+
};
|
|
59
|
+
}));
|
|
70
60
|
// -- create_invoice --
|
|
71
61
|
server.registerTool("create_invoice", {
|
|
72
62
|
title: "Create Invoice",
|
|
@@ -101,18 +91,13 @@ export function registerInvoiceTools(server, client) {
|
|
|
101
91
|
.describe("Tax rate percentage (e.g. 21 for 21% IVA) / Porcentaje de impuesto"),
|
|
102
92
|
},
|
|
103
93
|
outputSchema: invoiceItemOutput,
|
|
104
|
-
}, async (input) => {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
return handleToolError(error);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
94
|
+
}, async (input) => withToolLogging("create_invoice", async () => {
|
|
95
|
+
const result = await client.createInvoice(input);
|
|
96
|
+
return {
|
|
97
|
+
content: [mutateContent(formatRecord("Invoice created", result))],
|
|
98
|
+
structuredContent: result,
|
|
99
|
+
};
|
|
100
|
+
}));
|
|
116
101
|
// -- update_invoice --
|
|
117
102
|
server.registerTool("update_invoice", {
|
|
118
103
|
title: "Update Invoice",
|
|
@@ -136,18 +121,13 @@ export function registerInvoiceTools(server, client) {
|
|
|
136
121
|
taxRate: z.number().min(0).max(100).optional().describe("Tax rate % / IVA %"),
|
|
137
122
|
},
|
|
138
123
|
outputSchema: invoiceItemOutput,
|
|
139
|
-
}, async ({ id, ...data }) => {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
return handleToolError(error);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
124
|
+
}, async ({ id, ...data }) => withToolLogging("update_invoice", async () => {
|
|
125
|
+
const result = await client.updateInvoice(id, data);
|
|
126
|
+
return {
|
|
127
|
+
content: [mutateContent(formatRecord("Invoice updated", result))],
|
|
128
|
+
structuredContent: result,
|
|
129
|
+
};
|
|
130
|
+
}));
|
|
151
131
|
// -- delete_invoice --
|
|
152
132
|
server.registerTool("delete_invoice", {
|
|
153
133
|
title: "Delete Invoice",
|
|
@@ -158,18 +138,13 @@ export function registerInvoiceTools(server, client) {
|
|
|
158
138
|
id: z.string().describe("Invoice ID / ID de la factura"),
|
|
159
139
|
},
|
|
160
140
|
outputSchema: deleteResultOutput,
|
|
161
|
-
}, async ({ id }) => {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
return handleToolError(error);
|
|
171
|
-
}
|
|
172
|
-
});
|
|
141
|
+
}, async ({ id }) => withToolLogging("delete_invoice", async () => {
|
|
142
|
+
await client.deleteInvoice(id);
|
|
143
|
+
return {
|
|
144
|
+
content: [mutateContent(`Invoice ${id} deleted successfully. / Factura ${id} eliminada correctamente.`)],
|
|
145
|
+
structuredContent: { success: true, id },
|
|
146
|
+
};
|
|
147
|
+
}));
|
|
173
148
|
// -- search_invoices --
|
|
174
149
|
server.registerTool("search_invoices", {
|
|
175
150
|
title: "Search Invoices",
|
|
@@ -182,19 +157,14 @@ export function registerInvoiceTools(server, client) {
|
|
|
182
157
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
183
158
|
},
|
|
184
159
|
outputSchema: paginatedOutput(invoiceItemOutput),
|
|
185
|
-
}, async ({ clientName, limit, offset }) => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
return handleToolError(error);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
160
|
+
}, async ({ clientName, limit, offset }) => withToolLogging("search_invoices", async () => {
|
|
161
|
+
const result = await client.searchInvoices(clientName, { limit, offset });
|
|
162
|
+
return {
|
|
163
|
+
content: [
|
|
164
|
+
listContent(formatPaginatedResponse(`invoices matching "${clientName}"`, result)),
|
|
165
|
+
],
|
|
166
|
+
structuredContent: result,
|
|
167
|
+
};
|
|
168
|
+
}));
|
|
199
169
|
}
|
|
200
170
|
//# sourceMappingURL=invoices.js.map
|