Skip to main content
Glama
superagents-lab

Search1API MCP Server

Search1API MCP サーバー

中国語の文書

Search1API を使用して検索およびクロール機能を提供するモデル コンテキスト プロトコル (MCP) サーバー。

前提条件

  • Node.js >= 18.0.0

  • 有効な Search1API API キー (取得および設定方法については、以下のセットアップ ガイドを参照してください)

Related MCP server: WebSearch-MCP

インストール(スタンドアロン / 一般)

  1. リポジトリをクローンします。

    git clone https://github.com/fatwang2/search1api-mcp.git
    cd search1api-mcp
  2. APIキーの設定:ビルド前にSearch1APIキーを指定する必要があります。様々な方法( .envファイルや環境変数の使用など)については、以下のセットアップガイドのセクションをご覧ください。

  3. 依存関係をインストールしてビルドします。

    npm install
    npm run build

    注: API キーにプロジェクトの.envファイル メソッドを使用する場合は、この手順の前にそれが存在することを確認してください。

使用方法(スタンドアロン / 一般)

API キーが設定されていることを確認します (セットアップ ガイドを参照)。

サーバーを起動します。

npm start

これで、サーバーは MCP クライアントからの接続を受け入れる準備が整います。

セットアップガイド

1. Search1APIキーを取得する

  1. Search1APIに登録する

  2. ダッシュボードから API キーを取得します。

2. APIキーを設定する

APIキーをサーバーで利用できるようにする必要があります。以下のいずれかの方法を選択してください。

方法 A: プロジェクトの.envファイル (スタンドアロンまたは LibreChat に推奨)

このメソッドは、LibreChat の現在のバージョンと統合する場合に必要です (以下の特定のセクションを参照)。

  1. search1api-mcpプロジェクトのルート ディレクトリに、 .envという名前のファイルを作成します。

    # In the search1api-mcp directory
    echo "SEARCH1API_KEY=your_api_key_here" > .env
  2. your_api_key_here実際のキーに置き換えます。

  3. npm install && npm run build実行する**前に、**このファイルが存在することを確認してください。

方法 B: 環境変数 (スタンドアロンのみ)

サーバーを起動する前に、 SEARCH1API_KEY環境変数を設定します。

export SEARCH1API_KEY="your_api_key_here"
npm start

方法 C: MCP クライアント構成 (詳細)

一部のMCPクライアントでは、設定内で環境変数を直接指定できます。これは、CursorやVS Code拡張機能などのクライアントで便利です。

{
  "mcpServers": {
    "search1api": {
      "command": "npx",
      "args": [
        "-y",
        "search1api-mcp"
      ],
      "env": {
        "SEARCH1API_KEY": "YOUR_SEARCH1API_KEY"
      }
    }
  }
}

LibreChatユーザーへの注意: LibreChatの現在の制限により、方法A(プロジェクトの.envファイル)が必須となります。詳細な手順については、以下の統合セクションをご覧ください。

LibreChat (Docker) との統合

このセクションでは、Docker 経由で LibreChat と統合するために必要な手順について詳しく説明します。

概要:

  1. このサーバーのリポジトリを、LibreChat のdocker-compose.ymlからアクセスできる場所に複製します。

  2. このサーバーのディレクトリ内のプロジェクト.envファイル メソッドを使用して、必要な API キーを構成します。

  3. このサーバーを構築します。

  4. librechat.yamlを編集して、LibreChat にこのサーバーの実行方法を伝えます。

  5. ビルドされたサーバー コードが Docker ボリューム バインドを介して LibreChat コンテナー内で使用できることを確認します。

  6. LibreChatを再起動します。

ステップバイステップ:

  1. リポジトリのクローン作成: LibreChatの外部サービスを管理しているホストマシン上のディレクトリ(通常はdocker-compose.ymlと同じディレクトリ)に移動します。一般的な場所は、専用のmcp-serverディレクトリです。

    # Example: Navigate to where docker-compose.yml lives, then into mcp-server
    cd /path/to/your/librechat/setup/mcp-server
    git clone https://github.com/fatwang2/search1api-mcp.git
  2. サーバー ディレクトリに移動します。

    cd search1api-mcp
  3. API キーを構成する (プロジェクト.envファイル メソッド - LibreChat に必須):

    # Create the .env file
    echo "SEARCH1API_KEY=your_api_key_here" > .env
    # IMPORTANT: Replace 'your_api_key_here' with your actual Search1API key
  4. **依存関係のインストールとビルド:**この手順では、サーバー コードをbuildディレクトリにコンパイルします。

    npm install
    npm run build
  5. **librechat.yamlの設定:**メインのlibrechat.yamlファイルを編集し、LibreChat にこの MCP サーバーの実行方法を指定します。mcp_servers mcp_servers下に以下のエントリを追加します。

    # In your main librechat.yaml
    mcp_servers:
      # You can add other MCP servers here too
      search1api:
        # Optional: Display name for the server in LibreChat UI
        # name: Search1API Tools
    
        # Command tells LibreChat to use 'node'
        command: node
    
        # Args specify the script for 'node' to run *inside the container*
        args:
          - /app/mcp-server/search1api-mcp/build/index.js
    • argsパス ( /app/... ) は、構築されたサーバーがアクセスされる LibreChat API コンテナー内の場所です (次の手順のボリューム バインドによります)。

  6. Dockerボリュームバインドの設定: docker-compose.yml (またはおそらくdocker-compose.override.yml )を編集し、ホストマシンのsearch1api-mcpディレクトリをLibreChat APIコンテナにマッピングします。api api:サービスのvolumes:セクションを見つけます。

    # In your docker-compose.yml or docker-compose.override.yml
    services:
      api:
        # ... other service config ...
        volumes:
          # ... other volumes likely exist here ...
    
          # Add this volume bind:
          - ./mcp-server/search1api-mcp:/app/mcp-server/search1api-mcp
    • **ホストパス ( ./mcp-server/search1api-mcp ):**これはdocker-compose.ymlファイルがある場所を基準としたホストマシン上の相対パスです。リポジトリを別の場所にクローンした場合は、この値を調整してください。

    • コンテナパス ( :/app/mcp-server/search1api-mcp ):コンテナ内のパスです。librechat.yaml librechat.yaml``argsパスで使用されているディレクトリ構造と一致する必要があります。

  7. LibreChat を再起動します。 ( docker-compose.yml変更した場合) 再構築して LibreChat スタックを再起動し、変更を適用します。

    docker compose down && docker compose up -d --build
    # Or: docker compose restart api (if only librechat.yaml changed)

これで、Search1API サーバーは LibreChat 内でツール プロバイダーとして利用できるようになります。

特徴

  • ウェブ検索機能

  • ニュース検索機能

  • ウェブページコンテンツの抽出

  • ウェブサイトのサイトマップ抽出

  • DeepSeek R1による深い思考と複雑な問題解決

  • Claude Desktop、Cursor、Windsurf、Cline、その他のMCPクライアントとのシームレスな統合

ツール

1. 検索ツール

  • 名前: search

  • 説明: Search1API を使用してウェブを検索する

  • パラメータ:

    • query (必須): 自然言語で検索クエリを入力してください。より正確な結果を得るには、具体的かつ簡潔に記述してください。

    • max_results (オプション、デフォルト:10):返される結果の数

    • search_service (オプション、デフォルト: "google"): 使用する検索サービス (google、bing、duckduckgo、yahoo、x、reddit、github、youtube、arxiv、wechat、bilibili、imdb、wikipedia)

    • crawl_results (オプション、デフォルト:0):ウェブページ全体のコンテンツをクロールする結果の数

    • include_sites (オプション): 検索に含めるサイトのリスト

    • exclude_sites (オプション): 検索から除外するサイトのリスト

    • time_range (オプション): 検索結果の時間範囲 (「日」、「月」、「年」)

2. ニュースツール

  • 名前: news

  • 説明: Search1API を使用してニュース記事を検索する

  • パラメータ:

    • query (必須): 自然言語で検索クエリを入力してください。より正確な結果を得るには、具体的かつ簡潔に記述してください。

    • max_results (オプション、デフォルト:10):返される結果の数

    • search_service (オプション、デフォルト: "bing"): 使用する検索サービス (google、bing、duckduckgo、yahoo、hackernews)

    • crawl_results (オプション、デフォルト:0):ウェブページ全体のコンテンツをクロールする結果の数

    • include_sites (オプション): 検索に含めるサイトのリスト

    • exclude_sites (オプション): 検索から除外するサイトのリスト

    • time_range (オプション): 検索結果の時間範囲 (「日」、「月」、「年」)

3. クロールツール

  • 名前: crawl

  • 説明: Search1API を使用して URL からコンテンツを抽出します

  • パラメータ:

    • url (必須): クロールするURL

4. サイトマップツール

  • 名前: sitemap

  • 説明: URLからすべての関連リンクを取得します

  • パラメータ:

    • url (必須): サイトマップを取得するためのURL

5. 推論ツール

  • 名前: reasoning

  • 説明: 高速な DeepSeek R1 モデルと Web 検索機能を備えた、深い思考と複雑な問題解決のためのツールです (search1api Web サイトで他のモデルに変更できますが、速度は保証されません)

  • パラメータ:

    • content (必須): 深く考える必要がある質問または問題

6. トレンドツール

  • 名前: trending

  • 説明: 人気のプラットフォームからトレンドのトピックを取得します

  • パラメータ:

    • search_service (必須): トレンドトピックを取得するプラットフォームを指定します (github、hackernews)

    • max_results (オプション、デフォルト:10):返されるトレンドアイテムの最大数

バージョン履歴

  • v0.2.0: LibreChat 統合のフォールバック.envサポートが追加され、依存関係が更新されました。

  • v0.1.8: X(Twitter)とRedditの検索サービスを追加

  • v0.1.7: GitHubとHacker Newsのトレンドツールを追加しました

  • v0.1.6: Wikipedia検索サービスを追加

  • v0.1.5: 新しい検索パラメータ(include_sites、exclude_sites、time_range)と新しい検索サービス(arxiv、wechat、bilibili、imdb)を追加しました

  • v0.1.4: deepseek r1 の推論ツールを追加し、カーソルと Windsurf の設定ガイドを更新しました

  • v0.1.3: ニュース検索機能を追加

  • v0.1.2: サイトマップ機能を追加

  • v0.1.1: ウェブクロール機能を追加

  • v0.1.0: 検索機能付きの初期リリース

ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細については LICENSE ファイルを参照してください。

Available Tools

7 tools
askAsk across the right sourcesA
Read-only
Inspect

Describe what you are looking for in natural language when you do not know which source to search. Search1API picks up to five engines (web, Hacker News, Reddit, GitHub, X, arXiv, Wikipedia, and more), infers a time window from phrases such as "this week", and returns at most 10 relevant results ranked by relevance. Costs 5 credits; use search when you already know the engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe request in natural language; platform hints ("on Reddit", "papers") and time hints ("this week") steer the search

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsYesEngines that failed while others completed
intentYesKeywords, engines, and time window that were used
resultsYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly/openWorld/non-destructive), but the description adds substantial operational context the annotations do not: up to five engines selected, automatic time-window inference from phrases like 'this week', a cap of 10 results, and a concrete cost of 5 credits. Cost and result-cap disclosure is exactly the kind of trait an agent needs for budget-aware selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the trigger condition, then capability and cost, then the routing alternative. No filler and nothing repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, yet the description still usefully bounds the result count. For a single-parameter discovery tool, the trigger condition, alternatives, cost, and result cap together make it fully sufficient to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents the query parameter, including platform and time hints. The description reinforces the time-hint inference mechanism ('infers a time window from phrases such as "this week"'), adding a little meaning beyond the schema, though most detail is duplicative of the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('describe what you are looking for in natural language') and frames the scope as cross-source discovery. It explicitly contrasts with the sibling 'search' by naming the condition that separates them, so an agent can distinguish the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('when you do not know which source to search') and an explicit alternative with its own condition ('use search when you already know the engine'). Both sides of the routing decision are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crawlRead a web pageA
Read-only
Inspect

Extract the readable title and full text from a public URL supplied by the user or returned by search.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic HTTP or HTTPS URL to retrieve

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety and open-web profile is covered structurally. The description adds that the output is extracted readable text rather than raw markup, plus the public-URL restriction, but says nothing about failure modes (paywalls, JS-rendered content, rate limits).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero padding; the action and output are front-loaded and the input-sourcing hint is appended without derailing the sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't explain return values, and the single input is fully documented. It is nearly complete for a one-parameter read tool, with the main gap being no guidance on unreadable or dynamically rendered pages.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and the schema already describes it fully (format: uri, 'Public HTTP or HTTPS URL to retrieve') at 100% coverage, so the baseline is 3. The description reinforces the public-URL constraint and hints at the URL source, but adds no format or validity detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (extract) and concrete outputs (readable title and full text) from a clearly bounded resource (a public URL). It does not explicitly distinguish itself from siblings like render_results or sitemap, which an agent might plausibly confuse with page retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Supplied by the user or returned by search' implies a usage chain after the search tool, which is useful contextual guidance. However, there is no explicit when-not guidance or mention of when a sibling such as render_results (e.g., JS-heavy pages) would be the better choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

newsNews searchA
Read-only
Inspect

Search current news when the user asks about recent events, announcements, or coverage. Returns citable article results with title, URL, snippet, and optional extracted text.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesShort, focused news query
time_rangeNoOptional recency window; use day for breaking news
max_resultsNoMaximum number of articles to return
crawl_resultsNoNumber of top articles to retrieve as full pages. Each successful retrieval adds 1 credit to the base 1-credit news request
exclude_sitesNoNews domains to exclude
include_sitesNoNews domains to include
search_serviceNoNews search engine to usebing

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds that results are "citable" with title/URL/snippet/optional text, but says nothing about cost, freshness guarantees, or rate behavior beyond what the schema's credit note already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded and trigger condition second, with zero filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich schema, output schema, and safety annotations, the description covers enough to call the tool. The notable gap is sibling routing: in a toolset containing both `search` and `trending`, the description never explains why an agent should pick `news` over those alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all seven parameters (including the credit cost of crawl_results and the recency enum). The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search current news") plus the triggering user intent, so the agent knows this is a news-retrieval tool rather than a general one. However, it never distinguishes itself from the sibling `search` or `trending` tools, leaving ambiguity about which to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"when the user asks about recent events, announcements, or coverage" gives clear, actionable context for when to invoke this tool. There are no exclusions or named alternatives (e.g. no guidance on choosing `trending` for trending topics over `news`), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_resultsRender the resultsA
Read-onlyIdempotent
Inspect

Present already retrieved source results as source cards when the host supports UI, with a complete readable text list otherwise. Use when the user wants to browse sources or a visual list helps the task. Pass existing results in the desired order; never invent source URLs or factual titles. Does not search, crawl, fetch URLs, verify sources, or consume search credits. Do not call for intermediate research results or when a text answer is sufficient.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional human-readable list heading. Defaults to Results.
resultsYesAlready retrieved results, in the order to display. No new search is performed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
totalYesNumber of results in this rendered list, not a provider-wide search total.
resultsYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, and the description adds genuinely new traits beyond them: graceful degradation when the host has no UI support, a hard prohibition on inventing URLs or factual titles, and the note that this does not consume search credits. These are behavioral facts an agent could not derive from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences that are front-loaded: capability and fallback first, then when to use, then input constraints, then explicit non-capabilities. No sentence is redundant with structured fields, and each adds a distinct constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose explanation. The description still covers everything an agent needs to invoke it correctly: caller prerequisites, ordering intent, host-capability fallback, and the boundary against adjacent research tools. Nothing material is missing for a 2-parameter, non-mutating render tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents title, results, id, url, text, and metadata – this sets the baseline at 3. The description adds ordering semantics ('Pass existing results in the desired order') and reinforces that the payload must be pre-existing rather than newly fetched, which is meaningful beyond the field-level docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource – present already-retrieved results as source cards with a text-list fallback – and immediately bounds the scope with negations ('Does not search, crawl, fetch URLs, verify sources, or consume search credits'). This cleanly separates it from siblings like search, crawl, and sitemap, which is exactly the confusion an agent would otherwise face.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user wants to browse sources or a visual list helps the task'), an explicit anti-trigger ('Do not call for intermediate research results or when a text answer is sufficient'), and enumerates the excluded operations. There is also a prerequisite: results must already exist. Nothing about when to select this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sitemapDiscover links on a siteA
Read-only
Inspect

Discover related public links from a page or domain when the user wants to explore a site's structure or available pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic page or domain URL whose links should be discovered

Output Schema

ParametersJSON Schema
NameRequiredDescription
linksYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds that only public links are surfaced, but says nothing about crawl depth, result limits, or how discovery is scoped — modest added context over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence combining the action with the trigger condition; no filler. Slight redundancy between 'related public links' and 'available pages' keeps it from being maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with an output schema and rich annotations, the description supplies the needed intent and scope. Return values need not be explained since an output schema exists; the only gap is disambiguation from the crawl sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with 100% schema description coverage, so the schema already documents 'url'. The description's 'page or domain' phrasing reinforces that a domain is acceptable, but adds no format or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (discover) and resource (related public links from a page or domain), and scopes it to public links. It does not explicitly differentiate itself from the sibling 'crawl', which also traverses sites, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear selection context: use when the user wants to explore a site's structure or available pages. It stops short of naming the closest alternative (crawl) or stating when not to use it, leaving the sitemap-vs-crawl choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.8.0
    • Addedask
    • Changednews1 field changed
      • changedInput schema / properties / time_range / enum
        Previous value: -[
        -  "day",
        -  "month",
        -  "year"
        -]New value: +[
        +  "day",
        +  "week",
        +  "month",
        +  "year"
        +]
    • Addedrender_results
    • Changedsearch3 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Results page to fetch; only bing, bingcn, baidu, and grokipedia paginate, other engines ignore it",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • changedInput schema / properties / search_service / enum
        Previous value: -[
        -  "google",
        -  "bing",
        -  "duckduckgo",
        -  "yahoo",
        -  "x",
        -  "reddit",
        -  "github",
        -  "youtube",
        -  "arxiv",
        -  "wechat",
        -  "bilibili",
        -  "imdb",
        -  "wikipedia"
        -]New value: +[
        +  "google",
        +  "bing",
        +  "bingcn",
        +  "duckduckgo",
        +  "yahoo",
        +  "yandex",
        +  "x",
        +  "reddit",
        +  "github",
        +  "youtube",
        +  "arxiv",
        +  "wechat",
        +  "bilibili",
        +  "imdb",
        +  "wikipedia",
        +  "grokipedia"
        +]
      • changedInput schema / properties / time_range / enum
        Previous value: -[
        -  "day",
        -  "month",
        -  "year"
        -]New value: +[
        +  "day",
        +  "week",
        +  "month",
        +  "year"
        +]
  2. 1 tool updatev0.5.4
    • Removedfetch
  3. 6 tool updatesv0.4.0
    • Changedcrawl3 fields changed
      • changedInput schema / properties / url / description
        Previous value: -"URL to crawl"New value: +"Public HTTP or HTTPS URL to retrieve"
      • addedInput schema / properties / url / format
        Added value: +"uri"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "properties": {
        +        "id": {
        +          "description": "Stable identifier for this result; for web results this is the canonical URL",
        +          "type": "string"
        +        },
        +        "metadata": {
        +          "additionalProperties": true,
        +          "description": "Additional source metadata",
        +          "type": "object"
        +        },
        +        "text": {
        +          "description": "Result snippet or extracted page text when available",
        +          "type": "string"
        +        },
        +        "title": {
        +          "description": "Human-readable result title",
        +          "type": "string"
        +        },
        +        "url": {
        +          "description": "Canonical URL that clients can cite and users can open",
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "title",
        +        "url"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "type": "object"
        +}
    • Addedfetch
    • Changednews11 fields changed
      • changedInput schema / properties / crawl_results / description
        Previous value: -"Number of top results to crawl for full webpage content. Each successfully crawled page adds 1 credit to the base 1-credit news request"New value: +"Number of top articles to retrieve as full pages. Each successful retrieval adds 1 credit to the base 1-credit news request"
      • addedInput schema / properties / crawl_results / minimum
        Added value: +0
      • changedInput schema / properties / exclude_sites / description
        Previous value: -"List of sites to exclude from search. Only use when you need to explicitly filter out specific domains from results"New value: +"News domains to exclude"
      • changedInput schema / properties / include_sites / description
        Previous value: -"List of sites to include in search. Only use when you need special results from sites not available in search_service"New value: +"News domains to include"
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of results to return"New value: +"Maximum number of articles to return"
      • addedInput schema / properties / max_results / maximum
        Added value: +50
      • addedInput schema / properties / max_results / minimum
        Added value: +1
      • changedInput schema / properties / query / description
        Previous value: -"Search query, be simple and concise"New value: +"Short, focused news query"
      • changedInput schema / properties / search_service / description
        Previous value: -"Specify the news engine to use. Choose based on your specific needs"New value: +"News search engine to use"
      • changedInput schema / properties / time_range / description
        Previous value: -"Time range for search results, only use when specific time constraints are required"New value: +"Optional recency window; use day for breaking news"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "description": "Stable identifier for this result; for web results this is the canonical URL",
        +            "type": "string"
        +          },
        +          "metadata": {
        +            "additionalProperties": true,
        +            "description": "Additional source metadata",
        +            "type": "object"
        +          },
        +          "text": {
        +            "description": "Result snippet or extracted page text when available",
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "Human-readable result title",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "Canonical URL that clients can cite and users can open",
        +            "format": "uri",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch10 fields changed
      • changedInput schema / properties / crawl_results / description
        Previous value: -"Number of top results to crawl for full webpage content. Each successfully crawled page adds 1 credit to the base 1-credit search request"New value: +"Number of top results to retrieve as full pages. Each successful page retrieval adds 1 credit to the base 1-credit search request"
      • addedInput schema / properties / crawl_results / minimum
        Added value: +0
      • changedInput schema / properties / exclude_sites / description
        Previous value: -"List of sites to exclude from search. Only use when you need to explicitly filter out specific domains from results"New value: +"Domains to exclude from the search"
      • changedInput schema / properties / include_sites / description
        Previous value: -"List of sites to include in search. Only use when you need special results from sites not available in search_service"New value: +"Domains to include when the user explicitly scopes the search"
      • addedInput schema / properties / max_results / maximum
        Added value: +50
      • addedInput schema / properties / max_results / minimum
        Added value: +1
      • changedInput schema / properties / query / description
        Previous value: -"Search query, be simple and concise"New value: +"Short, focused search query"
      • changedInput schema / properties / search_service / description
        Previous value: -"Specify the search engine to use. Choose based on your specific needs"New value: +"Search engine to use; choose one only when it matches the user's source intent"
      • changedInput schema / properties / time_range / description
        Previous value: -"Time range for search results, only use when specific time constraints are required"New value: +"Optional recency window for time-sensitive searches"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "description": "Stable identifier for this result; for web results this is the canonical URL",
        +            "type": "string"
        +          },
        +          "metadata": {
        +            "additionalProperties": true,
        +            "description": "Additional source metadata",
        +            "type": "object"
        +          },
        +          "text": {
        +            "description": "Result snippet or extracted page text when available",
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "Human-readable result title",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "Canonical URL that clients can cite and users can open",
        +            "format": "uri",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedsitemap3 fields changed
      • changedInput schema / properties / url / description
        Previous value: -"URL to get sitemap"New value: +"Public page or domain URL whose links should be discovered"
      • addedInput schema / properties / url / format
        Added value: +"uri"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "links": {
        +      "items": {
        +        "format": "uri",
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "links"
        +  ],
        +  "type": "object"
        +}
    • Changedtrending4 fields changed
      • addedInput schema / properties / max_results / maximum
        Added value: +50
      • addedInput schema / properties / max_results / minimum
        Added value: +1
      • changedInput schema / properties / search_service / description
        Previous value: -"Specify the platform to get trending topics from"New value: +"Platform whose trending items should be returned"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "description": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "format": "uri",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
  4. 3 tool updatesv0.3.1
    • Changednews1 field changed
      • changedInput schema / properties / crawl_results / description
        Previous value: -"Number of results to crawl for full webpage content, useful when search result summaries are insufficient for complex queries"New value: +"Number of top results to crawl for full webpage content. Each successfully crawled page adds 1 credit to the base 1-credit news request"
    • Removedreasoning
    • Changedsearch1 field changed
      • changedInput schema / properties / crawl_results / description
        Previous value: -"Number of results to crawl for full webpage content, useful when search result summaries are insufficient for complex queries"New value: +"Number of top results to crawl for full webpage content. Each successfully crawled page adds 1 credit to the base 1-credit search request"
  5. 6 tool updatesv0.1.8
    • First observedcrawl
    • First observednews
    • First observedreasoning
    • First observedsearch
    • First observedsitemap
    • First observedtrending

TDQS

A3.8/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have distinct roles: crawl extracts text, sitemap discovers links, render_results presents output, and trending surfaces popular content. However, search, news, and ask all overlap as retrieval operations, distinguished mainly by the descriptions (engine-specific vs. news-focused vs. multi-engine fallback) rather than by clearly separate purposes.

Naming Consistency3/5

Names mix conventions: verbs (crawl, search, ask), nouns (news, sitemap), a gerund (trending), and one verb_noun (render_results). The tools remain readable and mostly single-word, but there is no predictable pattern across the set.

Tool Count4/5

Seven tools is well within a reasonable range for a search/crawl service and each maps to a recognizable capability. It is slightly generous given the retrieval overlap, but nothing feels redundant or filler.

Completeness4/5

The surface covers the search lifecycle well: multi-source retrieval (search, news, ask, trending), full-text extraction (crawl), link discovery (sitemap), and result presentation (render_results). Minor gaps exist around explicit pagination or structured filtering, but core workflows are covered.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers