多提供商搜索API桥接服务

mcp-nexus是一个强大的多提供商模型上下文协议(MCP)服务器,为Tavily和Brave Search API提供统一的工具接口,支持API密钥管理、客户端认证和灵活部署。

  • by ykq007
  • TypeScript
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 ykq007/mcp-nexus

使用说明

mcp关系

英语| 中文

mcp-nexus 是一个强大的多提供商模型上下文协议(MCP)服务器,充当两者的桥梁 塔维利 和 勇敢搜索 API。它提供了一个统一的工具表面,在上游API密钥池中旋转,所有这些都通过一个全面的管理UI进行管理。

特性

  • 统一搜索API:通过单个MCP端点公开Tavily和Brave Search的工具。
  • API密钥管理:轻松添加、管理和旋转多个Tavily和Brave API密钥,以分配负载和处理速率限制。
  • 客户端身份验证:使用可通过管理UI创建和撤销的承载令牌保护MCP端点。
  • Web管理用户界面:一个用户友好的界面,用于管理API密钥、客户端令牌、查看使用统计信息和配置服务器设置。
  • 使用情况监控:跟踪工具使用情况,检查查询历史记录,并获取最常用工具和查询的摘要。
  • 灵活的搜索策略:动态配置搜索源(tavily_only, brave_only, combined等)和密钥选择策略(round_robin, random)而无需重新启动服务器。
  • 速率限制:MCP客户和上游API呼叫的内置速率限制,以防止滥用和管理成本。
  • 灵活部署:使用Node.js在本地运行,或使用提供的Docker Compose设置部署到任何地方。

快速入门(本地)

Docker Compose(推荐)

cp .env.example .env
# Edit .env to set your ADMIN_API_TOKEN and other configurations
docker compose up --build

SQLite数据存储在挂载的Docker卷中 /data.

然后打开:

  • 管理用户界面: http://localhost:8787/admin
  • MCP端点: http://localhost:8787/mcp

本地Node.js

需要中的env变量 .env.example 待设定。

npm install
npx prisma migrate deploy --schema packages/db/prisma/schema.prisma
npm run dev:bridge-server

工作区

  • packages/core:Tavily/BBrave客户端、密钥管理和MCP工具模式的核心逻辑。
  • packages/bridge-server:主HTTP服务器,提供MCP端点和管理员API/UI。
  • packages/bridge-stdio:用于本地客户端集成的轻量级stdio服务器。
  • packages/stdio-http-bridge:用于将stdio客户端连接到HTTP服务器的辅助包。
  • packages/db:Prisma架构和数据库客户端,用于所有数据持久化。
  • packages/admin-ui:基于React的管理UI前端。

管理用户界面

管理UI提供了一个中心位置来管理您的 mcp-nexus 例子

  • 钥匙:管理您的上游池 塔维利 和 勇敢 API密钥。您可以添加、删除、更新状态(活动、禁用),并监视Tavily密钥的剩余积分。
  • 代币:创建和撤销用于与MCP端点进行身份验证的客户端令牌。
  • 用法:查看详细的工具使用统计数据和查询历史记录,并提供按日期范围、工具和客户端筛选的选项。
  • 设置:配置实时服务器设置,如上游密钥选择策略和搜索源模式。

MCP工具

服务器向MCP客户端公开以下工具。

工具名称 提供者 描述
tavily_search Tavily 在网上搜索任何主题的最新信息。用于超出你知识范围的新闻、事实或数据。返回代码段和源URL
tavily_extract Tavily 从URL中提取内容。以markdown或文本格式返回原始页面内容。
tavily_crawl Tavily 从URL开始抓取网站。从具有可配置深度和广度的页面中提取内容。
tavily_map Tavily 绘制网站的结构图。返回从基本URL开始找到的URL列表
tavily_research Tavily 对给定的主题或问题进行全面的研究。根据研究结果返回详细的回复。
brave_web_search 勇敢 使用勇敢搜索API执行web搜索。用于信息、事实和当前主题的一般网络搜索。返回一个JSON结果数组。
brave_local_search 勇敢 使用勇敢搜索API搜索当地企业和场所。如果本地结果不可用,通常会退回到网络搜索。返回一个JSON结果数组。

配置

配置是通过环境变量进行管理的。复制 .env.example 到 .env 开始。

核心配置

变量 描述 默认值
DATABASE_URL 数据库的连接字符串。对于本地设置,建议使用基于文件的SQLite数据库。 file:./tavily_bridge.db
KEY_ENCRYPTION_SECRET 一种32字节(256位)的密钥,用于加密和解密存储在数据库中的上游API密钥。 (示例中生成)
ADMIN_API_TOKEN 用于访问管理员API的承载令牌。 (示例中生成)
HOST 服务器监听的主机地址 0.0.0.0
PORT 服务器监听的端口 8787
ENABLE_QUERY_AUTH 如果 true,还允许通过查询字符串传递MCP客户端令牌(?tavilyApiKey=... / ?token=...)而不是 Authorization: Bearer ...。(不建议用于生产。) false

速率限制

变量 描述 默认值
MCP_RATE_LIMIT_PER_MINUTE 每个客户端令牌每分钟的最大请求数。 60
MCP_GLOBAL_RATE_LIMIT_PER_MINUTE 所有客户端每分钟的最大请求数。 600
ADMIN_KEY_REVEAL_RATE_LIMIT_PER_MINUTE 最大键显示管理UI中每分钟的尝试次数。 20
MCP_MAX_RETRIES 失败的上游请求的最大重试次数。 2
MCP_COOLDOWN_MS 失败后上游API密钥的冷却时间(以毫秒为单位)。 60000

搜索和关键策略

这些设置也可以在 管理用户界面→ 设置 页面。

变量 描述 默认值
SEARCH_SOURCE_MODE 定义搜索行为: tavily_only, brave_only, combined (并行查询),或 brave_prefer_tavily_fallback (先是勇敢,然后是错误的塔维利)。 备注:组合模式 offset>0 仅返回Brave结果以避免Tavily重复。 brave_prefer_tavily_fallback
TAVILY_KEY_SELECTION_STRATEGY 当多个密钥处于活动状态时,选择上游Tavily密钥的策略: round_robin (默认)或 random. round_robin

组合模式

当 SEARCH_SOURCE_MODE=combined:

  • 需要的活动API密钥 两者 Tavily和勇敢的搜索
  • 并行执行查询以尽量减少延迟
  • 按URL合并和消除重复结果
  • 备注:每个搜索请求都会消耗配额 两者 供应商(2倍成本)
  • 分页:何时 offset>0,只返回Brave结果(Tavily不支持偏移)

Tavily配置

变量 描述 默认值
TAVILY_USAGE_LOG_MODE Tavily工具使用日志级别: none, hash (仅查询哈希), preview (编辑查询),或 full 查询。 preview
TAVILY_USAGE_HASH_SECRET 用于创建查询的密钥HMAC-SHA256哈希而不是普通SHA256的可选密钥。建议隐私。 ""
TAVILY_USAGE_SAMPLE_RATE 用于记录使用事件的可选采样率(0.0到1.0)。空字符串表示记录所有事件。 ""
TAVILY_USAGE_RETENTION_DAYS 使用日志的可选保留期。如果设置了,旧日志将定期清理。 ""
TAVILY_USAGE_CLEANUP_PROBABILITY 新使用事件触发旧使用日志清理的概率(0.0到1.0)。 0.001
TAVILY_CREDITS_MIN_REMAINING Tavily密钥将自动放入的信用阈值 cooldown 状态。 1
TAVILY_CREDITS_COOLDOWN_MS 低于最低信用阈值的密钥的冷却时间。 300000 (5米)
TAVILY_CREDITS_REFRESH_LOCK_MS 锁定持续时间,以防止同一密钥的并发信用刷新。 15000
TAVILY_CREDITS_REFRESH_TIMEOUT_MS 上游Tavilly信用API请求超时。 5000
TAVILY_CREDITS_CACHE_TTL_MS 在Tavily信用信息被认为过时之前缓存它的持续时间。 60000

勇敢的配置

如果没有配置Brave密钥,Brave工具将退回使用Tavily。

变量 描述 默认值
BRAVE_API_KEY 勇敢的搜索API密钥。如果设置,将使用此单个键。要获得多键支持,请通过管理UI添加键。 ""
BRAVE_MAX_QPS 每秒向Brave API发出的保持在速率限制内的最大请求数。 1
BRAVE_MIN_INTERVAL_MS 覆盖范围 BRAVE_MAX_QPS 请求之间具有固定的最小间隔。 ""
BRAVE_MAX_QUEUE_MS 请求在失败或退回Tavily之前可以在队列中等待的最长时间。 30000
BRAVE_OVERFLOW 请求队列已满时的行为: fallback_to_tavily (默认), queue (等待),或 error. fallback_to_tavily
BRAVE_HTTP_TIMEOUT_MS Brave API的请求HTTP超时。 20000

连接MCP客户端

  1. 打开管理UI并创建 客户端令牌 从 Tokens 页面。
  2. 使用该令牌通过将其作为承载令牌传递到 Authorization 头球请注意,这与 管理员令牌 用于访问Admin API本身。

超文本传输协议

  • MCP端点: POST /mcp
  • 认证: Authorization: Bearer <client_token>

标准

建议通过以下方式运行轻量级stdio包装器 npx 它连接到HTTP MCP端点。这会保守秘密 env 而不是CLI参数。

集 TAVILY_BRIDGE_BASE_URL 到您的部署URL(对于本地Docker Compose: http://localhost:8787).

{
  "mcpServers": {
    "mcp-nexus": {
      "command": "npx",
      "args": ["-y", "@nexus-mcp/stdio-http-bridge"],
      "env": {
        "TAVILY_BRIDGE_BASE_URL": "http://localhost:8787",
        "TAVILY_BRIDGE_MCP_TOKEN": "<client_token>"
      }
    }
  }
}

部署

Cloudflare Workers(推荐-免费)

一键部署到Cloudflare的D1数据库免费层。看 packages/worker/README.md 了解详情。

Docker Compose(自托管)

包括 docker-compose.yml 和 Dockerfile 为自托管提供生产就绪设置。

维护者:出版 @nexus-mcp/stdio-http-bridge

这个repo是一个npm workspaces monorepo。仅 @nexus-mcp/stdio-http-bridge 旨在发布到npm。

先决条件

  • 您必须拥有npm发布权限 @nexus-mcp 范围(或更改包名称/范围)。
  • 登录并验证:
npm login
npm whoami

发布(推荐:标签触发CI)

  1. 碰撞工作区版本并创建标记:
npm version patch -w @nexus-mcp/stdio-http-bridge --tag-version-prefix stdio-http-bridge-v
git push --follow-tags
  1. 配置GitHub操作密钥 NPM_TOKEN (具有发布权限的npm访问令牌)。
  2. 工作流程 .github/workflows/publish-stdio-http-bridge.yml 将在匹配的标签上发布 stdio-http-bridge-v*.

释放(手动)

npm publish -w @nexus-mcp/stdio-http-bridge