mcpField
W
web-search

web-search

github.com/brave生産性1924.7k 回インストール11 週間前に更新
リポジトリ

web-search について

構造化された検索結果、フィルター、独自のランキングを必要とするアプリやエージェント向けの Brave Search API 検索スキルです。複数の種類の結果について、リンク、抜粋、メタデータを返します。

主な機能

  1. 01構造化されたウェブ検索結果
  2. 02種類・日付による絞り込み
  3. 03検索演算子とスペルチェック
  4. 04Goggles による独自ランキング
  5. 05任意のリッチデータコールバック

活用シーン

  1. 01検索結果画面の構築
  2. 02ニュース・動画・議論の結果取得
  3. 03サイトやファイル形式による結果制限

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/brave/brave-search-skills --skill web-search

インストール後、Claude Code で/web-searchを入力して読み込まれたか確認します。

詳細

Web Search

API キーが必要です:https://api.search.brave.com で取得してください

プラン:Search プランに含まれています。https://api-dashboard.search.brave.com/app/subscriptions/subscribe をご覧ください

クイックスタート(cURL)

基本的な検索
curl -s "https://api.search.brave.com/res/v1/web/search?q=python+web+frameworks" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
パラメーターを指定した検索
curl -s "https://api.search.brave.com/res/v1/web/search" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=rust programming tutorials" \
  --data-urlencode "country=US" \
  --data-urlencode "search_lang=en" \
  --data-urlencode "count=10" \
  --data-urlencode "safesearch=moderate" \
  --data-urlencode "freshness=pm"

エンドポイント

GET https://api.search.brave.com/res/v1/web/search
POST https://api.search.brave.com/res/v1/web/search

注:GET メソッドと POST メソッドの両方に対応しています。長いクエリや複雑な Goggles には POST が便利です。

認証:X-Subscription-Token: <API_KEY> ヘッダー

任意のヘッダー:

  • Accept-Encoding: gzip — gzip 圧縮を有効にします

Web Search の用途

機能Web Search(このツール)LLM Context(llm-context)Answers(answers)
出力構造化された検索結果(リンク、スニペット、メタデータ)LLM 向けに抽出済みのページコンテンツ引用付きのエンドツーエンドの AI 回答
検索結果の種類Web、ニュース、動画、ディスカッション、FAQ、インフォボックス、場所、リッチ抽出されたテキストチャンク、表、コード統合された回答とソース一覧
独自の機能Goggles、構造化データ(schemas)、リッチコールバックトークン予算の制御、しきい値モード複数回の検索、ストリーミング、OpenAI SDK 互換
速度高速(約0.5~1秒)高速(1秒未満)低速(約30~180秒)
最適な用途検索 UI、データ抽出、カスタムランキングRAG パイプライン、AI エージェント、グラウンディングチャットインターフェース、詳細な調査

パラメーター

パラメーター型必須デフォルト説明
qstringはい-検索クエリ(1~400文字、最大50語)
countrystringいいえUS検索対象の国(2文字の国コードまたは ALL)
search_langstringいいえen言語の指定(2文字以上の言語コード)
ui_langstringいいえen-USUI の言語(例:"en-US")
countintいいえ201ページあたりの最大検索結果数(1~20)
offsetintいいえ0ページネーションのページオフセット(0~9)
safesearchstringいいえmoderateアダルトコンテンツのフィルター(off/moderate/strict)
freshnessstringいいえ-時間フィルター(pd/pw/pm/py または日付範囲)
text_decorationsboolいいえtrueハイライトマーカーを含めます
spellcheckboolいいえtrueクエリを自動修正します
result_filterstringいいえ-検索結果の種類をフィルターします(カンマ区切り)
gogglesstringいいえ-カスタムランキングフィルター(URL またはインライン)
extra_snippetsboolいいえ-検索結果ごとに最大5件の追加スニペットを取得します
operatorsboolいいえtrue検索演算子を適用します
unitsstringいいえ-測定単位(metric/imperial)
enable_rich_callbackboolいいえfalseサードパーティのリッチデータコールバックを有効にします
include_fetch_metadataboolいいえfalse検索結果に fetched_content_timestamp を含めます
鮮度の値
値説明
pd過去1日(24時間)
pw過去1週間(7日間)
pm過去1か月(31日間)
py過去1年(365日間)
YYYY-MM-DDtoYYYY-MM-DD任意の日付範囲
検索結果フィルターの値

フィルターの種類:discussions、faq、infobox、news、query、videos、web、locations

# Only web and video results
curl "...&result_filter=web,videos"
位置情報ヘッダー(任意)

位置情報に対応した結果を得るには、次のヘッダーを追加します。座標が分かっている場合は緯度/経度だけで十分です。ほかのヘッダーは、座標を取得できない場合の代替としてのみ必要です。

ヘッダー型説明
X-Loc-Latfloatユーザーの緯度(-90.0~90.0)
X-Loc-Longfloatユーザーの経度(-180.0~180.0)
X-Loc-TimezonestringIANA タイムゾーン(例:"America/San_Francisco")
X-Loc-Citystring市区町村名
X-Loc-Statestring州/地域コード(ISO 3166-2)
X-Loc-State-Namestring州/地域の正式名称(例:"California")
X-Loc-Countrystring2 文字の国コード
X-Loc-Postal-Codestring郵便番号(例:"94105")

優先順位:X-Loc-Lat と X-Loc-Long が優先されます。指定されている場合、下流サービスは座標から直接位置情報を解決し、テキストベースのヘッダー(City、State、Country、Postal-Code)は位置情報の解決には使用されません。座標がない場合にのみ、テキストベースのヘッダーを指定してください。両方を送信しても問題はありません。緯度/経度が優先されます。

レスポンス形式

レスポンスフィールド
フィールド型説明
type文字列常に "search" です
query.original文字列元の検索クエリ
query.altered文字列?スペルチェックで修正されたクエリ(変更された場合)
query.cleaned文字列?整理/正規化されたクエリ
query.spellcheck_offbool?スペルチェックが無効になっていたかどうか
query.more_results_availableboolさらにページがあるかどうか
query.show_strict_warningbool?厳格なセーフサーチによって成人向けの結果がブロックされた場合は True
query.search_operatorsobject?適用された検索演算子(applied、cleaned_query、sites)
web.type文字列常に "search" です
web.results[].title文字列ページタイトル
web.results[].url文字列ページ URL
web.results[].description文字列?スニペット/説明文
web.results[].age文字列?人が読み取れる形式の経過時間(例:"2 days ago")
web.results[].language文字列?コンテンツの言語コード
web.results[].meta_urlobjectURL の構成要素(scheme、netloc、hostname、path)
web.results[].thumbnailobject?サムネイル(src、original)
web.results[].thumbnail.original文字列?元のフルサイズ画像の URL
web.results[].thumbnail.logobool?サムネイルがロゴかどうか
web.results[].profileobject?発行元の情報(name、url、long_name、img)
web.results[].page_age文字列?公開日時の ISO 形式の日時(例:"2025-04-12T14:22:41")
web.results[].extra_snippetslist[str]?追加の抜粋(最大 5 件)
web.results[].deep_resultsobject?ページ内の追加リンク(buttons、links)
web.results[].schemaslist?schema.org の構造化データ(未加工)
web.results[].productobject?商品情報とレビュー
web.results[].recipeobject?レシピの詳細(材料、時間、評価)
web.results[].articleobject?記事のメタデータ(著者、発行元、日付)
web.results[].bookobject?書籍情報(著者、ISBN、評価)
web.results[].softwareobject?ソフトウェア製品の情報
web.results[].ratingobject?総合評価
web.results[].faqobject?ページで見つかった FAQ
web.results[].movieobject?映画情報(監督、出演者、ジャンル)
web.results[].videoobject?動画のメタデータ(再生時間、再生回数、作成者)
web.results[].locationobject?場所/レストランの詳細
web.results[].qaobject?質問と回答の情報
web.results[].creative_workobject?クリエイティブ作品のデータ
web.results[].music_recordingobject?音楽/楽曲のデータ
web.results[].organizationobject?組織情報
web.results[].reviewobject?レビューデータ
web.results[].content_type文字列?コンテンツ種別の分類
web.results[].fetched_content_timestampint?取得時刻(include_fetch_metadata=true の場合)
web.mutated_by_gogglesboolGoggles によって検索結果の順位が変更されたかどうか
web.family_friendlybool検索結果がファミリー向けかどうか
mixedobject?優先表示順(「Mixed Response」を参照)
discussions.results[]array?フォーラムのディスカッションクラスター
discussions.results[].data.forum_name文字列?フォーラム/コミュニティ名
discussions.results[].data.num_answersint?回答/返信の数
discussions.results[].data.question文字列?ディスカッションの質問
discussions.results[].data.top_comment文字列?最も多く投票されたコメントの抜粋
faq.results[]array?FAQ 項目
news.results[]array?ニュース記事
videos.results[]array?動画の検索結果
infobox.results[]array?ナレッジグラフの項目
locations.results[]array?地域の POI 検索結果
rich.hint.vertical文字列?リッチ検索結果の種類
rich.hint.callback_key文字列?リッチデータのコールバックキー
JSON の例
{
  "type": "search",
  "query": {
    "original": "python frameworks",
    "altered": "python web frameworks",
    "spellcheck_off": false,
    "more_results_available": true
  },
  "web": {
    "type": "search",
    "results": [
      {
        "title": "Top Python Web Frameworks",
        "url": "https://example.com/python-frameworks",
        "description": "A comprehensive guide to Python web frameworks...",
        "age": "2 days ago",
        "language": "en",
        "meta_url": {
          "scheme": "https",
          "netloc": "example.com",
          "hostname": "example.com",
          "path": "/python-frameworks"
        },
        "thumbnail": {
          "src": "https://...",
          "original": "https://original-image-url.com/img.jpg"
        },
        "extra_snippets": ["Additional excerpt 1...", "Additional excerpt 2..."]
      }
    ],
    "family_friendly": true
  },
  "mixed": {
    "type": "mixed",
    "main": [
      {"type": "web", "index": 0, "all": false},
      {"type": "web", "index": 1, "all": false},
      {"type": "videos", "all": true}
    ],
    "top": [],
    "side": []
  },
  "videos": { "...": "..." },
  "news": { "...": "..." },
  "rich": {
    "type": "rich",
    "hint": {
      "vertical": "weather",
      "callback_key": "<callback_key_hex>"
    }
  }
}
混合レスポンス

mixed オブジェクトは、種類をまたいだ結果の優先表示順を定義します。次の3つの配列が含まれます。

配列目的
mainメインの結果リスト(表示する結果の順序付きシーケンス)
topメインの結果の上に表示する結果
sideメインの結果の横に表示する結果(例:インフォボックス)

各エントリは ResultReference で、type(例:"web"、"videos")、index(対応する結果配列内のインデックス)、all(この位置にその種類の結果をすべて含める場合は true)を指定します。

検索演算子

演算子構文説明
サイトsite:example.com特定のドメインに結果を限定します
ファイル拡張子ext:pdf特定のファイル拡張子を持つ結果
ファイルタイプfiletype:pdf特定のファイルタイプで作成された結果
タイトル内intitle:pythonタイトルに語句を含むページ
本文内inbody:tutorial本文に語句を含むページ
ページ内inpage:guideタイトルまたは本文に語句を含むページ
言語lang:es特定の言語(ISO 639-1)のページ
地域loc:us特定の国(ISO 3166-1 alpha-2)のページ
含める+term語句を必ず含めます
除外-term語句を含むページを除外します
完全一致"exact phrase"指定した語句の順序で完全一致させます
ANDterm1 AND term2両方の語句が必要です(大文字)
OR / NOTterm1 OR term2、NOT term論理演算子です(大文字)

演算子の解析を無効にするには、operators=false を設定します。

Goggles(カスタムランキング)— Brave 独自機能

Goggles を使うと、検索結果の順位を変更できます。信頼できる情報源の順位を上げたり、SEO スパムを抑制したり、対象を絞った検索範囲を作成したりできます。

方法例
ホスト型--data-urlencode "goggles=https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/rust_programming.goggle"
インライン--data-urlencode 'goggles=$discard\n$site=example.com'

ホスト型の Goggles は GitHub/GitLab 上に置き、! name:、! description:、! author: のヘッダーを含めたうえで、https://search.brave.com/goggles/create に登録する必要があります。インラインルールの登録は不要です。

構文:ルールは $ に続けて、カンマ区切りのオプションを指定します。アクション(いずれか1つ):discard、boost[=N]、downrank[=N]。N は 1~10 の整数です。サイトフィルター:site=DOMAIN。例:$site=example.com,boost=3。ルールは \n(%0A)で区切ります。

許可リスト:$discard\n$site=docs.python.org\n$site=developer.mozilla.org — ブロックリスト:$discard,site=pinterest.com\n$discard,site=quora.com

リソース:見つける · 構文 · クイックスタート

リッチデータの拡充

天気、株式、スポーツ、通貨などに関するクエリには、リッチコールバックのワークフローを使用します。

# 1. Search with rich callback enabled
curl -s "https://api.search.brave.com/res/v1/web/search?q=weather+san+francisco&enable_rich_callback=true" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

# Response includes: "rich": {"hint": {"callback_key": "abc123...", "vertical": "weather"}}

# 2. Get rich data with the callback key
curl -s "https://api.search.brave.com/res/v1/web/rich?callback_key=abc123..." \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

対応するリッチタイプ:計算機、定義、単位変換、Unix タイムスタンプ、荷物追跡、株式、通貨、暗号通貨、天気、アメリカンフットボール、野球、バスケットボール、クリケット、サッカー、アイスホッケー、Web3、翻訳

リッチコールバックエンドポイント
GET https://api.search.brave.com/res/v1/web/rich
パラメーター型必須説明
callback_keystringはいウェブ検索の rich.hint.callback_key フィールドにあるコールバックキー

ユースケース

  • 汎用検索の統合:1回の呼び出しで、最も充実した結果セット(ウェブ、ニュース、動画、ディスカッション、FAQ、インフォボックス、場所)を取得します。RAG/LLM のグラウンディングには、llm-context を推奨します。
  • 構造化データの抽出:schemas と結果の型付きフィールドを使って、商品、レシピ、評価、記事を取得します。
  • Goggles によるカスタム検索:Brave 独自の機能です。インラインルールまたはホスト型 Goggles を使ってサイトの順位を上げたり、除外したりし、ランキングを完全にカスタマイズできます。

注意事項

  • ページネーション:結果をページ分割するには、count とともに offset(0~9)を使用します
  • 件数:ウェブ検索では最大20件です。実際の結果数は要求した件数より少ない場合があります

コメント