VOOZH about

URL: https://glama.ai/mcp/servers/sweetcornna/free-search-mcp?locale=ja-JP

⇱ free-search-mcp by sweetcornna | Glama


free-search-mcp

👁 License
👁 Python
👁 MCP

ローカルファーストかつAPIキー不要のModel Context Protocolサーバーです。あらゆるLLM(Claude、GPT、ローカルのOllamaなど)に対して、検索APIの登録なしで、ウェブ検索、ページの取得とクリーンアップ、ドキュメントの読み取り機能を提供します。

既存のオープンソースMCPの優れたアイデアを1つのPythonパッケージにまとめ、それぞれに欠けていたLLM向けの使いやすさと信頼性を向上させました。

research("how does reciprocal rank fusion work", depth=3)
 ↓
# Research brief: how does reciprocal rank fusion work
_engines: duckduckgo, mojeek, startpage · sources: 3 · ~3,400 tokens_

## Sources
- [1] Reciprocal rank fusion | Elasticsearch Reference — <https://…>
- [2] Hybrid Search Scoring (RRF) | Microsoft Learn — <https://…>
- [3] RRF explained in 4 mins — Medium — <https://…>

## Documents
…full Markdown bodies of each page, ready for the LLM to read…

1回のツール呼び出し。3つのソース。APIキー不要。検索のためのOPENAI_API_KEYのような面倒な手続きもありません。


なぜこれが必要なのか

既存の検索MCPはそれぞれ特定の機能に優れていますが、通常はそのすべてを必要とします:

マルチエンジン

APIキー不要

スマートフォールバック

PDF/DOCX

FTS5キャッシュ

フィルタ

Trafilatura

LLM調整済み

nickclyde/duckduckgo-mcp-server

~

mrkrsl/web-search-mcp

~

Aas-ee/open-webSearch

~

~

VincentKaufmann/noapi-google-search-mcp

~

free-search-mcp

ここで「LLM調整済み」とは、Markdown優先の出力、トークン見積もり、段落境界でのスマートな切り詰め、モデルが適切なツールを選択するための「Best for / Not for / Returns / Common mistakes」ドキュメント文字列、実用的なエラーヒント、MCPプロンプトとリソーステンプレート、そして検索→取得→取得→取得を1ターンにまとめるワンショットのresearch()機能を指します。

「Trafilatura」とは、trafilaturaを使用してメインコンテンツを抽出することを意味します。これはBevendorff 2023 ROUGEベンチマークで勝者となったツールです(単純なボイラープレート除去の約0.55に対し、約0.85)。取得した各ページは、authorpublished_datesitenameも無料で返します。

「フィルタ」とは、検索/リサーチがfreshnessinclude_domainsexclude_domainscategory (news/pdf/github/paper/forum/blog)、include_textexclude_textを受け入れることを意味します。


Related MCP server: TOOL4LM

ツール

ツール

説明

search(query, engines?, max_results?, use_cache?, max_age_hours?, freshness?, include_domains?, exclude_domains?, category?, include_text?, exclude_text?, format?)

Reciprocal Rank Fusionで統合された並列マルチエンジン検索

research(question, depth?, engines?, fetch?, use_cache?, max_age_hours?, freshness?, include_domains?, exclude_domains?, category?, include_text?, exclude_text?, format?)

ワンショット:検索 + 上位N件の取得 + Markdown要約の返却

fetch(url, render?, force_refresh?, max_age_hours?, format?)

ページを取得し、リーダーモードのMarkdown(trafilaturaで抽出、著者/日付/サイト名付き)を返す

fetch_batch(urls, render?, format?)

複数のURLを同時に取得

read_doc(source, start?, length?, format?)

ページネーション付きでPDF / DOCX / HTML / TXT / MDを解析

cache_search(query, limit?, format?)

以前に取得したページ全体に対するFTS5検索

engines()

searchで使用可能なエンジン名の一覧

さらに、2つのMCPプロンプトResearch thoroughlyFact-check claim)と、再取得せずにキャッシュされたページをコンテキストに戻すためのリソーステンプレートcache://page/{url})が含まれています。

フィルタ (search / research)

パラメータ

効果

freshness

day / week / month / year

直近N件の結果のみ

include_domains

["python.org", "djangoproject.com"]

これらのドメインに限定

exclude_domains

["pinterest.com"]

これらを除外

category

news / pdf / github / paper / forum / blog

コンテンツタイプのショートカット (paper = arxiv/acm/ieee/…, forum = reddit/HN/SEなど)

include_text

"async"

タイトル/スニペットに必須のサブ文字列

exclude_text

"beginner"

禁止するサブ文字列

max_age_hours

24

この呼び出しにおける7日間のデフォルトキャッシュTTLを上書き

すべてのツールはデフォルトでformat="markdown"を使用します。これは読みやすく、JSONよりもトークン数が約40%少なく、出所とトークン予算ヘッダーが含まれます。構造化されたアクセスが必要な場合はformat="json"を渡してください。

ツールのアノテーション

すべてのツールには、MCPクライアントがそれらにラベルを付け、高度なアクションを制御できるように、正しいreadOnlyHintidempotentHintopenWorldHintアノテーションが付属しています。

エンジン

デフォルトセット(すべて信頼性が高く、繰り返し呼び出してもCAPTCHAが発生しない): duckduckgomojeekstartpage

オプトイン(ヘッドレスクライアントに対して断続的にチャレンジが発生する): bravebingbaidu

Brave/Bing/Baiduは、数回呼び出すとヘッドレスブラウザをブロックします(PoW CAPTCHA、「something went wrong」ページ、リダイレクトラッパーなど)。デフォルトで必要な情報が見つからない場合にのみ、engines=["brave"]などを渡してください。


インストール

git clone https://github.com/ymylive/free-search-mcp.git
cd free-search-mcp
uv sync
uv run playwright install chromium

スタンドアロンサーバーとして実行(stdioトランスポート):

uv run search-mcp

ライブテストを実行(実際のウェブにアクセスします。環境変数を設定してください):

SEARCH_MCP_TEST_NETWORK=1 uv run pytest -v

オフラインテストはデフォルトで実行され、ネットワークにはアクセスしません。


Claude Desktopへの組み込み

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)またはお使いのプラットフォームの同等のファイルに以下を追加します:

{
 "mcpServers": {
 "search": {
 "command": "uv",
 "args": ["--directory", "/absolute/path/to/free-search-mcp", "run", "search-mcp"]
 }
 }
}

Claude Desktopを再起動します。上記の7つのツールがツールドロワーに表示されます。

他のクライアントへの組み込み

このサーバーはstdio経由で標準のMCPを話します。MCPをサポートするものであれば何でも動作します:

  • Claude Code (claude mcp add search uv --directory /…/free-search-mcp run search-mcp)

  • Cursor / Continue / Cline (上記のJSONスニペットを使用)

  • 公式MCP SDKを使用したカスタムPython / TypeScriptクライアント


設定

すべての設定は、SEARCH_MCP_で始まる環境変数で上書きできます:

変数

デフォルト

意味

SEARCH_MCP_DEFAULT_ENGINES

["duckduckgo","mojeek","startpage"]

JSONリスト

SEARCH_MCP_MAX_RESULTS_PER_ENGINE

10

SEARCH_MCP_RATE_LIMIT_PER_MINUTE

30

エンジンごと

SEARCH_MCP_FETCH_RATE_LIMIT_PER_MINUTE

20

共有fetchバケット

SEARCH_MCP_CACHE_DIR

~/.cache/search-mcp

SEARCH_MCP_CACHE_TTL_SECONDS

604800

7日間

SEARCH_MCP_FETCH_STRATEGY

auto

auto / http / browser

SEARCH_MCP_BROWSER_HEADLESS

true

SEARCH_MCP_BROWSER_POOL_SIZE

2

同時ページ数

SEARCH_MCP_MAX_CONTENT_CHARS

50000

結果ごとの切り詰め


アーキテクチャ

 ┌─────────────────────────────────────────────────────┐
 │ FastMCP server (stdio) │
 │ tools: search / research / fetch / fetch_batch / │
 │ read_doc / cache_search / engines │
 └────────────┬────────────────────────────────────────┘
 │
 ┌────────────▼────────────┐ ┌────────────────────────┐
 │ aggregator │ │ fetcher │
 │ - parallel engines │ │ - httpx fast path │
 │ - reciprocal rank │ │ - playwright fallback │
 │ fusion │ │ - markdownify │
 │ - search cache (FTS5) │ │ - page cache (FTS5) │
 └────┬────────────────────┘ └────────────┬───────────┘
 │ │
 ┌────▼─────────────────┐ ┌──────────────▼─────────────┐
 │ engines/ │ │ browser pool │
 │ duckduckgo.py │ │ - persistent context │
 │ mojeek.py │ │ - stealth init script │
 │ startpage.py │ │ - shared cookies │
 │ brave.py (opt) │ │ - semaphore-bounded pages│
 │ bing.py (opt) │ └────────────────────────────┘
 │ baidu.py (opt) │
 └──────────────────────┘

 ┌────────────────────────────┐ ┌──────────────────┐
 │ documents/ │ │ ratelimit │
 │ pypdf, python-docx, │ │ token bucket │
 │ markdownify │ │ per engine │
 └────────────────────────────┘ └──────────────────┘

 ┌────────────────────────────┐ ┌──────────────────┐
 │ formatting │ │ research │
 │ token estimate │ │ composed │
 │ smart truncation │ │ workflow │
 │ markdown renderers │ │ │
 └────────────────────────────┘ └──────────────────┘

エンジンアダプターパターン

src/search_mcp/engines/内の各エンジンは以下を実装しています:

class Engine:
 name: str
 needs_browser: bool # Force Playwright?
 wait_selector: str | None # CSS to wait for in browser mode

 def build_url(self, query: str, max_results: int) -> str: ...
 def parse(self, html: str) -> list[SearchResult]: ...

基底クラスは、トランスポート(httpx → Playwrightフォールバック)、レート制限、およびHTTPが結果の代わりにCAPTCHAシェルを返す場合(ブラウザ経由で自動再試行)を処理します。


クレジット

このプロジェクトは以下の成果の上に成り立っています:


ライセンス

MIT — LICENSEを参照してください。

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sweetcornna/free-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server