search-mcp
Provides web search through Brave Search, allowing search queries and result retrieval.
Provides web search through DuckDuckGo, allowing search queries and result retrieval.
Provides web search through Google, allowing search queries and result retrieval.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@search-mcpSearch Google for 'MCP server security best practices' and summarize the top result."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
search-mcp
Playwright経由で検索エンジンを叩くstdio MCP。Google / Bing / DuckDuckGo / Yahoo! JAPAN / Brave Search対応。
詳しい背景・設計・検証の経緯は SPEC.md を参照。
セットアップ
git clone https://github.com/antigravity-press/search-mcp.git
cd search-mcp
uv sync
uv run playwright install chromium仮想ディスプレイの用意(headless=Falseを使う場合、オプション)
Google/DuckDuckGo/Brave等をheadlessで使う場合、bot判定回避のためheadless=False
での起動を求められることがある(下記の表を参照)。この用途では人間が画面を見る
必要は無いので、OS側に人間の接続に依存しない仮想ディスプレイさえ用意しておけば、
誰の接続にも依存せず常時headful検索が可能になる(SPEC.md 3節参照)。
用意しなくても動く(その場合はheadless専用になるだけ)。用意する場合、手段は環境
依存。Linuxサーバーの一例として、Xvfbが使えないディストロ(近年のRHEL系はWayland
移行でXvfbが標準から外れていることがある)では、weston(Waylandコンポジタ)の
headless backendでも同等のことができる:
sudo dnf install weston xorg-x11-server-Xwayland # ディストロにより異なる
mkdir -p /tmp/.X11-unix # 通常はX11パッケージが作るが無い場合は要作成
weston --backend=headless --xwayland &これで:0にX11ディスプレイが立つ。search()ツールはheadless=False指定時、
環境変数SEARCH_MCP_HEADFUL_DISPLAY(既定値:0)で指定したディスプレイを自動的に
使う。永続化したい場合はsystemdサービス化する(このリポジトリのスコープ外、
OS側の環境セットアップとして各自で行う)。
Related MCP server: Web Search MCP
How To Use(全体の流れ)
MCPセットアップ → 利用可能(空プロファイル)
├─ 検索でheadful使いたい・Google/DuckDuckGo/Brave等をheadlessで安全に使いたい
│ → OS側に人間の接続に依存しない仮想ディスプレイを用意する
│ (このMCPの機能範囲外、一回きりの環境セットアップ。手段は環境依存)
│ 用意済みなら誰の接続にも依存せず常時headful検索が可能
│
└─ ログイン済みプロファイルで動かしたい
├─ 既存の育ったプロファイルが手元にある → import_profileで取り込むだけ(Display不要)
└─ 無い・新規にログインしたい → bake_profileで焼き込み
(ここでのheadfulは人間が操作できる本物のDisplayが必要、SSH X11フォワーディング/CDP等)「検索フェーズのheadful」(bot判定回避目的、人間が見る必要なし)と「焼き付けフェーズのheadful」(人間が実際に操作する)は、要求がまったく別物。前者は仮想ディスプレイで完結し、後者は本物の(人間から見える)ディスプレイが要る
プロファイルは
defaultのみでも運用できる(空のまま使い始めて、必要に応じて育てる/インポートする)。複数プロファイルの使い分けは任意
使い方(ツール)
search(query, engine="google", profile="default", num_results=10, headless=True)— 検索を実行fetch_page(url, profile="default", headless=True)— 検索結果の深掘り用に本文を取得list_profiles()— 保持しているプロファイルの一覧import_profile(source_dir, name, overwrite=False)— 既存のログイン済みプロファイルを取り込むbake_profile(profile, method="auto", start_url=None, ...)— プロファイルへのログイン等を焼き付ける(SPEC.md 4節)
エンジンごとのheadless/headfulブロック状況(2026-09-05実地検証)
profileの育ち具合(ログイン等で使い込まれているか、作成直後で無履歴か)によって、
headlessで安全に使えるかどうかが変わる。詳細はSPEC.md 8節参照。
エンジン | 育ったprofile, headless | 育ったprofile, headful | 新規profile, headless | 新規profile, headful |
✅ OK | ✅ OK | ❌ ブロック | ✅ OK | |
Bing | ✅ OK | 未検証 | ✅ OK | ✅ OK |
Yahoo! JAPAN | ✅ OK | 未検証 | ✅ OK | ✅ OK |
DuckDuckGo | ❌ ブロック | ✅ OK | ❌ ブロック | ✅ OK |
Brave | ❌ ブロック | ✅ OK | ❌ ブロック | ✅ OK |
運用の指針:
Bing/Yahoo! JAPANはどちらの状態でもheadlessで問題ない
Google/DuckDuckGo/Braveをheadlessで使うには、ログイン等で育ったprofileが実質必須。新規profileはまずheadfulで使い始めるか、
import_profileで既存の育ったprofileを取り込むことDuckDuckGo/Braveは育ったprofileでもheadlessだと即ブロックされる。常にheadful推奨(人間の接続に依存しない仮想ディスプレイがOS側にあれば、人間の接続なしに常時利用可能)
Claude Codeへの登録
claude mcp add search-mcp --scope user -- /path/to/search-mcp/.venv/bin/search-mcpAvailable Tools
5 toolsbake_profileBake ProfileA
プロファイルに新しい状態(ログイン等)を焼き付ける。headfulでブラウザを起動し、
ユーザーがウィンドウを閉じるまで待機する(SPEC.md 4節)。
method: "auto"(既定、$DISPLAYの有無で自動判定)/ "display"(ディスプレイに直接表示。
SSHのssh -X経由でも可) / "cdp"(ディスプレイが無い環境向け。Remote Debugging
ポートを開き、手元のブラウザからリモート操作する)
start_url: 最初に開くURL(例: ログインページ)。省略時は白紙タブ
cdp_host/cdp_port: method="cdp"時のbind先。閉域網内のアドレスを明示的に指定すること
timeout_seconds: この時間ブラウザが閉じられなければタイムアウトして強制終了する
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | auto | |
| profile | No | default | |
| cdp_host | No | 127.0.0.1 | |
| cdp_port | No | ||
| start_url | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses blocking behavior (waits until user closes window), timeout with force termination, headful execution, and remote debugging bind requirements. It doesn't state whether existing profile state is overwritten or how persistent the bake is, but the mutating meaning is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by workflow behavior, then a compact semicolon-separated parameter list. Every sentence conveys actionable information; no fluff or repetition. The SPEC.md reference is brief and doesn't bloat the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 optional params, no annotations, and an output schema, the description covers the core workflow and most parameter semantics well. The main gape are that 'profile' is not explained and the behavior depends on an external SPEC.md section that may not be accessible to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for method, start_url, cdp_host/cdp_port, and timeout_seconds, including defaults, ssh -X behavior, and the closed-network bind warning. However, the 'profile' parameter is not described at all, leaving part of the schema under-explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a concrete action: baking a new state (e.g. login) into a profile, and explains the interactive headful workflow. This clearly differentiates it from read-only siblings like search and fetch_page, and from import_profile, because it explicitly covers browser launch and waiting for user action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit method selection rules: auto based on $DISPLAY, display for direct display (including ssh -X), and cdp for display-less environments. It also gives timeout and start_url context. It doesn't explicitly state when to prefere bake_profile over import_profile or fetch_page, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_pageFetch PageA
searchの結果など、指定URLの本文をブラウザ経由(永続プロファイル使用)で取得する。
素のHTTP取得と異なり、ログイン状態やJSレンダリングが必要なページにも対応できる。 スニペットだけでは判断できない結果を、必要な数件だけ選んで深掘りする用途を想定。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| profile | No | default | |
| headless | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explicitly states that fetching happens through a browser using a persistent profile, which implies cookie/login state and JS rendering support—useful behavioral context beyond the schema. It does not mention potential side effects on the profile or operational costs like slower fetches, but the core behavioral characteristic is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two focused sentences. The first sentence states the mechanism and main action, while the second adds the intended use case. No redundant wording or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose, the intended workflow relative to search, and the key behavioral difference (browser, persistent profile). An output schema exists, so return values need not be described. The main completeness gap is the unaddressed headless/profile parameter semantics, but overall the description gives an agent enough context to select and invoke the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that URL is the target page and mentions the persistent profile concept, but it does not explain the 'profile' parameter's selectable values or what 'headless' means. The headless parameter is entirely unexplained, leaving an agent with an incomplete understanding of the available knobs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it retrieves the body of a given URL via a browser with a persistent profile. It also distinguishes itself from plain HTTP fetching and positions itself as a deep-dive companion to search snippets, clearly separating it from sibling tools like search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: for pages requiring login state or JS rendering, and for investigating a few search results not fully judgeable from snippets. It implies when not to use it by contrasting with plain HTTP fetching, though it does not explicitly name alternatives or exclusion conditions. This is strong contextual guidance, missing only an explicit 'when-not-to-use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_profileImport ProfileB
既存の(すでにログイン状態を持つ)ブラウザプロファイルフォルダをコピーして取り込む。
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default | |
| overwrite | No | ||
| source_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. 'コピーして取り込む' usefully implies the source folder is copied rather than moved, but the description does not explain overwrite semantics, name-collision behavior, or what happens to an existing destination profile. This is a significant gap for a tool with an overwrite parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence with no redundant wording. It states the core operation directly and is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, no annotations, and an output schema, the single-sentence description is not enough. It omits overwrite/destination-name behavior and does not position the tool relative to bake_profile, so an agent may not confidently choose and invoke it correctly in all cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It indirectly identifies source_dir as the existing profile folder, but it never explains name or overwrite or how they affect the import. The description only partially maps to the parameters and leaves most of their semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a clear action: copy and import an existing browser profile folder that already has login state. It identifies both verb and resource well, distinguishing the tool's domain from siblings, though it does not explicitly contrast it with bake_profile or the read-only siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '既存の(すでにログイン状態を持つ)' implies the intended use case: importing an existing, logged-in profile folder. However, it gives no explicit guidance about when to prefer this tool over siblings like bake_profile, and no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesList ProfilesA
保持しているプロファイルの一覧(名前・サイズ)を返す。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It communicates a read-only list operation by saying it 'returns' profile data, which is transparent for a simple list tool. However, it does not mention potential limitations like pagination, ordering, or access scope beyond 'held' profiles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence in Japanese, directly stating the operation and output contents. Every word earns its place, and there is no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool takes no parameters and has an output schema, the description is almost complete: it identifies the operation, the resource, and the returned fields. It could be slightly stronger by clarifying relationship to sibling search, but for such a simple tool this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description carries no parameter burden. The baseline of 4 for a no-parameter tool is appropriate, and the description adds useful information about what is returned: names and sizes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: it returns a list of held profiles with their names and sizes. This is specific and distinguishable from sibling tools like search, import_profile, fetch_page, and bake_profile, which suggest different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool should be used when an agent needs an overview of existing profiles, but it does not explicitly say when to prefer this over sibling tools such as search. There is no exclusion or alternative guidance, only an implied use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchA
検索エンジンで検索し、タイトル/URL/スニペットのリストを返す。
engine: "google"(既定)/ "bing" / "duckduckgo" / "yahoo" / "brave"。 duckduckgo・braveはheadless=Falseでの利用を推奨(headlessだと botチャレンジが出やすいことを実地検証済み)。yahooはGoogleの ライセンス提供のため実質Googleと同じ結果になる (Googleがブロックされた際の避難先として使う想定)。 profile: 使用するプロファイル名。list_profiles で確認できる。 headless: デフォルトはTrue(検証済み)。False時は専用の非公開仮想ディスプレイ (weston-headless.service)を自動的に使うため、呼び出し元が$DISPLAYを 用意する必要はない(SPEC.md 3節)。
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| engine | No | ||
| profile | No | default | |
| headless | No | ||
| num_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses verified headless behavior, bot-challenge risks for duckduckgo/brave, yahoo's equivalence to Google due to licensing, and the automatic private virtual display when headless=False. It does not cover failure modes or rate limits, but the disclosed operational behavior is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose, followed by line-broken parameter guidance. It is dense but mostly earns its length; minor redundancy exists because it restates defaults already present in the schema, and the SPEC.md reference may not be accessible to all agents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no schema descriptions, the description covers the important operational details: engine alternatives, headless behavior, profile discovery, and display handling. The lack of num_results semantics and absence of error/blocking behavior are the main gaps; output schema covers return values, so that is not a concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains engine with allowed values and caveats, profile with a reference to list_profiles, and headless with default and display behavior. However, num_results is not described, and query is only implied by the search phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search with a search engine and return a list of titles/URLs/snippets. This clearly distinguishes it from sibling tools such as fetch_page, which fetches page content rather than returning search-result snippets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: engine selection, recommendation to avoid headless for duckduckgo/brave, and use of yahoo as a fallback when Google is blocked. It does not explicitly state when to use search instead of sibling tools like fetch_page, but the engine-level guidance is specific and practical.
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. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
bake_profile - First observed
fetch_page - First observed
import_profile - First observed
list_profiles - First observed
search
TDQS
The tools are generally distinct: search returns SERP listings, fetch_page retrieves a specific page body, and the profile tools manage browser profiles. The only mild ambiguity is between import_profile and bake_profile, since both modify the profile set, but their descriptions clearly separate copying an existing profile from creating a new state interactively.
Most tools follow a clear verb_noun pattern: list_profiles, import_profile, fetch_page, bake_profile. The lone search tool is a bare verb rather than search_web or similar, but the overall naming style is consistent and predictable.
Five tools is well-scoped for a search-oriented MCP server. Each tool covers a distinct part of the workflow: querying search engines, inspecting profiles, importing profiles, fetching pages, and baking profile state.
The core search-and-fetch workflow is well covered, and profile management includes listing, importing, and baking. A minor gap is the lack of a profile deletion or removal tool, but this does not block the main search/fetch use case.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Web search for AI agents — one tool across 6 engines, routed to the cheapest + cached.
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables web search across Bing, DuckDuckGo, and Google using Playwright automation, with tools for retrieving search results and extracting page text content.25MIT
- AlicenseNot gradedqualityDmaintenanceEnables web searching through Google, DuckDuckGo, and Bing using a headless Chrome browser, returning structured results with titles, URLs, and snippets. Also supports fetching and extracting text content from any webpage.13MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive web searching and content extraction using multiple search engines (Bing, Brave, DuckDuckGo) without API keys. Provides tools for full web searches with content extraction, quick search summaries, and single webpage content retrieval.1,119MIT
- AlicenseNot gradedqualityDmaintenanceProvides web search and page fetch capabilities using a browser-based approach, enabling LLMs to search DuckDuckGo, Google, or Yandex and retrieve rendered HTML from URLs.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/antigravity-press/search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server