MCP WebSearch
by DrSeedon
README.md
# MCP WebSearch
MCP-сервер для Claude Code: веб-поиск через Perplexity Sonar и генерация изображений — всё одним ключом OpenRouter.
Написан под одну задачу: **не давать агенту случайно потратить лишнее**. Дорогая модель поиска не является дефолтом, а у генерации картинок есть отдельный тул для расчёта цены до вызова.
## Установка
```bash
git clone git@github.com:DrSeedon/mcp-websearch.git ~/.claude/mcp-servers/websearch
cd ~/.claude/mcp-servers/websearch
npm install
cp .env.example .env # и вписать свой ключ
```
Регистрация в Claude Code:
```bash
claude mcp add websearch node ~/.claude/mcp-servers/websearch/index.js \
-e OPENROUTER_API_KEY=sk-or-v1-...
```
Требуется Node 18+ (используется нативный `fetch` и ESM).
## Переменные окружения
| Переменная | Обязательна | Назначение |
|---|---|---|
| `OPENROUTER_API_KEY` | да | Ключ OpenRouter. Проверяется при старте |
| `HTTPS_PROXY` / `HTTP_PROXY` | нет | Прокси, если прямой доступ к `openrouter.ai` закрыт |
Ключ читается только из окружения — в коде его нет и быть не должно.
## Тулы
### `search`
Веб-поиск через Perplexity Sonar. Возвращает ответ, источники и стоимость запроса.
| Модель | Цена | Когда |
|---|--:|---|
| `sonar` | ~$0.006 | **Дефолт.** Факты, документация, обычный ресёрч |
| `sonar-pro-search` | ~$0.03 | Только если `sonar` уже не справился с ТЕМ ЖЕ вопросом |
Других search-моделей нет — список закрыт на уровне кода.
**Почему это важно:** разница в цене пятикратная. Если сделать дорогую модель дефолтом, агент будет вызывать её не думая. Проверено на живой установке: 171 запрос из 425 ушёл по дорогому тарифу просто потому, что модель не указывали явно.
### `generate_image`
Генерация изображений. Поддерживает референсные картинки на вход и соотношения сторон от `21:9` до `9:16`.
| Модель | Назначение |
|---|---|
| `nano-banana` | Дефолт, хорошее качество |
| `nano-banana-lite` | Бюджетный вариант |
| `riverflow-fast` / `riverflow-pro` / `riverflow-max` | Альтернативный движок, от быстрого к качественному |
| `seedream` | Ещё один вариант стиля |
### `generate_image_cost`
Считает стоимость генерации **до** вызова. Нужен, чтобы выбор модели был осознанным, а не «взял первую из списка».
## Логи
`requests.log` (в `.gitignore`) — JSONL, по строке на вызов: `[iso] tool: {json}`.
- `search` — запрос, полный ответ, источники, модель, токены, стоимость
- `generate_image` — промпт, пути сохранения, размер, референсы; base64 в лог не пишется
- рядом с картинкой в `generated/` кладётся `.json` с тем же промптом и метаданными
## Что не коммитится
`.env`, `requests.log`, `generated/` (архив сгенерированных картинок), `node_modules/`. Логи и картинки содержат историю запросов — это приватные данные, им не место в репозитории.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues