Voice Brain MCP Server
Voice Brain MCP — Prototyp Sprachsteuerung (NL Pearl v2) + Brain (MCP) + Kanäle
Prototyp eines Sprach-Gateways auf Basis von NL Pearl v2 mit einem "Brain" für einheitlichen Kontext pro Kontakt (kanalunabhängig), ebenfalls als MCP-Server verfügbar, sowie einer Angular 22-Konsole zur Bedienung des Ablaufs.
Läuft End-to-End im Mock-Modus ohne Anmeldedaten. Die echten Adapter für NL Pearl v2 sind bereit zur Anbindung.
Funktionen
Sprache: NL Pearl v2 als Engine hinter unserem eigenen Gateway (weder deren Konsole noch deren Textkanäle werden verwendet). Der ausgehende Anruf wird mit
addLeadausgelöst; vor dem Sprechen fordert der Knoten PreCallAPI den Kontext vonPOST /precallan; nach Beendigung bringt der WebhookPOST /webhooks/nlpearldie Benachrichtigung und das Gateway ruft Transkription/Zusammenfassung/Sentiment/Daten ab.Brain: Einheitlicher Kontext pro Kontakt (Identität, kanalübergreifende Timeline, Signale wie Zahlungsversprechen). Verfügbar über REST für die Konsole und als MCP-Server (stdio) mit Tools
brain_*.Eigene Kanäle: WhatsApp/SMS (Stubs mit Platz für WABA/SMS-Anbieter) lesen und schreiben denselben Kontext → die Nachverfolgung setzt denselben Thread fort.
Related MCP server: CRMy
Flussdiagramm (Demo)
consola /demo ──POST /api/demo/run──▶ DemoService
1. siembra contacto (promesa activa + WhatsApp previo)
2. addLead (VoiceEnginePort → mock | NL Pearl v2)
│
▼ (ciclo de llamada)
3. POST /precall ◀── nodo PreCallAPI → variables (nombre, promesa, saldo, último resumen)
4. ... conversación ...
5. POST /webhooks/nlpearl (HMAC guard) → getCall → Brain.recordCallContext
│ · interacción voice + señal promesa
▼
6. FollowupService → brain_suggest_followup → WhatsApp propio (stub)
│ · interacción whatsapp outbound
▼
7. consola: timeline del contacto con voz + WhatsApp en el mismo hiloStruktur
voice-brain-mcp/
├─ apps/
│ ├─ api/ # NestJS 11 + Fastify: Brain, NL Pearl, canales, MCP, demo
│ └─ console/ # Angular 22 (signals + zoneless). Vistas:
│ # /home inicio con avatar de voz
│ # /contacts directorio de contactos
│ # /contacts/:id chat + contexto en vivo (2 columnas)
│ # /conversations módulo de conversaciones: lista de hilos
│ # + chat + contexto en vivo (3 columnas)
│ # /demo flujos end-to-end paso a paso
├─ scripts/run-demo.mjs
├─ data/brain.json # respaldo de persistencia (se crea al correr)
└─ .env # copiar de .env.exampleAusführung
Voraussetzungen: Node 20+ (getestet mit Node 24).
cp .env.example .env # MOCK=true por defecto
npm install
npm run dev # api (3000) + consola (4200) juntos
# o por separado:
npm run dev:api
npm run dev:consoleKonsole: http://localhost:4200 → Tab Demo des Ablaufs → „End-to-End-Ablauf ausführen“. Am Ende gibt es einen Link zum Kontext des Kontakts (Sprache + WhatsApp in derselben Timeline).
Demo per CLI (bei laufender API):
npm run demoTests:
npm test· Build:npm run build
Bereitgestellt
https://voice-brain-mcp.vercel.app — läuft im Mock-Modus, ohne Anmeldedaten.
Auf Vercel bereitstellen (von GitHub)
Das Repository enthält bereits vercel.json und die serverlose Funktion in api/index.js.
git init && git add -A && git commit -m "Prototipo voz + Brain MCP"
git remote add origin git@github.com:<usuario>/<repo>.git
git push -u origin mainIn Vercel: Add New → Project → Import dieses Repository und Deploy. vercel.json
definiert den Build, veröffentlicht die Angular-Konsole als statische Dateien und leitet /api/*,
/precall und /webhooks/* an die Nest-Funktion weiter.
Ein einziges Projekt, mit Root Directory im Stammverzeichnis des Repos. Der Build toleriert, dass Vercel innerhalb eines Workspaces startet, aber die serverlose Funktion befindet sich in
api/index.js(Stammverzeichnis) und Vercel erkennt sie nur, wenn das Root Directory dieses Stammverzeichnis ist. Bei getrennten Projekten pro Workspace wird die Konsole zwar bereitgestellt, aber/api/*antwortet mit 404.
Warum der Build ein Skript ist und nicht
npm run --workspace(zwei Fallstricke von Vercel mit npm-Monorepos, beide bereits inscripts/vercel-build.shbehoben):
Ein Skript namens
vercel-buildim Stamm-package.jsonfunktioniert nicht: Vercel behandelt es speziell und npm propagiert es an jeden Workspace, der es nicht definiert →Missing script: "vercel-build".
npm run build --workspace apps/apischlägt mitNo workspaces foundfehl, wenn Vercel den Build aus einem Unterverzeichnis ausführt. Das Skript findet das Stammverzeichnis des Monorepos selbstständig und ruftnest/ngmitnpxauf, sodass es von jedem Ort aus funktioniert.Sollte das Deployment erneut fehlschlagen, überprüfen Sie die ersten Zeilen des Logs: Das Skript gibt
cwd initialundStamm des Monoreposaus, die genau anzeigen, von wo Vercel gestartet ist.
Umgebungsvariablen (Project → Settings → Environment Variables): keine ist
erforderlich — ohne Angaben läuft das Deployment im Mock-Modus. Für die echte NL-Pearl-Anbindung
setzen Sie MOCK=false, NLPEARL_ACCOUNT_ID, NLPEARL_API_KEY,
NLPEARL_PEARL_ID und NLPEARL_WEBHOOK_SECRET, und richten Sie den Webhook des Pearls auf
https://<ihr-deploy>.vercel.app/webhooks/nlpearl sowie den PreCallAPI-Knoten auf
https://<ihr-deploy>.vercel.app/precall.
Was sich serverlos ändert (und warum)
Vercel friert den Prozess nach der Antwort ein und nur /tmp ist beschreibbar, daher passt sich
der Code automatisch an (erkennt VERCEL):
Persistenz: Das JSON-Backup geht nach
/tmp. Jede Instanz hat ihre eigene Kopie, die beim Recycling verloren geht — ausreichend für Demos, nicht für die Produktion (ersetzen SieBrainRepositorydurch SQLite/Postgres dafür).Kaltstart-Befüllung: Wenn das Brain leer startet, wird das Demo-Verzeichnis mit festen IDs befüllt, damit die Links
/contacts/:idzwischen Instanzen gültig bleiben.Demo-Ablauf: Wird innerhalb der Anfrage abgeschlossen (keine Hintergrund-Timer) und die Schritte werden in der Antwort übermittelt, da Polling auf eine andere Instanz fallen könnte.
Mock: Verwendet die In-Prozess-Dienste anstatt sich selbst per HTTP aufzurufen (der Deployment-Schutz würde diesen Selbstaufruf blockieren). Lokal wird weiterhin echtes HTTP gegen
/precallund/webhooks/nlpearlverwendet.MCP: Der stdio-Server ist auf Vercel nicht anwendbar; er läuft lokal mit
npm run mcp.
Brain als MCP-Server
npm run mcp # servidor stdio
npx @modelcontextprotocol/inspector npm run mcp # probarlo con el inspectorTools: brain_resolve_identity, brain_get_context, brain_upsert_contact,
brain_append_interaction, brain_set_signal, brain_get_signals,
brain_record_call_context, brain_suggest_followup.
Teilt die Persistenz (JSON-Datei) mit dem HTTP-Gateway.
Echte NL-Pearl-Anbindung
In
.env:MOCK=false,NLPEARL_ACCOUNT_ID,NLPEARL_API_KEYundNLPEARL_PEARL_ID(Pearl für ausgehende Sprachkommunikation). Auth in der Dokumentation bestätigt:Authorization: Bearer {AccountId}:{SecretKey}.In NL Pearl: Konfigurieren Sie den Pearl-Ablauf mit dem Knoten PreCallAPI, der auf
https://ihr-host/precallzeigt, und aktivieren Sie den Anruf-Webhook, der aufhttps://ihr-host/webhooks/nlpearlzeigt.Wo sich der Webhook befindet (nicht Workspace-weit, sondern pro Pearl): Dashboard (verlassen Sie Settings mit Go Back) → öffnen Sie Ihren Pearl → Flusseditor PearlVibe → Tab Outbound Settings (oder Inbound Settings) → Gruppe Campaign Settings → scrollen Sie ganz nach unten, Abschnitt Webhooks → aktivieren Sie den Schalter (die URL-Felder erscheinen erst nach Aktivierung) → Call Webhook URL. Der Lead Webhook wird nicht verwendet. Hinweis: In den Workspace-Einstellungen ist Agent(s) die Kapazität für gleichzeitige Anrufe, nicht die Pearls; und Text Channels wird nicht verwendet (WhatsApp/SMS sind unsere eigenen).
NLPEARL_WEBHOOK_SECRET: NL Pearl signiert Webhooks nicht mit HMAC — beim Konfigurieren des Webhooks können Sie ein Credential (einen von Ihnen erstellten Token) anhängen, der mit jeder Zustellung übermittelt wird. Setzen Sie denselben Wert inNLPEARL_WEBHOOK_SECRETund der Wächter wird ihn überprüfen; leer = keine Anforderung.Die gegen die v2-Dokumentation bestätigten Pfade befinden sich in
apps/api/src/nlpearl/nlpearl.client.ts; die nicht verifizierten wurden mit// TODO: confirmar con NL Pearlmarkiert (ebenso wie die genaue Form des Webhooks und des PreCallAPI inwebhook.controller.ts/precall.controller.ts).
Entscheidungen / Notizen
Ports als Injection-Tokens (
VoiceEnginePort,ChannelPort,BrainRepository): Das Mock/echte Binding lebt in jedem Adaptermodul gemäßMOCK; das Brain importiert nie konkrete Clients.Der Mock übt die echten HTTP-Endpunkte des Gateways aus (Self-HTTP an
/precallund/webhooks/nlpearl, mit HMAC-Signatur falls Secret vorhanden), keine internen Abkürzungen.Persistenz: Speicher + JSON-Backup hinter
BrainRepository(austauschbar gegen SQLite/Postgres über Provider).Die Textkanäle von NL Pearl werden nicht verwendet: WhatsApp/SMS sind eigene Adapter (Stubs mit Logging).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceAn intelligent personal CRM that processes WhatsApp conversations to build a searchable knowledge base about contacts using diarization, transcription, and PII sanitization. It exposes MCP tools for semantic search, contact summaries, and reminder management within Claude Desktop.
- Alicense-qualityBmaintenanceProvides AI agents with operational customer context, including typed revenue objects, persistent state, scoped tools, and human-in-the-loop handoffs through MCP, REST, and CLI.3612Apache 2.0
- Alicense-qualityDmaintenanceEnables AI-powered customer support with real-time access to CRM, ticketing, and communication tools via MCP, supporting context-aware conversations and automated actions.Apache 2.0

Dial MCP Serverofficial
Alicense-qualityBmaintenanceEnables AI agents to provision phone numbers, send SMS, place AI voice calls, and react to inbound events via the Dial communication stack, all through MCP tools.392MIT
Related MCP Connectors
Surface customer & prospect context from Slack, email, transcripts and tickets in any MCP client.
Phone, SMS & email for AI agents — one remote MCP endpoint, OAuth login, zero install.
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jorgemovitext/voice-brain-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server