@frihet/mcp-server 1.1.0 → 1.2.1
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 +11 -5
- package/dist/index.js +30 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/register-all.d.ts +10 -0
- package/dist/prompts/register-all.d.ts.map +1 -0
- package/dist/prompts/register-all.js +271 -0
- package/dist/prompts/register-all.js.map +1 -0
- package/dist/resources/register-all.d.ts +12 -0
- package/dist/resources/register-all.d.ts.map +1 -0
- package/dist/resources/register-all.js +345 -0
- package/dist/resources/register-all.js.map +1 -0
- package/dist/tools/clients.d.ts.map +1 -1
- package/dist/tools/clients.js +16 -6
- package/dist/tools/clients.js.map +1 -1
- package/dist/tools/expenses.d.ts.map +1 -1
- package/dist/tools/expenses.js +16 -6
- package/dist/tools/expenses.js.map +1 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +19 -10
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/products.d.ts.map +1 -1
- package/dist/tools/products.js +16 -6
- package/dist/tools/products.js.map +1 -1
- package/dist/tools/quotes.d.ts.map +1 -1
- package/dist/tools/quotes.js +16 -6
- package/dist/tools/quotes.js.map +1 -1
- package/dist/tools/shared.d.ts +120 -6
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +146 -5
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +16 -6
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static MCP Resources for the Frihet ERP server.
|
|
3
|
+
*
|
|
4
|
+
* Resources are read-only reference data that LLMs can access without making
|
|
5
|
+
* API calls. They encode domain knowledge (tax rates, deadlines, categories)
|
|
6
|
+
* that would otherwise require the user to explain every time.
|
|
7
|
+
*
|
|
8
|
+
* All resources use the `frihet://` URI scheme.
|
|
9
|
+
*/
|
|
10
|
+
/* ------------------------------------------------------------------ */
|
|
11
|
+
/* Static data */
|
|
12
|
+
/* ------------------------------------------------------------------ */
|
|
13
|
+
const API_SCHEMA_SUMMARY = `Frihet ERP REST API — OpenAPI 3.1
|
|
14
|
+
Base URL: https://api.frihet.io/v1
|
|
15
|
+
Docs: https://docs.frihet.io/desarrolladores/api-reference
|
|
16
|
+
|
|
17
|
+
Authentication:
|
|
18
|
+
Header: X-API-Key
|
|
19
|
+
Format: fri_<key>
|
|
20
|
+
|
|
21
|
+
Rate limits:
|
|
22
|
+
100 requests/minute per API key
|
|
23
|
+
Burst: 10 requests/second
|
|
24
|
+
Response header: Retry-After (seconds) on 429
|
|
25
|
+
|
|
26
|
+
Endpoints:
|
|
27
|
+
GET /invoices — List invoices (paginated)
|
|
28
|
+
GET /invoices/:id — Get invoice by ID
|
|
29
|
+
POST /invoices — Create invoice
|
|
30
|
+
PUT /invoices/:id — Update invoice
|
|
31
|
+
DELETE /invoices/:id — Delete invoice
|
|
32
|
+
|
|
33
|
+
GET /expenses — List expenses (paginated)
|
|
34
|
+
GET /expenses/:id — Get expense by ID
|
|
35
|
+
POST /expenses — Create expense
|
|
36
|
+
PUT /expenses/:id — Update expense
|
|
37
|
+
DELETE /expenses/:id — Delete expense
|
|
38
|
+
|
|
39
|
+
GET /clients — List clients (paginated)
|
|
40
|
+
GET /clients/:id — Get client by ID
|
|
41
|
+
POST /clients — Create client
|
|
42
|
+
PUT /clients/:id — Update client
|
|
43
|
+
DELETE /clients/:id — Delete client
|
|
44
|
+
|
|
45
|
+
GET /products — List products (paginated)
|
|
46
|
+
GET /products/:id — Get product by ID
|
|
47
|
+
POST /products — Create product
|
|
48
|
+
PUT /products/:id — Update product
|
|
49
|
+
DELETE /products/:id — Delete product
|
|
50
|
+
|
|
51
|
+
GET /quotes — List quotes (paginated)
|
|
52
|
+
GET /quotes/:id — Get quote by ID
|
|
53
|
+
POST /quotes — Create quote
|
|
54
|
+
PUT /quotes/:id — Update quote
|
|
55
|
+
DELETE /quotes/:id — Delete quote
|
|
56
|
+
|
|
57
|
+
GET /webhooks — List webhooks (paginated)
|
|
58
|
+
GET /webhooks/:id — Get webhook by ID
|
|
59
|
+
POST /webhooks — Create webhook
|
|
60
|
+
PUT /webhooks/:id — Update webhook
|
|
61
|
+
DELETE /webhooks/:id — Delete webhook
|
|
62
|
+
|
|
63
|
+
Pagination:
|
|
64
|
+
Query params: limit (1-100, default 50), offset (default 0)
|
|
65
|
+
Response: { data: [...], total: number, limit: number, offset: number }
|
|
66
|
+
|
|
67
|
+
Error responses:
|
|
68
|
+
400 — Bad request (validation error)
|
|
69
|
+
401 — Invalid or missing API key
|
|
70
|
+
403 — Insufficient permissions
|
|
71
|
+
404 — Resource not found
|
|
72
|
+
429 — Rate limit exceeded
|
|
73
|
+
500 — Internal server error
|
|
74
|
+
|
|
75
|
+
Content-Type: application/json
|
|
76
|
+
All monetary values in EUR (cents not used — decimal euros).
|
|
77
|
+
Dates in ISO 8601 format (YYYY-MM-DD or full datetime).`;
|
|
78
|
+
const TAX_RATES = `Spanish Tax Rates by Fiscal Zone
|
|
79
|
+
================================
|
|
80
|
+
|
|
81
|
+
PENINSULA & BALEARIC ISLANDS — IVA (Impuesto sobre el Valor Añadido)
|
|
82
|
+
General: 21% — Most goods and services
|
|
83
|
+
Reduced: 10% — Food, transport, hospitality, renovation
|
|
84
|
+
Super-reduced: 4% — Bread, milk, eggs, fruit, vegetables, books, medicines, wheelchairs
|
|
85
|
+
Exempt: 0% — Education, healthcare, financial services, insurance, postal
|
|
86
|
+
|
|
87
|
+
CANARY ISLANDS — IGIC (Impuesto General Indirecto Canario)
|
|
88
|
+
General: 7% — Most goods and services
|
|
89
|
+
Reduced: 3% — Food, water, transport, hospitality
|
|
90
|
+
Zero: 0% — Basic food (bread, milk, eggs, fruit, vegetables), books, medicines
|
|
91
|
+
Increased: 9.5% — Vehicles, jewelry, electronics >€1,000
|
|
92
|
+
Special: 15% — Tobacco
|
|
93
|
+
Exempt: 0% — Education, healthcare, financial services
|
|
94
|
+
|
|
95
|
+
CEUTA & MELILLA — IPSI (Impuesto sobre la Producción, los Servicios y la Importación)
|
|
96
|
+
General: 10% — Most goods and services
|
|
97
|
+
Reduced: 2% — Basic food, water
|
|
98
|
+
Intermediate: 5% — Other food, hospitality
|
|
99
|
+
Increased: 8% — Vehicles, electronics
|
|
100
|
+
Special: 10% — Tobacco, alcohol
|
|
101
|
+
|
|
102
|
+
EU INTRA-COMMUNITY — Reverse Charge
|
|
103
|
+
B2B: 0% — Buyer self-assesses VAT in their country (reverse charge / inversión del sujeto pasivo)
|
|
104
|
+
B2C: Destination country rate — Via OSS (One-Stop Shop) if >€10,000/year
|
|
105
|
+
|
|
106
|
+
INTERNATIONAL (outside EU)
|
|
107
|
+
Exports: 0% — Exempt with right to deduction (exención plena)
|
|
108
|
+
Imports: Destination country duties + VAT at border
|
|
109
|
+
|
|
110
|
+
WITHHOLDING TAX — IRPF (professionals / autónomos)
|
|
111
|
+
Standard: 15% — Retention on professional invoices
|
|
112
|
+
New freelancer: 7% — First 3 full calendar years of activity
|
|
113
|
+
Applies to: Professional services invoiced to other businesses (B2B)
|
|
114
|
+
|
|
115
|
+
SPECIAL REGIMES
|
|
116
|
+
Equivalence surcharge (recargo de equivalencia): +5.2% / +1.4% / +0.5% on IVA rates
|
|
117
|
+
Applies to: Retail businesses (comercio minorista) buying from wholesalers
|
|
118
|
+
Simplified regime: Fixed quarterly quotas based on activity modules
|
|
119
|
+
Agriculture: 12% / 10.5% flat-rate compensation`;
|
|
120
|
+
const TAX_CALENDAR = `Spanish Quarterly Tax Calendar
|
|
121
|
+
===============================
|
|
122
|
+
|
|
123
|
+
All deadlines apply to the corresponding fiscal quarter unless noted.
|
|
124
|
+
|
|
125
|
+
Q1 (January–March) — File by April 20
|
|
126
|
+
Modelo 303 — IVA quarterly return (autoliquidación trimestral IVA)
|
|
127
|
+
Modelo 130 — IRPF quarterly advance payment (pago fraccionado IRPF)
|
|
128
|
+
Modelo 349 — Intra-community operations summary (if applicable)
|
|
129
|
+
Modelo 115 — Withholding on rental payments (if applicable)
|
|
130
|
+
|
|
131
|
+
Q2 (April–June) — File by July 20
|
|
132
|
+
Modelo 303 — IVA quarterly return
|
|
133
|
+
Modelo 130 — IRPF quarterly advance payment
|
|
134
|
+
Modelo 349 — Intra-community operations (if applicable)
|
|
135
|
+
Modelo 115 — Rental withholdings (if applicable)
|
|
136
|
+
|
|
137
|
+
Q3 (July–September) — File by October 20
|
|
138
|
+
Modelo 303 — IVA quarterly return
|
|
139
|
+
Modelo 130 — IRPF quarterly advance payment
|
|
140
|
+
Modelo 349 — Intra-community operations (if applicable)
|
|
141
|
+
Modelo 115 — Rental withholdings (if applicable)
|
|
142
|
+
|
|
143
|
+
Q4 (October–December) — File by January 30 (next year)
|
|
144
|
+
Modelo 303 — IVA quarterly return
|
|
145
|
+
Modelo 130 — IRPF quarterly advance payment
|
|
146
|
+
Modelo 349 — Intra-community operations (if applicable)
|
|
147
|
+
Modelo 115 — Rental withholdings (if applicable)
|
|
148
|
+
|
|
149
|
+
ANNUAL RETURNS — File by January 30
|
|
150
|
+
Modelo 390 — Annual IVA summary (resumen anual IVA)
|
|
151
|
+
Modelo 180 — Annual rental withholdings summary
|
|
152
|
+
Modelo 190 — Annual professional withholdings summary (IRPF retenciones)
|
|
153
|
+
|
|
154
|
+
ANNUAL INCOME TAX — File April 1 – June 30
|
|
155
|
+
Modelo 100 — Personal income tax return (Renta / IRPF)
|
|
156
|
+
|
|
157
|
+
CANARY ISLANDS (IGIC instead of IVA)
|
|
158
|
+
Modelo 420 — IGIC quarterly return (same deadlines as Modelo 303)
|
|
159
|
+
Modelo 425 — Annual IGIC summary (same deadline as Modelo 390)
|
|
160
|
+
Filed with ATC (Administración Tributaria Canaria), NOT AEAT
|
|
161
|
+
|
|
162
|
+
VERIFACTU (mandatory e-invoicing, phased rollout)
|
|
163
|
+
2026: Voluntary adoption
|
|
164
|
+
2027: Mandatory for large companies
|
|
165
|
+
2028: Mandatory for all businesses
|
|
166
|
+
|
|
167
|
+
KEY DATES SUMMARY
|
|
168
|
+
Apr 20 — Q1 filings
|
|
169
|
+
Jul 20 — Q2 filings
|
|
170
|
+
Oct 20 — Q3 filings
|
|
171
|
+
Jan 30 — Q4 filings + annual summaries (390, 180, 190)
|
|
172
|
+
Apr 1–Jun 30 — Annual income tax (Modelo 100)`;
|
|
173
|
+
const EXPENSE_CATEGORIES = `Frihet Expense Categories & Deductibility Rules
|
|
174
|
+
=================================================
|
|
175
|
+
|
|
176
|
+
1. OFFICE (oficina)
|
|
177
|
+
Examples: Rent, utilities, internet, phone, office supplies, cleaning
|
|
178
|
+
Deductibility: 100% if exclusively for business use
|
|
179
|
+
Mixed use: Proportional deduction (e.g., home office = % of m²)
|
|
180
|
+
IVA deductible: Yes (with invoice)
|
|
181
|
+
|
|
182
|
+
2. TRAVEL (viajes)
|
|
183
|
+
Examples: Flights, trains, taxis, hotel, car rental, fuel, tolls, parking
|
|
184
|
+
Deductibility: 100% if business-related
|
|
185
|
+
Meals during travel: Max €26.67/day (Spain), €48.08/day (abroad)
|
|
186
|
+
IVA deductible: Yes (except parking meters, some tolls)
|
|
187
|
+
|
|
188
|
+
3. SOFTWARE (software)
|
|
189
|
+
Examples: SaaS subscriptions, licenses, hosting, domains, cloud services
|
|
190
|
+
Deductibility: 100% as operating expense
|
|
191
|
+
IVA deductible: Yes (EU reverse charge for non-Spanish providers)
|
|
192
|
+
Note: If >€300/unit, may need to amortize over 3 years
|
|
193
|
+
|
|
194
|
+
4. MARKETING (marketing)
|
|
195
|
+
Examples: Advertising, social media ads, design, print materials, events, sponsorship
|
|
196
|
+
Deductibility: 100% as operating expense
|
|
197
|
+
IVA deductible: Yes
|
|
198
|
+
Note: Gifts to clients deductible up to 1% of net revenue
|
|
199
|
+
|
|
200
|
+
5. PROFESSIONAL (servicios profesionales)
|
|
201
|
+
Examples: Legal fees, accounting, consulting, freelancers, subcontractors
|
|
202
|
+
Deductibility: 100%
|
|
203
|
+
IRPF withholding: Provider should apply 15% (or 7% if new freelancer)
|
|
204
|
+
IVA deductible: Yes
|
|
205
|
+
|
|
206
|
+
6. EQUIPMENT (equipamiento)
|
|
207
|
+
Examples: Computers, monitors, furniture, phones, machinery
|
|
208
|
+
Deductibility: Amortization (not instant deduction if >€300)
|
|
209
|
+
Amortization: Computers 25%/yr (4yr), furniture 10%/yr (10yr), vehicles 16%/yr
|
|
210
|
+
IVA deductible: Yes (vehicles: 50% unless exclusively business)
|
|
211
|
+
Freelancer benefit: Items <€300 can be fully expensed in the year
|
|
212
|
+
|
|
213
|
+
7. INSURANCE (seguros)
|
|
214
|
+
Examples: Professional liability, health (autónomo), property, cyber, D&O
|
|
215
|
+
Deductibility: 100% if business-related
|
|
216
|
+
Health insurance: Deductible up to €500/person/year for autónomos + family
|
|
217
|
+
IVA: Insurance is IVA-exempt (no input IVA to deduct)
|
|
218
|
+
|
|
219
|
+
8. OTHER (otros)
|
|
220
|
+
Examples: Bank fees, taxes (non-income), fines, donations, miscellaneous
|
|
221
|
+
Deductibility: Varies
|
|
222
|
+
NOT deductible: Fines, penalties, personal expenses, income tax itself
|
|
223
|
+
Bank fees: 100% deductible
|
|
224
|
+
Donations: Deduction in IRPF (not expense), 80% of first €250 + 40% rest`;
|
|
225
|
+
const INVOICE_STATUSES = `Frihet Invoice Status Flow
|
|
226
|
+
===========================
|
|
227
|
+
|
|
228
|
+
Statuses and transitions:
|
|
229
|
+
|
|
230
|
+
DRAFT ──────► SENT ──────► PAID
|
|
231
|
+
│ │
|
|
232
|
+
│ └──────► OVERDUE ────► PAID
|
|
233
|
+
│ │
|
|
234
|
+
│ └────────► CANCELLED
|
|
235
|
+
│
|
|
236
|
+
└─────────────────────────────────► CANCELLED
|
|
237
|
+
|
|
238
|
+
Status definitions:
|
|
239
|
+
|
|
240
|
+
draft — Invoice created but not yet sent to client.
|
|
241
|
+
Can be freely edited. No fiscal implications yet.
|
|
242
|
+
This is the default status for new invoices.
|
|
243
|
+
|
|
244
|
+
sent — Invoice delivered to the client (email, PDF, etc.).
|
|
245
|
+
Payment is expected. The invoice number and date become
|
|
246
|
+
fiscally relevant — avoid modifications after this point.
|
|
247
|
+
|
|
248
|
+
paid — Payment received in full. Terminal state.
|
|
249
|
+
Records the payment date. Invoice is complete.
|
|
250
|
+
|
|
251
|
+
overdue — Payment deadline (dueDate) has passed without payment.
|
|
252
|
+
Triggers follow-up workflows. Can transition to paid
|
|
253
|
+
(late payment) or cancelled (write-off / bad debt).
|
|
254
|
+
|
|
255
|
+
cancelled — Invoice voided. Requires a corrective invoice or
|
|
256
|
+
credit note for fiscal compliance if previously sent.
|
|
257
|
+
Terminal state. Cannot transition to other statuses.
|
|
258
|
+
|
|
259
|
+
Automation rules (when configured):
|
|
260
|
+
- Auto-transition sent → overdue when dueDate passes (daily check)
|
|
261
|
+
- Webhook events: invoice.created, invoice.sent, invoice.paid,
|
|
262
|
+
invoice.overdue, invoice.cancelled
|
|
263
|
+
- Overdue reminders can be configured per-client
|
|
264
|
+
|
|
265
|
+
Best practices:
|
|
266
|
+
- Always set a dueDate when creating invoices (default: 30 days)
|
|
267
|
+
- Use draft status while iterating with the client
|
|
268
|
+
- Once sent, create a new corrective invoice rather than editing
|
|
269
|
+
- For partial payments, keep status as sent until full payment
|
|
270
|
+
- cancelled requires a reason (notes field) for audit trail`;
|
|
271
|
+
/* ------------------------------------------------------------------ */
|
|
272
|
+
/* Registration */
|
|
273
|
+
/* ------------------------------------------------------------------ */
|
|
274
|
+
export function registerAllResources(server) {
|
|
275
|
+
server.registerResource("api-schema", "frihet://api/schema", {
|
|
276
|
+
description: "OpenAPI schema summary: all endpoints, authentication method, rate limits, pagination, and error codes. " +
|
|
277
|
+
"/ Resumen del esquema OpenAPI: endpoints, autenticación, límites, paginación y errores.",
|
|
278
|
+
mimeType: "text/plain",
|
|
279
|
+
}, async () => ({
|
|
280
|
+
contents: [
|
|
281
|
+
{
|
|
282
|
+
uri: "frihet://api/schema",
|
|
283
|
+
mimeType: "text/plain",
|
|
284
|
+
text: API_SCHEMA_SUMMARY,
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
}));
|
|
288
|
+
server.registerResource("tax-rates", "frihet://tax/rates", {
|
|
289
|
+
description: "Current tax rates by Spanish fiscal zone: Peninsula IVA (21/10/4%), Canary Islands IGIC (7/3/0%), " +
|
|
290
|
+
"Ceuta IPSI, EU reverse charge, international exports, IRPF withholding, and special regimes. " +
|
|
291
|
+
"/ Tipos impositivos por zona fiscal: IVA, IGIC, IPSI, intracomunitario, exportaciones, IRPF, regímenes especiales.",
|
|
292
|
+
mimeType: "text/plain",
|
|
293
|
+
}, async () => ({
|
|
294
|
+
contents: [
|
|
295
|
+
{
|
|
296
|
+
uri: "frihet://tax/rates",
|
|
297
|
+
mimeType: "text/plain",
|
|
298
|
+
text: TAX_RATES,
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
}));
|
|
302
|
+
server.registerResource("tax-calendar", "frihet://tax/calendar", {
|
|
303
|
+
description: "Spanish quarterly tax calendar with filing deadlines for Modelo 303, 130, 390, 420 (IGIC), and annual returns. " +
|
|
304
|
+
"Includes VeriFactu e-invoicing timeline. " +
|
|
305
|
+
"/ Calendario fiscal trimestral español con plazos de presentación de modelos y VeriFactu.",
|
|
306
|
+
mimeType: "text/plain",
|
|
307
|
+
}, async () => ({
|
|
308
|
+
contents: [
|
|
309
|
+
{
|
|
310
|
+
uri: "frihet://tax/calendar",
|
|
311
|
+
mimeType: "text/plain",
|
|
312
|
+
text: TAX_CALENDAR,
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
}));
|
|
316
|
+
server.registerResource("expense-categories", "frihet://config/expense-categories", {
|
|
317
|
+
description: "The 8 expense categories in Frihet with deductibility rules, IVA treatment, and amortization periods. " +
|
|
318
|
+
"Essential for correctly categorizing business expenses. " +
|
|
319
|
+
"/ Las 8 categorías de gastos con reglas de deducibilidad, IVA y amortización.",
|
|
320
|
+
mimeType: "text/plain",
|
|
321
|
+
}, async () => ({
|
|
322
|
+
contents: [
|
|
323
|
+
{
|
|
324
|
+
uri: "frihet://config/expense-categories",
|
|
325
|
+
mimeType: "text/plain",
|
|
326
|
+
text: EXPENSE_CATEGORIES,
|
|
327
|
+
},
|
|
328
|
+
],
|
|
329
|
+
}));
|
|
330
|
+
server.registerResource("invoice-statuses", "frihet://config/invoice-statuses", {
|
|
331
|
+
description: "Invoice status flow in Frihet: draft → sent → paid/overdue → cancelled. " +
|
|
332
|
+
"Includes transition rules, automation triggers, webhook events, and fiscal compliance notes. " +
|
|
333
|
+
"/ Flujo de estados de factura: borrador → enviada → pagada/vencida → cancelada.",
|
|
334
|
+
mimeType: "text/plain",
|
|
335
|
+
}, async () => ({
|
|
336
|
+
contents: [
|
|
337
|
+
{
|
|
338
|
+
uri: "frihet://config/invoice-statuses",
|
|
339
|
+
mimeType: "text/plain",
|
|
340
|
+
text: INVOICE_STATUSES,
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=register-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-all.js","sourceRoot":"","sources":["../../src/resources/register-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAgE6B,CAAC;AAEzD,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAyCgC,CAAC;AAEnD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAoD2B,CAAC;AAEjD,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAmDiD,CAAC;AAE7E,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DA6CqC,CAAC;AAE/D,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,gBAAgB,CACrB,YAAY,EACZ,qBAAqB,EACrB;QACE,WAAW,EACT,0GAA0G;YAC1G,yFAAyF;QAC3F,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,qBAAqB;gBAC1B,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,kBAAkB;aACzB;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,WAAW,EACX,oBAAoB,EACpB;QACE,WAAW,EACT,oGAAoG;YACpG,+FAA+F;YAC/F,oHAAoH;QACtH,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,oBAAoB;gBACzB,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,SAAS;aAChB;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,cAAc,EACd,uBAAuB,EACvB;QACE,WAAW,EACT,iHAAiH;YACjH,2CAA2C;YAC3C,2FAA2F;QAC7F,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,uBAAuB;gBAC5B,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,YAAY;aACnB;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,oBAAoB,EACpB,oCAAoC,EACpC;QACE,WAAW,EACT,wGAAwG;YACxG,0DAA0D;YAC1D,+EAA+E;QACjF,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,oCAAoC;gBACzC,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,kBAAkB;aACzB;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,kBAAkB,EAClB,kCAAkC,EAClC;QACE,WAAW,EACT,0EAA0E;YAC1E,+FAA+F;YAC/F,iFAAiF;QACnF,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,kCAAkC;gBACvC,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,gBAAgB;aACvB;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -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,CA4JlF"}
|
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 { handleToolError, formatPaginatedResponse, formatRecord, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS } from "./shared.js";
|
|
5
|
+
import { handleToolError, 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"),
|
|
@@ -25,11 +25,13 @@ export function registerClientTools(server, client) {
|
|
|
25
25
|
limit: z.number().int().min(1).max(100).optional().describe("Max results (1-100) / Resultados maximos"),
|
|
26
26
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
27
27
|
},
|
|
28
|
+
outputSchema: paginatedOutput(clientItemOutput),
|
|
28
29
|
}, async ({ limit, offset }) => {
|
|
29
30
|
try {
|
|
30
31
|
const result = await client.listClients({ limit, offset });
|
|
31
32
|
return {
|
|
32
|
-
content: [
|
|
33
|
+
content: [listContent(formatPaginatedResponse("clients", result))],
|
|
34
|
+
structuredContent: result,
|
|
33
35
|
};
|
|
34
36
|
}
|
|
35
37
|
catch (error) {
|
|
@@ -45,11 +47,13 @@ export function registerClientTools(server, client) {
|
|
|
45
47
|
inputSchema: {
|
|
46
48
|
id: z.string().describe("Client ID / ID del cliente"),
|
|
47
49
|
},
|
|
50
|
+
outputSchema: clientItemOutput,
|
|
48
51
|
}, async ({ id }) => {
|
|
49
52
|
try {
|
|
50
53
|
const result = await client.getClient(id);
|
|
51
54
|
return {
|
|
52
|
-
content: [
|
|
55
|
+
content: [getContent(formatRecord("Client", result))],
|
|
56
|
+
structuredContent: result,
|
|
53
57
|
};
|
|
54
58
|
}
|
|
55
59
|
catch (error) {
|
|
@@ -71,11 +75,13 @@ export function registerClientTools(server, client) {
|
|
|
71
75
|
taxId: z.string().optional().describe("Tax ID (NIF/CIF/VAT) / NIF o CIF"),
|
|
72
76
|
address: addressSchema,
|
|
73
77
|
},
|
|
78
|
+
outputSchema: clientItemOutput,
|
|
74
79
|
}, async (input) => {
|
|
75
80
|
try {
|
|
76
81
|
const result = await client.createClient(input);
|
|
77
82
|
return {
|
|
78
|
-
content: [
|
|
83
|
+
content: [mutateContent(formatRecord("Client created", result))],
|
|
84
|
+
structuredContent: result,
|
|
79
85
|
};
|
|
80
86
|
}
|
|
81
87
|
catch (error) {
|
|
@@ -96,11 +102,13 @@ export function registerClientTools(server, client) {
|
|
|
96
102
|
taxId: z.string().optional().describe("Tax ID / NIF/CIF"),
|
|
97
103
|
address: addressSchema,
|
|
98
104
|
},
|
|
105
|
+
outputSchema: clientItemOutput,
|
|
99
106
|
}, async ({ id, ...data }) => {
|
|
100
107
|
try {
|
|
101
108
|
const result = await client.updateClient(id, data);
|
|
102
109
|
return {
|
|
103
|
-
content: [
|
|
110
|
+
content: [mutateContent(formatRecord("Client updated", result))],
|
|
111
|
+
structuredContent: result,
|
|
104
112
|
};
|
|
105
113
|
}
|
|
106
114
|
catch (error) {
|
|
@@ -118,11 +126,13 @@ export function registerClientTools(server, client) {
|
|
|
118
126
|
inputSchema: {
|
|
119
127
|
id: z.string().describe("Client ID / ID del cliente"),
|
|
120
128
|
},
|
|
129
|
+
outputSchema: deleteResultOutput,
|
|
121
130
|
}, async ({ id }) => {
|
|
122
131
|
try {
|
|
123
132
|
await client.deleteClient(id);
|
|
124
133
|
return {
|
|
125
|
-
content: [
|
|
134
|
+
content: [mutateContent(`Client ${id} deleted successfully. / Cliente ${id} eliminado correctamente.`)],
|
|
135
|
+
structuredContent: { success: true, id },
|
|
126
136
|
};
|
|
127
137
|
}
|
|
128
138
|
catch (error) {
|
|
@@ -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,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
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,CAmKnF"}
|
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 { handleToolError, formatPaginatedResponse, formatRecord, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS } from "./shared.js";
|
|
5
|
+
import { handleToolError, 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", {
|
|
@@ -14,11 +14,13 @@ export function registerExpenseTools(server, client) {
|
|
|
14
14
|
limit: z.number().int().min(1).max(100).optional().describe("Max results (1-100) / Resultados maximos"),
|
|
15
15
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
16
16
|
},
|
|
17
|
+
outputSchema: paginatedOutput(expenseItemOutput),
|
|
17
18
|
}, async ({ limit, offset }) => {
|
|
18
19
|
try {
|
|
19
20
|
const result = await client.listExpenses({ limit, offset });
|
|
20
21
|
return {
|
|
21
|
-
content: [
|
|
22
|
+
content: [listContent(formatPaginatedResponse("expenses", result))],
|
|
23
|
+
structuredContent: result,
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
26
|
catch (error) {
|
|
@@ -34,11 +36,13 @@ export function registerExpenseTools(server, client) {
|
|
|
34
36
|
inputSchema: {
|
|
35
37
|
id: z.string().describe("Expense ID / ID del gasto"),
|
|
36
38
|
},
|
|
39
|
+
outputSchema: expenseItemOutput,
|
|
37
40
|
}, async ({ id }) => {
|
|
38
41
|
try {
|
|
39
42
|
const result = await client.getExpense(id);
|
|
40
43
|
return {
|
|
41
|
-
content: [
|
|
44
|
+
content: [getContent(formatRecord("Expense", result))],
|
|
45
|
+
structuredContent: result,
|
|
42
46
|
};
|
|
43
47
|
}
|
|
44
48
|
catch (error) {
|
|
@@ -70,11 +74,13 @@ export function registerExpenseTools(server, client) {
|
|
|
70
74
|
.optional()
|
|
71
75
|
.describe("Whether the expense is tax deductible / Si el gasto es deducible fiscalmente"),
|
|
72
76
|
},
|
|
77
|
+
outputSchema: expenseItemOutput,
|
|
73
78
|
}, async (input) => {
|
|
74
79
|
try {
|
|
75
80
|
const result = await client.createExpense(input);
|
|
76
81
|
return {
|
|
77
|
-
content: [
|
|
82
|
+
content: [mutateContent(formatRecord("Expense created", result))],
|
|
83
|
+
structuredContent: result,
|
|
78
84
|
};
|
|
79
85
|
}
|
|
80
86
|
catch (error) {
|
|
@@ -96,11 +102,13 @@ export function registerExpenseTools(server, client) {
|
|
|
96
102
|
vendor: z.string().optional().describe("Vendor / Proveedor"),
|
|
97
103
|
taxDeductible: z.boolean().optional().describe("Tax deductible / Deducible"),
|
|
98
104
|
},
|
|
105
|
+
outputSchema: expenseItemOutput,
|
|
99
106
|
}, async ({ id, ...data }) => {
|
|
100
107
|
try {
|
|
101
108
|
const result = await client.updateExpense(id, data);
|
|
102
109
|
return {
|
|
103
|
-
content: [
|
|
110
|
+
content: [mutateContent(formatRecord("Expense updated", result))],
|
|
111
|
+
structuredContent: result,
|
|
104
112
|
};
|
|
105
113
|
}
|
|
106
114
|
catch (error) {
|
|
@@ -116,11 +124,13 @@ export function registerExpenseTools(server, client) {
|
|
|
116
124
|
inputSchema: {
|
|
117
125
|
id: z.string().describe("Expense ID / ID del gasto"),
|
|
118
126
|
},
|
|
127
|
+
outputSchema: deleteResultOutput,
|
|
119
128
|
}, async ({ id }) => {
|
|
120
129
|
try {
|
|
121
130
|
await client.deleteExpense(id);
|
|
122
131
|
return {
|
|
123
|
-
content: [
|
|
132
|
+
content: [mutateContent(`Expense ${id} deleted successfully. / Gasto ${id} eliminado correctamente.`)],
|
|
133
|
+
structuredContent: { success: true, id },
|
|
124
134
|
};
|
|
125
135
|
}
|
|
126
136
|
catch (error) {
|
|
@@ -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,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
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,CA+NnF"}
|