{"ok":true,"name":"impulscrm-mcp","version":"1.0.0","transport":"streamable-http","endpoint":"/mcp","authRequired":true,"auth":"Authorization: Bearer icrm_<impulsCRM API token>","oauth":{"enabled":true,"issuer":"https://mcp.impulscrm.ch","authorizationServerMetadata":"https://mcp.impulscrm.ch/.well-known/oauth-authorization-server","protectedResourceMetadata":"https://mcp.impulscrm.ch/.well-known/oauth-protected-resource/mcp","dynamicClientRegistration":true,"persistentGrantState":true,"note":"For claude.ai / ChatGPT: add the endpoint as a custom connector, no client id needed; paste your impulsCRM API token on the authorization page."},"crmBaseUrl":"http://app:3001/api","tools":[{"name":"get_crm_status","title":"CRM status & company","description":"Health check of the connected impulsCRM instance plus the company profile (name, address, currency, VAT rate, document prefixes). Call this first to learn defaults such as currency and VAT.","group":"System","scope":"read","readOnly":true,"destructive":false},{"name":"get_dashboard_stats","title":"Dashboard KPIs","description":"Key figures of the tenant: number of customers/invoices/orders/quotes, revenue, outstanding amount, invoice status distribution, time-tracking and expense totals.","group":"System","scope":"read","readOnly":true,"destructive":false},{"name":"get_dashboard_charts","title":"Dashboard chart data","description":"Chart data of the current year: revenue per month (paid invoices), status distribution, top customers and overdue aging buckets.","group":"System","scope":"read","readOnly":true,"destructive":false},{"name":"search","title":"Global search","description":"Search across customers (name, company, e-mail), invoices, quotes, orders (by number) and products (name, SKU, description). Returns up to 5 hits per type. Use it to resolve names to IDs before creating documents.","group":"System","scope":"read","readOnly":true,"destructive":false},{"name":"list_overdue_invoices","title":"Overdue invoices","description":"Invoices that are sent/overdue and past their due date, oldest first, with days overdue (max 20).","group":"System","scope":"read","readOnly":true,"destructive":false},{"name":"get_company_settings","title":"Company settings","description":"Full company settings: name, address, e-mail, IBAN, VAT number, default VAT rate, currency, document prefixes, payment terms, order types, deposit and e-mail settings, and the accounting profile (legal form, UID, tax canton, fiscal year, owners, VAT method).","group":"Settings","scope":"read","readOnly":true,"destructive":false},{"name":"update_company_settings","title":"Update company settings","description":"Change company settings (admin scope). Only the given fields are changed.","group":"Settings","scope":"admin","readOnly":false,"destructive":false},{"name":"list_customers","title":"List customers","description":"Paginated customer list (Kunden). Search matches first name, last name, company, e-mail and customer number.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"get_customer","title":"Get customer","description":"Full details of one customer including address and notes.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"create_customer","title":"Create customer","description":"Create a customer (Kunde). firstName and lastName are required; for companies put the contact person there and the company name in \"company\" (no contact person given: firstName \"Kontakt\", lastName = company name). The customer number is assigned automatically.","group":"Customers","scope":"write","readOnly":false,"destructive":false},{"name":"update_customer","title":"Update customer","description":"Change customer fields. Only the given fields are updated.","group":"Customers","scope":"write","readOnly":false,"destructive":false},{"name":"delete_customer","title":"Delete customer","description":"Permanently delete a customer. Ask the user for confirmation first. A customer with documents is refused (FORCE_DELETE_REQUIRED) unless force=true, which deletes the customer together with all invoices, quotes, orders, credit notes, delivery notes, contracts, time entries, files and logs. Alternative that keeps the books: anonymisation in the web app.","group":"Customers","scope":"write","readOnly":false,"destructive":true},{"name":"get_customer_stats","title":"Customer statistics","description":"Revenue, open amounts and document counts of one customer.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"get_customer_documents","title":"Customer documents","description":"Recent invoices, quotes, orders and credit notes of one customer.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"update_customer_notes","title":"Update customer notes","description":"Replace the free-text notes of a customer.","group":"Customers","scope":"write","readOnly":false,"destructive":false},{"name":"create_customer_portal_token","title":"Customer portal link","description":"Generate (or regenerate) the customer portal token. The portal is reachable at <crm-url>/portal/<token>; an existing token becomes invalid.","group":"Customers","scope":"write","readOnly":false,"destructive":false},{"name":"list_customer_files","title":"List customer files","description":"Files filed with one customer (Kundendateien: quotes, NDAs, project plans, minutes, images …), newest first. Metadata only (id, filename, mimeType, size, note, source, createdAt) - use get_customer_file for the content.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"add_customer_file","title":"Add customer file","description":"File a document with a customer (Kundendatei ablegen), e.g. an attachment from a WhatsApp chat or e-mail. Allowed: PDF, Word, Excel, PowerPoint, OpenDocument, images, audio/video, ZIP and text, up to 20 MB. The type is taken from extension and content. Idempotent: the same file for the same customer returns the existing entry with created=false instead of a copy.","group":"Customers","scope":"write","readOnly":false,"destructive":false},{"name":"get_customer_file","title":"Get customer file","description":"Download one customer file. Returns the file itself as an embedded resource (base64 blob with mimeType; the file name is the last segment of the uri) plus its metadata.","group":"Customers","scope":"read","readOnly":true,"destructive":false},{"name":"delete_customer_file","title":"Delete customer file","description":"Permanently delete one customer file. Ask the user for confirmation first.","group":"Customers","scope":"write","readOnly":false,"destructive":true},{"name":"list_quotes","title":"List quotes","description":"Paginated list of quotes (Offerten/Angebote) with customer, total, status and validity. Filter by status (comma-separated), date range or search term (quote number, customer name).","group":"Quotes","scope":"read","readOnly":true,"destructive":false},{"name":"get_quote","title":"Get quote","description":"Full quote including line items, totals, customer and conversion links.","group":"Quotes","scope":"read","readOnly":true,"destructive":false},{"name":"create_quote","title":"Create quote","description":"Create a quote (Offerte) for a customer. Needs the customer ID (use search or list_customers) and at least one line item. Quote number, subtotal, VAT and total are calculated by the CRM. Defaults: status draft, company currency, validUntil empty.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"update_quote","title":"Update quote","description":"Change a quote. Passing items replaces all line items; totals are recalculated.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"delete_quote","title":"Delete quote","description":"Permanently delete a quote. Ask the user for confirmation first.","group":"Quotes","scope":"write","readOnly":false,"destructive":true},{"name":"get_quote_pdf","title":"Quote PDF","description":"Render the quote as PDF. Returns a download link (valid ~15 minutes) or a local file path. Set inline=true to also get the base64 content.","group":"Quotes","scope":"read","readOnly":true,"destructive":false},{"name":"send_quote","title":"Send quote","description":"Mark the quote as sent, create its public link and - if e-mail sending is enabled and the customer has an e-mail address - e-mail the PDF to the customer. Returns emailSent.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"share_quote","title":"Public quote link","description":"Create the public link of a quote without changing its status. The customer can view, download and accept the quote there.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"convert_quote_to_order","title":"Quote → order","description":"Create an order (Auftrag) from an accepted quote. Fails if the quote was already converted.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"convert_quote_to_invoice","title":"Quote → invoice","description":"Create an invoice (Rechnung) directly from a quote. Fails if the quote was already converted to an invoice.","group":"Quotes","scope":"write","readOnly":false,"destructive":false},{"name":"list_orders","title":"List orders","description":"Paginated list of orders (Aufträge). Filter by status, customer, date range or search term (order number, customer name).","group":"Orders","scope":"read","readOnly":true,"destructive":false},{"name":"get_order","title":"Get order","description":"Full order including line items, totals, customer and linked invoices.","group":"Orders","scope":"read","readOnly":true,"destructive":false},{"name":"create_order","title":"Create order","description":"Create an order (Auftrag) for a customer with line items. Order number and totals are calculated by the CRM.","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"update_order","title":"Update order","description":"Change an order (status, items, notes, ...). Passing items replaces all line items.","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"delete_order","title":"Delete order","description":"Permanently delete an order. Ask the user for confirmation first.","group":"Orders","scope":"write","readOnly":false,"destructive":true},{"name":"get_order_pdf","title":"Order PDF","description":"Render the order confirmation as PDF (download link or local path).","group":"Orders","scope":"read","readOnly":true,"destructive":false},{"name":"convert_order_to_invoice","title":"Order → invoice","description":"Create an invoice from an order and link it to the order.","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"link_invoice_to_order","title":"Link invoice to order","description":"Attach an existing invoice to an order (e.g. partial invoices).","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"unlink_invoice_from_order","title":"Unlink invoice from order","description":"Remove the link between an order and an invoice (the invoice itself is kept).","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"merge_order_invoices","title":"Merge order invoices","description":"Merge all invoices linked to an order into one invoice.","group":"Orders","scope":"write","readOnly":false,"destructive":false},{"name":"list_order_time_entries","title":"Time entries of an order","description":"All time-tracking entries booked on an order.","group":"Orders","scope":"read","readOnly":true,"destructive":false},{"name":"list_projects","title":"List projects","description":"Projects (Projekte) with customer, derived phase (quote_draft, quote_sent, quote_accepted, order_open, in_progress, to_invoice, invoice_open, done, lost, paused), their quotes/orders/invoices in brief and figures: budget (net), hours, timeValue, unbilledHours/unbilledValue, expenses, cost, invoiced, paid, outstanding, margin, usage. open=true: only projects that are not done/lost.","group":"Projects","scope":"read","readOnly":true,"destructive":false},{"name":"get_project","title":"Get project","description":"One project with everything about it and its customer: project (phase, figures, notes, budget, due date), its quotes, orders, invoices, time entries and expenses, the customer card with notes, customer files, activities, and the customer's other documents and projects.","group":"Projects","scope":"read","readOnly":true,"destructive":false},{"name":"create_project","title":"Create project","description":"Create a project for a customer by hand. Usually not needed: a new quote or order starts its project automatically.","group":"Projects","scope":"write","readOnly":false,"destructive":false},{"name":"update_project","title":"Update project","description":"Change name, notes, budget, due date or the manual status of a project (active = follows the documents, paused, closed, lost).","group":"Projects","scope":"write","readOnly":false,"destructive":false},{"name":"assign_to_project","title":"Assign to project","description":"Move a document into a project (same customer): quote, order (brings its invoices and time entries), invoice, time_entry, expense, file or activity.","group":"Projects","scope":"write","readOnly":false,"destructive":false},{"name":"remove_from_project","title":"Remove from project","description":"Take a document out of a project (the document itself stays).","group":"Projects","scope":"write","readOnly":false,"destructive":false},{"name":"delete_project","title":"Delete project","description":"Delete an empty project. A project with documents cannot be deleted – set manualStatus closed or lost instead.","group":"Projects","scope":"write","readOnly":false,"destructive":true},{"name":"list_invoices","title":"List invoices","description":"Paginated list of invoices (Rechnungen) with customer, total, status, due date. Filter by status, date range or search term (invoice number, customer name).","group":"Invoices","scope":"read","readOnly":true,"destructive":false},{"name":"get_invoice","title":"Get invoice","description":"Full invoice including line items, totals, customer, payment info and public token.","group":"Invoices","scope":"read","readOnly":true,"destructive":false},{"name":"create_invoice","title":"Create invoice","description":"Create an invoice (Rechnung) for a customer with line items. Invoice number, VAT per rate, Swiss rounding and totals are calculated by the CRM; dueDate defaults to today + payment term from settings. invoiceDate defaults to today; give servicePeriodFrom/To when the service was rendered on other dates (MWSTG Art. 26).","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"update_invoice","title":"Update invoice","description":"Change an invoice. Drafts are fully editable (passing items replaces all line items; totals are recalculated). An issued invoice (status other than draft) is frozen: only status, dueDate and paymentMethods can change, and status only moves forward (sent → paid/overdue/cancelled). Use create_credit_note_from_invoice or cancel_invoice to correct it.","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"delete_invoice","title":"Delete invoice","description":"Permanently delete an invoice. Ask the user for confirmation first. Drafts are deleted directly; an issued invoice is an accounting record (GeBüV) and is refused unless force=true - prefer cancel_invoice, which keeps it on record.","group":"Invoices","scope":"write","readOnly":false,"destructive":true},{"name":"cancel_invoice","title":"Cancel invoice (Storno)","description":"Cancel an issued invoice. It stays on record with its number and is marked cancelled; give the reason. Not possible for paid invoices - create a credit note instead. Ask the user for confirmation first.","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"get_invoice_pdf","title":"Invoice PDF","description":"Render the invoice as PDF (with Swiss QR bill when the plugin is enabled). Returns a download link or local path.","group":"Invoices","scope":"read","readOnly":true,"destructive":false},{"name":"send_invoice","title":"Send invoice","description":"Mark the invoice as sent, create its public link and - if e-mail sending is enabled and the customer has an e-mail address - e-mail the PDF to the customer. Returns emailSent.","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"share_invoice","title":"Public invoice link","description":"Create the public link of an invoice without changing its status (view + PDF + online payment if enabled).","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"mark_invoice_paid","title":"Mark invoice paid","description":"Set the invoice status to paid. paidAt defaults to now.","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"copy_invoice","title":"Copy invoice","description":"Create a new draft invoice with the same customer and items as an existing one.","group":"Invoices","scope":"write","readOnly":false,"destructive":false},{"name":"list_customer_recent_invoices","title":"Recent invoices of a customer","description":"The most recent invoices of one customer.","group":"Invoices","scope":"read","readOnly":true,"destructive":false},{"name":"list_credit_notes","title":"List credit notes","description":"Paginated list of credit notes (Gutschriften).","group":"CreditNotes","scope":"read","readOnly":true,"destructive":false},{"name":"get_credit_note","title":"Get credit note","description":"Full credit note including items, totals and the related invoice.","group":"CreditNotes","scope":"read","readOnly":true,"destructive":false},{"name":"create_credit_note","title":"Create credit note","description":"Create a credit note (Gutschrift) for a customer, optionally referencing an invoice.","group":"CreditNotes","scope":"write","readOnly":false,"destructive":false},{"name":"create_credit_note_from_invoice","title":"Credit note from invoice","description":"Create a credit note that reverses an existing invoice (same customer and items).","group":"CreditNotes","scope":"write","readOnly":false,"destructive":false},{"name":"update_credit_note","title":"Update credit note","description":"Change a credit note (items, reason, status, notes).","group":"CreditNotes","scope":"write","readOnly":false,"destructive":false},{"name":"delete_credit_note","title":"Delete credit note","description":"Permanently delete a credit note. Ask the user for confirmation first. An issued credit note is refused unless force=true.","group":"CreditNotes","scope":"write","readOnly":false,"destructive":true},{"name":"get_credit_note_pdf","title":"Credit note PDF","description":"Render the credit note as PDF (download link or local path).","group":"CreditNotes","scope":"read","readOnly":true,"destructive":false},{"name":"send_credit_note","title":"Send credit note","description":"Mark the credit note as sent and e-mail it to the customer when e-mail sending is enabled.","group":"CreditNotes","scope":"write","readOnly":false,"destructive":false},{"name":"list_delivery_notes","title":"List delivery notes","description":"Paginated list of delivery notes (Lieferscheine).","group":"DeliveryNotes","scope":"read","readOnly":true,"destructive":false},{"name":"get_delivery_note","title":"Get delivery note","description":"Full delivery note including items, delivery address and linked order.","group":"DeliveryNotes","scope":"read","readOnly":true,"destructive":false},{"name":"create_delivery_note","title":"Create delivery note","description":"Create a delivery note (Lieferschein) with quantity items (no prices).","group":"DeliveryNotes","scope":"write","readOnly":false,"destructive":false},{"name":"create_delivery_note_from_order","title":"Delivery note from order","description":"Create a delivery note from an order (items and customer are copied).","group":"DeliveryNotes","scope":"write","readOnly":false,"destructive":false},{"name":"update_delivery_note","title":"Update delivery note","description":"Change a delivery note (items, address, date, status, notes).","group":"DeliveryNotes","scope":"write","readOnly":false,"destructive":false},{"name":"delete_delivery_note","title":"Delete delivery note","description":"Permanently delete a delivery note. Ask the user for confirmation first.","group":"DeliveryNotes","scope":"write","readOnly":false,"destructive":true},{"name":"get_delivery_note_pdf","title":"Delivery note PDF","description":"Render the delivery note as PDF (download link or local path).","group":"DeliveryNotes","scope":"read","readOnly":true,"destructive":false},{"name":"mark_delivery_note_delivered","title":"Mark delivered","description":"Set the delivery note status to delivered.","group":"DeliveryNotes","scope":"write","readOnly":false,"destructive":false},{"name":"list_recurring_invoices","title":"List recurring invoices","description":"All recurring invoice templates (Abo-Rechnungen) with interval, next run and status.","group":"RecurringInvoices","scope":"read","readOnly":true,"destructive":false},{"name":"get_recurring_invoice","title":"Get recurring invoice","description":"One recurring invoice template with its items.","group":"RecurringInvoices","scope":"read","readOnly":true,"destructive":false},{"name":"create_recurring_invoice","title":"Create recurring invoice","description":"Create a template that generates an invoice automatically every interval, starting at nextRun.","group":"RecurringInvoices","scope":"write","readOnly":false,"destructive":false},{"name":"update_recurring_invoice","title":"Update recurring invoice","description":"Change a recurring invoice template, e.g. pause it with active=false.","group":"RecurringInvoices","scope":"write","readOnly":false,"destructive":false},{"name":"delete_recurring_invoice","title":"Delete recurring invoice","description":"Delete a recurring invoice template (already generated invoices are kept).","group":"RecurringInvoices","scope":"write","readOnly":false,"destructive":true},{"name":"generate_recurring_invoice_now","title":"Generate invoice now","description":"Immediately create an invoice from a recurring template (outside the schedule).","group":"RecurringInvoices","scope":"write","readOnly":false,"destructive":false},{"name":"list_support_services","title":"Support service blocks","description":"The service blocks (Leistungen) of Support-Verträge – hosting, maintenance, support hours, SLA … – that quotes/orders offer as positions (line item field supportService). Use includeInactive to see deactivated ones.","group":"SupportContracts","scope":"read","readOnly":true,"destructive":false},{"name":"create_support_service","title":"Create support service block","description":"Define a new service block for support contracts (name, description, price per interval, included hours, response time, terms).","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"update_support_service","title":"Update support service block","description":"Change a service block. Existing contracts keep their snapshot.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"delete_support_service","title":"Delete support service block","description":"Deletes a block – or deactivates it when contracts use it. Ask for confirmation first.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":true},{"name":"list_support_contracts","title":"List support contracts","description":"Support contracts with status, services, monthly total, term end, notice deadline. Filter by status, customerId or orderId.","group":"SupportContracts","scope":"read","readOnly":true,"destructive":false},{"name":"get_support_contract","title":"Support contract","description":"One contract with services, conditions, computed figures (monthly total, current term end, notice deadline, days until end), acceptance and cancellation records, linked quote/orders.","group":"SupportContracts","scope":"read","readOnly":true,"destructive":false},{"name":"create_support_contract","title":"Create support contract","description":"Create a standalone contract (draft) for a customer from service blocks. Contracts for quotes/orders with support positions are created automatically. Then send_support_contract for the customer to accept online, or accept_support_contract for a signed copy.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"update_support_contract","title":"Update support contract","description":"Change a draft/sent contract. Accepted contracts only allow title, notes and orders.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"send_support_contract","title":"Send support contract for acceptance","description":"E-mails the contract PDF with the acceptance link to the customer and sets the status to \"sent\". Confirm with the user first.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"accept_support_contract","title":"Record contract acceptance","description":"Record a manual acceptance (signed copy, e-mail confirmation) with name, date and note – puts the contract in force.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"cancel_support_contract","title":"Cancel support contract","description":"Record a cancellation. The effective end is computed from the notice period and term (or overridden with effectiveDate). Confirm with the user first.","group":"SupportContracts","scope":"write","readOnly":false,"destructive":false},{"name":"get_support_contract_pdf","title":"Support contract PDF","description":"Render the contract document (parties, services, conditions, terms, acceptance record or signature block) as PDF.","group":"SupportContracts","scope":"read","readOnly":true,"destructive":false},{"name":"list_products","title":"List products","description":"Paginated product/service catalogue (Produkte). Filter by category, active flag or search (name, SKU, description). Use products to fill line items with consistent prices.","group":"Products","scope":"read","readOnly":true,"destructive":false},{"name":"get_product","title":"Get product","description":"One product with price, VAT, unit and custom fields.","group":"Products","scope":"read","readOnly":true,"destructive":false},{"name":"list_product_categories","title":"Product categories","description":"Distinct product categories in use.","group":"Products","scope":"read","readOnly":true,"destructive":false},{"name":"create_product","title":"Create product","description":"Create a product or service with a net unit price.","group":"Products","scope":"write","readOnly":false,"destructive":false},{"name":"update_product","title":"Update product","description":"Change product fields (price, VAT, active, ...).","group":"Products","scope":"write","readOnly":false,"destructive":false},{"name":"delete_product","title":"Delete product","description":"Permanently delete a product. Prefer active=false via update_product to keep history.","group":"Products","scope":"write","readOnly":false,"destructive":true},{"name":"list_custom_product_fields","title":"Custom product fields","description":"Definitions of the tenant-specific extra product fields (name, label, type, options).","group":"Products","scope":"read","readOnly":true,"destructive":false},{"name":"create_custom_product_field","title":"Create custom product field","description":"Define an extra product field (admin scope).","group":"Products","scope":"admin","readOnly":false,"destructive":false},{"name":"update_custom_product_field","title":"Update custom product field","description":"Change a custom product field definition (admin scope).","group":"Products","scope":"admin","readOnly":false,"destructive":false},{"name":"delete_custom_product_field","title":"Delete custom product field","description":"Remove a custom product field definition (admin scope).","group":"Products","scope":"admin","readOnly":false,"destructive":true},{"name":"import_products_preview","title":"Preview product import","description":"Map raw JSON exported from a shop (woocommerce, medusa or generic) to impulsCRM products without saving. Review the result, then call import_products_confirm.","group":"Products","scope":"write","readOnly":true,"destructive":false},{"name":"import_products_confirm","title":"Confirm product import","description":"Insert a list of mapped products (name and unitPrice required per product). Returns inserted/failed counts.","group":"Products","scope":"write","readOnly":false,"destructive":false},{"name":"list_expenses","title":"List expenses","description":"Paginated list of expenses (Ausgaben). Filter by category, date range or search (description, supplier).","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"get_expense","title":"Get expense","description":"One expense with all fields.","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"get_expense_summary","title":"Expense summary","description":"Expense totals grouped by category for a period.","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"create_expense","title":"Create expense","description":"Record an expense (Ausgabe). description and amount are required; date defaults to today.","group":"Expenses","scope":"write","readOnly":false,"destructive":false},{"name":"update_expense","title":"Update expense","description":"Change an expense.","group":"Expenses","scope":"write","readOnly":false,"destructive":false},{"name":"delete_expense","title":"Delete expense","description":"Permanently delete an expense.","group":"Expenses","scope":"write","readOnly":false,"destructive":true},{"name":"beleg_hochladen","title":"Beleg hochladen","description":"Liefert einen Beleg (Eingangsrechnung, Quittung, Foto oder Scan) in den Belegeingang von impulsCRM – nie nach bexio. Erlaubt: PDF, JPG, PNG, HEIC, TIFF, WebP bis 20 MB. Die Datei wird unverändert archiviert (SHA-256), die Swiss QR-Rechnung gelesen, PDF-Text bzw. Foto (OCR) ausgewertet und von der KI ergänzt; jede Zahl wird gegen QR-Code und Text geprüft. Ergebnis: ein Vorschlag mit status \"proposed\" (zu prüfen), Herkunft je Feld (sources: qr, text, ai, learned, computed) und Hinweisen (issues). Dieselbe Datei zweimal liefert den bestehenden Beleg (duplicateFile=true); gleicher Lieferant+Betrag+Rechnungsnummer/Datum wird als möglicher Doppelbeleg gemeldet. Beispiel E-Mail-Anhang: {\"filename\":\"Rechnung_Swisscom_2026-10.pdf\",\"contentBase64\":\"JVBERi0xLjcK…\",\"source\":\"email\",\"sourceRef\":\"<message-id@swisscom.ch>\",\"note\":\"aus Mail von rechnung@swisscom.ch\"}. Danach mit beleg_bestaetigen bestätigen (bei Hinweisen zuerst prüfen bzw. den Menschen fragen).","group":"Expenses","scope":"write","readOnly":false,"destructive":false},{"name":"belege_auflisten","title":"Belege auflisten","description":"Belege im Belegeingang, neueste zuerst. Filter: status (proposed = zu prüfen, confirmed = bestätigt, cancelled = storniert, all = alle), supplier (Teil des Lieferantennamens), from/to (Belegdatum JJJJ-MM-TT), search (Lieferant, Beschreibung, Rechnungsnummer, Dateiname). Beispiel: {\"status\":\"proposed\"} zeigt alles, was noch geprüft werden muss. Liefert auch die Anzahl je Status.","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"beleg_details","title":"Beleg-Details","description":"Ein Beleg mit allen Feldern, Herkunft je Feld (qr = QR-Rechnung, text = Text des Belegs, ai = KI-Vorschlag, learned = vom Lieferanten gelernt, computed = berechnet), Hinweisen (FEHLER/Prüfen/Info), QR-Daten und Verlauf. withFile=true liefert zusätzlich die Originaldatei als eingebettete Ressource; withText=true den erkannten Text.","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"beleg_bestaetigen","title":"Beleg bestätigen","description":"Bestätigt einen Beleg (status proposed → confirmed), optional mit Korrekturen. Erst danach zählt er als Ausgabe und wird gebucht. Korrekturen werden je Lieferant gelernt (Konto, Kategorie, MWST-Satz, Zahlungsart) und beim nächsten Beleg dieses Lieferanten zuerst verwendet. IBAN und UID werden auf die Prüfziffer geprüft. Per Überweisung zu zahlende Belege (bank_transfer + IBAN) erscheinen danach in kreditoren_offen. Beispiel: {\"receiptId\":\"66a…\",\"account\":\"6570\",\"vatRate\":8.1} oder ohne Korrekturen {\"receiptId\":\"66a…\"}. Bei FEHLER-Hinweisen vorher den Menschen fragen.","group":"Expenses","scope":"write","readOnly":false,"destructive":false},{"name":"beleg_stornieren","title":"Beleg stornieren","description":"Storniert einen Beleg (z. B. Doppelbeleg oder Gutschrift erhalten). Der Beleg bleibt 10 Jahre archiviert (GeBüV), zählt aber nicht mehr und wird nicht bezahlt. Nur auf ausdrücklichen Wunsch des Menschen; reason ist Pflicht. Beispiel: {\"receiptId\":\"66a…\",\"reason\":\"Doppelt erhalten, siehe Beleg vom 03.10.\"}","group":"Expenses","scope":"write","readOnly":false,"destructive":true},{"name":"kreditoren_offen","title":"Offene Kreditoren","description":"Bestätigte Belege, die noch per Überweisung zu bezahlen sind, nach Fälligkeit sortiert, mit Summen je Währung und überfälligen Posten. dueBefore=JJJJ-MM-TT zeigt nur, was bis dann fällig ist. Bezahlt wird im E-Banking (Zahlungsdatei pain.001 unter Ausgaben → Kreditoren).","group":"Expenses","scope":"read","readOnly":true,"destructive":false},{"name":"list_time_entries","title":"List time entries","description":"Time-tracking entries (Zeiterfassung), newest first. Filter by customer, order, project, billable/billed flags and date range.","group":"TimeTracking","scope":"read","readOnly":true,"destructive":false},{"name":"get_time_entry","title":"Get time entry","description":"One time entry.","group":"TimeTracking","scope":"read","readOnly":true,"destructive":false},{"name":"get_time_summary","title":"Time-tracking summary","description":"Total, billable, billed and unbilled hours (optionally per customer and period).","group":"TimeTracking","scope":"read","readOnly":true,"destructive":false},{"name":"create_time_entry","title":"Create time entry","description":"Book hours on a customer (and optionally an order/project). duration is in hours (e.g. 1.5).","group":"TimeTracking","scope":"write","readOnly":false,"destructive":false},{"name":"update_time_entry","title":"Update time entry","description":"Change a time entry (not possible once billed).","group":"TimeTracking","scope":"write","readOnly":false,"destructive":false},{"name":"delete_time_entry","title":"Delete time entry","description":"Delete a time entry. A billed entry is refused unless force=true (admin token); the invoice itself stays unchanged.","group":"TimeTracking","scope":"write","readOnly":false,"destructive":true},{"name":"generate_invoice_from_time_entries","title":"Invoice from time entries","description":"Create an invoice from all unbilled, billable time entries of a customer (optionally limited to a period or order) and mark them as billed.","group":"TimeTracking","scope":"write","readOnly":false,"destructive":false},{"name":"list_activities","title":"List activities","description":"Activity feed of the tenant (calls, e-mails, meetings, notes, tasks, system events), newest first.","group":"Activities","scope":"read","readOnly":true,"destructive":false},{"name":"list_customer_activities","title":"Customer activities","description":"Activity history of one customer.","group":"Activities","scope":"read","readOnly":true,"destructive":false},{"name":"create_activity","title":"Log activity","description":"Log a call, e-mail, meeting, note or task - typically on a customer.","group":"Activities","scope":"write","readOnly":false,"destructive":false},{"name":"delete_activity","title":"Delete activity","description":"Delete an activity entry.","group":"Activities","scope":"write","readOnly":false,"destructive":true},{"name":"list_notifications","title":"Notifications","description":"In-app notifications of the token user (overdue invoices, accepted quotes, ...) with unread count.","group":"Notifications","scope":"read","readOnly":true,"destructive":false},{"name":"mark_notification_read","title":"Mark notification read","description":"Mark one notification as read.","group":"Notifications","scope":"write","readOnly":false,"destructive":false},{"name":"mark_all_notifications_read","title":"Mark all notifications read","description":"Mark every notification as read.","group":"Notifications","scope":"write","readOnly":false,"destructive":false},{"name":"list_web_form_messages","title":"Website inquiries","description":"Customer inquiries in the CRM inbox (leads from the website contact form and inquiries recorded with create_inquiry, e.g. by e-mail), with channel, subject, received date and status new/read/done.","group":"WebForm","scope":"read","readOnly":true,"destructive":false},{"name":"count_unread_web_form_messages","title":"Unread inquiries","description":"Number of new website inquiries.","group":"WebForm","scope":"read","readOnly":true,"destructive":false},{"name":"create_inquiry","title":"Kundenanfrage erfassen","description":"Record a new customer inquiry (e-mail or other channel) like a website inquiry: matches the customer by e-mail or creates it (a known customer only gets empty fields completed, nothing is overwritten), stores the inquiry in the CRM inbox, logs an activity and notifies. Pass externalId (e.g. the e-mail Message-ID) so the same inquiry is never stored twice. For channel email no notification e-mail is sent. Returns customerId, customerNumber, created, inquiryId, duplicate.","group":"WebForm","scope":"write","readOnly":false,"destructive":false},{"name":"set_web_form_message_status","title":"Set inquiry status","description":"Set a website inquiry to new, read or done.","group":"WebForm","scope":"write","readOnly":false,"destructive":false},{"name":"delete_web_form_message","title":"Delete inquiry","description":"Delete a website inquiry (the customer created from it is kept).","group":"WebForm","scope":"write","readOnly":false,"destructive":true},{"name":"buchhaltung_status","title":"Buchhaltung: Status","description":"Ob die Buchhaltung eingerichtet ist, Rechtsform, MWST-Methode, Geschäftsjahre, Sperren, letzte Synchronisierung, offene Punkte des Firmenprofils.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"treuhand_pruefung","title":"Treuhand-Prüfung und Fristen","description":"Befunde wie ein Treuhänder sie bei der Durchsicht macht (Doppelbelege, MWST-Unstimmigkeiten, fehlende Belege, negative Kasse, Gesellschafterdarlehen …) und anstehende Fristen (MWST, AHV, Lohnausweise, GV, Steuererklärung, Verrechnungssteuer). withSummary: kurze KI-Zusammenfassung.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"bilanz","title":"Bilanz","description":"Bilanz nach OR 959a an einem Stichtag (Standard heute) mit Vorjahr; ein noch nicht verbuchtes Jahresergebnis steht als eigene Eigenkapitalzeile.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"erfolgsrechnung","title":"Erfolgsrechnung","description":"Erfolgsrechnung nach OR 959b (Gesamtkostenverfahren) eines Geschäftsjahres mit Vorjahr. fiscalYearId aus buchhaltung_status; ohne Angabe das laufende Jahr.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"saldenliste","title":"Saldenliste","description":"Saldenliste aller bebuchten Konten einer Periode (Eröffnung, Soll, Haben, Saldo).","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"kontoblatt","title":"Kontoblatt","description":"Alle Bewegungen eines Kontos mit laufendem Saldo.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"journal","title":"Journal durchsuchen","description":"Buchungen im Journal (neueste zuerst), filterbar nach Text/Belegnummer, Konto, Periode und Herkunft (invoice, credit_note, expense, bank, payroll, manual …).","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"buchung_erfassen","title":"Manuelle Buchung","description":"Erfasst eine manuelle Buchung (Umbuchung, Abgrenzung, Privatanteil, Abschreibung …). Soll = Haben, Konten müssen existieren, documentRef (Belegnummer oder Begründung) ist Pflicht. Die Buchung ist danach unveränderbar – vorher mit dem Benutzer abstimmen.","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":true},{"name":"buchung_stornieren","title":"Buchung stornieren","description":"Storniert eine manuelle Buchung mit einer Gegenbuchung (automatische Buchungen folgen ihrem Beleg und werden über den Beleg korrigiert).","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":true},{"name":"mwst_perioden","title":"MWST-Perioden","description":"MWST-Abrechnungsperioden eines Jahres mit Fälligkeit (60 Tage) und ob sie abgerechnet sind.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"mwst_abrechnung","title":"MWST-Abrechnung berechnen","description":"Berechnet die MWST-Abrechnung (Ziffern 200–510 des ESTV-Formulars bzw. Saldosteuersatz 323) für eine Periode inkl. Abstimmung mit den MWST-Konten und Warnungen.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"mwst_abschliessen","title":"MWST-Periode abschliessen","description":"Friert die MWST-Abrechnung einer abgelaufenen Periode ein, bucht sie auf 2201 und sperrt MWST-relevante Buchungen der Periode. Nur auf ausdrücklichen Wunsch des Benutzers, nachdem er die Zahlen geprüft hat.","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":true},{"name":"jahresabschluss_checkliste","title":"Jahresabschluss: Checkliste","description":"Was vor dem Abschluss eines Geschäftsjahres noch fehlt (Belege, Bank, MWST, Abschreibungen, Abgrenzungen …).","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"jahresrechnung_pdf","title":"Jahresrechnung / Steuerpaket (PDF)","description":"Jahresrechnung (Bilanz, Erfolgsrechnung, Anhang nach OR 959c) als PDF; mit taxPackage=true das ganze Steuerpaket (Anlagespiegel, offene Posten, Saldenliste, Steuerwerte, kantonale Fristen und Beilagen).","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"kontoauszug_importieren","title":"Kontoauszug importieren (camt.053/054)","description":"Importiert einen Bankauszug im ISO-20022-Format camt.053 (oder camt.054 zur Auflösung von Sammelbuchungen). Duplikate werden erkannt, QR-Zahlungen automatisch den Rechnungen zugeordnet.","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":false},{"name":"bank_bewegungen","title":"Bankbewegungen","description":"Importierte Bankbewegungen, z. B. status=open für noch nicht zugeordnete.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"bank_bewegung","title":"Bankbewegung mit Vorschlägen","description":"Eine Bankbewegung mit Zuordnungsvorschlägen (Rechnung, Beleg, Gutschrift, Lohnlauf, gelernte Regel, Übertrag).","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"bank_zuordnen","title":"Bankbewegung einem Beleg zuordnen","description":"Ordnet eine Bewegung einer Rechnung (Zahlungseingang, auch Teilzahlung), einem Beleg/Kreditor, einer Gutschrift-Rückzahlung oder einem Lohnlauf zu. Die Buchung entsteht automatisch.","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":false},{"name":"bank_buchen","title":"Bankbewegung direkt buchen","description":"Bucht eine Bewegung ohne Beleg im System gegen ein Konto (Bankspesen 6940, Privatbezug 2850, MWST-Zahlung 2201, Sozialversicherungen 2270, Übertrag auf eigenes Konto …). documentRef oder justification (Belegprinzip) ist Pflicht.","group":"Bookkeeping","scope":"admin","readOnly":false,"destructive":false},{"name":"beleg_fehlt","title":"Beleg fehlt","description":"Belastungen auf dem Bankkonto, zu denen noch kein Beleg erfasst ist.","group":"Bookkeeping","scope":"admin","readOnly":true,"destructive":false},{"name":"mitarbeitende","title":"Mitarbeitende (Lohn)","description":"Mitarbeitende der Lohnbuchhaltung (AHV-Nummer und IBAN nur maskiert).","group":"Payroll","scope":"admin","readOnly":true,"destructive":false},{"name":"lohnlaeufe","title":"Lohnläufe","description":"Lohnläufe eines Jahres mit Status (Entwurf, freigegeben, bezahlt) und Totalen.","group":"Payroll","scope":"admin","readOnly":true,"destructive":false},{"name":"lohnlauf_erstellen","title":"Lohnlauf erstellen","description":"Erstellt den Lohnlauf eines Monats (Entwurf) mit allen aktiven Mitarbeitenden: AHV/IV/EO, ALV, BVG, UVG, KTG, FAK, Familienzulagen, Quellensteuer.","group":"Payroll","scope":"admin","readOnly":false,"destructive":false},{"name":"lohnlauf_freigeben","title":"Lohnlauf freigeben","description":"Gibt einen Lohnlauf frei und bucht Lohnaufwand und Sozialversicherungen. Nur auf ausdrücklichen Wunsch des Benutzers.","group":"Payroll","scope":"admin","readOnly":false,"destructive":true},{"name":"list_sales_persons","title":"List sellers","description":"Sellers (Verkäufer/Vermittler) who bring in customers, quotes and orders against a commission, with their own rates per product/category and the rate for positions without a product. Use the ID as salesPersonId on create_quote/create_order. Internal, admin token only.","group":"Commissions","scope":"admin","readOnly":true,"destructive":false},{"name":"list_commissions","title":"List commissions","description":"Commissions per invoice/credit note: pending (invoice open), earned (paid), settled (in a statement) or void. Filter by seller, status or invoice. Internal, admin token only.","group":"Commissions","scope":"admin","readOnly":true,"destructive":false},{"name":"get_automation_catalog","title":"Automation catalog","description":"Events, filterable fields, template variables, actions and operators available for automation rules. Read this before creating a rule.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"test_automation_rule","title":"Test automation rule (dry run)","description":"Dry-run a saved rule (ruleId) or an unsaved rule definition against the newest matching document. No side effects – shows whether the filters match and what each action would do.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"preview_automation_email","title":"Preview automation e-mail","description":"Render a sendEmail action against a real document without sending it: resolved recipients, subject, body and the branded HTML exactly as the customer would receive it, plus whether SMTP is configured.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"list_automation_runs","title":"Automation run history","description":"Execution log of automation rules (last 90 days): which rule fired for which document, action results and errors.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"run_automation_rule","title":"Run rule now","description":"Execute an automation rule immediately with real side effects (e-mails are sent!). Scheduled rules run with the KPI context; event rules run against a document – pass sampleId (see list_automation_samples) or the newest matching document is used. force=true ignores the rule filters. Confirm with the user first.","group":"Automation","scope":"write","readOnly":false,"destructive":false},{"name":"list_automation_samples","title":"Documents for a rule test / run","description":"Recent documents of the entity behind an event (e.g. overdue invoices for invoice.overdue) with id, label and detail – pick a sampleId for test_automation_rule, preview_automation_email or run_automation_rule.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"preview_automation_schedule","title":"Preview schedule","description":"Validate a schedule (frequency/time/weekday/dayOfMonth/runAt/cron/timezone) and return the next executions as ISO timestamps.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"get_history","title":"Customer / document history","description":"Everything that happened to a customer or a document, newest first: e-mails sent (invoices, quotes, dunning levels, automation mails with recipients and status), lifecycle events (created, sent, accepted, completed, status changes), payments, notes/calls and automation runs. Pass customerId, or orderId (order + its invoices), or entityType + entityId. Use it for questions like \"what did we send this customer\" or \"when was the invoice paid\".","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"get_automation_status","title":"Automation status","description":"Health of the automation scheduler: whether automations are switched on for the tenant, the last scheduler tick, the daily pass (dunning, recurring invoices, overdue detection) and rule/failure counts.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"list_automation_rules","title":"Automation rules","description":"Automation rules of the AI service (Settings → AI): trigger (event/schedule), conditions and actions.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"create_automation_rule","title":"Create automation rule","description":"Create an automation rule (requires the AI service to be enabled under Settings → AI).","group":"Automation","scope":"write","readOnly":false,"destructive":false},{"name":"update_automation_rule","title":"Update automation rule","description":"Change an automation rule, e.g. enable/disable it.","group":"Automation","scope":"write","readOnly":false,"destructive":false},{"name":"delete_automation_rule","title":"Delete automation rule","description":"Delete an automation rule.","group":"Automation","scope":"write","readOnly":false,"destructive":true},{"name":"get_ai_insights","title":"AI insights","description":"Cached business insights generated by the CRM AI plugin (if enabled). Set refresh=true to regenerate.","group":"Automation","scope":"read","readOnly":true,"destructive":false},{"name":"export_csv","title":"CSV export","description":"Export customers, invoices, expenses or time entries as CSV text, optionally limited to a period (from/to) and - for invoices - a status.","group":"Export","scope":"read","readOnly":true,"destructive":false},{"name":"export_pdf_report","title":"PDF report","description":"Generate a PDF list report (expenses, time entries, products, orders, invoices or quotes) for a period and return a download link or local path. Documents lists accept a status filter, products accept active/category.","group":"Export","scope":"read","readOnly":true,"destructive":false},{"name":"list_users","title":"List users","description":"Users of the tenant with role (admin scope).","group":"Users","scope":"admin","readOnly":true,"destructive":false},{"name":"get_user","title":"Get user","description":"One user (admin scope).","group":"Users","scope":"admin","readOnly":true,"destructive":false},{"name":"create_user","title":"Create user","description":"Create a user with password and role (admin scope). Prefer invite_user so the person picks their own password.","group":"Users","scope":"admin","readOnly":false,"destructive":false},{"name":"update_user","title":"Update user","description":"Change name, e-mail or role of a user (admin scope).","group":"Users","scope":"admin","readOnly":false,"destructive":false},{"name":"delete_user","title":"Delete user","description":"Delete a user; their API tokens are revoked (admin scope). Ask for confirmation first.","group":"Users","scope":"admin","readOnly":false,"destructive":true},{"name":"list_invitations","title":"Open invitations","description":"Pending user invitations (admin scope).","group":"Users","scope":"admin","readOnly":true,"destructive":false},{"name":"invite_user","title":"Invite user","description":"Invite a person by e-mail to join the tenant (admin scope).","group":"Users","scope":"admin","readOnly":false,"destructive":false},{"name":"cancel_invitation","title":"Cancel invitation","description":"Withdraw a pending invitation (admin scope).","group":"Users","scope":"admin","readOnly":false,"destructive":true},{"name":"list_plugins","title":"List plugins","description":"Installed plugins (Swiss QR, Stripe, Bexio, dunning, time tracking, ...) with enabled flag and settings schema (admin scope).","group":"Plugins","scope":"admin","readOnly":true,"destructive":false},{"name":"toggle_plugin","title":"Enable/disable plugin","description":"Switch a plugin on or off (admin scope).","group":"Plugins","scope":"admin","readOnly":false,"destructive":false},{"name":"update_plugin_config","title":"Update plugin config","description":"Merge configuration values into a plugin (admin scope). Secrets are masked in the response.","group":"Plugins","scope":"admin","readOnly":false,"destructive":false},{"name":"list_audit_log","title":"Audit log","description":"Who changed what and when (admin scope). Filter by entity type, action, user or date range.","group":"AuditLog","scope":"admin","readOnly":true,"destructive":false},{"name":"get_entity_audit_history","title":"Entity history","description":"Audit trail of one record (admin scope).","group":"AuditLog","scope":"admin","readOnly":true,"destructive":false},{"name":"list_tenants","title":"List tenants","description":"All tenants (Mandanten) - only for super admins.","group":"Tenants","scope":"admin","readOnly":true,"destructive":false},{"name":"get_tenant","title":"Get tenant","description":"One tenant with its users and invitations (super admin).","group":"Tenants","scope":"admin","readOnly":true,"destructive":false},{"name":"create_tenant","title":"Create tenant","description":"Create a tenant (super admin).","group":"Tenants","scope":"admin","readOnly":false,"destructive":false},{"name":"update_tenant","title":"Update tenant","description":"Rename or suspend/activate a tenant (super admin).","group":"Tenants","scope":"admin","readOnly":false,"destructive":false},{"name":"delete_tenant","title":"Delete tenant","description":"Delete a tenant without users (super admin). Ask for confirmation first.","group":"Tenants","scope":"admin","readOnly":false,"destructive":true}],"toolsUrl":"/tools","uptimeSeconds":53523}