Solana Divers MCP Server
by Leevandr
README.md
# Solana Divers MCP Server
MCP-сервер для поиска по архиву Telegram-чатов Solana-разработчиков. Работает с Claude Web, Claude Code и другими MCP-клиентами.
## Что это
Поисковый движок по ~94K сообщениям из двух чатов:
- **Divers** (`on_chain_divers_chat`) — ~50K сообщений, MEV, трейдинг, боты, инфраструктура
- **Solana Dev RU** (`solana_dev_ru`) — ~43K сообщений, разработка, Anchor, SPL, RPC
Гибридный поиск: семантический (Voyage embeddings) + полнотекстовый (BM25) + cross-encoder reranking (FlashRank).
## Безопасность и приватность
### Что сервер видит и НЕ видит
**Сервер получает ТОЛЬКО параметры tool-вызова:**
```
search(query="jito bundles", top_k=5, chat_ids=None)
```
Это всё. Три поля: поисковый запрос, количество результатов и фильтр по чату.
**Сервер НЕ получает и НЕ имеет доступа к:**
- Вашей переписке с Claude (промпты, ответы, история диалога)
- Другим tool-вызовам в вашей сессии
- Вашим файлам, проектам, контексту
- Информации о вашем аккаунте
### Как это работает (MCP протокол)
```
Вы пишете Claude: "найди обсуждения про jito bundles"
│
▼
Claude решает вызвать tool и отправляет на MCP-сервер:
POST /mcp { "method": "tools/call", "params": {"name": "search", "arguments": {"query": "jito bundles"}} }
│
▼
Сервер выполняет поиск по SQLite базе, возвращает результаты
│
▼
Claude получает результаты и формирует ответ для вас
```
MCP-сервер — это просто поисковый API. Он работает как обычный поисковик: получает запрос, возвращает результаты. Никакого контекста вашего диалога на сервер не передаётся.
### Что логируется
Сервер сохраняет в локальную SQLite базу:
- Поисковый запрос (`query`)
- Параметры (`top_k`, `chat_ids`)
- Количество найденных результатов
- Время выполнения запроса
Это нужно для мониторинга качества поиска. Информация о том, кто отправил запрос, не сохраняется (MCP протокол не передаёт идентификатор пользователя).
### Авторизация
- OAuth 2.1 с паролем (вводится один раз при подключении)
- Access token действует 24 часа, refresh token — 30 дней
- Токены хранятся в зашифрованном виде на сервере
- Все соединения через HTTPS (TLS 1.2+)
## Подключение
### Claude Web (claude.ai)
Settings → MCP Servers → Add MCP Server → вставить URL сервера → Connect → ввести пароль.
### Claude Code
```json
{
"mcpServers": {
"solana-divers": {
"type": "url",
"url": "<server-url>/mcp"
}
}
}
```
## Tools
### `search(query, top_k?, chat_ids?)`
Поиск по архиву чатов. Возвращает фрагменты переписки с контекстом (±5 сообщений).
- `query` — поисковый запрос (русский или английский)
- `top_k` — количество результатов (1-10, по умолчанию 5)
- `chat_ids` — фильтр по чату (`["on_chain_divers_chat"]`, `["solana_dev_ru"]`, или `null` для всех)
### `stats(chat_ids?)`
Статистика базы данных: количество сообщений, авторов, диапазон дат, топ авторов.
### `history(limit?)`
История последних поисковых запросов (для мониторинга).
## Архитектура
```
MCP-клиент (Claude Web / Claude Code)
│
▼ HTTPS
Nginx (reverse proxy, SSL)
│
▼ HTTP :8430
Docker: divers-mcp
│
├── search tool → hybrid_search() → SQLite (read-only)
├── stats tool → direct SQL queries → SQLite (read-only)
└── history tool → mcp_logs.db (read-write)
```
- **База сообщений** — read-only, shared volume с основным приложением
- **База логов** — отдельная SQLite для search_log + OAuth токенов
- **Embedding cache** — 26K векторов (~120MB) загружаются в RAM при старте
## Self-hosting
```bash
cp docker-compose.example.yml docker-compose.yml
# Заполнить переменные окружения
docker-compose up -d --build
```
Требуется:
- Заполненная база данных ragtg (SQLite с сообщениями и embeddings)
- Voyage API ключ для семантического поиска
- Nginx с SSL для HTTPS
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues