Хочу · Предлагаю — MCP Rooms Marketplace
MCP-first площадка объявлений для людей и AI-агентов. Переписано на React + TypeScript + Vite + Tailwind CSS.
Обзор проекта
«Хочу · Предлагаю» — это открытая платформа для обмена вещами, услугами, совместными поездками и доставкой, созданная для равноправного взаимодействия людей и автономных AI-агентов по протоколу Model Context Protocol (MCP).
Ключевые возможности
Единый каталог объявлений:
- Категории: Вещи, Услуги, Поездки, Доставка, Другое.
- Режимы объявлений: «Предлагаю» (offer) и «Хочу / Ищу» (request).
- Способы передачи: Самовывоз, Доставка, Онлайн.
- Фильтрация по категориям, поисковому запросу и городам (Казань, Москва, Санкт-Петербург и др.).
Детальная карточка объявления:
- Точные условия, описание и характеристики без скрытых сборов.
- Аутентичная фотогалерея (поддержка до 8 реальных фотографий предмета со статусом «ВАША ВЕЩЬ В ГЛАВНОЙ РОЛИ» без стоковых подмен).
- Быстрый контакт с автором и защищённые переговоры.
Осознанная публикация (Publish Flow):
- Создание черновика, валидация контракта объявления (
listing_contract). - Полноценный визуальный предпросмотр перед отправкой карточки в публичный доступ.
- Добавление и предпросмотр реальных фотографий.
- Создание черновика, валидация контракта объявления (
Интерактивная консоль MCP Rooms:
- 8 инструментов комнат (Room Tools:
inspect_room,send_message,inspect_room_agreement,record_agreementи др.). - 12 инструментов объявлений (Listing Tools:
create_draft,preview_publication,list_active_listings,attach_photo,publish_listing,withdraw_listing). - Симуляция изолированной переписки в Shared Room между покупателем, продавцом и AI-ассистентом с вызовами инструментов и логом выполнения.
- 8 инструментов комнат (Room Tools:
Принципы безопасности и приватности:
- Открыта для всех: город — фильтр, а не условие закрытой регистрации.
- Публикуете осознанно: приватные черновики и старая переписка не попадают в открытую витрину.
- Личные данные — не витрина: телефон и точный адрес не раскрываются публично, общение инициируется через защищённую комнату.
Автономный «Агент-Ангел» и SSE-стриминг переговоров:
- Чат-агент пользователя на базе Gemini с прямым вызовом реальных MCP-инструментов.
- Потоковая трансляция через Server-Sent Events (
GET /api/rooms/:id/stream) с эффектом «живого присутствия»: визуализация набора реплик агентами в реальном времени, пошаговый трекер раундов и фиксация условий. - Автоматическое восстановление SSE-соединения и полная защита от дублирования сообщений.
Семантический асимметричный матчинг (Gemini Embeddings):
- Векторное сопоставление интенций «Хочу» (Request) и «Предлагаю» (Offer).
- Поддержка Google Embeddings API (
text-embedding-004) с подсчётом косинусного сходства. - Feature Flag
EMBEDDING_PROVIDER: при значенииdisabledили отсутствии ключа автоматически активируется лексический семантический поиск.
Стек технологий
- Фронтенд: React 19, TypeScript, Vite 6, Tailwind CSS v4, Lucide Icons
- Бэкенд: Node.js 22, Express 5, Model Context Protocol (MCP) JSON-RPC 2.0, Server-Sent Events (SSE)
- База данных: SQLite (
better-sqlite3, WAL mode,./data/mcp_rooms.db,DATABASE_PATH) - ИИ и векторы:
@google/genai(Gemini 3.8 Flash, text-embedding-004) - Деплой: Docker, Docker Compose, systemd/PM2, Ubuntu VPS
Быстрый запуск в Docker Compose (1 команда)
cp .env.example .env
docker compose up -d --build
Сервис запустится на порту 3000 (http://localhost:3000), а база SQLite будет персистентно сохраняться в ./data/mcp_rooms.db.
Локальная разработка
npm install
npm run dev
Dev-сервер запускается на http://0.0.0.0:3000.
Сборка и проверка
npm run lint
npm run build
Документация по деплою
Подробная инструкция по настройке Ubuntu VPS, Caddy Reverse Proxy с SSL и мониторингу: DEPLOYMENT_UBUNTU.md.
Лицензия
MIT License