MCP全搜索
🔍 提供对多个搜索引擎(Tavily、Brave、Kagi)、人工智能工具(Perplexity、FastGPT)以及内容处理服务(Jina AI、Kagi)统一访问的模型上下文协议(MCP)服务器。通过单一界面整合了搜索、人工智能响应、内容处理和增强功能。
服务介绍
mcp-omnisearch
一个 Model Context Protocol (MCP) 服务器,提供对多个搜索提供商和 AI 工具的统一访问。该服务器结合了 Tavily、Perplexity、Kagi、Jina AI、Brave 和 Firecrawl 的功能,通过单一接口提供全面的搜索、AI 响应、内容处理和增强功能。
功能
🔍 搜索工具
- Tavily 搜索: 优化于提供带有强大引用支持的事实信息。支持通过 API 参数(include_domains/exclude_domains)进行域名过滤。
- Brave 搜索: 注重隐私的搜索,具有良好的技术内容覆盖。支持原生搜索操作符(site:, -site:, filetype:, intitle:, inurl:, before:, after: 和精确短语)。
- Kagi 搜索: 高质量的搜索结果,广告影响最小,专注于权威来源。支持查询字符串中的搜索操作符(site:, -site:, filetype:, intitle:, inurl:, before:, after: 和精确短语)。
🎯 搜索操作符
MCP Omnisearch 通过操作符和参数提供了强大的搜索能力:
通用搜索功能
- 域名过滤:所有提供商均支持
- Tavily: 通过 API 参数(include_domains/exclude_domains)
- Brave & Kagi: 通过 site: 和 -site: 操作符
- 文件类型过滤:在 Brave 和 Kagi 中可用(filetype:)
- 标题和 URL 过滤:在 Brave 和 Kagi 中可用(intitle:, inurl:)
- 日期过滤:在 Brave 和 Kagi 中可用(before:, after:)
- 精确短语匹配:在 Brave 和 Kagi 中可用("phrase")
示例用法
// Using Brave or Kagi with query string operators
{
"query": "filetype:pdf site:microsoft.com typescript guide"
}
// Using Tavily with API parameters
{
"query": "typescript guide",
"include_domains": ["microsoft.com"],
"exclude_domains": ["github.com"]
}
提供商能力
- Brave 搜索: 完全支持查询字符串中的原生操作符
- Kagi 搜索: 完全支持查询字符串中的操作符
- Tavily 搜索: 通过 API 参数支持域名过滤
🤖 AI 响应工具
- Perplexity AI: 结合实时网络搜索与 GPT-4 Omni 和 Claude 3 生成高级响应
- Kagi FastGPT: 快速生成带引用的 AI 回答(典型响应时间为 900 毫秒)
📄 内容处理工具
(原文此处未提供具体内容,因此保持空白)
- Jina AI Reader: 清晰的内容提取,支持图片标题和PDF
- Kagi Universal Summarizer: 为网页、视频和播客提供内容摘要
- Tavily Extract: 从单个或多个网页中以可配置的提取深度('basic' 或 'advanced')提取原始内容。返回合并的内容及各个URL的内容,附带包括字数和提取统计在内的元数据
- Firecrawl Scrape: 从单个URL中提取干净、适合LLM使用的数据,并提供增强的格式化选项
- Firecrawl Crawl: 深度爬取网站上所有可访问的子页面,支持设置深度限制
- Firecrawl Map: 快速从网站收集URL以进行全面的站点映射
- Firecrawl Extract: 使用自然语言提示进行结构化数据提取
- Firecrawl Actions: 在提取动态内容之前支持页面交互(点击、滚动等)
🔄 增强工具
- Kagi Enrichment API: 从专业索引(如Teclis, TinyGem)获取补充内容
- Jina AI Grounding: 实时基于网络知识的事实验证
灵活的API密钥需求
MCP Omnisearch设计为与您可用的API密钥配合工作。您不需要拥有所有提供商的密钥 - 服务器将自动检测可用的API密钥并仅启用这些提供商。
例如:
- 如果您只有Tavily和Perplexity的API密钥,则仅有这两个提供商可用
- 如果没有Kagi的API密钥,基于Kagi的服务将不可用,但其他所有提供商仍正常工作
- 服务器会根据您配置的API密钥记录哪些提供商可用
这种灵活性使得即使只有一两个提供商也能轻松开始使用,并且可以根据需要添加更多。
配置
此服务器需要通过您的MCP客户端进行配置。以下是不同环境下的示例:
Cline配置
在您的Cline MCP设置中添加以下内容:
{
"mcpServers": {
"mcp-omnisearch": {
"command": "node",
"args": ["/path/to/mcp-omnisearch/dist/index.js"],
"env": {
"TAVILY_API_KEY": "your-tavily-key",
"PERPLEXITY_API_KEY": "your-perplexity-key",
"KAGI_API_KEY": "your-kagi-key",
"JINA_AI_API_KEY": "your-jina-key",
"BRAVE_API_KEY": "your-brave-key",
"FIRECRAWL_API_KEY": "your-firecrawl-key"
},
"disabled": false,
"autoApprove": []
}
}
}
Claude Desktop with WSL配置
对于WSL环境,在Claude Desktop配置中添加以下内容:
{
"mcpServers": {
"mcp-omnisearch": {
"command": "wsl.exe",
"args": [
"bash",
"-c",
"TAVILY_API_KEY=key1 PERPLEXITY_API_KEY=key2 KAGI_API_KEY=key3 JINA_AI_API_KEY=key4 BRAVE_API_KEY=key5 FIRECRAWL_API_KEY=key6 node /path/to/mcp-omnisearch/dist/index.js"
]
}
}
}
环境变量
服务器使用每个提供商的API密钥。您不需要所有提供商的密钥 - 只有对应于您可用API密钥的提供商才会被激活:
TAVILY_API_KEY: 用于Tavily搜索PERPLEXITY_API_KEY: 用于Perplexity AIKAGI_API_KEY: 用于Kagi服务(FastGPT, Summarizer, Enrichment)JINA_AI_API_KEY: 用于Jina AI服务(Reader, Grounding)BRAVE_API_KEY: 用于Brave搜索FIRECRAWL_API_KEY: 用于Firecrawl服务(Scrape, Crawl, Map, Extract, Actions)
您可以先从一两个API密钥开始,然后根据需要添加更多。服务器将在启动时记录哪些提供商可用。
API
服务器按类别组织实现MCP工具:
搜索工具
search_tavily
使用 Tavily 搜索 API 在网上搜索。最适合需要可靠来源和引用的事实查询。
参数:
query(字符串,必填):搜索查询
示例:
{
"query": "latest developments in quantum computing"
}
search_brave
注重隐私的网络搜索,对技术主题有很好的覆盖。
参数:
query(字符串,必填):搜索查询
示例:
{
"query": "rust programming language features"
}
search_kagi
高质量的搜索结果,广告影响最小。最适合查找权威来源和研究材料。
参数:
query(字符串,必填):搜索查询language(字符串,可选):语言过滤器(例如:"en")no_cache(布尔值,可选):绕过缓存以获取最新结果
示例:
{
"query": "latest research in machine learning",
"language": "en"
}
AI 响应工具
ai_perplexity
集成实时网络搜索的 AI 驱动响应生成。
参数:
query(字符串,必填):用于 AI 响应的问题或主题
示例:
{
"query": "Explain the differences between REST and GraphQL"
}
ai_kagi_fastgpt
快速生成带有引用的 AI 回答。
参数:
query(字符串,必填):用于快速 AI 回应的问题
示例:
{
"query": "What are the main features of TypeScript?"
}
内容处理工具
process_jina_reader
将 URL 转换为干净的、适合 LLM 的文本,并附带图片说明。
参数:
url(字符串,必填):要处理的 URL
示例:
{
"url": "https://example.com/article"
}
process_kagi_summarizer
从 URL 中提取内容摘要。
参数:
url(字符串,必填):要总结的 URL
示例:
{
"url": "https://example.com/long-article"
}
process_tavily_extract
使用 Tavily Extract 从网页中提取原始内容。
参数:
url(字符串 | 字符串数组,必填):单个 URL 或多个 URL 数组以从中提取内容extract_depth(字符串,可选):提取深度 - 'basic'(默认)或 'advanced'
示例:
{
"url": [
"https://example.com/article1",
"https://example.com/article2"
],
"extract_depth": "advanced"
}
响应包括:
- 来自所有 URL 的合并内容
- 每个 URL 的单独原始内容
- 包含字数、成功提取数量以及任何失败 URL 的元数据
firecrawl_scrape_process
从单个 URL 中提取干净的、适合 LLM 的数据,并提供增强的格式选项。
参数:
url(字符串 | 字符串数组,必填):单个 URL 或多个 URL 数组以从中提取内容extract_depth(字符串,可选):提取深度 - 'basic'(默认)或 'advanced'
示例:
{
"url": "https://example.com/article",
"extract_depth": "basic"
}
响应包括:
- 清洁的、markdown 格式的内容
- 包括标题、字数和提取统计信息在内的元数据
firecrawl_crawl_process
具有可配置深度限制的网站上所有可访问子页面的深度爬取。
参数:
url(字符串 | 字符串数组,必填):爬取的起始 URLextract_depth(字符串,可选):提取深度 - 'basic'(默认)或 'advanced'(控制爬取深度和限制)
示例:
{
"url": "https://example.com",
"extract_depth": "advanced"
}
响应包括:
- 来自所有已爬取页面的合并内容
- 每个页面的单独内容
- 包括标题、字数和爬取统计信息在内的元数据
firecrawl_map_process
从网站快速收集 URL 以进行全面站点映射。
参数:
url(string | string[], 必填): 要映射的 URLextract_depth(string, 可选): 提取深度 - 'basic'(默认)或 'advanced'(控制映射深度)
示例:
{
"url": "https://example.com",
"extract_depth": "basic"
}
响应包括:
- 所有发现的 URL 列表
- 元数据,包括站点标题和 URL 数量
firecrawl_extract_process
使用自然语言提示通过 AI 进行结构化数据提取。
参数:
url(string | string[], 必填): 从该 URL 提取结构化数据extract_depth(string, 可选): 提取深度 - 'basic'(默认)或 'advanced'
示例:
{
"url": "https://example.com",
"extract_depth": "basic"
}
响应包括:
- 从页面中提取的结构化数据
- 元数据,包括标题、提取统计信息
firecrawl_actions_process
支持在提取动态内容之前进行页面交互(点击、滚动等)。
参数:
url(string | string[], 必填): 要与其交互并从中提取内容的 URLextract_depth(string, 可选): 提取深度 - 'basic'(默认)或 'advanced'(控制交互的复杂性)
示例:
{
"url": "https://news.ycombinator.com",
"extract_depth": "basic"
}
响应包括:
- 执行交互后提取的内容
- 执行的操作描述
- 页面截图(如果可用)
- 元数据,包括标题和提取统计信息
增强工具
enhance_kagi_enrichment
从专门索引获取补充内容。
参数:
query(string, 必填): 用于丰富查询
示例:
{
"query": "emerging web technologies"
}
enhance_jina_grounding
验证陈述与网络知识的一致性。
参数:
statement(string, 必填): 需要验证的陈述
示例:
{
"statement": "TypeScript adds static typing to JavaScript"
}
开发
设置
- 克隆仓库
- 安装依赖项:
pnpm install
- 构建项目:
pnpm run build
- 以开发模式运行:
pnpm run dev
发布
- 在 package.json 中更新版本
- 构建项目:
pnpm run build
- 发布到 npm:
pnpm publish
故障排除
API 密钥和访问权限
每个提供商都需要自己的 API 密钥,并可能有不同的访问要求:
- Tavily: 需要从他们的开发者门户获取 API 密钥
- Perplexity: 通过他们的开发者计划获得 API 访问权限
- Kagi: 某些功能仅限于商业(团队)计划用户
- Jina AI: 所有服务都需要 API 密钥
- Brave: 需要从他们的开发者门户获取 API 密钥
- Firecrawl: 需要从他们的开发者门户获取 API 密钥
速率限制
每个提供商都有自己的速率限制。服务器将优雅地处理速率限制错误,并返回适当的错误消息。
贡献
欢迎贡献!请随时提交 Pull Request。
许可证
MIT 许可证 - 查看 LICENSE 文件了解详情。
致谢
基于: