mcpField
S
Siftdog

Siftdog

ローカル
siftdog.com検索23 週間前に更新

Siftdog について

Siftdogは、AIエージェントやLLMアプリ向けのセルフホスト可能なウェブ検索・抽出APIです。Tavilyの主要エンドポイントに互換性があり、MCP経由で検索、抽出、クロール、サイトマップ作成も利用できます。

主な機能

  1. 01Tavily互換の検索・抽出・クロール・マップAPI
  2. 02SearXNGによるAPIキー不要の検索
  3. 03ウェブページをMarkdownまたはテキストで抽出
  4. 04BM25による関連度順位付けと詳細検索のチャンク
  5. 05深度・範囲・パスを指定したクロール
  6. 06取得先URLへのSSRFリクエストを防止

活用シーン

  1. 01自前のインフラでTavily互換のウェブ検索を運用
  2. 02MCP経由でAIエージェントに検索や抽出を提供
  3. 03詳細検索で関連するページの区間を収集
  4. 04指定したパスやドメインのサイトをクロール、マップ化

MCP 対応

siftdog_search、siftdog_extract、siftdog_crawl、siftdog_mapの4つの読み取り専用MCPツールを提供します。クライアントは/mcpのHTTP接続、またはsiftdog mcpコマンドによるstdio接続を利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"khsarvar-siftdog": {
"command": "uvx",
"args": [
"siftdog"
],
"env": {
"SEARXNG_URL": "<SEARXNG_URL>"
}
}
}
}
起動コマンドuvx siftdog
設定が必要な環境変数
SEARXNG_URLURL of a SearXNG instance with JSON output enabled. Needed only for siftdog_search; extract, crawl and map work without it.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisiftdog0.3.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Siftdog — オープンソースでセルフホスト可能な Tavily の代替

CI License: MIT PyPI Python 3.11+

Web サイト · ベンチマーク · ブログ · ホスト版の利用登録

Siftdog は、AI エージェントや LLM アプリ向けのオープンソースでセルフホスト可能なウェブ検索 API であり、Tavily API のドロップイン置換です。 同じリクエストとレスポンス形式で、同じ /search、 /extract、/crawl、/map エンドポイントを提供します。そのため、Tavily 向けに書かれたコード(公式 Python SDK と LangChain 統合を含む)は、ベース URL を変更するだけで、自分のサーバーに対して動作します。検索 API キーは不要です。

  • 検索:検索 API キー不要で、SearXNG メタ検索インスタンスを使用します
  • 抽出:trafilatura でウェブページから整形済みの Markdown またはテキストを抽出します
  • ランキング:BM25 による関連度と上流エンジンの順序を組み合わせます。advanced 深度では各ページを取得し、最も関連性の高いチャンクを返します
  • 回答(include_answer):取得した結果をもとに Claude が作成します
  • クロールとサイトマップ:深度、範囲、上限、正規表現によるパス/ドメインのフィルターに対応します
  • Claude Code、Claude Desktop、Cursor、その他の MCP クライアント向けの MCP サーバー。/mcp での HTTP、または siftdog mcp による stdio に対応します
  • SSRF 保護:リダイレクトや DNS リバインディングを介した場合も含め、プライベートアドレスと内部アドレスをブロックします
  • MIT ライセンス

ドロップインの Tavily 代替として使う

公式 Tavily クライアントの api_base_url に Siftdog サーバーを指定します。認証が無効の場合、キーには任意の文字列を指定できます。有効な場合は API_KEYS のいずれかを指定します。

from tavily import TavilyClient

client = TavilyClient(api_key="your-siftdog-key", api_base_url="http://localhost:8000")
results = client.search("latest python release", search_depth="advanced", max_results=5)
pages = client.extract(urls=["https://en.wikipedia.org/wiki/Okapi_BM25"])

langchain-tavily 経由の LangChain:

from langchain_tavily import TavilySearch

search = TavilySearch(
    max_results=5, tavily_api_key="your-siftdog-key", api_base_url="http://localhost:8000"
)
search.invoke({"query": "what is BM25 ranking"})

t a v i l y - p y t h o n 0.8.4(search、extract、crawl、map。同期・非同期)および langchain-tavily 0.2.18(search、extract)でテスト済みです。

クイックスタート

Docker Compose(SearXNG を含む)

公開イメージを使って、/search 用の SearXNG インスタンスを含むフルスタックを起動します。

git clone https://github.com/khsarvar/siftdog && cd siftdog
cp .env.example .env          # optional: set API_KEYS and ANTHROPIC_API_KEY
docker compose up

検索を試します:

curl -s localhost:8000/search -H "Content-Type: application/json" \
  -d '{"query": "latest python release", "search_depth": "advanced"}'

API_KEYS を設定した場合は、-H "Authorization: Bearer <key>" を追加してください。OpenAPI ドキュメントは http://localhost:8000/docs で提供されます。

Docker イメージのみ
docker run -p 8000:8000 ghcr.io/khsarvar/siftdog

/extract、/crawl、/map は単独で動作します。/search を使うには、JSON 形式を有効にした SearXNG インスタンスを指定してください:-e SEARXNG_URL=http://your-searxng:8080。イメージは linux/amd64 と linux/arm64 向けに公開されており、latest およびバージョン(0.1.0、0.1)でタグ付けされています。

pip
pip install siftdog
SEARXNG_URL=http://your-searxng:8080 siftdog --port 8000

設定は環境変数または .env ファイルから読み込まれます(設定を参照)。

MCP クライアント(Claude、Cursor など)で使う

Siftdog は、読み取り専用の 4 つのツール siftdog_search、siftdog_extract、siftdog_crawl、siftdog_map を備えた MCP サーバーでもあります。

起動中の Siftdog サーバーに接続します(/mcp の Streamable HTTP)。Claude Code の場合:

claude mcp add --transport http siftdog http://localhost:8000/mcp \
  --header "Authorization: Bearer <key>"      # omit the header if API_KEYS is empty

または、uv を使ってローカルで stdio 経由で実行します。サーバーは不要です。 SEARXNG_URL が必要なのは siftdog_search の場合のみです:

claude mcp add siftdog -e SEARXNG_URL=http://your-searxng:8080 -- uvx siftdog mcp

Claude Desktop(claude_desktop_config.json)、Cursor(.cursor/mcp.json)、およびほとんどのその他のクライアントでは、同じコマンドを JSON として指定します:

{
  "mcpServers": {
    "siftdog": {
      "command": "uvx",
      "args": ["siftdog", "mcp"],
      "env": { "SEARXNG_URL": "http://your-searxng:8080" }
    }
  }
}

API キーは REST API と同様に使えます:Authorization: Bearer <key> を送信するか、ヘッダーを設定できないクライアントでは URL に ?api_key=<key> を追加してください(URL はログに残る可能性があるため、ヘッダーの使用を推奨します)。MCP_ALLOWED_HOSTS にホスト名を指定しない限り、HTTP エンドポイントは localhost 宛てのリクエストにのみ応答します。

Siftdog と Tavily、Firecrawl、crw の比較

SiftdogTavilyFirecrawlcrw
ライセンスMITプロプライエタリ(ホステッドサービス)AGPL-3.0AGPL-3.0
セルフホスト可能はいいいえはいはい(マネージド API も提供)
Tavily 互換 APIはい—いいえ(独自 API)いいえ(独自 API)
検索ソースSearXNG メタ検索プロプライエタリ—SearXNG(同梱)
JavaScript レンダリングいいえ(静的 HTML)—はいはい(Lightpanda、Chrome フォールバック)
MCP サーバーはい(HTTP と stdio)はいはいはい
言語Python—TypeScriptRust

測定結果:Siftdog と Tavily の検索ベンチマーク (bench/ で再現できます)。

別のものを選ぶ場合: インフラを運用したくない場合や、Tavily のニューラルリランキングを使いたい場合は、ホステッド Tavily をご利用ください。JavaScript でレンダリングされたページや、より多機能なスクレイピングプラットフォームが必要な場合は、Firecrawl または crw をご覧ください。Siftdog は、寛容なライセンスのもと、自社サーバーで Tavily API を使いたいチーム向けです。

FAQ

Siftdog とは何ですか?

Siftdog は、AI エージェント向けのオープンソースのウェブ検索・抽出 API です。SearXNG で検索結果を取得し、trafilatura でコンテンツを抽出、BM25 で関連性をランク付けすることで、Tavily API(/search、/extract、/crawl、/map)を自分で運用するインフラ上に再現します。

Siftdog は Tavily のドロップイン置き換えとして使えますか?

4 つのコアエンドポイントについては、はい。リクエストとレスポンスのフィールドは Tavily と一致しており、公式の tavily-python SDK と langchain-tavily は api_base_url を設定するだけで動作します。違いとして、関連性スコアはニューラルリランカーではなく BM25 によって算出されます。また、instructions(crawl/map)と include_image_descriptions(search)は受け付けますが無視され、Tavily の /research エンドポイントは実装されていません。

検索 API キーは必要ですか?

いいえ。検索結果は、公開検索エンジンに問い合わせる SearXNG から取得します。任意のキーは ANTHROPIC_API_KEY のみで、リクエストで include_answer が設定された場合に使用されます。

LangChain で使えますか?

はい。公式の langchain-tavily パッケージを通じて利用できます。上記の例のように、Siftdog サーバーを指す api_base_url を指定してください。

Siftdog に MCP サーバーはありますか?

はい。API サーバーは /mcp で Streamable HTTP 経由の MCP を公開し、uvx siftdog mcp を実行すると、Claude Desktop や Cursor などのローカルクライアント向けに stdio 経由で実行できます。MCP クライアントでの使用をご覧ください。

/search が 502「failing engines」を返すのはなぜですか?

SearXNG は、公開検索エンジン(Brave、DuckDuckGo、Google など)に問い合わせて検索結果を取得します。これらのエンジンは、多数の検索を送信する IP アドレスにレート制限をかけたり、CAPTCHA を表示したりします。すべてのエンジンが失敗している場合、Siftdog は空の結果リストを返すのではなく、エンジン名と理由を含む 502 を返します。これにより、エージェントが「何も見つからなかった」と誤解するのを防ぎます。たとえば、failing engines: brave (Suspended: too many requests), duckduckgo (CAPTCHA) のように表示されます。エンジンは数分から約 1 日で自動的に復旧します。一部のエンジンが引き続き動作している場合は、その検索結果が返され、停止しているエンジンはサーバーログに記録されます。ブロックを減らすには、docker/searxng/settings.yml で有効にするエンジンを増やし、同じ検索を短時間に繰り返し送信しないようにしてください。

Siftdog を公開サーバーで公開しても安全ですか?

クライアントだけが呼び出せるように API_KEYS を設定してください。/extract と /crawl は呼び出し元が指定した URL を取得するため、Siftdog はプライベート、ループバック、リンクローカルのアドレスへのアクセスを拒否します。各リダイレクト時と接続時に、実際に使用される正確なアドレスを確認するため、DNS リバインディングも防止できます。

Docker を使わずに実行できますか?

はい。pip install siftdog を実行し、JSON 出力形式が有効になっている任意の SearXNG インスタンスを SEARXNG_URL に指定して siftdog を実行してください。/extract、/crawl、/map は SearXNG なしでも動作します。

ローカルでの開発

python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
docker compose up searxng -d    # uncomment its `ports:` in docker-compose.yml first
.venv/bin/siftdog             # http://127.0.0.1:8000, docs at /docs
.venv/bin/pytest                # offline test suite
.venv/bin/ruff check . && .venv/bin/ruff format .

API

すべてのエンドポイントは、JSON の POST ボディと Authorization: Bearer <key> ヘッダーを受け付けます(従来の api_key ボディフィールドも使用できます)。API_KEYS が空の場合、認証は無効になります。

エンドポイント用途主なパラメーター
/searchウェブ検索query、search_depth(basic/advanced)、topic(general/news)、time_range、max_results、chunks_per_source、include_answer、include_raw_content、include_images、include_domains、exclude_domains
/extract最大 20 個の URL からコンテンツを整形して取得urls、extract_depth、format(markdown/text)、include_images
/crawlサイトをクロールしてページコンテンツを返すurl、max_depth、max_breadth、limit、select_paths、exclude_paths、select_domains、exclude_domains、allow_external、format
/mapコンテンツを取得せずにサイトの URL を一覧表示/crawl と同じ巡回パラメーター

ホスト版 Tavily との違い:instructions(crawl/map)と include_image_descriptions は受け付けますが、無視されます。関連性スコアにはニューラルリランカーではなく、BM25 を使用します。

設定

環境変数(.env.example を参照):API_KEYS、SEARXNG_URL、ANSWER_ENABLED、ANSWER_MODEL、ANSWER_EFFORT、FETCH_TIMEOUT、FETCH_CONCURRENCY、FETCH_MAX_BYTES、ALLOW_PRIVATE_NETWORKS、CRAWL_MAX_LIMIT、MCP_ALLOWED_HOSTS。

MCP_ALLOWED_HOSTS には、localhost 以外で /mcp エンドポイントが応答するホスト名を指定します。たとえば、search.example.com,search.example.com:* のように記述します。それ以外のホスト宛てのリクエストには 421 が返され、ウェブページによる DNS リバインディング攻撃からローカルサーバーを保護します。

セキュリティ: /extract と /crawl は、呼び出し元が指定した URL をサーバーに取得させます。ALLOW_PRIVATE_NETWORKS=true に設定しない限り、プライベートアドレス、ループバックアドレス、リンクローカルアドレスへのリクエストは(リダイレクト経由も含めて)ブロックされます。このチェックは接続時に、実際に接続するアドレスに対して行われるため、DNS リバインディングで回避することはできません。ユーザー指定 URL の取得では、プロキシによって宛先アドレスが隠されないよう、HTTP(S)_PROXY を無視します。敵対的なマルチテナント環境での多層防御として、ネットワークレベルでも送信トラフィックを制限してください。

ライセンス

Siftdog は MIT License のもとで公開されています。「Siftdog」という名称は商標ポリシーで別途保護されています。コードは自由に使用できますが、フォークやホスト型サービスでは別の名称を使用する必要があります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。