web-search-mcp
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., "@web-search-mcpwhat are today's top technology news headlines?"
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.
web-search-mcp
An MCP server that exposes a real, cited web_search tool by shelling out to the Claude Code CLI running inside an isolated Docker container, logged into a personal claude.ai Pro subscription.
Why this exists
Some environments proxy Claude Code through a gateway (e.g. an internal LiteLLM-style proxy) that doesn't support Anthropic's built-in web_search server tool for the model it routes to. This project sidesteps that entirely: it's a separate, single-purpose MCP tool backed by its own Claude Code CLI session, running in a container so its login never touches the host's own Claude Code config.
See docs/superpowers/specs/2026-07-28-web-search-mcp-design.md for the full design rationale, including why a raw Anthropic API key doesn't work for this and why Docker isolation is necessary.
Related MCP server: SearXNG-Crawl4AI MCP Server
How it works
MCP client ──tool call──▶ server.py (FastMCP, stdio) ──subprocess──▶ docker run --rm -v claude-pro-home:/root web-search-claude:latest
│
▼
Claude Code CLI, logged into a Pro account
(real web_search tool, real Anthropic models)server.py runs docker run per query, parses the CLI's JSON output, and returns the answer text (which includes a Sources: section whenever the CLI actually searched).
Setup
Requires Docker and uv.
git clone https://github.com/bartdorlandt/web-search-mcp.git
cd web-search-mcp
uv sync
# Build the image (bundles the Claude Code CLI)
docker build -t web-search-claude:latest .
# Create a volume to hold the Pro-account login, then log in (interactive, opens a browser)
docker volume create claude-pro-home
docker run --rm -it -v claude-pro-home:/root web-search-claude:latest /loginThe login only needs to happen once — the OAuth session persists in the claude-pro-home volume across container runs.
Manual test
uv run python -c "from server import _web_search_impl; print(_web_search_impl('What are today\'s top technology news headlines?'))"Using it standalone
uv run python server.pyThis starts the MCP server over stdio — point any MCP client at that command directly.
Adding it to gridctl
If you're using gridctl as an MCP gateway, add it as a local-process server in your stack.yaml:
mcp-servers:
- name: web-search
command: [uv, run, --directory, /path/to/web-search-mcp, python, server.py]
transport: stdioClone this repo to /path/to/web-search-mcp (or wherever you like) and update the path above, then gridctl reload. No env: block is needed — the only credential this tool uses lives in the claude-pro-home Docker volume, not in gridctl's variable store.
Repo: https://github.com/bartdorlandt/web-search-mcp
Notes
No automated test suite — the wrapper's logic is thin enough that its correctness is verified functionally (see the design doc's Testing section).
Calls are assumed serial, not concurrent — see "Operational assumptions" in the design doc.
Every query bills against the logged-in account's subscription usage.
Available Tools
1 toolweb_searchB
Search the web and return a synthesized, cited answer.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
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 bears the full burden. It discloses that the answer is synthesized and cited, but lacks details on caching, rate limits, source scope, real-time behavior, or any other traits that help an agent understand how the tool behaves.
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 a single, well-structured sentence of 9 words that front-loads the action and outcome. Every word serves a purpose with no redundancy.
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 one-parameter tool with an output schema, the description is adequate but minimal. It lacks behavioral context (e.g., time range, result count) that would help an agent anticipate limitations. The presence of an output schema partially compensates, but the description could be more informative.
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 schema provides 0% description coverage for the 'query' parameter. The description adds no additional meaning beyond the parameter name itself; it does not explain allowed formats, character limits, or query syntax.
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 verb 'Search' and the resource 'the web', and specifies the outcome as a 'synthesized, cited answer'. It is specific and self-contained, with no sibling tools to distinguish.
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?
No guidance on when to use this tool versus alternatives is provided. There is no mention of context, exclusions, or comparisons to other search or information tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Only one tool exists, so there is no possibility of confusion or overlap.
With a single tool named 'web_search', naming is trivially consistent.
One tool is slightly minimal but acceptable for a focused web search server; the scope is clear and the tool appears self-contained.
The tool provides search with synthesized cited answers, covering the core need. Minor gaps like different search modes or filters exist but are not critical.
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
Web search, scraping, RAG answers with citations, and translation as MCP tools.
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Collaborative, cache-first web search for agents — cited answers from a shared live-web pool.
Provides AI assistants with access to Seltz's powerful Web Search capabilities.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides web search and page fetching tools for third-party models (e.g., DeepSeek, Qwen, Kimi) in Claude Code, with configurable search backends, Markdown output, and safety boundaries.63MIT
- FlicenseNot gradedqualityDmaintenanceProvides fast, self-hosted web search and reliable web scraping using SearXNG and Crawl4AI, integrated as MCP tools for Claude Code.41
- FlicenseNot gradedqualityCmaintenanceA drop-in replacement for Claude's built-in web_search tool that automatically tracks usage and provides multiple search backends.
- AlicenseAqualityDmaintenanceCLI-first web and code search for agents, with MCP support for integration with IDEs like Cursor, VS Code, and Claude Code.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/bartdorlandt/web-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server