MCP-Server
Alle Server

HERO

Handwerkersoftware

Projekte, Kunden, Angebote, Rechnungen, Termine, Zeiten und Field-Service aus HERO direkt im Chat. Lesen und Anlegen — kein Bearbeiten, kein Löschen.

34 Tools · OAuth 2.1 mit PKCE · v2.1.0

Lesend

17 Tools

Fragen ab. Können nichts verändern.

dashboard Geschäftsüberblick

Geschäftsüberblick in EINEM Aufruf: offene Posten (Summe + Liste), Termine der nächsten 7 Tage, offene und zugewiesene Aufträge. Ideal als Einstieg ('was ist heute los?'). stichtag optional 'YYYY-MM-DD' (Default: heute).

stichtag: string
search Universalsuche

Universalsuche über Kontakte, Projekte, Dokumente und Aufträge in EINEM Request. Erster Griff, wenn nur ein Name, eine Nummer oder ein Stichwort bekannt ist.

term*: string
get_project Projektakte

Projektakte: Stufe, Kunde, Adresse, Dokumente und Dateien. Akzeptiert Projektnummer ('PRJ-153') oder project_match_id.

nr_or_id*: string
list_customers Kontakte auflisten

Kontakte suchen oder auflisten (Name, Firma, E-Mail, Telefon, Adresse).

search_term: string  ·  limit: integer
get_customer Kontakt mit Projekten

Ein Kontakt mit allen Adressen und seinen Projekten.

customer_id*: integer
list_documents Dokumente eines Projekts

Dokumente eines Projekts (Angebote, Rechnungen, …) mit Status und Wert. only_active=true blendet gelöschte aus.

project_match_id*: integer  ·  only_active: boolean
list_articles Artikelstamm

Artikelstamm mit Preisen. Liefert product_id (String!), Nummer, Name, EK (base_price), VK (list_price) und den Lagerbestand, falls der Artikel Lagermaterial ist.

search_term: string  ·  limit: integer
get_stock Lagerbestand

Lagerbestand eines Artikels, gelesen über den Artikel. product_id ist ein String (HERO nutzt hier keine Zahl) — aus list_articles übernehmen.

product_id*: string
list_jobs Field-Service-Aufträge

Field-Service-Aufträge (Wartung, Reparatur, Notdienst). status akzeptiert offen/zugewiesen/erledigt (verifiziert) oder einen status_code als Zahl; andere Namen werden gegen die tatsächlichen Statuswerte des Mandanten aufgelöst.

status: string  ·  project_match_id: integer  ·  search_term: string  ·  limit: integer
get_checklists Checklisten eines Auftrags

Checklisten eines Auftrags inklusive der vor Ort in der Mobile-App ausgefüllten Antworten (Feld 'data').

job_id*: integer
list_calendar Termine

Termine im Zeitraum. start/end als ISO MIT Offset ('2026-07-20T00:00:00+02:00'); ohne Offset antwortet HERO mit einem Serverfehler.

start*: string  ·  end*: string  ·  project_match_id: integer  ·  limit: integer
list_time Erfasste Zeiten

Erfasste Arbeitszeiten eines Projekts (Datum, Dauer, Kommentar, Mitarbeiter). start/end als 'YYYY-MM-DD'. Dauer steht in duration_in_seconds.

project_match_id*: integer  ·  start: string  ·  end: string
list_open_invoices Offene Posten

Debitoren-Offene-Posten: wer schuldet was und hängt wie weit hinterher. Restbetrag wird aus Rechnungswert minus erfassten Zahlungen gerechnet.

overdue_only: boolean
get_payment_status Zahlungsstatus

Zahlungsstatus einer Rechnung: offen oder bezahlt, Restbetrag, Fälligkeit und die erfassten Zahlungen. Das ist der Rücklesepfad für record_payment.

document_id*: integer
list_receipts Belege (Eingangsseite)

Eingangsbelege inklusive Zahlungsstand. offen = Wert minus paid_sum. Hinweis: Belege lassen sich über die HERO-API nur lesen, nicht anlegen.

limit: integer
download_document PDF-Link eines Dokuments

Vorsignierter, zeitbegrenzter PDF-Link eines Dokuments — der Empfänger braucht keinen Token. Existiert kein PDF, ist das Dokument noch Entwurf oder im Publishing (~5–8 s).

document_id*: integer  ·  minutes: integer
download_file Link für eine Datei

Vorsignierter, zeitbegrenzter Link für eine beliebige Datei per uuid.

file_upload_uuid*: string  ·  minutes: integer

Schreibend

17 Tools

Legen Neues an. Ändern und löschen nichts Bestehendes.

create_customer Kontakt anlegen

Kontakt mit Adresse anlegen. Wird über die Stammdaten dedupliziert — ein bereits vorhandener Kontakt wird zurückgegeben statt doppelt angelegt. Liefert id UND address_id; die address_id braucht create_project zwingend.

email*: string  ·  first_name*: string  ·  last_name*: string  ·  street*: string  ·  zip_code*: string  ·  city*: string  ·  salutation: string  ·  company: string  ·  phone: string
create_project Projekt anlegen

Projekt auf einen Kunden anlegen. Startet immer auf der ersten Stufe — eine beim Anlegen mitgegebene Stufe ignoriert HERO. Projekte sind bei HERO NICHT löschbar.

customer_id*: integer  ·  name: string
create_offer Angebot anlegen

Angebot über den Document-Builder anlegen. Der Empfänger wird frisch aus HERO gelesen. ⚠ Ein veröffentlichtes Angebot verschiebt das Projekt automatisch auf die Stufe 'Angebot verschickt'. Höchstens EIN Titel: ab zwei Titeln zeigt HEROs PDF je Titel 0,00 €.

project_match_id*: integer  ·  positions*: array  ·  title: string  ·  intro: string  ·  discount_percent: number
create_invoice_from_offer Rechnung aus Angebot

Rechnung mit exakt den Positionen des Angebots — centgenau, inklusive Referenz auf das Angebot. Positionen werden aus dem veröffentlichten Angebotsentwurf übernommen, nicht neu getippt.

offer_document_id*: integer  ·  project_match_id*: integer
create_document Dokument anlegen

Beliebiges Dokument anlegen: rechnung, angebot, gutschrift, auftragsbestaetigung, lieferschein, allgemein, rechnung_13b — oder jeder Dokumenttyp-Name dieses Mandanten. Abschlags- und Schlussrechnungen sind 'rechnung' mit passenden (auch negativen) Positionen.

project_match_id*: integer  ·  doc_type*: string  ·  positions*: array  ·  title: string  ·  intro: string
create_timesheet Stundenzettel

Stundenzettel als PDF aus den bereits erfassten Zeiten eines Projekts. Baut ein Dokument vom Typ 'allgemein' mit je einer Position pro Zeiteintrag (Menge = Stunden). date_from/date_to als 'YYYY-MM-DD'.

project_match_id*: integer  ·  date_from: string  ·  date_to: string  ·  title: string
create_job Auftrag anlegen

Field-Service-Auftrag (Wartung, Reparatur, Notdienst) anlegen. job_type ist eine geschlossene Liste — HERO speichert jeden anderen Wert still als 'unknown', deshalb wird hier vorher geprüft. start/end als ISO MIT Offset. Aufträge sind nicht löschbar.

customer_id*: integer  ·  title*: string  ·  start*: string  ·  end*: string  ·  project_match_id: integer  ·  job_type: string  ·  description: string
create_checklist Checkliste anlegen

Checkliste an einen Auftrag ODER ein Projekt hängen (genau eins von beiden). Die Punkte sind die Struktur — abgehakt wird in der Mobile-App, nicht über die API. Eine falsche Form leert HERO beim Anlegen still, deshalb wird das Ergebnis zurückgelesen und geprüft.

name*: string  ·  items*: array  ·  job_id: integer  ·  project_match_id: integer
create_article Artikel anlegen

Artikel in den Stamm aufnehmen. Setzt sales_prices UND default_sales_price — ohne die kalkuliert HERO jedes Angebot mit dem EINKAUFSpreis, und Angebote gehen zum Selbstkostenpreis raus. Das ist die teuerste Falle der HERO-API und hier eingebaut.

nr*: string  ·  name*: string  ·  unit*: string  ·  purchase_price*: number  ·  sale_price*: number  ·  description: string  ·  manufacturer: string  ·  ean: string
schedule_appointment Termin anlegen

Termin am Projekt anlegen. start/end als ISO MIT Offset — ohne Offset antwortet HERO mit einem Serverfehler. category ist der Name einer Terminkategorie dieses Mandanten.

project_match_id*: integer  ·  title*: string  ·  start*: string  ·  end*: string  ·  category: string
add_task Aufgabe anlegen

Aufgabe an ein Projekt hängen. HERO hat kein create_task — update_task ohne id legt an (Upsert). due als ISO mit Offset.

project_match_id*: integer  ·  title*: string  ·  due*: string  ·  comment: string
log_time Arbeitszeit buchen

Arbeitszeit auf ein Projekt buchen. Wie bei Aufgaben legt update_ ohne id an. start/end als ISO MIT Offset. Die Dauer rechnet HERO selbst (duration_in_seconds).

project_match_id*: integer  ·  start*: string  ·  end*: string  ·  comment: string
add_logbook_note Logbucheintrag

Logbucheintrag / Kommentar am Projekt. Erscheint als 'Kommentar von <Nutzer>'.

project_match_id*: integer  ·  text*: string
record_payment Zahlung erfassen

Zahlung auf eine Rechnung erfassen und anschließend zurücklesen, damit klar ist, ob sie wirklich verbucht wurde. date als 'YYYY-MM-DD'.

document_id*: integer  ·  amount*: number  ·  date*: string
create_lead Lead einliefern

Externen Lead über die Lead API einliefern. Erzeugt Kunde UND Projekt. ⚠ Nicht idempotent: der Kunde wird dedupliziert, das Projekt NICHT — zweimal aufrufen heißt zwei Projekte, und Projekte sind bei HERO nicht löschbar.

email*: string  ·  last_name*: string  ·  zip_code*: string  ·  measure: string  ·  first_name: string  ·  street: string  ·  city: string  ·  comment: string
upload_file Datei hochladen

Datei nach HERO hochladen und optional an ein Projekt hängen. Inhalt entweder als url (wird geladen) oder als content_base64. Liefert die file_upload_uuid, die alle Datei-Konsumenten von HERO brauchen. ⚠ HERO kennt nur einen Upload-Weg (die Lead API), der dabei zwangsläufig ein Eingangs-Projekt anlegt; dieses Projekt ist nicht löschbar.

filename*: string  ·  url: string  ·  content_base64: string  ·  project_match_id: integer
attach_pdf Fremd-PDF anhängen

Ein fremdes PDF als eigenständiges Dokument an ein Projekt hängen (nicht über den Document-Builder erzeugt, sondern hochgeladen). Inhalt als url oder content_base64.

filename*: string  ·  project_match_id*: integer  ·  url: string  ·  content_base64: string  ·  doc_type: string