Вы платите $200 в месяц за Claude Max. Открываете Claude Code, просите агента поискать документацию — и получаете API Error: Rate limit reached. Не первый раз, не десятый. Просто отказ. На GitHub по этому багу открыто больше дюжины issue — и ни один не закрыт. А если вы на API — ваш поисковый запрос стоит $0.01. Каждый. Я нашёл способ обойти оба ограничения за 10 минут.
Боль, которую знает каждый пользователь Claude Code
Как Anthropic зарабатывает на веб-поиске
Решение: SearXNG через MCP
Как работает SearXNG под капотом
Что означает «запросы не покидают машину»
Установка за 10 минут
Итого
Если вы работаете с Claude Code каждый день, вы наверняка видели это сообщение:
API Error: Rate limit reached
Это не теоретический сценарий. Это происходит прямо сейчас, при написании этой статьи. Я попросил Claude Code найти информацию через встроенный WebSearch — и получил отказ:
WebSearch("SearXNG metasearch engine setup guide 2026") → API Error: Rate limit reached
На GitHub у Claude Code открыты десятки issue с этой проблемой:
#27074: WebSearch "Rate limit reached" occurs only with Claude subscription, works fine with API key
#29579: API Error: Rate limit reached despite Claude Max subscription and only 16% usage
#22876: Rate limit 429 errors despite dashboard showing available quota
#27008: пользователь на плане за $200/мес — лимит при первом же вопросе, дашборд показывает 0% использования
Один разработчик из issue #27074 описал ситуацию так: WebSearch tool consistently returns API Error: Rate limit reached for every query when using a Claude (Max) subscription. The same queries work perfectly when using an API key. This has been ongoing for the past 3 days.
Три дня. Три рабочих дня без веб-поиска. На плане за $200 в месяц.
При этом Anthropic не публикует конкретные лимиты — описывая их как «бюджет на диалоги», который зависит от модели, длины контекста и используемых фич. Это как платить за безлимитный интернет и узнать, что «безлимит» — это 5 ГБ, но точную цифру вам не скажут.
Давайте разберём, что стоит за встроенным WebSearch.
Согласно официальной документации: $10 за 1000 поисков. Это $0.01 за каждый запрос, плюс стандартная стоимость токенов за обработку результатов.
Казалось бы, цент — это ничего. Но в реальности агент, решающий задачу, может делать 5–15 поисков за один тёрн. Исследуете незнакомую технологию? 50+ поисков за сессию. Целый рабочий день с Claude Code — легко 100–200 поисков. Это $1–2 в день только на search fee.
На Reddit пользователи делятся счетами:
«I burned through ~$2000 in API credits over 2 weeks» (r/ClaudeAI)
«Hit 330M input tokens in the first two weeks» (r/ClaudeCode)
«$30–50 a day for me with Sonnet» (r/ClaudeCode)
«Total costs with API: $12k approx per month» (r/ClaudeCode)
А вот что на самом деле делает WebSearch за ваши деньги: отправляет ваш запрос в поисковую инфраструктуру Anthropic. Не в Google напрямую — а через их серверы. Вы платите не за поиск (поиск в Google бесплатен), а за посредника.
Подождите. Поиск в Google бесплатен. DuckDuckGo — бесплатен. Brave Search — бесплатен. Вы каждый день ищете в браузере и не платите ни копейки. Но когда то же самое делает Claude Code — это стоит $0.01 за запрос. Потому что запрос проходит через платный API Anthropic.
А что если Claude Code будет искать напрямую — как вы ищете в браузере? Без посредника, бесплатно, без лимитов?
Именно это делает связка SearXNG + MCP. Вот что происходит при том же запросе через SearXNG вместо WebSearch:
searxng_web_search("SearXNG metasearch engine setup guide 2026") → 23 результата за 3.6 секунды Движки: Google (1.3s), DuckDuckGo (2.0s), Brave (2.1s), Wikipedia (3.6s) Score: от 0.05 до 2.5 Стоимость: $0.00
Тот же запрос. Тот же Claude Code. Разница: один вернул ошибку, второй — 23 результата. Один стоит денег, второй бесплатен.
Model Context Protocol (MCP) — открытый стандарт, созданный самой Anthropic, для подключения внешних инструментов к Claude. Claude Code использует MCP-инструменты так же, как встроенные — разницы в UX нет. Но бэкенд можно выбрать любой.
Claude Code → MCP-клиент (JSON-RPC 2.0, stdio) ↓ MCP-сервер (mcp-searxng, Node.js процесс) ↓ HTTP GET http://localhost:8888/search?q=...&format=json ↓ SearXNG (localhost, Docker) ↓ (параллельно, в отдельных потоках) ┌────────────┼────────────┬────────────┬────────────┐ Google DuckDuckGo Brave Wikipedia Wikidata └────────────┼────────────┴────────────┴────────────┘ ↓ Агрегация, дедупликация, скоринг ↓ JSON-ответ → обратно по цепочке → Claude Code
MCP-сервер — обычный Node.js-процесс. Общается с Claude Code через stdin/stdout. Никаких API-ключей, никакого сетевого оверхеда.
SearXNG (25 500+ звёзд на GitHub) — open-source метапоисковик. У него нет собственного индекса. Он делает ровно то, что вы делаете руками: отправляет запрос в Google, DuckDuckGo, Brave и ещё ~245 движков, собирает результаты и отдаёт вам.
Разберём по шагам, что происходит внутри при каждом запросе. Исходный код — на GitHub, всё можно проверить.
SearXNG не ходит в движки последовательно — он стреляет во все одновременно. Каждый движок — отдельный поток:
# searx/search/__init__.py for engine_name, query, request_params in requests: th = threading.Thread( target=PROCESSORS[engine_name].search, args=(query, request_params, self.result_container, ...), ) th.start()
Потоки идентифицируются по UUID. Главный поток ждёт завершения каждого с таймаутом. Не успел — движок помечается как unresponsive. Вот реальные данные с моего инстанса (из заголовка Server-Timing):
Google: 1.27 сек DuckDuckGo: 1.96 сек Wikidata: 2.01 сек Brave: 2.09 сек Wikipedia: 3.58 сек ← bottleneck ──────────────────── Итого: 3.58 сек (= время самого медленного движка)
Каждый запрос формируется в OnlineProcessor.get_params() (searx/search/processors/online.py):
headers["User-Agent"] = gen_useragent() # случайный Firefox headers["Accept-Encoding"] = "gzip, deflate" headers["Cache-Control"] = "no-cache" headers["DNT"] = "1" # Do Not Track headers["Connection"] = "keep-alive" cookies = {} # всегда пустые
User-Agent генерируется случайно из пула (searx/data/useragents.json):
{ "os": ["Windows NT 10.0; Win64; x64", "X11; Linux x86_64"], "ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}", "versions": ["148.0", "147.0"] }
Каждый запрос выглядит как новый пользователь с новым Firefox. Плюс SearXNG перемешивает TLS-шифры (shuffle_ciphers()), чтобы защитить от TLS-фингерпринтинга.
Результаты из всех движков собираются в потокобезопасный ResultContainer (searx/results.py).
Если один URL пришёл из Google и DuckDuckGo — результаты мержатся: берётся более длинный content, HTTPS предпочитается HTTP.
Скоринг простой и прозрачный:
score = 0 for position in result['positions']: score += weight / position
Результат на 1-й позиции в трёх движках: 1/1 + 1/1 + 1/1 = 3.0. На 10-й позиции в одном: 1/10 = 0.1. Чем больше движков подтвердили результат и чем выше позиция — тем выше score.
Это не маркетинговый слоган, а архитектурное свойство. Разберём каждый слой:
|
Данные |
MCP-сервер |
SearXNG |
Google, DuckDuckGo и др. |
|---|---|---|---|
|
Текст запроса |
Да (stdin) |
Да (localhost HTTP) |
Да |
|
IP пользователя |
N/A (stdio) |
127.0.0.1 |
IP вашей машины (не Anthropic) |
|
User-Agent |
Нет |
Нет |
Случайный Firefox |
|
Cookies |
Нет |
Нет |
Пустые |
|
Referer |
Нет |
Нет |
Нет |
|
TLS fingerprint |
N/A |
N/A |
Рандомизирован |
|
Логирование |
Нет (stateless) |
Нет (по умолчанию) |
Их дело |
Сравните с WebSearch: ваш запрос уходит на серверы Anthropic → их инфраструктура ищет → результаты возвращаются. Anthropic видит каждый ваш поисковый запрос. С SearXNG запрос идёт localhost → ваш IP → поисковики. Anthropic не участвует.
MCP-сервер (mcp-searxng) — Node.js-процесс на вашей машине, общается с Claude Code через stdin/stdout. Никакой сети. SearXNG — Flask-приложение за granian (ASGI-сервер) в Docker. Не логирует запросы (debug: false). Не ведёт сессий. Stateless.
Поисковики видят ваш IP (как если бы вы сами зашли в Google), но с рандомным User-Agent, пустыми cookies и заголовком DNT. Для Google каждый ваш запрос выглядит как новый человек с нового компьютера.
Если нужна ещё более сильная анонимность — SearXNG поддерживает маршрутизацию через прокси и Tor (outgoing.using_tor_proxy: true). Но для разработческого использования это избыточно.
mkdir -p ~/.searxng
# ~/.searxng/settings.yml use_default_settings: true search: formats: - html - json # обязательно для MCP server: secret_key: "сгенерируйте-случайную-строку" limiter: false outgoing: request_timeout: 10.0
docker run -d \ --name searxng \ --restart unless-stopped \ -p 8888:8080 \ -v ~/.searxng/settings.yml:/etc/searxng/settings.yml:rw \ searxng/searxng:latest
Проверяем:
curl -s "http://localhost:8888/search?q=hello&format=json" | python3 -m json.tool | head -10
Создайте ~/.mcp.json:
{ "mcpServers": { "searxng": { "command": "npx", "args": ["-y", "mcp-searxng"], "env": { "SEARXNG_URL": "http://localhost:8888" } } } }
Альтернатива на Python: uvx mcp-searxng (SecretiveShell/MCP-searxng).
Добавьте в ~/.claude/CLAUDE.md:
## Web Search - Always prefer the SearXNG MCP tool (`searxng_web_search`) over the built-in `WebSearch` tool - Use `web_url_read` from SearXNG MCP for reading web page content
Перезапустите Claude Code. Готово.
Попросите Claude Code что-нибудь поискать. Если он использует mcp__searxng__searxng_web_search вместо WebSearch — всё работает.
|
WebSearch |
SearXNG | |
|---|---|---|
|
Per-search fee |
$0.01 |
$0 |
|
50 запросов/день × 30 дней |
$15/мес |
$0 |
|
Rate limits |
не опубликованы, ломаются |
нет |
|
Bedrock/Vertex |
нет |
да |
|
Кто видит ваши запросы |
Anthropic |
только вы |
Веб-поиск — это commodity. Он бесплатен в браузере и должен быть бесплатен для AI-агента. Anthropic берёт $0.01 за каждый поисковый запрос не потому, что поиск стоит столько, а потому что может.
SearXNG + MCP — это 10 минут настройки, которые:
Убирают $15–30/мес per-search fee
Убирают rate limits — никаких API Error: Rate limit reached
Убирают посредника — ваши запросы идут напрямую к поисковикам
Дают прозрачность — Server-Timing показывает, какие движки отвечали и сколько времени это заняло
Всё, что нужно: Docker-контейнер с SearXNG, npm-пакет mcp-searxng, одна строчка в CLAUDE.md. Поиск работает лучше (23 результата из 5 движков vs один источник у Anthropic), стоит $0 и не падает с rate limit.
Если хотите обсудить настройку, поделиться своим опытом оптимизации Claude Code или есть вопросы по интеграции — пишите в контакты профиля.
Ссылки:
SearXNG — GitHub (25 500+ stars)
SearXNG Documentation
mcp-searxng (npm)
MCP-searxng (Python)
Model Context Protocol — архитектура
Web Search Tool — документация и прайсинг
Claude API Pricing
Claude Code — управление затратами
Understanding Usage Limits
Bug #27074: WebSearch Rate Limit на подписке
Bug #29579: Rate limit при 16% использования
Bug #22876: 429 при доступной квоте
Если статья была полезна, ставьте плюс и подписывайтесь.
Источник


