Skip to main content
Glama
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