Zava Relocation MCP UI Demo
Zava Relocation MCP UI Demo
Zava Relocation Inc. помогает сотрудникам переезжать на новую работу. Этот проект — эталонная демонстрация создания интерактивного MCP-приложения с помощью MCP-UI, локальной модели Qwen2.5 7B и синхронизированной диалоговой формы ввода данных.
Пользователь может общаться с Авой, загружать письмо с предложением о работе или редактировать профиль напрямую. Извлечённая информация немедленно применяется к форме и выделяется, чтобы пользователь мог проверить изменения.
Пошаговое руководство для обучения клиентов см. в отдельном руководстве по заполнению форм MCP UI + LLM.
Что демонстрирует демо
Заполнение формы через чат с обновлением полей в реальном времени
Необязательный голосовой режим в браузере: говорите с Авой и слушайте ответы Qwen вслух
Извлечение данных из писем о предложении работы в форматах PDF и DOCX в браузере
Локальная интерпретация с помощью Qwen2.5 7B через Foundry Local
Пять разделов профиля: контакты, трудоустройство, переезд, логистика переезда и предпочтения
Обоснованные рекомендации по вариантам переезда и возмещению расходов из вымышленного PDF-документа политики Contoso
Отслеживание прогресса, выделенные обновления ИИ, сброс и состояние завершения
Адаптивные настольная и мобильная версии
Связывание ресурсов/инструментов MCP Apps через
@mcp-ui/serverи@modelcontextprotocol/ext-appsПродакшен-сборка, встраивающая интерфейс в один HTML-ресурс
Границы демо: это локальный прототип. Он не сохраняет кейсы переезда, не аутентифицирует пользователей и не отправляет данные в корпоративную HR-систему. Образцы PDF-файлов в
sample-documents/содержат вымышленные данные.
Related MCP server: Docalyze
Архитектура
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 QwenЕсть два способа использования интерфейса:
Автономный режим: Vite обслуживает приложение React по адресу
http://localhost:5173.Режим MCP-приложения: совместимый с MCP Apps хост подключается к
http://localhost:3001/mcp, обнаруживаетstart_relocation_intakeи отображает связанный ресурсui://zava-relocation/intake.
Как используется MCP-UI
В этом проекте используется шаблон MCP Apps, рекомендованный MCP-UI:
server/index.tsсоздаётMcpServerиStreamableHTTPServerTransport.Продакшен-сборка
dist/index.htmlзагружается в ресурс интерфейса с помощьюcreateUIResource.registerAppResourceпубликует этот ресурс по адресуui://zava-relocation/intake.registerAppToolоткрываетstart_relocation_intakeи связывает его с интерфейсом с помощью:_meta: { ui: { resourceUri: relocationUI.resource.uri }, }Встроенный интерфейс сигнализирует о готовности с помощью
ui-lifecycle-iframe-readyи может отправлять сообщения хосту черезwindow.parent.postMessage.
Важное отличие в том, что MCP-сервер не отображает форму сам. Он регистрирует инструмент и ресурс интерфейса; хост MCP Apps решает, где и как отображать этот ресурс.
Foundry Local и Qwen2.5 7B
Ассистент использует Qwen2.5 7B через Foundry Local. Foundry Local работает на той же машине, что и этот Node-сервер, и предоставляет совместимую с OpenAI локальную конечную точку чат-завершений. Облачный резервный вариант модели не настроен.
Предварительные требования
Поддержка Foundry Local зависит от хост-машины. В Windows корпорация Майкрософт документирует Windows 11 24H2 или новее, .NET 9 или новее и графический процессор с поддержкой DirectX 12 для среды выполнения Windows ML.
Установите CLI Foundry Local:
winget install Microsoft.FoundryLocalЗакройте и снова откройте PowerShell, затем проверьте CLI:
foundry --versionВыведите список псевдонимов моделей, доступных в локальном каталоге:
foundry model listЗапустите или загрузите модель Qwen, используя псевдоним, показанный каталогом. Ожидаемый демонстрационный псевдоним:
foundry model run qwen2.5-7bДержите Foundry Local запущенным во время работы с демо. Текущая конечная точка службы Foundry Local для этого проекта:
http://127.0.0.1:61563/v1/chat/completionsЕсли в установленном каталоге используется другой псевдоним или порт, настройте Node-сервер перед его запуском:
$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 назначает порт службы динамически. Используйте foundry service status или foundry service list, чтобы просмотреть активную службу, и GET http://127.0.0.1:<port>/openai/models, чтобы вывести список доступных идентификаторов моделей. Точный идентификатор модели может различаться в зависимости от оборудования; на этой машине доступная модель Qwen GPU — qwen2.5-7b-instruct-cuda-gpu.
Что получает модель
server/foundryLocal.ts отправляет Qwen:
Последнее сообщение пользователя или инструкцию по проверке документа
Текущее состояние формы
До 8 000 символов извлечённого текста документа
Системный запрос просит Qwen вернуть JSON в следующем виде:
{
"reply": "I found your new employer and start date.",
"fields": {
"employer": "Northstar Analytics",
"role": "Senior Product Manager",
"startDate": "2026-10-07"
}
}Сервер принимает только ключи форм из белого списка. Модель не может добавлять произвольные поля в состояние клиента.
Голосовой режим
Qwen2.5 7B остаётся текстовой моделью. Голосовой режим использует возможности браузера вокруг существующего текстового конвейера:
microphone
-> browser SpeechRecognition
-> transcript
-> POST /api/chat
-> Foundry Local + Qwen
-> text reply and form fields
-> browser SpeechSynthesis
-> spoken Ava responseНажмите кнопку микрофона в компоновщике, чтобы говорить. Когда распознавание завершится, стенограмма отправляется через тот же чат-поток, что и набранные сообщения. Переключатель Голос Авы вкл/выкл включает или отключает голосовые ответы, Голос позволяет выбрать установленный голос браузера, а Остановить Аву прерывает текущий ответ. Приложение предпочитает естественные английские голоса Microsoft/Edge, если они доступны, например Ава, Дженни, Ария или Соня. Chrome и Edge обеспечивают наилучшую поддержку; требуется разрешение на доступ к микрофону, а для голосового ввода нужен localhost или HTTPS. Качество голоса зависит от голосов, установленных и предоставляемых браузером.
Голосовой ввод использует управляемый поток по одному полю за раз. Приложение определяет следующее незаполненное обязательное поле, просит Qwen сосредоточиться на этом поле, переходит к следующему разделу формы после ответа и произносит один короткий следующий вопрос. Это позволяет легко запоминать каждый голосовой ход. Набранный чат остаётся свободным.
Процесс разбора документов
Браузер обрабатывает исходный файл; сам файл не загружается в облачный сервис:
src/App.tsxпроверяет расширение и лимит в 10 МБ.src/documentParser.tsиспользует PDF.js для PDF-файлов и Mammoth для файлов DOCX.Извлечённый текст отправляется в локальную Qwen через
POST /api/chatдля интерпретации документа.Qwen возвращает структурированные поля. Интерфейс использует единое сообщение о проверке документа, предлагающее пользователю просмотреть форму и вручную заполнить недостающую информацию; он не перечисляет недостающие поля.
Поля модели применяются и выделяются в форме.
Пошаговое руководство по логистике
Загрузите contoso-moving-offers-and-reimbursement-guide.pdf, затем задайте Аве такие вопросы, как «Какой вариант лучше всего подходит для переезда на 250 миль?» или «Могу ли я использовать арендованный грузовик на 150 миль?» Браузер сохраняет извлечённый текст политики в качестве основы для последующих сообщений чата, и модели предписано отвечать на вопросы о политике только на основе этого текста. В разделе «Логистика переезда» фиксируются выбранный способ, примерное расстояние, путь возмещения расходов и примечания.
Браузерные библиотеки PDF.js и Mammoth — это только утилиты извлечения текста; они не решают, какие значения должны попасть в форму переезда. Foundry Local/Qwen является источником истины для извлечения полей из PDF/DOCX. Если модель недоступна, интерфейс сообщает об ошибке, а не молча заполняет поля документа с помощью парсера, не основанного на LLM.
Хлебные крошки кода
Область | Файл | Назначение |
Основной интерфейс | Чат, разделы формы, загрузки, сброс, прогресс, сообщения MCP-хоста | |
Стилизация | Макет Zava, адаптивное поведение, переменные светлой/тёмной темы | |
Типы форм |
| |
Разбор PDF/DOCX | Извлечение в браузере с помощью PDF.js и Mammoth | |
Немедленное извлечение | Сопоставление подписанных значений, дат, телефонов, электронной почты и фраз переезда | |
Локальный LLM-клиент | Совместимый с OpenAI запрос, проверка JSON, белый список полей | |
MCP-сервер | Маршруты Express, транспорт MCP, регистрация инструментов/ресурсов | |
Прокси разработки | Проксирует вызовы браузера | |
Образцы файлов | Вымышленные письма о предложении работы для тестирования загрузки | |
Однофайловая сборка |
|
Установка и запуск
Установите зависимости Node:
npm installАвтономный режим разработки
Запустите Vite и MCP-сервер вместе:
npm run devОткройте:
http://localhost:5173Прокси Vite /api пересылает запросы локальной модели на порт 3001.
Режим MCP Apps
Сначала соберите интерфейс. MCP-сервер встраивает результирующий dist/index.html:
npm run build
npm startНастройте совместимый с MCP Apps хост с помощью:
http://localhost:3001/mcpЗатем вызовите:
start_relocation_intakeСервер также предоставляет базовую проверку работоспособности:
http://localhost:3001/healthДемонстрационный рабочий процесс
Запустите Foundry Local и сделайте модель Qwen доступной.
Выполните
npm run dev.Нажмите на быстрый запрос или введите сообщение о переезде.
Наблюдайте, как соответствующие поля заполняются и выделяются.
Загрузите один из PDF-файлов в
sample-documents/.Просмотрите извлечённые и обогащённые моделью поля.
Используйте Сбросить демо, чтобы вернуться в пустое состояние.
Полезные подсказки для чата:
Я переезжаю из Сиэтла в Остин на должность в Contoso.Моя семья состоит из 3 человек.Работодатель: FabrikamДолжность: старший менеджер по продуктуМне нужно временное жильё.
Устранение неполадок
Не удаётся подключиться к Foundry Local
Проверьте, что Foundry Local запущен, модель загружена/загружена, а конечная точка соответствует FOUNDRY_LOCAL_ENDPOINT.
Модель не найдена
Выполните foundry model list и установите FOUNDRY_LOCAL_MODEL на псевдоним в установленном каталоге.
MCP-сервер сообщает Missing dist/index.html
Выполните:
npm run buildперед npm start.
Форма не находит поля в документе
PDF-файл должен содержать выделяемый текст. Для отсканированных PDF-файлов и PDF-файлов, содержащих только изображения, требуется OCR, прежде чем PDF.js сможет извлечь полезный текст. Подписанные значения, такие как Имя сотрудника:, Адрес электронной почты:, Новый работодатель:, Должность:, Дата начала:, Переезд из: и Переезд в:, легче всего распознаются детерминированным экстрактором.
Скрипты
Команда | Назначение |
| Запуск Vite и MCP-сервера в режиме наблюдения |
| Запуск только Vite |
| Запуск только MCP-сервера в режиме наблюдения |
| Проверка типов и создание однофайлового продакшен-интерфейса |
| Запуск MCP-сервера с |
| Предпросмотр продакшен-сборки Vite |
Чтобы перегенерировать вымышленный PDF-документ политики Contoso, установите зависимость скрипта и запустите генератор:
python -m pip install -r scripts/requirements.txt
python scripts/generate_contoso_policy_pdf.pyThis server cannot be deployed
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
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.8MIT
- AlicenseBqualityDmaintenanceAn MCP server that lets AI assistants read and visually analyze local documents — PDFs, Excel spreadsheets, CSV files, Word documents, PowerPoint presentations, and images.437 npm45 PyPIMIT
- FlicenseAqualityDmaintenanceLocal multimodal MCP server for vision, document, audio, video, and GUI automation, all processed locally on Apple Silicon for privacy and security.9-
- AlicenseNot gradedqualityDmaintenanceMCP 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