クイック回答
Claude CodeやClaude DesktopにWeb検索MCPサーバーを追加するにはどうすればよいですか?
このページの短いPythonサーバーを保存してください。これはLLMWebSearchを呼び出すsearch_webツールとread_urlsツールを公開します。次にclaude mcp addで、またはclaude_desktop_config.json内で、envにAPIキーを設定して登録します。これでモデルはライブWebを検索し、上位ページをMarkdownとして読めるようになります。検索1回につきクレジット1つで、2026年10月時点では$1.20/1K検索から利用できます。KYC不要、暗号資産で支払い。
MCPサーバーの概要
| 言語 | Python 3.10+、mcpとhttpxパッケージを使用 |
|---|---|
| トランスポート | stdio: クライアントがサーバーをローカルプロセスとして起動 |
| ツール1 | search_web(query, max_results=5, read=3) → URLとページ本文を含む番号付きソース |
| ツール2 | read_urls(urls) → 既知の1〜20ページの本文抽出 |
| 名前 | web_searchやweb_fetchではありません: Claude CodeとOpenClawには既に同名のツールが同梱されています |
| キー | サーバーの環境変数でLLMWEBSEARCH_API_KEYから読み取り |
| 課金 | 1クレジットで検索1回分です。最大20件のランク付けされた結果を取得でき、上位3ページは本文抽出されてMarkdownで返されます。4〜10ページを読む場合は2クレジットです。エラーで終わった呼び出しは無料です. URLをすでに持っているページを読む場合は、コンテンツ付きで返される3ページごとの開始グループにつき1クレジットで、1回の呼び出しにつき最大20 URLです。拒否されたURLや失敗したURLはカウントされません |
ツールの名前がsearch_webとread_urlsなのはなぜですか?
同じ名前のツールが2つあると、クライアントとモデルが混乱するからです。Claude CodeとOpenClawは、それぞれweb_searchとweb_fetchという名前の組み込みツールを備えています。明確な説明を伴う別々の名前により、モデルは意図的に当社のツールを選べ、ログでも呼び出しを区別できます。
どちらのツールも生のJSONではなくテキストを返します。各ソースは番号、タイトル、URLで始まるため、モデルは[1]や[2]を引用でき、読者はページを確認できます。
import os
import httpx
from mcp.server.fastmcp import FastMCP
BASE = "https://llmwebsearch.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
mcp = FastMCP("llmwebsearch")
def _call(path: str, body: dict) -> dict:
resp = httpx.post(BASE + path, json=body, headers=HEADERS, timeout=90)
data = resp.json()
if resp.status_code != 200:
err = data.get("error", {})
raise RuntimeError(err.get("code", str(resp.status_code)) + ": " + err.get("message", ""))
return data
def _page(n: int, item: dict) -> str:
head = f"[{n}] {item.get('title') or item['url']}\n{item['url']}\n"
if item.get("content_status") == "ok":
return head + item["content"]
return head + "(not read: " + item.get("content_status", "unknown") + ") " + item.get("snippet", "")
@mcp.tool()
def search_web(query: str, max_results: int = 5, read: int = 3) -> str:
"""Search the live web and return numbered sources; the first `read` pages include their text.
Use it for current facts, documentation and news. Cite sources by their number.
"""
body = {"q": query, "max_results": max(1, min(max_results, 20)), "read": max(0, min(read, 10)), "max_chars": 5000}
data = _call("/search", body)
return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))
@mcp.tool()
def read_urls(urls: list[str]) -> str:
"""Read 1 to 20 public web pages whose URLs you already have and return their main text."""
data = _call("/extract", {"urls": urls[:20], "max_chars": 12000})
return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))
if __name__ == "__main__":
mcp.run()
サーバーをインストールしてテストするにはどうすればよいですか?
仮想環境を作成し、mcpとhttpxをインストールして、上記のファイルを保存してください。mcpはModel Context Protocolの公式Python SDKです。そのFastMCPクラスは型付きのPython関数をツールに変換し、各docstringをツールの説明として使用します。
APIキーを設定した状態で、ターミナルからファイルを一度起動してください。その後は標準入力でクライアントを静かに待ち受けます。これは正常に動作している証拠で、Ctrl+Cで停止できます。APIからのエラーはコード付きのツールエラーとして送出されるため、モデルはrate_limitedやinsufficient_creditsを平易な言葉で受け取ります。
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
LLMWEBSEARCH_API_KEY="your-key" python llmwebsearch_mcp.pyClaude Codeに追加するにはどうすればよいですか?
claude mcp addを使用してください。Claude Codeのドキュメントにはclaude mcp add [options] <name> -- <command> [args...]という形式が示されています: まず自身のオプション、次にダブルダッシュ、そしてサーバーを起動するコマンドです。環境変数は--env KEY=valueに記述し、--envとサーバー名の間には、--transport stdioなど少なくとも1つの他のオプションを置く必要があります。
--scope userを追加すると、すべてのプロジェクトでサーバーを利用できます。デフォルトのスコープであるlocalは現在のプロジェクトのみを対象とします。仮想環境のPythonとサーバーファイルには絶対パスを使用してください。
claude mcp add --env LLMWEBSEARCH_API_KEY=your-key --transport stdio --scope user llmwebsearch \
-- /home/you/llmwebsearch/.venv/bin/python /home/you/llmwebsearch/llmwebsearch_mcp.pyClaude Desktopや他のクライアントに追加するにはどうすればいいですか?
Claude Desktopはclaude_desktop_config.jsonのmcpServersからサーバーを読み込みます。サーバーに名前、コマンド、その引数、そしてキーを保持するenvオブジェクトを設定してからアプリを再起動すると、search_webとread_urlsがツール一覧に表示されます。
Cursorなど他のMCPクライアントも、それぞれのMCP設定で同じ3つ(コマンド、その引数、環境変数)を求めます。キーがツールの引数や会話の中に現れることはありません。
{
"mcpServers": {
"llmwebsearch": {
"command": "/home/you/llmwebsearch/.venv/bin/python",
"args": ["/home/you/llmwebsearch/llmwebsearch_mcp.py"],
"env": { "LLMWEBSEARCH_API_KEY": "your-key" }
}
}
}検索を安く短く保つにはどうすればいいですか?
指示の中でモデルに検索の仕方を伝えてください。1つの質問につき検索は1〜2回、情報源の内容が食い違う場合にのみさらに読み進めるようにします。サーバーはすでに各ページをsearch_webでは5,000文字、read_urlsでは12,000文字に制限しています。小規模なモデルではこの数値を下げてください。
readを3以下にしたsearch_web呼び出しは1回につき1クレジットです。1日に40回検索するアシスタントは月に約1,200クレジットを使うため、5,000検索($9.25)で約4か月持ちます。検索クレジットに有効期限はありません。今月使わなかった分は来年も残ります。
ページを読み取れないとき、モデルには何が見えますか?
情報源は番号、タイトル、URLとともに表示され、その後に括弧書きの理由と検索スニペットが続きます。当社のリーダーはrobots.txtを尊重します。LLMWebSearchとして名乗り、サイトが自身またはすべてのロボット向けに定めたルールに従い、読み取りを許可されていないページのコンテンツは除外します。サイトが当社のリーダーを拒否した場合、結果はコンテンツなしで、サイトのステータスとともに返されます。当社がCAPTCHAを解いたり、アカウントにサインインしたり、ブロックやペイウォールを回避したりすることは一切ありません。モデルはその後、他の情報源に頼るか、その1ページは利用できなかったと述べることができます。
MCPサーバー:よくある質問
LLMWebSearchの公式MCPパッケージやホストされたエンドポイントはありますか?
ありません。このページのファイルがその連携機能です。約50行で、読んで変更できます。お使いのマシン上で動作し、キーは当社のAPIにのみ送信されます。
Claude Codeの組み込みWeb検索をオフにするべきですか?
その必要はありません。両方を有効にしておけます。それぞれの説明からモデルが各機能の役割を判断します。結果にページ本文を含めたいとき、検索1回あたりの固定価格が欲しいとき、検索ログを一か所にまとめたいときは、当社のものを使用してください。
OpenClawで使えますか?
はい、openclaw mcp addで登録するMCPサーバーとして使えます。OpenClawページにコマンドが記載され、OpenClawの組み込み検索プロバイダーと並べて使う方法が説明されています。
サーバーは検索履歴を保持しますか?
いいえ。呼び出しの間に何も保持しません。当社側では、当社はあなたの検索クエリやAPIが返す内容でモデルを学習させることはなく、結果の保存を禁じる独自のルールも設けていません。ただし、あなたが読むページのサイトの権利は引き続き適用されます。
出典 (1)
- MCP 経由で Claude Code をツールに接続する — Claude Code docs (read 2026-10-22)