Zava Relocation MCP UI Demo
Zava Relocation MCP UI Demo
Zava Relocation Inc. hilft Mitarbeitern, für einen neuen Job umzuziehen. Dieses Projekt ist eine Referenzdemo für den Aufbau einer interaktiven MCP-App mit MCP-UI, einem lokalen Qwen2.5 7B-Modell und einem synchronisierten Konversations-Intake-Formular.
Der Benutzer kann mit Ava chatten, ein Angebotsschreiben hochladen oder das Profil direkt bearbeiten. Extrahierte Informationen werden sofort auf das Formular angewendet und hervorgehoben, damit der Benutzer überprüfen kann, was sich geändert hat.
Für eine kundenorientierte Lehr-Walkthrough siehe den dedizierten MCP UI + LLM Form-Fill-Leitfaden.
Was die Demo demonstriert
Chatgesteuerte Formularausfüllung mit Live-Feldaktualisierungen
Optionaler Browser-Sprachmodus: Sprich mit Ava und höre Qwen-Antworten laut
PDF- und DOCX-Angebotsschreiben-Extraktion im Browser
Lokale Interpretation mit Qwen2.5 7B über Foundry Local
Fünf Profilabschnitte: Kontakt, Beschäftigung, Umzug, Umzugslogistik und Präferenzen
Fundierte Umzugsoptionen- und Erstattungsrichtlinien aus dem fiktiven Contoso-Policy-PDF
Fortschrittsverfolgung, hervorgehobene KI-Updates, Zurücksetzen und Abschlussstatus
Responsive Desktop- und Mobile-Layouts
MCP-Apps-Ressourcen-/Tool-Verknüpfung über
@mcp-ui/serverund@modelcontextprotocol/ext-appsEin Produktions-Build, der die UI in eine einzige HTML-Ressource einbettet
Demo-Grenze: Dies ist ein lokaler Prototyp. Er speichert keine Umzugsfälle, authentifiziert keine Benutzer und übermittelt keine Daten an ein Produktions-HR-System. Die Beispiel-PDFs in
sample-documents/enthalten fiktive Daten.
Related MCP server: Docalyze
Architektur
MCP Apps host
|
| Streamable HTTP: POST /mcp
v
Node + Express MCP server
|-- start_relocation_intake tool
|-- ui://zava-relocation/intake resource
|-- POST /api/chat
v
Foundry Local (same machine)
|
v
Qwen2.5 7B
Browser UI
|-- PDF.js / Mammoth extract document text locally
|-- regex extractor gives immediate form updates
|-- /api/chat sends text and current form to local QwenEs gibt zwei Möglichkeiten, die UI zu verwenden:
Standalone-Modus: Vite serviert die React-Anwendung unter
http://localhost:5173.MCP-App-Modus: Ein MCP-Apps-kompatibler Host verbindet sich mit
http://localhost:3001/mcp, entdecktstart_relocation_intakeund rendert die verknüpfteui://zava-relocation/intake-Ressource.
Wie MCP-UI genutzt wird
Dieses Projekt verwendet das von MCP-UI empfohlene MCP-Apps-Muster:
server/index.tserstellt einenMcpServerund einenStreamableHTTPServerTransport.Das Produktions-
dist/index.htmlwird mitcreateUIResourcein eine UI-Ressource geladen.registerAppResourceveröffentlicht diese Ressource unterui://zava-relocation/intake.registerAppToolstelltstart_relocation_intakebereit und verknüpft es mit der UI über:_meta: { ui: { resourceUri: relocationUI.resource.uri }, }Die eingebettete UI signalisiert Bereitschaft mit
ui-lifecycle-iframe-readyund kann Host-Nachrichten mitwindow.parent.postMessagesenden.
Der wichtige Unterschied besteht darin, dass der MCP-Server das Formular nicht selbst rendert. Er registriert das Tool und die UI-Ressource; der MCP-Apps-Host entscheidet, wo und wie diese Ressource angezeigt wird.
Foundry Local und Qwen2.5 7B
Der Assistent verwendet Qwen2.5 7B über Foundry Local. Foundry Local läuft auf derselben Maschine wie dieser Node-Server und stellt einen OpenAI-kompatiblen lokalen Chat-Completions-Endpunkt bereit. Es ist kein Cloud-Modell-Fallback konfiguriert.
Voraussetzungen
Die Unterstützung von Foundry Local hängt von der Host-Maschine ab. Unter Windows dokumentiert Microsoft Windows 11 24H2 oder später, .NET 9 oder später und eine DirectX-12-fähige GPU für die Windows-ML-Laufzeit.
Installiere die Foundry-Local-CLI:
winget install Microsoft.FoundryLocalSchließe und öffne PowerShell erneut und überprüfe dann die CLI:
foundry --versionListe die im lokalen Katalog verfügbaren Modell-Aliase auf:
foundry model listStarte oder lade das Qwen-Modell mit dem Alias, der vom Katalog angezeigt wird. Der erwartete Demo-Alias ist:
foundry model run qwen2.5-7bHalte Foundry Local während der Nutzung der Demo am Laufen. Der aktuelle Foundry-Local-Service-Endpunkt für dieses Projekt ist:
http://127.0.0.1:61563/v1/chat/completionsWenn der installierte Katalog einen anderen Alias oder Port verwendet, konfiguriere den Node-Server, bevor du ihn startest:
$env:FOUNDRY_LOCAL_ENDPOINT = "http://127.0.0.1:<actual-port>/v1/chat/completions"
$env:FOUNDRY_LOCAL_MODEL = "qwen2.5-7b-instruct-cuda-gpu"Foundry Local weist den Service-Port dynamisch zu. Verwende foundry service status oder foundry service list, um den aktiven Service zu überprüfen, und verwende GET http://127.0.0.1:<port>/openai/models, um verfügbare Modell-IDs aufzulisten. Die genaue Modell-ID kann je nach Hardware variieren; auf dieser Maschine ist das verfügbare Qwen-GPU-Modell qwen2.5-7b-instruct-cuda-gpu.
Was das Modell erhält
server/foundryLocal.ts sendet an Qwen:
Die neueste Benutzernachricht oder eine Dokumentprüfungsanweisung
Den aktuellen Formularzustand
Bis zu 8.000 Zeichen extrahierten Dokumenttext
Die Systemaufforderung fordert Qwen auf, JSON in dieser Form zurückzugeben:
{
"reply": "I found your new employer and start date.",
"fields": {
"employer": "Northstar Analytics",
"role": "Senior Product Manager",
"startDate": "2026-10-07"
}
}Nur auf der Zulassungsliste stehende Formularschlüssel werden vom Server akzeptiert. Das Modell kann dem Client-Zustand keine beliebigen Felder hinzufügen.
Sprachmodus
Qwen2.5 7B bleibt ein reines Textmodell. Der Sprachmodus nutzt Browserfunktionen rund um die bestehende Text-Pipeline:
microphone
-> browser SpeechRecognition
-> transcript
-> POST /api/chat
-> Foundry Local + Qwen
-> text reply and form fields
-> browser SpeechSynthesis
-> spoken Ava responseKlicke im Composer auf die Mikrofontaste, um zu sprechen. Wenn die Erkennung endet, wird das Transkript über denselben Chat-Flow übermittelt, der auch für getippte Nachrichten verwendet wird. Das Ava-Sprache an/aus-Steuerelement aktiviert oder deaktiviert gesprochene Antworten, Sprache lässt dich eine installierte Browserstimme wählen, und Ava stoppen unterbricht die aktuelle Antwort. Die App bevorzugt natürliche englische Microsoft/Edge-Stimmen, wenn verfügbar, wie Ava, Jenny, Aria oder Sonia. Chrome und Edge bieten die beste Unterstützung; Mikrofonberechtigung ist erforderlich und Spracheingabe benötigt localhost oder HTTPS. Die Sprachqualität hängt von den im Browser installierten und bereitgestellten Stimmen ab.
Die Spracheingabe verwendet einen geführten Ein-Feld-nach-dem-anderen-Flow. Die App identifiziert das nächste unvollständige Pflichtfeld, bittet Qwen, sich auf dieses Feld zu konzentrieren, rückt nach der Antwort den aktiven Formularabschnitt vor und spricht eine kurze nächste Frage. So bleibt jede Sprachrunde leicht zu merken. Getippter Chat bleibt frei formulierbar.
Dokument-Parsing-Flow
Der Browser verarbeitet die Originaldatei; die Datei selbst wird nicht in einen Cloud-Dienst hochgeladen:
src/App.tsxvalidiert die Erweiterung und das 10-MB-Limit.src/documentParser.tsverwendet PDF.js für PDFs und Mammoth für DOCX-Dateien.Der extrahierte Text wird zur Dokumentinterpretation über
POST /api/chatan lokales Qwen gesendet.Qwen gibt strukturierte Felder zurück. Die UI verwendet eine konsistente Dokumentprüfungsnachricht, die den Benutzer auffordert, das Formular zu überprüfen und fehlende Informationen manuell zu vervollständigen; sie listet fehlende Felder nicht auf.
Die Modellfelder werden im Formular angewendet und hervorgehoben.
Fundierte Logistik-Walkthrough
Lade contoso-moving-offers-and-reimbursement-guide.pdf hoch und stelle Ava dann Fragen wie „Welche Option ist am besten für einen Umzug über 250 Meilen?“ oder „Kann ich für 150 Meilen einen Miet-LKW verwenden?“ Der Browser behält den extrahierten Richtlinientext als Grundlage für spätere Chat-Runden, und das Modell wird angewiesen, Richtlinienfragen nur aus diesem Text zu beantworten. Der Abschnitt „Umzugslogistik“ erfasst die gewählte Methode, die ungefähre Entfernung, den Erstattungsweg und Notizen.
Die browserbasierten PDF.js- und Mammoth-Bibliotheken sind nur Text-Extraktionswerkzeuge; sie entscheiden nicht, welche Werte in das Umzugsformular gehören. Foundry Local/Qwen ist die Quelle der Wahrheit für die PDF/DOCX-Feldextraktion. Wenn das Modell nicht verfügbar ist, meldet die UI den Fehler, anstatt Dokumentfelder stillschweigend mit einem Nicht-LLM-Parser zu füllen.
Code-Brotkrumen
Bereich | Datei | Zweck |
Haupt-UI | Chat, Formularabschnitte, Uploads, Zurücksetzen, Fortschritt, MCP-Host-Nachrichten | |
Styling | Zava-Layout, responsives Verhalten, Hell/Dunkel-Theme-Variablen | |
Formulartypen |
| |
PDF/DOCX-Parsing | Browserbasierte PDF.js- und Mammoth-Extraktion | |
Sofortige Extraktion | Beschriftete Werte, Daten, Telefon, E-Mail und Umzugsphrasen-Matching | |
Lokaler LLM-Client | OpenAI-kompatible Anfrage, JSON-Validierung, Feld-Zulassungsliste | |
MCP-Server | Express-Routen, MCP-Transport, Tool-/Ressourcen-Registrierung | |
Dev-Proxy | Proxied Browser- | |
Beispieldateien | Fiktive Angebotsschreiben für Upload-Tests | |
Single-File-Build |
|
Installation und Ausführung
Installiere Node-Abhängigkeiten:
npm installStandalone-Entwicklungsmodus
Starte Vite und den MCP-Server zusammen:
npm run devÖffne:
http://localhost:5173Der Vite-/api-Proxy leitet lokale Modellanfragen an Port 3001 weiter.
MCP-Apps-Modus
Baue zuerst die UI. Der MCP-Server bettet das resultierende dist/index.html ein:
npm run build
npm startKonfiguriere den MCP-Apps-kompatiblen Host mit:
http://localhost:3001/mcpRufe dann auf:
start_relocation_intakeDer Server stellt auch einen einfachen Health-Check bereit:
http://localhost:3001/healthDemo-Workflow
Starte Foundry Local und stelle das Qwen-Modell bereit.
Führe
npm run devaus.Klicke auf einen Schnellprompt oder tippe eine Umzugsnachricht.
Beobachte, wie die passenden Felder ausgefüllt und hervorgehoben werden.
Lade eines der PDFs in
sample-documents/hoch.Überprüfe die extrahierten und modellangereicherten Felder.
Verwende Demo zurücksetzen, um in einen leeren Zustand zurückzukehren.
Nützliche Chat-Prompts:
Ich ziehe von Seattle nach Austin für eine Rolle bei Contoso.Meine Familie hat 3 Personen.Arbeitgeber: FabrikamPosition: Senior Product ManagerIch brauche temporären Wohnraum.
Fehlerbehebung
Could not connect to Foundry Local
Überprüfe, dass Foundry Local läuft, dass das Modell heruntergeladen/geladen wurde und dass der Endpunkt mit FOUNDRY_LOCAL_ENDPOINT übereinstimmt.
Model not found
Führe foundry model list aus und setze FOUNDRY_LOCAL_MODEL auf einen Alias im installierten Katalog.
Der MCP-Server meldet Missing dist/index.html
Führe aus:
npm run buildvor npm start.
Das Formular findet keine Felder in einem Dokument
Das PDF muss auswählbaren Text enthalten. Gescannte/nur-Bild-PDFs benötigen OCR, bevor PDF.js nützlichen Text extrahieren kann. Beschriftete Werte wie Employee name:, Email address:, New employer:, Job title:, Start date:, Moving from: und Moving to: sind für den deterministischen Extraktor am einfachsten zu erkennen.
Skripte
Befehl | Zweck |
| Starte Vite und den MCP-Server im Watch-Modus |
| Starte nur Vite |
| Starte nur den MCP-Server im Watch-Modus |
| Typprüfung und Erstellung der Single-File-Produktions-UI |
| Starte den MCP-Server gegen |
| Vorschau des Vite-Produktions-Builds |
Um das fiktive Contoso-Policy-PDF neu zu generieren, installieren Sie die Skriptabhängigkeit und führen Sie den Generator aus:
python -m pip install -r scripts/requirements.txt
python scripts/generate_contoso_policy_pdf.pyThis 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
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to perform semantic searches over local document collections using multi-context organization and automatic OCR. It supports various file formats including PDF, DOCX, and images, ensuring all data processing remains local and private.6MIT
- AlicenseBqualityDmaintenanceAn MCP server that lets AI assistants read and visually analyze local documents — PDFs, Excel spreadsheets, CSV files, Word documents, PowerPoint presentations, and images.456MIT
- FlicenseAqualityCmaintenanceLocal multimodal MCP server for vision, document, audio, video, and GUI automation, all processed locally on Apple Silicon for privacy and security.9
- AlicenseNot gradedqualityCmaintenanceMCP server for integrating manufacturing systems (MES/ERP/quality/maintenance) with LLM agents, enabling event ingestion, incident triage, approval workflows, and RAG-based knowledge retrieval.MIT
Related MCP Connectors
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
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/stvflowers/zava-mcp-ui'
If you have feedback or need assistance with the MCP directory API, please join our Discord server