使用说明
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客户端
- 打开管理UI并创建 客户端令牌 从
Tokens页面。 - 使用该令牌通过将其作为承载令牌传递到
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)
- 碰撞工作区版本并创建标记:
npm version patch -w @nexus-mcp/stdio-http-bridge --tag-version-prefix stdio-http-bridge-v
git push --follow-tags
- 配置GitHub操作密钥
NPM_TOKEN(具有发布权限的npm访问令牌)。 - 工作流程
.github/workflows/publish-stdio-http-bridge.yml将在匹配的标签上发布stdio-http-bridge-v*.
释放(手动)
npm publish -w @nexus-mcp/stdio-http-bridge