@frihet/mcp-server 1.15.2 → 1.15.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.
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Demo-mode fixtures for the Frihet MCP server (`FRIHET_DEMO=1`).
3
+ *
4
+ * These are the canned, PII-SAFE example datasets served by DemoFrihetClient
5
+ * when the server runs without an API key. NOTHING here is real customer data:
6
+ * - NIF/CIF are AEAT example patterns (B12345678, X9999999X).
7
+ * - IBAN is the ECBS/AEAT test IBAN (ES9121000418450200051332).
8
+ * - Every email is under @example.com (guarded by demo-mode.test.ts).
9
+ * - Business names are generic, invented ES/EU companies.
10
+ *
11
+ * Amounts follow the same field shape the real /v1 REST API returns (see
12
+ * src/tools/*.ts output schemas + src/client-interface.ts return types), so an
13
+ * agent evaluating the demo sees exactly the response shape it would get live.
14
+ */
15
+ import type { PaginatedResponse } from "./types.js";
16
+ /** Marker fields stamped on every demo response's top-level object. */
17
+ export interface DemoStamp {
18
+ _demo: true;
19
+ _demoNotice: string;
20
+ }
21
+ /** Read/get/list responses. */
22
+ export declare const READ_STAMP: DemoStamp;
23
+ /** Simulated writes (create/update/apply/mark/etc.). */
24
+ export declare const WRITE_STAMP: DemoStamp;
25
+ /** Fiscal / e-invoice / email / payroll actions — NEVER a real submission. */
26
+ export declare const FISCAL_STAMP: DemoStamp;
27
+ /** Empty surfaces (no dedicated fixtures yet) still carry a demo stamp. */
28
+ export declare const EMPTY_STAMP: DemoStamp;
29
+ /** Frozen timestamp so demo responses are deterministic across calls. */
30
+ export declare const DEMO_NOW = "2026-07-15T10:00:00.000Z";
31
+ /** Test IBAN (ECBS/AEAT example — never a real account). */
32
+ export declare const DEMO_TEST_IBAN = "ES9121000418450200051332";
33
+ export type DemoPaginated = PaginatedResponse<Record<string, unknown>> & DemoStamp;
34
+ /** Wrap a fixture array in a stamped PaginatedResponse. */
35
+ export declare function demoPage(data: Record<string, unknown>[], params?: {
36
+ limit?: number;
37
+ offset?: number;
38
+ }): DemoPaginated;
39
+ /** Empty stamped PaginatedResponse for surfaces without dedicated fixtures. */
40
+ export declare function demoEmptyPage(params?: {
41
+ limit?: number;
42
+ offset?: number;
43
+ }): DemoPaginated;
44
+ export declare const demoClients: Record<string, unknown>[];
45
+ export declare const demoProducts: Record<string, unknown>[];
46
+ export declare const demoInvoices: Record<string, unknown>[];
47
+ export declare const demoExpenses: Record<string, unknown>[];
48
+ export declare const demoQuotes: Record<string, unknown>[];
49
+ export declare const demoVendors: Record<string, unknown>[];
50
+ export declare const demoBankAccounts: Record<string, unknown>[];
51
+ export declare const demoTransactions: Record<string, unknown>[];
52
+ /** Find a fixture by id, or synthesize a minimal stamped object with that id. */
53
+ export declare function findOrStub(collection: Record<string, unknown>[], id: string): Record<string, unknown> & DemoStamp;
54
+ /** Deterministic-ish demo id (no network, no clock dependency). */
55
+ export declare function demoId(prefix: string): string;
56
+ /**
57
+ * Simulate a create/update: echo the input, stamp a fabricated demo id +
58
+ * timestamps + the WRITE banner. Never persists, never touches the network.
59
+ */
60
+ export declare function simulateWrite(idPrefix: string, input: Record<string, unknown>, extra?: Record<string, unknown>): Record<string, unknown> & DemoStamp;
61
+ /** Simulate an action on an existing entity (keeps the caller-supplied id). */
62
+ export declare function simulateAction(id: string, fields?: Record<string, unknown>): Record<string, unknown> & DemoStamp;
63
+ //# sourceMappingURL=demo-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-fixtures.d.ts","sourceRoot":"","sources":["../src/demo-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,eAAO,MAAM,UAAU,EAAE,SAIf,CAAC;AAEX,wDAAwD;AACxD,eAAO,MAAM,WAAW,EAAE,SAIhB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,SAIjB,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,WAAW,EAAE,SAIhB,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,QAAQ,6BAA6B,CAAC;AAEnD,4DAA4D;AAC5D,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAMzD,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;AAEnF,2DAA2D;AAC3D,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAQf;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAQzF;AAMD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAmDhD,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EASjD,CAAC;AAsDF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAUjD,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAOjD,CAAC;AAMF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAgC/C,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAGhD,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAYrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAKrD,CAAC;AAMF,iFAAiF;AACjF,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACrC,EAAE,EAAE,MAAM,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AAID,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASrC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAErC"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Demo-mode fixtures for the Frihet MCP server (`FRIHET_DEMO=1`).
3
+ *
4
+ * These are the canned, PII-SAFE example datasets served by DemoFrihetClient
5
+ * when the server runs without an API key. NOTHING here is real customer data:
6
+ * - NIF/CIF are AEAT example patterns (B12345678, X9999999X).
7
+ * - IBAN is the ECBS/AEAT test IBAN (ES9121000418450200051332).
8
+ * - Every email is under @example.com (guarded by demo-mode.test.ts).
9
+ * - Business names are generic, invented ES/EU companies.
10
+ *
11
+ * Amounts follow the same field shape the real /v1 REST API returns (see
12
+ * src/tools/*.ts output schemas + src/client-interface.ts return types), so an
13
+ * agent evaluating the demo sees exactly the response shape it would get live.
14
+ */
15
+ /** Read/get/list responses. */
16
+ export const READ_STAMP = {
17
+ _demo: true,
18
+ _demoNotice: "DEMO MODE — example data, nothing persisted. For real data: app.frihet.io → Settings → API keys.",
19
+ };
20
+ /** Simulated writes (create/update/apply/mark/etc.). */
21
+ export const WRITE_STAMP = {
22
+ _demo: true,
23
+ _demoNotice: "DEMO MODE — example data, nothing persisted. Simulated — not persisted.",
24
+ };
25
+ /** Fiscal / e-invoice / email / payroll actions — NEVER a real submission. */
26
+ export const FISCAL_STAMP = {
27
+ _demo: true,
28
+ _demoNotice: "Simulated fiscal action — no submission was made to any tax authority.",
29
+ };
30
+ /** Empty surfaces (no dedicated fixtures yet) still carry a demo stamp. */
31
+ export const EMPTY_STAMP = {
32
+ _demo: true,
33
+ _demoNotice: "DEMO MODE — no demo fixtures for this surface yet. For real data: app.frihet.io → Settings → API keys.",
34
+ };
35
+ /** Frozen timestamp so demo responses are deterministic across calls. */
36
+ export const DEMO_NOW = "2026-07-15T10:00:00.000Z";
37
+ /** Test IBAN (ECBS/AEAT example — never a real account). */
38
+ export const DEMO_TEST_IBAN = "ES9121000418450200051332";
39
+ /** Wrap a fixture array in a stamped PaginatedResponse. */
40
+ export function demoPage(data, params) {
41
+ return {
42
+ data,
43
+ total: data.length,
44
+ limit: params?.limit ?? 50,
45
+ offset: params?.offset ?? 0,
46
+ ...READ_STAMP,
47
+ };
48
+ }
49
+ /** Empty stamped PaginatedResponse for surfaces without dedicated fixtures. */
50
+ export function demoEmptyPage(params) {
51
+ return {
52
+ data: [],
53
+ total: 0,
54
+ limit: params?.limit ?? 50,
55
+ offset: params?.offset ?? 0,
56
+ ...EMPTY_STAMP,
57
+ };
58
+ }
59
+ /* ------------------------------------------------------------------ */
60
+ /* Clients (5) — mix of ES peninsula, Canarias (IGIC), autónomo, EU */
61
+ /* ------------------------------------------------------------------ */
62
+ export const demoClients = [
63
+ {
64
+ id: "demo_cli_001",
65
+ name: "Panadería La Espiga SL",
66
+ email: "hola@example.com",
67
+ phone: "+34 600 000 001",
68
+ taxId: "B12345678",
69
+ address: { street: "Calle Mayor 12", city: "Madrid", state: "Madrid", postalCode: "28013", country: "ES" },
70
+ createdAt: DEMO_NOW,
71
+ updatedAt: DEMO_NOW,
72
+ },
73
+ {
74
+ id: "demo_cli_002",
75
+ name: "Estudio Nórdico Arquitectura SL",
76
+ email: "info@example.com",
77
+ phone: "+34 600 000 002",
78
+ taxId: "B87654321",
79
+ address: { street: "Passeig de Gràcia 45", city: "Barcelona", state: "Barcelona", postalCode: "08010", country: "ES" },
80
+ createdAt: DEMO_NOW,
81
+ updatedAt: DEMO_NOW,
82
+ },
83
+ {
84
+ id: "demo_cli_003",
85
+ name: "Servicios Insulares Canarias SL",
86
+ email: "contacto@example.com",
87
+ phone: "+34 600 000 003",
88
+ taxId: "B35700000",
89
+ address: { street: "Avenida de Anaga 8", city: "Santa Cruz de Tenerife", state: "Canarias", postalCode: "38001", country: "ES" },
90
+ createdAt: DEMO_NOW,
91
+ updatedAt: DEMO_NOW,
92
+ },
93
+ {
94
+ id: "demo_cli_004",
95
+ name: "Marina Delgado (autónoma)",
96
+ email: "marina@example.com",
97
+ phone: "+34 600 000 004",
98
+ taxId: "X9999999X",
99
+ address: { street: "Carrer de Colón 3", city: "Valencia", state: "Valencia", postalCode: "46004", country: "ES" },
100
+ createdAt: DEMO_NOW,
101
+ updatedAt: DEMO_NOW,
102
+ },
103
+ {
104
+ id: "demo_cli_005",
105
+ name: "TechFlow Solutions GmbH",
106
+ email: "billing@example.com",
107
+ phone: "+49 30 0000000",
108
+ taxId: "DE123456789",
109
+ address: { street: "Unter den Linden 10", city: "Berlin", state: "Berlin", postalCode: "10117", country: "DE" },
110
+ createdAt: DEMO_NOW,
111
+ updatedAt: DEMO_NOW,
112
+ },
113
+ ];
114
+ /* ------------------------------------------------------------------ */
115
+ /* Products (8) — IVA 21% / 10% / 4% */
116
+ /* ------------------------------------------------------------------ */
117
+ export const demoProducts = [
118
+ { id: "demo_prd_001", name: "Consultoría estratégica (hora)", unitPrice: 90, taxRate: 21, description: "Sesión de consultoría por hora", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
119
+ { id: "demo_prd_002", name: "Desarrollo web (jornada)", unitPrice: 480, taxRate: 21, description: "Jornada de desarrollo full-stack", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
120
+ { id: "demo_prd_003", name: "Mantenimiento mensual", unitPrice: 150, taxRate: 21, description: "Soporte y mantenimiento mensual", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
121
+ { id: "demo_prd_004", name: "Diseño de marca", unitPrice: 1200, taxRate: 21, description: "Identidad visual completa", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
122
+ { id: "demo_prd_005", name: "Auditoría SEO", unitPrice: 600, taxRate: 21, description: "Auditoría técnica y de contenidos", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
123
+ { id: "demo_prd_006", name: "Formación in-company (hora)", unitPrice: 75, taxRate: 21, description: "Formación presencial por hora", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
124
+ { id: "demo_prd_007", name: "Menú catering (por persona)", unitPrice: 18, taxRate: 10, description: "Servicio de catering, IVA reducido hostelería", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
125
+ { id: "demo_prd_008", name: "Libro técnico impreso", unitPrice: 24, taxRate: 4, description: "Publicación impresa, IVA superreducido", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
126
+ ];
127
+ function money(n) {
128
+ return Math.round(n * 100) / 100;
129
+ }
130
+ function invoice(opts) {
131
+ const subtotal = money(opts.items.reduce((s, i) => s + i.quantity * i.unitPrice, 0));
132
+ const taxAmount = money(subtotal * (opts.taxRate / 100));
133
+ const irpfAmount = opts.irpfRate ? money(subtotal * (opts.irpfRate / 100)) : 0;
134
+ const total = money(subtotal + taxAmount - irpfAmount);
135
+ return {
136
+ id: opts.id,
137
+ clientId: opts.clientId,
138
+ clientName: opts.clientName,
139
+ items: opts.items,
140
+ issueDate: opts.issueDate,
141
+ dueDate: opts.dueDate,
142
+ status: opts.status,
143
+ taxRate: opts.taxRate,
144
+ subtotal,
145
+ taxAmount,
146
+ ...(opts.irpfRate ? { irpfRate: opts.irpfRate, irpfAmount } : {}),
147
+ total,
148
+ currency: "EUR",
149
+ ...(opts.clientLocation ? { clientLocation: opts.clientLocation } : {}),
150
+ ...(opts.notes ? { notes: opts.notes } : {}),
151
+ createdAt: DEMO_NOW,
152
+ updatedAt: DEMO_NOW,
153
+ };
154
+ }
155
+ export const demoInvoices = [
156
+ invoice({ id: "demo_inv_001", clientId: "demo_cli_001", clientName: "Panadería La Espiga SL", items: [{ description: "Consultoría estratégica (hora)", quantity: 10, unitPrice: 90 }], taxRate: 21, status: "paid", issueDate: "2026-06-03", dueDate: "2026-07-03", clientLocation: "peninsula" }),
157
+ invoice({ id: "demo_inv_002", clientId: "demo_cli_002", clientName: "Estudio Nórdico Arquitectura SL", items: [{ description: "Desarrollo web (jornada)", quantity: 5, unitPrice: 480 }], taxRate: 21, status: "sent", issueDate: "2026-06-10", dueDate: "2026-07-10", clientLocation: "peninsula" }),
158
+ invoice({ id: "demo_inv_003", clientId: "demo_cli_003", clientName: "Servicios Insulares Canarias SL", items: [{ description: "Consultoría estratégica (hora)", quantity: 8, unitPrice: 90 }], taxRate: 7, status: "paid", issueDate: "2026-06-12", dueDate: "2026-07-12", notes: "IGIC 7% — cliente en Canarias", clientLocation: "canarias" }),
159
+ invoice({ id: "demo_inv_004", clientId: "demo_cli_004", clientName: "Marina Delgado (autónoma)", items: [{ description: "Formación in-company (hora)", quantity: 12, unitPrice: 75 }], taxRate: 21, status: "draft", issueDate: "2026-07-01", dueDate: "2026-07-31", clientLocation: "peninsula" }),
160
+ invoice({ id: "demo_inv_005", clientId: "demo_cli_001", clientName: "Panadería La Espiga SL", items: [{ description: "Menú catering (por persona)", quantity: 40, unitPrice: 18 }], taxRate: 10, status: "sent", issueDate: "2026-06-20", dueDate: "2026-07-20", notes: "IVA reducido 10% (hostelería)", clientLocation: "peninsula" }),
161
+ invoice({ id: "demo_inv_006", clientId: "demo_cli_002", clientName: "Estudio Nórdico Arquitectura SL", items: [{ description: "Libro técnico impreso", quantity: 50, unitPrice: 24 }], taxRate: 4, status: "paid", issueDate: "2026-05-28", dueDate: "2026-06-28", notes: "IVA superreducido 4% (libros)", clientLocation: "peninsula" }),
162
+ invoice({ id: "demo_inv_007", clientId: "demo_cli_005", clientName: "TechFlow Solutions GmbH", items: [{ description: "Consultoría estratégica (hora)", quantity: 20, unitPrice: 90 }], taxRate: 0, status: "sent", issueDate: "2026-06-15", dueDate: "2026-07-15", notes: "Inversión del sujeto pasivo (reverse charge, operación intracomunitaria B2B)", clientLocation: "eu" }),
163
+ invoice({ id: "demo_inv_008", clientId: "demo_cli_003", clientName: "Servicios Insulares Canarias SL", items: [{ description: "Mantenimiento mensual", quantity: 3, unitPrice: 150 }], taxRate: 7, status: "overdue", issueDate: "2026-04-05", dueDate: "2026-05-05", notes: "IGIC 7% — factura vencida", clientLocation: "canarias" }),
164
+ invoice({ id: "demo_inv_009", clientId: "demo_cli_004", clientName: "Marina Delgado (autónoma)", items: [{ description: "Diseño de marca", quantity: 1, unitPrice: 1200 }, { description: "Auditoría SEO", quantity: 1, unitPrice: 600 }], taxRate: 21, status: "draft", issueDate: "2026-07-08", dueDate: "2026-08-08", irpfRate: 15, notes: "Autónoma con retención IRPF 15%", clientLocation: "peninsula" }),
165
+ ];
166
+ /* ------------------------------------------------------------------ */
167
+ /* Expenses (6) — categorized */
168
+ /* ------------------------------------------------------------------ */
169
+ export const demoExpenses = [
170
+ { id: "demo_exp_001", description: "Suscripción software de diseño", amount: 15.4, category: "software", date: "2026-07-01", vendor: "Herramientas Digitales SL", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
171
+ { id: "demo_exp_002", description: "Material de oficina", amount: 48.2, category: "office_supplies", date: "2026-06-18", vendor: "Papelería Central", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
172
+ { id: "demo_exp_003", description: "Comida de trabajo con cliente", amount: 62.0, category: "meals", date: "2026-06-22", vendor: "Restaurante El Puerto", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
173
+ { id: "demo_exp_004", description: "Combustible desplazamiento", amount: 70.0, category: "travel", date: "2026-06-25", vendor: "Estación de Servicio Norte", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
174
+ { id: "demo_exp_005", description: "Cuota gestoría mensual", amount: 90.0, category: "professional_services", date: "2026-07-01", vendor: "Gestoría Ramírez", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
175
+ { id: "demo_exp_006", description: "Hosting anual", amount: 120.0, category: "software", date: "2026-05-30", vendor: "Proveedor Cloud SL", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
176
+ ];
177
+ /* ------------------------------------------------------------------ */
178
+ /* Quotes (2) */
179
+ /* ------------------------------------------------------------------ */
180
+ export const demoQuotes = [
181
+ {
182
+ id: "demo_quo_001",
183
+ clientId: "demo_cli_002",
184
+ clientName: "Estudio Nórdico Arquitectura SL",
185
+ items: [{ description: "Desarrollo web (jornada)", quantity: 10, unitPrice: 480 }],
186
+ taxRate: 21,
187
+ subtotal: 4800,
188
+ taxAmount: 1008,
189
+ total: 5808,
190
+ currency: "EUR",
191
+ status: "sent",
192
+ validUntil: "2026-08-15",
193
+ createdAt: DEMO_NOW,
194
+ updatedAt: DEMO_NOW,
195
+ },
196
+ {
197
+ id: "demo_quo_002",
198
+ clientId: "demo_cli_005",
199
+ clientName: "TechFlow Solutions GmbH",
200
+ items: [{ description: "Consultoría estratégica (hora)", quantity: 30, unitPrice: 90 }],
201
+ taxRate: 0,
202
+ subtotal: 2700,
203
+ taxAmount: 0,
204
+ total: 2700,
205
+ currency: "EUR",
206
+ status: "draft",
207
+ validUntil: "2026-08-30",
208
+ notes: "Reverse charge (intracomunitario B2B)",
209
+ createdAt: DEMO_NOW,
210
+ updatedAt: DEMO_NOW,
211
+ },
212
+ ];
213
+ /* ------------------------------------------------------------------ */
214
+ /* Vendors (2) */
215
+ /* ------------------------------------------------------------------ */
216
+ export const demoVendors = [
217
+ { id: "demo_ven_001", name: "Gestoría Ramírez", email: "gestoria@example.com", phone: "+34 600 000 010", taxId: "B11111111", address: { city: "Madrid", postalCode: "28004", country: "ES" }, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
218
+ { id: "demo_ven_002", name: "Proveedor Cloud SL", email: "facturacion@example.com", phone: "+34 600 000 011", taxId: "B22222222", address: { city: "Barcelona", postalCode: "08007", country: "ES" }, createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
219
+ ];
220
+ /* ------------------------------------------------------------------ */
221
+ /* Banking — 1 account + 4 transactions */
222
+ /* ------------------------------------------------------------------ */
223
+ export const demoBankAccounts = [
224
+ {
225
+ id: "demo_bank_001",
226
+ alias: "Cuenta principal",
227
+ iban: DEMO_TEST_IBAN,
228
+ ibanLast4: "1332",
229
+ currency: "EUR",
230
+ balance: 12450.75,
231
+ lastSyncedAt: DEMO_NOW,
232
+ createdAt: DEMO_NOW,
233
+ updatedAt: DEMO_NOW,
234
+ },
235
+ ];
236
+ export const demoTransactions = [
237
+ { id: "demo_txn_001", accountId: "demo_bank_001", amount: 1089.0, currency: "EUR", description: "Cobro factura demo_inv_001", postedAt: "2026-07-03", category: "sales_income", status: "posted", matchedDocId: "demo_inv_001", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
238
+ { id: "demo_txn_002", accountId: "demo_bank_001", amount: -90.0, currency: "EUR", description: "Cuota gestoría mensual", postedAt: "2026-07-01", category: "professional_services", status: "posted", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
239
+ { id: "demo_txn_003", accountId: "demo_bank_001", amount: -15.4, currency: "EUR", description: "Suscripción software de diseño", postedAt: "2026-07-01", category: "software", status: "posted", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
240
+ { id: "demo_txn_004", accountId: "demo_bank_001", amount: 770.4, currency: "EUR", description: "Cobro factura demo_inv_003", postedAt: "2026-07-12", category: "sales_income", status: "posted", matchedDocId: "demo_inv_003", createdAt: DEMO_NOW, updatedAt: DEMO_NOW },
241
+ ];
242
+ /* ------------------------------------------------------------------ */
243
+ /* Lookups + write simulation helpers */
244
+ /* ------------------------------------------------------------------ */
245
+ /** Find a fixture by id, or synthesize a minimal stamped object with that id. */
246
+ export function findOrStub(collection, id) {
247
+ const found = collection.find((item) => item.id === id);
248
+ if (found)
249
+ return { ...found, ...READ_STAMP };
250
+ return { id, ...READ_STAMP };
251
+ }
252
+ let demoIdCounter = 0;
253
+ /** Deterministic-ish demo id (no network, no clock dependency). */
254
+ export function demoId(prefix) {
255
+ demoIdCounter += 1;
256
+ return `${prefix}_${String(demoIdCounter).padStart(3, "0")}`;
257
+ }
258
+ /**
259
+ * Simulate a create/update: echo the input, stamp a fabricated demo id +
260
+ * timestamps + the WRITE banner. Never persists, never touches the network.
261
+ */
262
+ export function simulateWrite(idPrefix, input, extra = {}) {
263
+ return {
264
+ id: demoId(idPrefix),
265
+ ...input,
266
+ ...extra,
267
+ createdAt: DEMO_NOW,
268
+ updatedAt: DEMO_NOW,
269
+ ...WRITE_STAMP,
270
+ };
271
+ }
272
+ /** Simulate an action on an existing entity (keeps the caller-supplied id). */
273
+ export function simulateAction(id, fields = {}) {
274
+ return { id, success: true, ...fields, updatedAt: DEMO_NOW, ...WRITE_STAMP };
275
+ }
276
+ //# sourceMappingURL=demo-fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-fixtures.js","sourceRoot":"","sources":["../src/demo-fixtures.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@ import { fileURLToPath } from "node:url";
14
14
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
15
15
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
16
16
  import { FrihetClient } from "./client.js";
17
+ import { DemoFrihetClient } from "./demo-client.js";
17
18
  // Single source of truth for the server version: package.json (read at runtime
18
19
  // from dist/../package.json). Hardcoding it here caused repeated version drift
19
20
  // (server.json/index.ts/console out of sync → audit:mcp-refs gate failure).
@@ -37,17 +38,23 @@ import { registerShutdownHook } from "./metrics.js";
37
38
  import { setTraceContext } from "./observability.js";
38
39
  function main() {
39
40
  const apiKey = process.env.FRIHET_API_KEY;
40
- if (!apiKey) {
41
+ // Demo mode: FRIHET_DEMO=1|true serves fixture-backed example data with NO
42
+ // network calls and NO API key required. It's an explicit opt-in, so it wins
43
+ // even if a real key happens to be present. See demo-client.ts / demo-fixtures.ts.
44
+ const demoFlag = process.env.FRIHET_DEMO;
45
+ const demoMode = demoFlag === "1" || demoFlag === "true";
46
+ if (!demoMode && !apiKey) {
41
47
  console.error("Error: FRIHET_API_KEY environment variable is required.\n\n" +
42
48
  "Get your API key:\n" +
43
49
  " 1. Create a free account at https://app.frihet.io\n" +
44
50
  " 2. Go to Settings > Developers > API Keys\n" +
45
51
  " 3. Create a key and add it to your MCP configuration\n\n" +
52
+ "Or try it instantly with no key: set FRIHET_DEMO=1 for example data.\n\n" +
46
53
  "Documentation: https://docs.frihet.io/desarrolladores/mcp-server\n");
47
54
  process.exit(1);
48
55
  }
49
56
  const baseUrl = process.env.FRIHET_API_URL;
50
- if (baseUrl !== undefined) {
57
+ if (!demoMode && baseUrl !== undefined) {
51
58
  let parsed;
52
59
  try {
53
60
  parsed = new URL(baseUrl);
@@ -67,7 +74,12 @@ function main() {
67
74
  process.exit(1);
68
75
  }
69
76
  }
70
- const client = new FrihetClient(apiKey, baseUrl);
77
+ const client = demoMode
78
+ ? new DemoFrihetClient()
79
+ : new FrihetClient(apiKey, baseUrl);
80
+ if (demoMode) {
81
+ console.error("[frihet-mcp] DEMO MODE — serving example fixtures, no real data, nothing persisted");
82
+ }
71
83
  // Set trace context for Langfuse (reads LANGFUSE_* from process.env automatically).
72
84
  // clientName can be overridden via FRIHET_CLIENT_NAME env var by the MCP host.
73
85
  setTraceContext({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ import type { IFrihetClient } from "../client-interface.js";
48
48
  * | facturae | Facturae | Spain (ES B2G mandatory) | Facturae 3.2.x — AEAT/FACe submission |
49
49
  */
50
50
  export declare const eInvoiceFormatSchema: z.ZodEnum<{
51
+ facturae: "facturae";
51
52
  "xrechnung-cii": "xrechnung-cii";
52
53
  "xrechnung-ubl": "xrechnung-ubl";
53
54
  "facturx-en16931": "facturx-en16931";
@@ -58,7 +59,6 @@ export declare const eInvoiceFormatSchema: z.ZodEnum<{
58
59
  ubl: "ubl";
59
60
  cii: "cii";
60
61
  "peppol-bis-3": "peppol-bis-3";
61
- facturae: "facturae";
62
62
  }>;
63
63
  export type EInvoiceFormat = z.infer<typeof eInvoiceFormatSchema>;
64
64
  export declare const sendEInvoiceOutput: z.ZodObject<{
@@ -233,9 +233,9 @@ export declare const reservationItemOutput: z.ZodObject<{
233
233
  guestId: z.ZodOptional<z.ZodString>;
234
234
  status: z.ZodEnum<{
235
235
  cancelled: "cancelled";
236
+ completed: "completed";
236
237
  confirmed: "confirmed";
237
238
  pending: "pending";
238
- completed: "completed";
239
239
  no_show: "no_show";
240
240
  }>;
241
241
  checkIn: z.ZodString;
@@ -326,8 +326,8 @@ export declare const posSaleItemOutput: z.ZodObject<{
326
326
  status: z.ZodOptional<z.ZodEnum<{
327
327
  succeeded: "succeeded";
328
328
  cancelled: "cancelled";
329
- pending: "pending";
330
329
  refunded: "refunded";
330
+ pending: "pending";
331
331
  partially_refunded: "partially_refunded";
332
332
  }>>;
333
333
  amountCents: z.ZodOptional<z.ZodNumber>;
@@ -398,8 +398,8 @@ export declare const bankTransactionItemOutput: z.ZodObject<{
398
398
  postedAt: z.ZodOptional<z.ZodString>;
399
399
  category: z.ZodOptional<z.ZodString>;
400
400
  status: z.ZodOptional<z.ZodEnum<{
401
- pending: "pending";
402
401
  posted: "posted";
402
+ pending: "pending";
403
403
  excluded: "excluded";
404
404
  }>>;
405
405
  matchedDocId: z.ZodOptional<z.ZodString>;
@@ -839,8 +839,8 @@ export declare const periodStatusOutput: z.ZodObject<{
839
839
  status: z.ZodOptional<z.ZodEnum<{
840
840
  open: "open";
841
841
  closed: "closed";
842
- closing: "closing";
843
842
  reopened: "reopened";
843
+ closing: "closing";
844
844
  }>>;
845
845
  startDate: z.ZodOptional<z.ZodString>;
846
846
  endDate: z.ZodOptional<z.ZodString>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frihet/mcp-server",
3
- "version": "1.15.2",
3
+ "version": "1.15.3",
4
4
  "description": "AI-native MCP server for business management — invoices, expenses, deposits, clients, products, quotes, webhooks, CRM, e-invoicing (Facturae/XRechnung/Factur-X/FatturaPA/PEPPOL + FACe Spain B2G + TicketBAI Basque Country + KSeF Poland), vacation rentals, POS, banking, fiscal (Modelo 303/130/390/180/347/415/425/418, VeriFactu, TicketBAI, IS M200/M202), IGIC, AIEM, GL audit approval, white-label portal domain, VIES EU VAT lookup, bank rules, time tracking, recurring invoices, team management, gestoria. 157 tools. Remote endpoint at mcp.frihet.io (zero install). Works with Claude, Cursor, Windsurf, Cline.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
12
- "test": "npm run build && node --test dist/__tests__/openai-profile.test.js dist/__tests__/tool-exposure.test.js dist/__tests__/einvoice-tools.test.js dist/__tests__/einvoice-day4-tools.test.js dist/__tests__/stay-tools.test.js dist/__tests__/pos-tools.test.js dist/__tests__/kitchen-tools.test.js dist/__tests__/banking-tools.test.js dist/__tests__/banking-client-contract.test.js dist/__tests__/pagination-cursor-param.test.js dist/__tests__/fiscal-tools.test.js dist/__tests__/time-tools.test.js dist/__tests__/recurring-tools.test.js dist/__tests__/team-tools.test.js dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js dist/__tests__/audit-server-version.test.js dist/__tests__/openai-grouped-compose.test.js dist/__tests__/contract.test.js dist/__tests__/observability-redaction.test.js dist/__tests__/intelligence-duplicate-invoice.test.js dist/__tests__/get-envelope-unwrap-regression.test.js dist/__tests__/mutation-unwrap-and-schema-regression.test.js dist/__tests__/schema-envelope-guard.test.js",
12
+ "test": "npm run build && node --test dist/__tests__/openai-profile.test.js dist/__tests__/tool-exposure.test.js dist/__tests__/einvoice-tools.test.js dist/__tests__/einvoice-day4-tools.test.js dist/__tests__/stay-tools.test.js dist/__tests__/pos-tools.test.js dist/__tests__/kitchen-tools.test.js dist/__tests__/banking-tools.test.js dist/__tests__/banking-client-contract.test.js dist/__tests__/pagination-cursor-param.test.js dist/__tests__/fiscal-tools.test.js dist/__tests__/time-tools.test.js dist/__tests__/recurring-tools.test.js dist/__tests__/team-tools.test.js dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js dist/__tests__/audit-server-version.test.js dist/__tests__/openai-grouped-compose.test.js dist/__tests__/contract.test.js dist/__tests__/observability-redaction.test.js dist/__tests__/intelligence-duplicate-invoice.test.js dist/__tests__/get-envelope-unwrap-regression.test.js dist/__tests__/mutation-unwrap-and-schema-regression.test.js dist/__tests__/schema-envelope-guard.test.js dist/__tests__/demo-mode.test.js",
13
13
  "start": "node dist/index.js",
14
14
  "postinstall": "node scripts/postinstall.js || true",
15
15
  "prepublishOnly": "npm run build && npm run audit:mcp-refs -- --repo frihet-mcp",