connect_ai_mcp) – sonst antwortet der Endpunkt mit 403.
Clients verbinden
- Claude
- ChatGPT
- Andere Clients
- Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen
- Gib
https://app.famulor.io/mcpein - Claude startet den OAuth-Flow automatisch: Melde dich auf der Login-Seite deiner Plattform an und bestätige den Zustimmungsbildschirm.
- Die Tools erscheinen in Claude.
Über das Dashboard verbinden
Der schnellste Weg, eine Verbindung herzustellen, ist das eingebaute Connect AI-Modal: Öffne die Tools-Seite im Dashboard und klicke auf In ChatGPT & Claude nutzen. Das Modal zeigt dir die MCP-URL deines Kontos (deine White-Label-Domain, falls konfiguriert und verifiziert), lässt dich sie mit einem Klick kopieren und bietet vorgefertigte Start-Prompts: einen Assistenten bauen, einen Assistenten reparieren, den letzten Anruf analysieren, die letzten 30 Anrufe auswerten oder eine Kampagne starten. In Claude öffnen / In ChatGPT öffnen übergibt den gewählten Prompt direkt an die KI-App; du schließt dort nur noch Login und Zustimmung ab.Authentifizierung
Der Endpunkt implementiert den kompletten modernen MCP-Auth-Stack – Clients erledigen das automatisch:- Eine nicht authentifizierte Anfrage bekommt
401mit Metadaten zur geschützten Ressource zurück (RFC 9728). - Der Client ermittelt den Autorisierungsserver (RFC 8414), registriert sich per Dynamic Client Registration (RFC 7591) und durchläuft Authorization Code + PKCE.
- Du meldest dich an (White-Label-Login) und bestätigst den Zustimmungsbildschirm – einmal pro Anwendung; die Genehmigung bleibt 180 Tage gespeichert.
- Der Client erhält ein Access Token (
fam_at_..., 1 Stunde gültig, inkl. Refresh Token) und ruft damit den Endpunkt auf.
Verfügbare Tools
Jede Operation der REST API v1 steht auch als MCP-Tool zur Verfügung – gleiche Services, gleiche Validierung (Plan-Limits, Modellkatalog, DNC-Liste).
In-App Milian Copilot nutzt dieselben Services über deine Login-Session (
/api/milian/*) – nicht diesen MCP-Endpunkt.
| delete_assistant | assistants:write | Einen Assistenten dauerhaft löschen |
| list_tools / get_tool | assistants:read | Wiederverwendbare Tools auflisten (HTTP-API-Tools + externe MCP-Server) / eines abrufen (Secrets maskiert als •••) |
| create_tool / update_tool / delete_tool | assistants:write | Wiederverwendbare Tools verwalten (type api, mcp oder builtin – Letzteres bettet ein integriertes Tool als Workspace-Tool ein; Erstellen/Bearbeiten braucht einen Admin-Zugang, da die Konfiguration Secrets enthält) |
| get_assistant_tools / set_assistant_tools | assistants:read / assistants:write | Tool-Zuweisungen eines Assistenten lesen / ERSETZEN |
| get_voices | voices:read oder assistants:read | Die TTS-Sprachbibliothek durchsuchen (Anbieter, Sprache, Geschlecht, Akzent, Suche) |
| get_models | assistants:read | Den Modellkatalog durchsuchen (type = llm, stt, tts oder realtime) – die Modelle, die für die Assistenten-Konfiguration verfügbar sind |
| get_languages | assistants:read | Die unterstützten Assistenten-Sprachen auflisten (ISO-639-1-Codes + Labels) für primary_language / secondary_languages |
| list_calls / get_call | calls:read | Anrufe durchsuchen; get_call enthält Transkript, Zusammenfassung und eine temporäre recording_url |
| list_history / get_email_history_item | calls:read | Anrufe und gruppierte E-Mail-Konversationen durchsuchen; jede Kunden-/Assistenten-Nachricht mit derselben stabilen Thread-ID bildet eine Zeile und lässt sich chronologisch abrufen |
| make_call | calls:write | Einen ausgehenden Anruf starten (assistant_id, to_number, optionaler Lead) |
| live_call_control | calls:write | Steuerung während eines aktiven Anrufs: listen_token, whisper, end_agent oder hangup (braucht die Plan-Funktion live_monitoring) |
| list_campaigns / get_campaign | campaigns:read oder calls:read | Kampagnen durchsuchen, inkl. Dialer-Einstellungen und Lead-Anzahl |
| create_campaign / update_campaign / delete_campaign | campaigns:write oder calls:write | Kampagnen verwalten (Parallelität, Wiederholungen, Anruffenster und Retry-Regeln: retry_on_voicemail, retry_until_goal + goal_variable, mark_complete_when_no_leads) |
| start_campaign / stop_campaign | campaigns:write oder calls:write | Den Dialer starten oder pausieren |
| list_leads | leads:read oder calls:read | Die Leads einer Kampagne auflisten |
| add_lead / add_leads / delete_lead | leads:write oder calls:write | Leads verwalten (einzeln oder als Bulk bis zu 1000, E.164-normalisiert, DNC-geprüft) |
| list_crm_syncs / get_crm_sync | automations:read oder calls:read | Inbound-CRM-Syncs und ihre dauerhafte Laufhistorie einsehen |
| discover_crm_sync | automations:read oder calls:read | Objekte, Felder, Listen, Ansichten und Filter ermitteln, ohne Verbindungs-Credentials offenzulegen |
| create_crm_sync / update_crm_sync / delete_crm_sync | automations:write oder calls:write | CRM-zu-Audience-Syncs und Feldzuordnungen verwalten |
| run_crm_sync | automations:write oder calls:write | Einen dauerhaften manuellen CRM-Sync-Lauf einreihen |
| get_consent_mode / set_consent_mode | settings:read / settings:write (oder assistants:*) | Universelle bzw. kanalbezogene Marketing-Opt-outs lesen oder konfigurieren |
| list_suppression_entries | suppression:read oder campaigns:read | Aktive Kontakt-Suppressions durchsuchen, optional nach blockiertem Kanal gefiltert |
| add_suppression_entry / remove_suppression_entry | suppression:write oder campaigns:write | Opt-out per Kontakt-ID, Telefon oder E-Mail erfassen / Consent mit Audit-Event wiederherstellen |
| list_phone_numbers | phone_numbers:read oder calls:read | Nummern des Kontos |
| search_phone_numbers | phone_numbers:read oder calls:read | Käufliche Nummern im Marketplace durchsuchen, inkl. Preisen |
| buy_phone_number / release_phone_number | phone_numbers:write oder calls:write | Nummern kaufen / freigeben (vollständiger Abrechnungs- und Compliance-Ablauf) |
| assign_phone_number | phone_numbers:write oder calls:write | Einem Assistenten eine Nummer zuweisen, Anrufrichtungen umschalten |
| list_sip_trunks / get_sip_trunk | sip_trunks:read oder calls:read | SIP-Trunks durchsuchen (Zugangsdaten werden nie zurückgegeben) |
| create_sip_trunk / delete_sip_trunk | sip_trunks:write oder calls:write | Eigenen Carrier anbinden (DID/Nebenstelle, Anrufformat, erweiterte SLA) / einen Trunk entfernen – siehe BYO-SIP-Trunk |
| list_knowledge_bases / get_knowledge_base | knowledge:read oder assistants:read | Wissensdatenbanken durchsuchen |
| create_knowledge_base / delete_knowledge_base | knowledge:write oder assistants:write | Wissensdatenbanken verwalten |
| add_document | knowledge:write oder assistants:write | Ein Dokument hinzufügen (Rohtext oder Datei-URL) und für die Suche indexieren |
| get_balance | billing:read oder calls:read | Minuten-/Credits-Guthaben + Plan-Übersicht |
| get_me | keiner (jedes gültige Token) | Das aufrufende Credential, Plan-Limits und Feature-Toggles einsehen |
| get_memory_settings / update_memory_settings | settings:read / settings:write (oder assistants:*) | Workspace-Standardwerte für das Anrufer-Gedächtnis (Standard ein/aus + Zeitfenster bis zur Veralterung) |
| get_retention_settings / update_retention_settings | settings:read / settings:write (oder assistants:*) | Planstandard lesen und kanalbezogene Aufbewahrungsfristen verwalten; null stellt den Planstandard wieder her |
| get_outbound_limits / request_outbound_limit_increase | settings:read / settings:write (oder assistants:*) | Das workspaceweite Limit für integrierte Outbound-Anrufe lesen und eine Erhöhung beantragen |
| get_assistant_variables / set_assistant_variables | assistants:read / assistants:write | Die Custom-Variable-Definitionen eines Assistenten lesen / ERSETZEN |
| list_integrations / get_integration | integrations:read oder assistants:read | Kalender-Integrationen durchsuchen (Cal.com, Calendly, Google, Outlook, nativ; Secrets maskiert) |
| create_integration / update_integration / delete_integration | integrations:write oder assistants:write | Kalender-Integrationen verwalten (Verbindung wird vor dem Speichern getestet; Admin-Zugang erforderlich) |
| get_assistant_integrations / set_assistant_integrations | integrations:read/write oder assistants:read/write | Kalender-Integrations-Zuweisungen eines Assistenten lesen / ERSETZEN |
| get_booking_event_types | bookings:read oder assistants:read | Die Event-Types der Buchungs-Engine auflisten (Slug, Dauer, wöchentliche Verfügbarkeit) |
| create_booking_event_type / update_booking_event_type / delete_booking_event_type | bookings:write oder assistants:write | Event-Types der integrierten Buchungs-Engine verwalten |
| list_bookings / get_booking | bookings:read oder calls:read | Buchungen durchsuchen (Filter nach Event-Type, Status, Zeitraum) |
| cancel_booking | bookings:write oder calls:write | Eine Buchung stornieren (sendet das ICS-Update METHOD:CANCEL) |
| get_usage_summary | calls:read | Monatliche Gesprächsminuten |
| list_dashboards / get_dashboard | dashboards:read oder calls:read | Individuelle Analyse-Dashboards durchsuchen |
| create_dashboard / update_dashboard / delete_dashboard | dashboards:write oder calls:write | Individuelle Dashboards verwalten; show_default_sections=false erstellt eine leere Canvas, hidden_default_sections entfernt einzelne Standard-Karten (braucht die Plan-Funktion custom_dashboards) |
| get_dashboard_analytics | dashboards:read oder calls:read | KPIs, Vergleichs-Deltas, Zeitreihen, Aufschlüsselungen, Kampagnen-Fortschritt und Zusammenfassungen gesperrter Module |
| list_dashboard_widgets | dashboards:read oder calls:read | Widgets, Filter, Visualisierungseinstellungen und Grid-Layout lesen |
| create_dashboard_widget / update_dashboard_widget / remove_dashboard_widget | dashboards:write oder calls:write | Die Dashboard-Canvas gestalten; Remove löst nur die Zuordnung, das wiederverwendbare Widget bleibt erhalten |
Jedes Tool akzeptiert entweder seinen fein-granularen v1-Scope oder den alten Sammel-Scope (calls:* für Kampagnen/Leads/Nummern/SIP/Abrechnung/Dashboards, assistants:* für Voices/Wissensdatenbank) – OAuth-Tokens, die mit den vier Standard-Scopes ausgestellt wurden, funktionieren weiterhin für alles. Keys/Tokens ohne Scope-Einschränkung haben vollen Zugriff; :write schließt :read automatisch mit ein.