M

MCP全搜索

@spences10/mcp-omnisearch
1 Stars 691 次浏览 spences10 更新于 2026-08-23

🔍 提供对多个搜索引擎(Tavily、Brave、Kagi)、人工智能工具(Perplexity、FastGPT)以及内容处理服务(Jina AI、Kagi)统一访问的模型上下文协议(MCP)服务器。通过单一界面整合了搜索、人工智能响应、内容处理和增强功能。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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 AI
  • KAGI_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 (字符串 | 字符串数组,必填):爬取的起始 URL
  • extract_depth (字符串,可选):提取深度 - 'basic'(默认)或 'advanced'(控制爬取深度和限制)

示例:

{
    "url": "https://example.com",
    "extract_depth": "advanced"
}

响应包括:

  • 来自所有已爬取页面的合并内容
  • 每个页面的单独内容
  • 包括标题、字数和爬取统计信息在内的元数据

firecrawl_map_process

从网站快速收集 URL 以进行全面站点映射。

参数:

  • url (string | string[], 必填): 要映射的 URL
  • extract_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[], 必填): 要与其交互并从中提取内容的 URL
  • extract_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"
}

开发

设置

  1. 克隆仓库
  2. 安装依赖项:
pnpm install
  1. 构建项目:
pnpm run build
  1. 以开发模式运行:
pnpm run dev

发布

  1. 在 package.json 中更新版本
  2. 构建项目:
pnpm run build
  1. 发布到 npm:
pnpm publish

故障排除

API 密钥和访问权限

每个提供商都需要自己的 API 密钥,并可能有不同的访问要求:

  • Tavily: 需要从他们的开发者门户获取 API 密钥
  • Perplexity: 通过他们的开发者计划获得 API 访问权限
  • Kagi: 某些功能仅限于商业(团队)计划用户
  • Jina AI: 所有服务都需要 API 密钥
  • Brave: 需要从他们的开发者门户获取 API 密钥
  • Firecrawl: 需要从他们的开发者门户获取 API 密钥

速率限制

每个提供商都有自己的速率限制。服务器将优雅地处理速率限制错误,并返回适当的错误消息。

贡献

欢迎贡献!请随时提交 Pull Request。

许可证

MIT 许可证 - 查看 LICENSE 文件了解详情。

致谢

基于:

相关 MCP 服务