
Tavily Hikari 是一个面向 MCP (Model Context Protocol) 的 Tavily 代理层,基于 Rust + Axum 构建,具备多密钥轮询、匿名透传与细粒度审计能力。后端通过 SQLite 维护密钥状态与请求日志,前端使用 React + Vite 提供实时的可视化运维界面,可直接查看 Key 健康、告警与历史流量。
cd docs-site && bun install --frozen-lockfile && bun run devcd web && bun install --frozen-lockfile && bun run storybookexhausted,并在下一个 UTC 月初或管理员恢复后重新上阵。/mcp 与静态资源,自动清洗 X-Forwarded-* 等敏感头并重写 Origin/Referer,细节见 docs/high-anonymity-proxy.md。web/ 单页应用展示实时统计、请求日志、管理员操作入口,支持复制真实 Key、软删除/恢复等动作。/admin/dashboard、/admin/tokens/:id、/admin/keys/:id),不再使用旧 hash 子路由。/console、/console/dashboard、/console/tokens 与 /console/tokens/:id;首页 token 引导仍刻意保留 /#<token> / /#<token-id> hash 兼容,避免把完整 token 带入 path/query 日志面。request_logs 表保留 method/path/query、状态码、错误信息、透传/丢弃头部等字段,方便回溯配额损耗与异常请求。ghcr.io 镜像)。Client → Tavily Hikari (Axum) ──┬─> Tavily upstream (/mcp)
├─> SQLite (api_keys, request_logs)
└─> Web SPA (React/Vite, served via /)
api_keys(状态、短 ID、配额字段)与 request_logs(请求/响应/错误)。web/dist,由后端静态挂载或通过 Vite Dev Server 代理到 http://127.0.0.1:58087。# 1. 启动代理(示例绑定高位端口,本地开发显式放开管理员接口)
DEV_OPEN_ADMIN=true cargo run -- --bind 127.0.0.1 --port 58087
# 2. (可选)启动前端 Dev Server
cd web && bun install --frozen-lockfile && bun run --bun dev -- --host 127.0.0.1 --port 55173
# 3. 通过管理员接口注册 Tavily key(仅本地开发模式)
curl -X POST http://127.0.0.1:58087/api/keys \
-H "Content-Type: application/json" \
-d '{"api_key":"key_a"}'
服务启动后可访问 http://127.0.0.1:58087/health 验证状态,或在浏览器打开 http://127.0.0.1:55173 使用控制台。所有 Tavily key 建议通过管理员 API 或 Web 控制台录入,避免把敏感密钥写入环境变量。
CI 在发布时会产出 ghcr.io/ivanli-cn/tavily-hikari:<tag> 镜像,可直接运行:
docker run --rm \
-p 8787:8787 \
-v $(pwd)/data:/srv/app/data \
ghcr.io/ivanli-cn/tavily-hikari:latest
镜像已包含 web/dist,默认监听 0.0.0.0:8787 并把 SQLite 数据写入 /srv/app/data/tavily_proxy.db(可通过挂载卷持久化)。容器启动后同样需通过管理员接口或前端控制台为代理注册 Tavily key。
GitHub Release 现在会附带 Linux tar.gz 二进制包,分别覆盖 linux/amd64 与 linux/arm64,并同步提供 SHA256 校验文件。该二进制把 Web 界面一并内嵌进程序里,运行时不再需要单独的 web/dist 目录。
仓库内提供了一个最小化的 docker-compose.yml,用于长期运行或一次性 POC:
docker compose up -d
# 以管理员身份注入首批 Tavily key
curl -X POST http://127.0.0.1:8787/api/keys \
-H "X-Forwarded-User: admin@example.com" \
-H "X-Forwarded-Admin: true" \
-H "Content-Type: application/json" \
-d '{"api_key":"key_a"}'
ghcr.io/ivanli-cn/tavily-hikari:latest,将 8787 端口暴露到宿主机。tavily-hikari-data 卷持久化 /srv/app/data/tavily_proxy.db,容器重启不会丢数据。environment 字段覆写(例如自定义 upstream 或端口)。若需要运行自定义镜像,可在 compose 文件里将 image 替换为 build: . 并在本地构建 web/dist 后执行 docker compose up --build。
| Flag / Env | 说明 |
|---|---|
--keys / TAVILY_API_KEYS |
Tavily API key 列表(可选),支持逗号分隔或多次传参,仅用于一次性导入或开发场景;生产环境推荐通过管理员 API/前端控制台录入。 |
--upstream / TAVILY_UPSTREAM |
Tavily MCP 上游端点,默认 https://mcp.tavily.com/mcp;支持带 path prefix 的反代 URL。 |
--bind / PROXY_BIND |
监听地址,默认 127.0.0.1。 |
--port / PROXY_PORT |
监听端口,默认 8787。建议开发期使用高位端口(如 58087)。 |
--db-path / PROXY_DB_PATH |
SQLite 文件路径,默认 tavily_proxy.db。 |
--log-format / RUNTIME_LOG_FORMAT |
运行期日志格式,默认 json;需要本地 grep/迁移期排障时可显式切到 text。 |
--static-dir / WEB_STATIC_DIR |
Web 静态目录,若缺省且存在 web/dist 会自动挂载。 |
--forward-auth-header / FORWARD_AUTH_HEADER |
指定 ForwardAuth 注入的“用户标识”请求头(如 Remote-Email)。 |
--forward-auth-admin-value / FORWARD_AUTH_ADMIN_VALUE |
匹配到该值时视为管理员,可访问 /api/keys/* 接口。 |
--forward-auth-nickname-header / FORWARD_AUTH_NICKNAME_HEADER |
可选,提供 UI 展示的昵称头(如 Remote-Name)。 |
--admin-mode-name / ADMIN_MODE_NAME |
当缺少昵称头时用于覆盖前端显示的管理员名称。 |
--admin-auth-forward-enabled / ADMIN_AUTH_FORWARD_ENABLED |
是否启用旧版 ForwardAuth 管理员校验(默认 false;完整旧版 header 配置会为兼容自动启用)。 |
--admin-auth-builtin-enabled / ADMIN_AUTH_BUILTIN_ENABLED |
是否启用内置管理员登录(cookie 会话)(默认 false)。 |
--admin-auth-builtin-password-hash / ADMIN_AUTH_BUILTIN_PASSWORD_HASH |
内置管理员口令哈希(PHC 字符串,推荐)。 |
--admin-auth-builtin-password / ADMIN_AUTH_BUILTIN_PASSWORD |
内置管理员登录口令(不推荐,优先使用口令哈希)。 |
--dev-open-admin / DEV_OPEN_ADMIN |
仅限本地调试的开关,跳过管理员校验(默认 false)。 |
--linuxdo-oauth-enabled / LINUXDO_OAUTH_ENABLED |
是否启用 Linux DO Connect OAuth2 用户登录(默认 false)。 |
--linuxdo-oauth-client-id / LINUXDO_OAUTH_CLIENT_ID |
Linux DO OAuth2 客户端 ID(connect.linux.do 应用)。 |
--linuxdo-oauth-client-secret / LINUXDO_OAUTH_CLIENT_SECRET |
Linux DO OAuth2 客户端密钥。 |
--linuxdo-oauth-authorize-url / LINUXDO_OAUTH_AUTHORIZE_URL |
OAuth2 授权端点(默认 https://connect.linux.do/oauth2/authorize)。 |
--linuxdo-oauth-token-url / LINUXDO_OAUTH_TOKEN_URL |
OAuth2 换 token 端点(默认 https://connect.linux.do/oauth2/token)。 |
--linuxdo-oauth-userinfo-url / LINUXDO_OAUTH_USERINFO_URL |
OAuth2 用户信息端点(默认 https://connect.linux.do/api/user)。 |
--linuxdo-oauth-scope / LINUXDO_OAUTH_SCOPE |
OAuth scope(默认 user)。 |
--linuxdo-oauth-redirect-url / LINUXDO_OAUTH_REDIRECT_URL |
本服务的前端回调地址(例如 https://tavily.ivanli.cc/console/oauth/linuxdo/callback)。 |
--linuxdo-oauth-refresh-token-crypt-key / LINUXDO_OAUTH_REFRESH_TOKEN_CRYPT_KEY |
用于加密落库 LinuxDo refresh token(32 字节原文,或可解码为 32 字节的 base64/base64url)。 |
--linuxdo-oauth-user-sync-enabled / LINUXDO_OAUTH_USER_SYNC_ENABLED |
是否启用 LinuxDo 离线每日用户同步调度器(默认 true)。 |
--linuxdo-oauth-user-sync-at / LINUXDO_OAUTH_USER_SYNC_AT |
LinuxDo 离线每日同步时间,按服务器本地时区解释,格式固定 HH:mm(默认 06:20)。 |
--linuxdo-credit-enabled / LINUXDO_CREDIT_ENABLED |
是否启用 Linux.do Credit 充值支付流程(默认 false)。 |
--linuxdo-credit-client-id / LINUXDO_CREDIT_CLIENT_ID |
Linux.do Credit 应用 Client ID。 |
--linuxdo-credit-client-secret / LINUXDO_CREDIT_CLIENT_SECRET |
Linux.do Credit 应用 Client Secret。 |
--linuxdo-credit-merchant-private-key / LINUXDO_CREDIT_MERCHANT_PRIVATE_KEY |
Linux.do Credit LDC 创建订单签名使用的 Ed25519 商户私钥。 |
--linuxdo-credit-submit-url / LINUXDO_CREDIT_SUBMIT_URL |
Linux.do Credit LDC 提交订单端点(默认 https://credit.linux.do/epay/pay/submit.php)。 |
--linuxdo-credit-notify-url / LINUXDO_CREDIT_NOTIFY_URL |
可选的订单级回调地址,通常为 https://<你的 Hikari 域名>/api/linuxdo-credit/notify。 |
--linuxdo-credit-return-url / LINUXDO_CREDIT_RETURN_URL |
可选的支付后浏览器返回地址,通常为 https://<你的 Hikari 域名>/console/dashboard。 |
--linuxdo-credit-test-price-enabled / LINUXDO_CREDIT_TEST_PRICE_ENABLED |
是否启用 1 LDC 购买 1 个自然月积分的测试档位(默认 false)。 |
--user-session-max-age-secs / USER_SESSION_MAX_AGE_SECS |
用户登录会话 cookie 的有效期(秒,默认 1209600,即 14 天)。 |
--oauth-login-state-ttl-secs / OAUTH_LOGIN_STATE_TTL_SECS |
OAuth 一次性 state 的有效期(秒,默认 600)。 |
首次运行会自动建表。若在 CLI/环境变量里显式传入 --keys 或 TAVILY_API_KEYS,会同步 api_keys 表:在列表中的 Key 会被新增或恢复为 active;不在列表中的 Key 会被标记为 deleted。默认推荐通过管理员 API/前端控制台维护 Key 集合。
TAVILY_UPSTREAM 按完整的 MCP 端点解释;如果反代保留了 path prefix,配置值里需要包含最终的 /mcp 路径。TAVILY_USAGE_BASE 可以带 path prefix;Hikari 会在这个 prefix 后继续追加 /search、/extract、/crawl、/map、/research、/research/{id} 与 /usage。| Method | Path | 说明 | 认证 |
|---|---|---|---|
GET |
/health |
健康检查,返回 200 代表代理可用。 | 无 |
GET |
/api/summary |
汇总成功/失败次数、活跃 Key 数、最近活跃时间。 | 无 |
GET |
/api/keys |
列出 4 位短 ID、状态、请求统计。 | 管理员 |
GET |
/api/logs?page=1 |
最近请求日志(分页返回,默认每页 20 条),包含状态码与错误。 | 管理员 |
POST |
/api/tavily/search |
Tavily /search 的代理入口,供 Cherry Studio 等 HTTP 客户端使用。 |
Hikari Token |
POST |
/api/keys |
管理员接口,新增或“反删除”一个 Key。Body: { "api_key": "..." } |
管理员 |
DELETE |
/api/keys/:id |
管理员接口,软删除指定短 ID。 | 管理员 |
GET |
/api/keys/:id/secret |
管理员接口,返回真实 Tavily Key。 | 管理员 |
管理员身份由 Passkey、内置管理员会话、显式启用的旧版 ForwardAuth 或本地 DEV_OPEN_ADMIN 判断;控制台仅在管理员会话下显示“复制原始 Key”按钮。
Tavily Hikari 通过 /api/tavily/search 为 Tavily HTTP API 提供代理与密钥池能力,Cherry Studio 这类直接调用 Tavily HTTP
$ claude mcp add tavily-hikari \
-- python -m otcore.mcp_server <graph>