tavily-mcp-proxy
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tavily-mcp-proxySearch the web for the latest developments in quantum computing."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tavily-mcp-proxy
Reverse-прокси для эндпоинта Tavily MCP, который:
Обходит гео-блокировку для клиентов на IP из санкционных территорий (RU и др.) — прокси живёт на VPS в стране, откуда Tavily доступен, и пересылает запросы.
Ротирует несколько Tavily API-ключей, выбирая раз в сутки ключ с наибольшим остатком квоты. Если ни один ключ не удалось проверить — прокси возвращает HTTP 503 всем клиентам (fail-loud) до восстановления.
Аутентифицирует клиентов по query-параметру
accessKey, чтобы реальные Tavily-ключи никогда не попадали на клиентские машины и не светились в клиентских конфигах.
┌──────────┐ ?accessKey=tvmcp_… ┌─────────────┐ ?tavilyApiKey=<active> ┌────────┐
│ Клиент │ ────────────────────────► │ nginx │ ───────────────────────────► │ Tavily │
└──────────┘ TLS + fail2ban │ (TLS) │ └────────┘
└─────┴───────┘
│ http://127.0.0.1:8741
▼
┌────────────────────────────────────────┐
│ tavily-mcp-backend (aiohttp) │
│ • проверяет accessKey │
│ • подставляет активный Tavily-ключ │
│ • стримит SSE upstream │
└────────────────────────────────────────┘
ежедневно в 05:00 Europe/Moscow
▲
┌────────────────────────────────────────┐
│ quota_checker.py │
│ • GET /usage на каждый ключ │
│ • атомарно пишет active-key │
└────────────────────────────────────────┘Состав репозитория
Путь | Назначение |
| aiohttp-сервис: аутентифицирует клиентов и проксирует |
| Ежедневный селектор: выбирает Tavily-ключ с максимальным остатком квоты, при равенстве — лексикографически первый |
|
|
| systemd-юнит бэкенда |
| systemd oneshot + таймер на 05:00 Europe/Moscow |
| Шаблон nginx: TLS + ACME + reverse-прокси (плейсхолдер |
| Пример формата |
| Пример формата |
| Полное руководство: развёртывание, troubleshooting, безопасность, runbook |
Related MCP server: tavily-mcp-proxy
Быстрый старт (TL;DR)
Полный runbook — в AGENTS.md. Самый короткий путь:
# На VPS (Ubuntu 24.04) — детали в AGENTS.md
apt-get install -y nginx certbot python3-certbot-nginx fail2ban python3-venv python3-pip
mkdir -p /etc/tavily-mcp /opt/tavily-mcp
# заполнить /etc/tavily-mcp/tavily-keys.list и access-keys.list (см. deploy/*.example)
cd /opt/tavily-mcp
python3 -m venv venv
venv/bin/pip install -r requirements.txt
cp deploy/tavily-mcp-backend.service deploy/tavily-mcp-quota.service \
deploy/tavily-mcp-quota.timer /etc/systemd/system/
cp deploy/tavily-mcp.nginx.conf /etc/nginx/sites-available/tavily-mcp
# отредактировать YOUR-HOST.sslip.io в конфиге nginx, затем:
ln -sf /etc/nginx/sites-available/tavily-mcp /etc/nginx/sites-enabled/tavily-mcp
nginx -t && systemctl reload nginx
systemctl daemon-reload
systemctl enable --now tavily-mcp-backend tavily-mcp-quota.timerКонфигурация MCP-клиента (OpenCode, Claude Desktop, MCP CLI и т.п.):
https://YOUR-HOST.sslip.io/mcp/?accessKey=tvmcp_<ваш-сгенерированный-ключ>Конфигурационные файлы на сервере
Путь | Права | Формат | Назначение |
| 0600 | по одному Tavily-ключу на строку | Все ключи, между которыми ротирует quota-checker |
| 0600 |
| Access-ключи клиентов |
| 0644 | одна строка — текущий активный Tavily-ключ | Читается заново на каждом запросе бэкенда |
| 0644 |
| Говорит бэкенду: обслуживать или отдавать 503 |
active-key переписывается атомарно (tempfile → fsync → os.replace) скриптом quota_checker.py. Бэкенд читает файл на каждый запрос, поэтому переключение ключа происходит без рестарта.
Генерация access-ключа
python3 -c 'import secrets, base64; print("tvmcp_" + base64.urlsafe_b64encode(secrets.token_bytes(36)).decode().rstrip("="))'После изменения /etc/tavily-mcp/access-keys.list:
kill -HUP $(pgrep -f backend.py)…или перезапустить systemd-сервис.
Безопасность
Реальные Tavily-ключи живут только на VPS (0600, root). Клиентам никогда не передаются.
Реальные access-ключи (
tvmcp_…) живут только на VPS и в клиентских конфигах под вашим контролем — не коммитьте их в публичные репозитории.Формат лога nginx
mcp_nosecretне пишет query string, поэтому ни Tavily-ключи, ни access-ключи в access-логе не оседают.fail2ban банит IP-адрес источника перманентно через
nftables-allports(подробности — вAGENTS.md→ «Защита VPS»):sshd: 5 неудачных SSH-логинов с одного IP за 24 ч → IP блокируется на всех TCP-портах.nginx-scan: 1 запрос с IP к путям сканеров (.env,wp-admin,xmlrpc.php,phpmyadmin, …) → IP блокируется на всех TCP-портах.tavily-mcp: 5 × HTTP 401 с одного IP на/mcp/за 24 ч → IP блокируется на портах 80/443 (остальные порты работают).Порт 22 (SSH) не банится ни в одном джейле — зайти по SSH можно всегда, в том числе чтобы разбанить себя. Разбан вручную:
ssh vps 'fail2ban-client unban <забаненный-IP>'.Самобан — критично: 5 неудачных SSH-попыток (протухший ключ в
ssh-agent) или 1 случайныйcurlк пути сканера = ваш домашний IP уходит в перманентный бан → потеря доступа к VPS. Восстановление: мобильный хотспот / VPN / веб-консоль хостера (зайти с другого IP), затемfail2ban-client unban <свой-IP>.
HTTPS / домен
Прокси требует публичный HTTPS-эндпоинт. Полный runbook — в AGENTS.md → «Домен и сертификат» и «Восстановление с нуля»; здесь — короткая версия.
Wildcard-DNS через публичные сервисы.
sslip.ioиnip.io— это разные сервисы (НЕ зеркала друг друга), оба резолвят имя вида<IP-С-ДЕФИСАМИ>.<service>.ioв IP, зашитый в имя. Регистрация в DNS не нужна.Сертификат Let's Encrypt через
certbot --nginx -d <YOUR-HOST>.sslip.io(HTTP-01 challenge на 80 порту). Файлы лежат в/etc/letsencrypt/live/<YOUR-HOST>.../. Срок действия — 90 дней (стандарт Let's Encrypt).Автопродление —
certbot.timer(systemd): каждые ~12 часов проверяет, осталось ли <15 дней до истечения, и автоматически перевыпускает сертификат (на практике — на 75-й день жизни). Порог задан в/etc/letsencrypt/renewal/<domain>.confчерезrenew_before_expiry = 15 days. Если таймер по какой-то причине не сработал —certbot renewвручную.Когда LE упирается в rate-limit (5 сертификатов в неделю на один домен): сгенерировать имя
<IP-С-ДЕФИСАМИ>.nip.io, получить сертификат для него, обновитьserver_nameв nginx, обновить URL в MCP-клиенте. Это разные DNS-сервисы, поэтому для LE это разные домены — rate-limit sslip.io не действует на nip.io.
⚠️ Что ломает работу MCP-клиента
Имя <IP-С-ДЕФИСАМИ>.sslip.io привязано к конкретному IP-адресу VPS. Если IP VPS меняется (переустановка у хостера, смена тарифа, миграция), то:
Резолв старого имени перестаёт указывать на новый IP.
Старый сертификат остаётся валидным по дате, но для другого IP он бесполезен (TLS-хендшейк успешный, но клиент обращается к чужому IP).
OpenCode (и любой MCP-клиент) перестаёт работать до тех пор, пока на клиентской машине не обновится URL на новое имя.
Порядок действий при смене IP: сгенерировать новое имя <НОВЫЙ-IP-С-ДЕФИСАМИ>.sslip.io (или .nip.io) → certbot --nginx -d <НОВОЕ-ИМЯ> на VPS → обновить mcp.tavily.url в ~/.config/opencode/opencode.jsonc на Mac → перезапустить сессию OpenCode. Полный чеклист — в AGENTS.md → Troubleshooting → «IP VPS сменился».
Имя хоста видно в публичных логах Certificate Transparency — это нормально. Безопасность держится на секретности ключей (accessKey у клиентов, реальные Tavily-ключи — только на VPS).
Лицензия
MIT (заглушка — поменяйте по желанию).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceA local MCP server that exposes Tavily search as a tool and rotates across multiple API keys for reliability.1MIT
- Alicense-qualityBmaintenanceA proxy MCP server for Tavily search and extract APIs with support for multiple API keys, random rotation, and bearer token authentication.MIT
- AlicenseAqualityAmaintenanceA proxy MCP server that connects to Tavily's official Streamable HTTP MCP, managing multiple API keys and automatically switching to the next one when the current key's quota is exhausted.581MIT
- Flicense-qualityDmaintenanceA Cloudflare Worker that proxies requests to the Tavily API with automatic key rotation from a pool, providing search, extract, crawl, and map tools via MCP.22
Related MCP Connectors
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
MCP server for Google search results via SERP API
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vokasug/tavily-mcp-proxy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server