buchpilot-mcp 0.1.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.
@@ -0,0 +1,497 @@
1
+ # BuchPilot MCP — Tool-Referenz
2
+
3
+ Vollstaendige Referenz aller 15 Tools des BuchPilot MCP Servers.
4
+
5
+ ---
6
+
7
+ ## Kontakte
8
+
9
+ ### create_contact
10
+
11
+ Erstellt einen neuen Kontakt (Person oder Firma) im Buchhaltungssystem.
12
+
13
+ **Parameter:**
14
+
15
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
16
+ |-----------|-----|---------|---------|-------------|
17
+ | `type` | `"person"` \| `"company"` | Ja | — | Kontakttyp: Person oder Firma |
18
+ | `name` | string | Ja | — | Nachname (bei Person) oder Firmenname (bei Firma) |
19
+ | `firstName` | string | Nein | — | Vorname (nur bei Person) |
20
+ | `email` | string | Nein | — | E-Mail-Adresse |
21
+ | `role` | `"customer"` \| `"vendor"` \| `"both"` | Nein | `"customer"` | Rolle: Kunde, Lieferant, oder beides |
22
+ | `backend` | string | Nein | Default-Backend | Backend (z.B. "lexoffice") |
23
+
24
+ **Beispiel-Input:**
25
+
26
+ ```json
27
+ {
28
+ "type": "company",
29
+ "name": "Beispiel GmbH",
30
+ "email": "info@beispiel.de",
31
+ "role": "customer"
32
+ }
33
+ ```
34
+
35
+ **Beispiel-Output:**
36
+
37
+ ```json
38
+ {
39
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
40
+ "type": "company",
41
+ "name": "Beispiel GmbH",
42
+ "email": "info@beispiel.de",
43
+ "role": "customer",
44
+ "backend": "lexoffice",
45
+ "raw": { "...": "Lexoffice-spezifische Rohdaten" }
46
+ }
47
+ ```
48
+
49
+ ---
50
+
51
+ ### get_contact
52
+
53
+ Ruft einen Kontakt per ID ab.
54
+
55
+ **Parameter:**
56
+
57
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
58
+ |-----------|-----|---------|---------|-------------|
59
+ | `id` | string | Ja | — | Kontakt-ID |
60
+ | `backend` | string | Nein | Default-Backend | Backend |
61
+
62
+ **Beispiel-Input:**
63
+
64
+ ```json
65
+ {
66
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
67
+ }
68
+ ```
69
+
70
+ **Beispiel-Output:**
71
+
72
+ ```json
73
+ {
74
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
75
+ "type": "company",
76
+ "name": "Beispiel GmbH",
77
+ "email": "info@beispiel.de",
78
+ "role": "customer",
79
+ "backend": "lexoffice",
80
+ "raw": { "...": "..." }
81
+ }
82
+ ```
83
+
84
+ ---
85
+
86
+ ### list_contacts
87
+
88
+ Listet Kontakte auf mit optionalen Filtern.
89
+
90
+ **Parameter:**
91
+
92
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
93
+ |-----------|-----|---------|---------|-------------|
94
+ | `name` | string | Nein | — | Nach Name filtern (Teilsuche) |
95
+ | `email` | string | Nein | — | Nach E-Mail filtern |
96
+ | `role` | `"customer"` \| `"vendor"` | Nein | — | Nach Rolle filtern |
97
+ | `limit` | number | Nein | 25 | Maximale Anzahl Ergebnisse |
98
+ | `backend` | string | Nein | Default-Backend | Backend |
99
+
100
+ **Beispiel-Input:**
101
+
102
+ ```json
103
+ {
104
+ "role": "customer",
105
+ "limit": 10
106
+ }
107
+ ```
108
+
109
+ **Beispiel-Output:**
110
+
111
+ ```json
112
+ [
113
+ {
114
+ "id": "a1b2c3d4-...",
115
+ "type": "company",
116
+ "name": "Beispiel GmbH",
117
+ "email": "info@beispiel.de",
118
+ "role": "customer",
119
+ "backend": "lexoffice",
120
+ "raw": { "...": "..." }
121
+ },
122
+ {
123
+ "id": "b2c3d4e5-...",
124
+ "type": "person",
125
+ "name": "Mustermann",
126
+ "firstName": "Max",
127
+ "email": "max@mustermann.de",
128
+ "role": "customer",
129
+ "backend": "lexoffice",
130
+ "raw": { "...": "..." }
131
+ }
132
+ ]
133
+ ```
134
+
135
+ ---
136
+
137
+ ### update_contact
138
+
139
+ Aktualisiert einen bestehenden Kontakt. Nur die uebergebenen Felder werden geaendert.
140
+
141
+ **Parameter:**
142
+
143
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
144
+ |-----------|-----|---------|---------|-------------|
145
+ | `id` | string | Ja | — | Kontakt-ID |
146
+ | `name` | string | Nein | — | Neuer Name |
147
+ | `firstName` | string | Nein | — | Neuer Vorname |
148
+ | `email` | string | Nein | — | Neue E-Mail |
149
+ | `backend` | string | Nein | Default-Backend | Backend |
150
+
151
+ **Beispiel-Input:**
152
+
153
+ ```json
154
+ {
155
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
156
+ "email": "neu@beispiel.de"
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Rechnungen
163
+
164
+ ### create_invoice
165
+
166
+ Erstellt eine neue Rechnung mit Positionen.
167
+
168
+ **Parameter:**
169
+
170
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
171
+ |-----------|-----|---------|---------|-------------|
172
+ | `contactId` | string | Ja | — | Kontakt-ID des Rechnungsempfaengers |
173
+ | `date` | string | Ja | — | Rechnungsdatum (ISO 8601, z.B. `2026-03-18`) |
174
+ | `lineItems` | Array | Ja | — | Rechnungspositionen (mind. 1) |
175
+ | `lineItems[].name` | string | Ja | — | Positionsname |
176
+ | `lineItems[].quantity` | number | Nein | 1 | Menge |
177
+ | `lineItems[].unitPrice` | number | Ja | — | Einzelpreis netto |
178
+ | `lineItems[].taxRate` | number | Nein | 19 | Steuersatz in Prozent |
179
+ | `title` | string | Nein | — | Rechnungstitel |
180
+ | `introduction` | string | Nein | — | Einleitungstext |
181
+ | `remark` | string | Nein | — | Schlusstext |
182
+ | `currency` | string | Nein | `"EUR"` | Waehrung |
183
+ | `finalize` | boolean | Nein | `false` | Rechnung direkt finalisieren (nicht mehr editierbar) |
184
+ | `backend` | string | Nein | Default-Backend | Backend |
185
+
186
+ **Beispiel-Input:**
187
+
188
+ ```json
189
+ {
190
+ "contactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
191
+ "date": "2026-03-18",
192
+ "lineItems": [
193
+ { "name": "Beratung", "quantity": 10, "unitPrice": 150.00, "taxRate": 19 },
194
+ { "name": "Softwarelizenz", "quantity": 1, "unitPrice": 499.00, "taxRate": 19 }
195
+ ],
196
+ "title": "Rechnung Maerz 2026",
197
+ "introduction": "Vielen Dank fuer Ihren Auftrag.",
198
+ "remark": "Zahlbar innerhalb von 14 Tagen.",
199
+ "finalize": false
200
+ }
201
+ ```
202
+
203
+ **Beispiel-Output:**
204
+
205
+ ```json
206
+ {
207
+ "id": "inv-1234-5678-abcd",
208
+ "number": "RE-2026-0042",
209
+ "contactId": "a1b2c3d4-...",
210
+ "date": "2026-03-18",
211
+ "dueDate": "2026-04-01",
212
+ "status": "draft",
213
+ "totalNet": 1999.00,
214
+ "totalGross": 2378.81,
215
+ "currency": "EUR",
216
+ "lineItems": [
217
+ { "name": "Beratung", "quantity": 10, "unitPrice": 150.00, "taxRate": 19 },
218
+ { "name": "Softwarelizenz", "quantity": 1, "unitPrice": 499.00, "taxRate": 19 }
219
+ ],
220
+ "backend": "lexoffice",
221
+ "raw": { "...": "..." }
222
+ }
223
+ ```
224
+
225
+ ---
226
+
227
+ ### get_invoice
228
+
229
+ Ruft eine Rechnung per ID ab.
230
+
231
+ **Parameter:**
232
+
233
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
234
+ |-----------|-----|---------|---------|-------------|
235
+ | `id` | string | Ja | — | Rechnungs-ID |
236
+ | `backend` | string | Nein | Default-Backend | Backend |
237
+
238
+ ---
239
+
240
+ ### list_invoices
241
+
242
+ Listet Rechnungen auf. Kann nach Status und Kontakt gefiltert werden.
243
+
244
+ **Parameter:**
245
+
246
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
247
+ |-----------|-----|---------|---------|-------------|
248
+ | `status` | `"draft"` \| `"open"` \| `"paid"` \| `"overdue"` | Nein | — | Nach Status filtern |
249
+ | `contactId` | string | Nein | — | Nach Kontakt filtern |
250
+ | `limit` | number | Nein | 25 | Maximale Anzahl |
251
+ | `backend` | string | Nein | Default-Backend | Backend |
252
+
253
+ **Beispiel-Input:**
254
+
255
+ ```json
256
+ {
257
+ "status": "open",
258
+ "limit": 10
259
+ }
260
+ ```
261
+
262
+ ---
263
+
264
+ ### get_invoice_pdf
265
+
266
+ Laedt eine Rechnung als PDF herunter (Base64-kodiert). Die Rechnung muss finalisiert sein (Status "open" oder "paid").
267
+
268
+ **Parameter:**
269
+
270
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
271
+ |-----------|-----|---------|---------|-------------|
272
+ | `id` | string | Ja | — | Rechnungs-ID |
273
+ | `backend` | string | Nein | Default-Backend | Backend |
274
+
275
+ **Beispiel-Output:**
276
+
277
+ ```json
278
+ {
279
+ "filename": "RE-2026-0042.pdf",
280
+ "size_bytes": 45231
281
+ }
282
+ ```
283
+
284
+ Zusaetzlich wird die PDF als Base64-kodierte Ressource zurueckgegeben.
285
+
286
+ ---
287
+
288
+ ### update_invoice
289
+
290
+ Aktualisiert eine bestehende Rechnung. Nur Entwuerfe (Status "draft") koennen aktualisiert werden.
291
+
292
+ **Parameter:**
293
+
294
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
295
+ |-----------|-----|---------|---------|-------------|
296
+ | `id` | string | Ja | — | Rechnungs-ID |
297
+ | `title` | string | Nein | — | Neuer Titel |
298
+ | `introduction` | string | Nein | — | Neuer Einleitungstext |
299
+ | `remark` | string | Nein | — | Neuer Schlusstext |
300
+ | `backend` | string | Nein | Default-Backend | Backend |
301
+
302
+ ---
303
+
304
+ ## Belege
305
+
306
+ ### create_voucher
307
+
308
+ Erstellt einen neuen Beleg (Eingangsrechnung oder Gutschrift).
309
+
310
+ **Parameter:**
311
+
312
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
313
+ |-----------|-----|---------|---------|-------------|
314
+ | `type` | `"purchaseinvoice"` \| `"purchasecreditnote"` \| `"any"` | Ja | — | Belegtyp |
315
+ | `date` | string | Ja | — | Belegdatum (ISO 8601) |
316
+ | `totalGross` | number | Ja | — | Bruttobetrag |
317
+ | `taxRate` | number | Nein | 19 | Steuersatz in Prozent |
318
+ | `contactId` | string | Nein | — | Kontakt-ID (optional) |
319
+ | `remark` | string | Nein | — | Bemerkung |
320
+ | `backend` | string | Nein | Default-Backend | Backend |
321
+
322
+ **Beispiel-Input:**
323
+
324
+ ```json
325
+ {
326
+ "type": "purchaseinvoice",
327
+ "date": "2026-03-15",
328
+ "totalGross": 119.00,
329
+ "taxRate": 19,
330
+ "remark": "Bueromaterial"
331
+ }
332
+ ```
333
+
334
+ **Beispiel-Output:**
335
+
336
+ ```json
337
+ {
338
+ "id": "voucher-abc-123",
339
+ "type": "purchaseinvoice",
340
+ "date": "2026-03-15",
341
+ "totalGross": 119.00,
342
+ "taxRate": 19,
343
+ "backend": "lexoffice",
344
+ "raw": { "...": "..." }
345
+ }
346
+ ```
347
+
348
+ ---
349
+
350
+ ### get_voucher
351
+
352
+ Ruft einen Beleg per ID ab.
353
+
354
+ **Parameter:**
355
+
356
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
357
+ |-----------|-----|---------|---------|-------------|
358
+ | `id` | string | Ja | — | Beleg-ID |
359
+ | `backend` | string | Nein | Default-Backend | Backend |
360
+
361
+ ---
362
+
363
+ ### list_vouchers
364
+
365
+ Listet Belege auf mit optionalen Filtern.
366
+
367
+ **Parameter:**
368
+
369
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
370
+ |-----------|-----|---------|---------|-------------|
371
+ | `type` | `"purchaseinvoice"` \| `"purchasecreditnote"` \| `"any"` | Nein | — | Nach Typ filtern |
372
+ | `limit` | number | Nein | 25 | Maximale Anzahl |
373
+ | `backend` | string | Nein | Default-Backend | Backend |
374
+
375
+ ---
376
+
377
+ ## Angebote
378
+
379
+ ### create_quotation
380
+
381
+ Erstellt ein neues Angebot mit Positionen.
382
+
383
+ **Parameter:**
384
+
385
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
386
+ |-----------|-----|---------|---------|-------------|
387
+ | `contactId` | string | Ja | — | Kontakt-ID |
388
+ | `date` | string | Ja | — | Angebotsdatum (ISO 8601) |
389
+ | `lineItems` | Array | Ja | — | Angebotspositionen (mind. 1) |
390
+ | `lineItems[].name` | string | Ja | — | Positionsname |
391
+ | `lineItems[].quantity` | number | Nein | 1 | Menge |
392
+ | `lineItems[].unitPrice` | number | Ja | — | Einzelpreis netto |
393
+ | `lineItems[].taxRate` | number | Nein | 19 | Steuersatz in Prozent |
394
+ | `expirationDate` | string | Nein | — | Gueltig bis (ISO 8601) |
395
+ | `title` | string | Nein | — | Angebotstitel |
396
+ | `introduction` | string | Nein | — | Einleitungstext |
397
+ | `remark` | string | Nein | — | Schlusstext |
398
+ | `finalize` | boolean | Nein | `false` | Angebot direkt finalisieren |
399
+ | `backend` | string | Nein | Default-Backend | Backend |
400
+
401
+ **Beispiel-Input:**
402
+
403
+ ```json
404
+ {
405
+ "contactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
406
+ "date": "2026-03-18",
407
+ "expirationDate": "2026-04-18",
408
+ "lineItems": [
409
+ { "name": "Webseiten-Redesign", "quantity": 1, "unitPrice": 4500.00 },
410
+ { "name": "SEO-Optimierung", "quantity": 1, "unitPrice": 1200.00 }
411
+ ],
412
+ "title": "Angebot Webprojekt",
413
+ "introduction": "Gerne unterbreiten wir Ihnen folgendes Angebot."
414
+ }
415
+ ```
416
+
417
+ **Beispiel-Output:**
418
+
419
+ ```json
420
+ {
421
+ "id": "quot-9876-abcd",
422
+ "contactId": "a1b2c3d4-...",
423
+ "date": "2026-03-18",
424
+ "expirationDate": "2026-04-18",
425
+ "totalNet": 5700.00,
426
+ "totalGross": 6783.00,
427
+ "lineItems": [
428
+ { "name": "Webseiten-Redesign", "quantity": 1, "unitPrice": 4500.00, "taxRate": 19 },
429
+ { "name": "SEO-Optimierung", "quantity": 1, "unitPrice": 1200.00, "taxRate": 19 }
430
+ ],
431
+ "backend": "lexoffice",
432
+ "raw": { "...": "..." }
433
+ }
434
+ ```
435
+
436
+ ---
437
+
438
+ ### get_quotation
439
+
440
+ Ruft ein Angebot per ID ab.
441
+
442
+ **Parameter:**
443
+
444
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
445
+ |-----------|-----|---------|---------|-------------|
446
+ | `id` | string | Ja | — | Angebots-ID |
447
+ | `backend` | string | Nein | Default-Backend | Backend |
448
+
449
+ ---
450
+
451
+ ## Ueberfaellige Rechnungen
452
+
453
+ ### get_overdue_invoices
454
+
455
+ Listet alle ueberfaelligen Rechnungen mit Betrag, Faelligkeitsdatum und Tagen ueberfaellig auf.
456
+
457
+ **Parameter:**
458
+
459
+ | Parameter | Typ | Pflicht | Default | Beschreibung |
460
+ |-----------|-----|---------|---------|-------------|
461
+ | `days_overdue` | number | Nein | 0 | Mindestens X Tage ueberfaellig (0 = alle ueberfaelligen) |
462
+ | `limit` | number | Nein | 50 | Maximale Anzahl |
463
+ | `backend` | string | Nein | Default-Backend | Backend |
464
+
465
+ **Beispiel-Input:**
466
+
467
+ ```json
468
+ {
469
+ "days_overdue": 30
470
+ }
471
+ ```
472
+
473
+ **Beispiel-Output:**
474
+
475
+ ```json
476
+ {
477
+ "count": 2,
478
+ "total_overdue_amount": 3456.78,
479
+ "currency": "EUR",
480
+ "invoices": [
481
+ {
482
+ "id": "inv-1111-aaaa",
483
+ "number": "RE-2026-0031",
484
+ "totalGross": 2380.00,
485
+ "dueDate": "2026-02-01",
486
+ "daysOverdue": 45
487
+ },
488
+ {
489
+ "id": "inv-2222-bbbb",
490
+ "number": "RE-2026-0035",
491
+ "totalGross": 1076.78,
492
+ "dueDate": "2026-02-15",
493
+ "daysOverdue": 31
494
+ }
495
+ ]
496
+ }
497
+ ```
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "buchpilot-mcp",
3
+ "version": "0.1.1",
4
+ "description": "MCP Server fuer DACH-Buchhaltung (Lexoffice, Billomat, sevDesk)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "buchpilot-mcp": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "dev": "tsx src/index.ts"
14
+ },
15
+ "dependencies": {
16
+ "@modelcontextprotocol/sdk": "^1.0.0",
17
+ "zod": "^3.23.0"
18
+ },
19
+ "devDependencies": {
20
+ "@types/node": "^22.0.0",
21
+ "tsx": "^4.0.0",
22
+ "typescript": "^5.5.0"
23
+ }
24
+ }