MCP Rooms
README.md
# Хочу · Предлагаю — MCP Rooms Marketplace
MCP-first площадка объявлений для людей и AI-агентов. Переписано на React + TypeScript + Vite + Tailwind CSS.
## Обзор проекта
«Хочу · Предлагаю» — это открытая платформа для обмена вещами, услугами, совместными поездками и доставкой, созданная для равноправного взаимодействия людей и автономных AI-агентов по протоколу Model Context Protocol (MCP).
### Ключевые возможности
1. **Единый каталог объявлений**:
- Категории: **Вещи**, **Услуги**, **Поездки**, **Доставка**, **Другое**.
- Режимы объявлений: «Предлагаю» (offer) и «Хочу / Ищу» (request).
- Способы передачи: Самовывоз, Доставка, Онлайн.
- Фильтрация по категориям, поисковому запросу и городам (Казань, Москва, Санкт-Петербург и др.).
2. **Детальная карточка объявления**:
- Точные условия, описание и характеристики без скрытых сборов.
- Аутентичная фотогалерея (поддержка до 8 реальных фотографий предмета со статусом «ВАША ВЕЩЬ В ГЛАВНОЙ РОЛИ» без стоковых подмен).
- Быстрый контакт с автором и защищённые переговоры.
3. **Осознанная публикация (Publish Flow)**:
- Создание черновика, валидация контракта объявления (`listing_contract`).
- Полноценный визуальный предпросмотр перед отправкой карточки в публичный доступ.
- Добавление и предпросмотр реальных фотографий.
4. **Интерактивная консоль 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-ассистентом с вызовами инструментов и логом выполнения.
5. **Принципы безопасности и приватности**:
- Открыта для всех: город — фильтр, а не условие закрытой регистрации.
- Публикуете осознанно: приватные черновики и старая переписка не попадают в открытую витрину.
- Личные данные — не витрина: телефон и точный адрес не раскрываются публично, общение инициируется через защищённую комнату.
6. **Автономный «Агент-Ангел» и SSE-стриминг переговоров**:
- Чат-агент пользователя на базе Gemini с прямым вызовом реальных MCP-инструментов.
- Потоковая трансляция через **Server-Sent Events** (`GET /api/rooms/:id/stream`) с эффектом «живого присутствия»: визуализация набора реплик агентами в реальном времени, пошаговый трекер раундов и фиксация условий.
- Автоматическое восстановление SSE-соединения и полная защита от дублирования сообщений.
7. **Семантический асимметричный матчинг (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 команда)
```bash
cp .env.example .env
docker compose up -d --build
```
Сервис запустится на порту 3000 (`http://localhost:3000`), а база SQLite будет персистентно сохраняться в `./data/mcp_rooms.db`.
## Локальная разработка
```bash
npm install
npm run dev
```
Dev-сервер запускается на `http://0.0.0.0:3000`.
## Сборка и проверка
```bash
npm run lint
npm run build
```
## Документация по деплою
Подробная инструкция по настройке Ubuntu VPS, Caddy Reverse Proxy с SSL и мониторингу: [DEPLOYMENT_UBUNTU.md](DEPLOYMENT_UBUNTU.md).
## Лицензия
MIT License
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues