open-search-mcp
Provides web search, page fetching, and research capabilities using DuckDuckGo as the search engine.
Click on "Deploy 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., "@open-search-mcpresearch the latest trends in artificial intelligence"
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.
open-search-mcp
Web search, page fetching, and research from the terminal or any MCP client — no API key required.
Built on DuckDuckGo for search and Trafilatura for content extraction.
Install
Homebrew (macOS/Linux)
brew install rockindahizzy/tap/open-search-mcppipx / uv
# One-shot (no install)
uvx open-search-mcp search "your query"
# Permanent install
uv tool install open-search-mcp
# or
pipx install open-search-mcppip
pip install open-search-mcpRelated MCP server: Oxylabs Web API MCP Server
CLI Usage
# Search the web
open-search search "python async tutorial"
open-search search "react native" -n 5 -t w
open-search search "security CVE" -s github.com
# Fetch a page and extract readable content
open-search fetch https://example.com/article
open-search fetch https://news.ycombinator.com -m 5000
# Research: search + auto-fetch top results
open-search research "philosophy of mind AI"
open-search research "rust vs go 2025" -f 5 -v
# JSON output (pipe to jq, etc.)
open-search search "AI agents" --json
open-search research "MCP protocol" --json | jq '.results[0].content'Commands
Command | Description |
| Search the web via DuckDuckGo |
| Fetch a URL → clean readable text |
| Search + auto-fetch top N results |
Query Tips
Exact phrases:
"financial literacy"Exclude terms:
-pinterestSite filter:
-s github.comorsite:stackoverflow.comin queryTime range:
-t d(day),-t w(week),-t m(month),-t y(year)Combine:
"react native" expo -reddit
MCP Server Usage
The package also runs as an MCP server for AI assistants and agents.
As stdio server
open-search-mcpWith Claude Desktop / MCP clients
{
"mcpServers": {
"open-search": {
"command": "uvx",
"args": ["open-search-mcp"]
}
}
}MCP Tools
search— Web search with filters (region, time, site)fetch— URL → clean text extractionresearch— Search + auto-fetch combined
Dependencies
click — CLI framework
ddgs — DuckDuckGo search
httpx — HTTP client
trafilatura — Web content extraction
mcp — Model Context Protocol SDK
License
MIT
Available Tools
3 toolsfetchB
Fetch a URL and extract readable content (HTML → clean text).
Args: url: The URL to fetch max_chars: Max characters to return (default 20000, truncates if exceeded)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| max_chars | 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 disclosure burden. It does reveal two real behavioral traits: content is transformed to clean text, and output is truncated at max_chars (default 20000). It says nothing about network/error behavior, timeouts, redirects, or size/auth limits, so disclosure is partial.
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?
Very compact and front-loaded: the purpose sentence comes first, followed by a short Args block. The Args formatting is slightly redundant with the schema, but nothing is wasted.
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 two-parameter tool with an output schema, the description covers purpose and parameters adequately, so return values needn't be explained. It is still thin on when-to-use guidance relative to its siblings and on failure/limit behavior, leaving real gaps for an agent deciding between fetch, search, and research.
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 coverage is 0%, but the description compensates by documenting both parameters: url is 'the URL to fetch' and max_chars is a character cap with a stated default and truncation semantics. This adds meaningful detail beyond the bare schema; only URL format requirements (scheme, absolute vs relative) are unstated.
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?
States a specific verb+resource (fetch a URL) and the transformation performed (HTML → clean text), so the agent knows exactly what comes back. It does not, however, differentiate itself from the siblings search and research, which are also retrieval tools.
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 indication of when to use fetch versus search or research, and no exclusions or prerequisites. The agent must infer that fetch is for a known URL while the siblings are for querying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchA
Combined search + fetch: searches, then fetches the top N result pages. Returns search results with full extracted content for the top hits.
Use advanced query techniques — don't just pass raw user questions. Reformulate into precise search operators.
Args: query: Search query (use operators for precision) max_results: Total search results to return (default 5) fetch_top: How many top results to auto-fetch content from (default 3) max_chars_per_page: Max chars per fetched page (default 10000) region: Region code time_range: d=day, w=week, m=month, y=year site: Limit to domain
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| query | Yes | ||
| region | No | wt-wt | |
| fetch_top | No | ||
| time_range | No | ||
| max_results | No | ||
| max_chars_per_page | 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 burden. It discloses the meaningful two-phase behavior (search then auto-fetch top N pages) and that content is extracted and returned, which is genuinely useful. But it omits failure modes, latency implications of fetching multiple pages, and truncation/error behavior, so coverage is adequate rather than rich.
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?
Front-loaded with what the tool does, then usage advice, then a compact Args list — logical and easy to scan. The Args block partially overlaps the schema titles, but each line adds meaning, so nearly every sentence earns its place.
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 7-parameter tool with no annotations, the description plus the available output schema are close to sufficient: the pipeline behavior, parameters, and even the time_range domain are covered. Remaining gaps are edge behavior and relative positioning versus the separate search/fetch tools.
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, and it largely does: every one of the 7 args is given meaning, defaults are restated for max_results/fetch_top/max_chars_per_page, and time_range even supplies enum semantics (d/w/m/y) absent from the schema. 'region: Region code' remains vague, keeping it short of a 5.
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?
States a specific composite verb+resource: "searches, then fetches the top N result pages" and specifies what is returned ("full extracted content for the top hits"). This clearly distinguishes it from the plain sibling tools fetch and search, though it never names those siblings as the alternatives it subsumes.
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?
It offers real guidance on query construction — "don't just pass raw user questions. Reformulate into precise search operators" — which is actionable. However, it gives no when-to-use/when-not guidance relative to the siblings search and fetch, or when the separate tools would be preferable; usage of the tool itself is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search the web via DuckDuckGo. No API key needed.
Use advanced query techniques for best results:
Exact phrases: "financial literacy"
Exclude terms: -pinterest
Site filter: site param or site: in query
Combine operators: "react native" expo -reddit
Args: query: Search query (use operators for precision) max_results: Number of results (1-25, default 10) region: Region code (wt-wt=global, us-en, uk-en, etc.) time_range: d=past day, w=past week, m=past month, y=past year site: Limit to domain (e.g. "github.com", "stackoverflow.com")
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| query | Yes | ||
| region | No | wt-wt | |
| time_range | No | ||
| max_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 burden, and it does disclose useful traits: no API key required, plus the semantics of region and time_range values. It says nothing about rate limiting, result freshness, pagination, or failure modes. Return shape is at least covered by the output schema, which lowers the bar.
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 in the first sentence, followed by a compact operator cheat-sheet and an Args block that adds value beyond the schema. The Args block partially restates schema field names, but each line contributes semantics, so waste is minimal.
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?
All five parameters are explained and an output schema exists, so return values need not be described. Remaining gaps are minor operational details (rate limits, result freshness, pagination) that an agent could still benefit from.
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 coverage is 0% for 5 parameters, so the description must compensate, and it does: every parameter is documented with meaning and format, including max_results bounds (1-25, default 10), region codes (wt-wt/us-en/uk-en), and the d/w/m/y codes for time_range that the bare schema does not explain.
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?
States a specific verb and resource ('Search the web via DuckDuckGo') plus a concrete distinguishing trait (no API key needed). It implicitly separates itself from 'fetch' (retrieve a known URL) and 'research' (deeper synthesis), but never names or contrasts them explicitly.
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?
Offers rich how-to guidance for querying (exact phrases, exclusions, site filters, operator combinations), which is genuinely useful. However it gives no when-to-use/when-not guidance relative to the fetch and research siblings, so selection is left to inference.
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.
3 tool updates
v0.1.0- First observed
fetch - First observed
research - First observed
search
TDQS
Scored across 3 tools
fetch, search, and research target distinct inputs (URL vs query vs combined workflow), but research is a composite of search+fetch and could be over-selected when simpler tools suffice. Descriptions clarify the boundaries well, so misselection risk is minor.
All three tool names are single lowercase verbs (fetch, search, research), forming a consistent action-oriented pattern with no deviations. This makes the set predictable and easy to scan.
Three tools is lean but perfectly scoped for a web search and content extraction server. Each tool earns its place: one for URL fetching, one for search queries, and one for combined research.
Core operations (search, fetch, combined research) are well covered, with no dead ends for typical workflows. Minor gaps include no batch fetch for a list of known URLs and no pagination beyond max_results for deeper search.
Maintenance
Related MCP Connectors
Free web search for AI agents. No API key required. Hosted MCP in active development.
Scrape, crawl and search the web for AI agents via MCP.
Serper MCP — wraps the Serper Google Search API (serper.dev)
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that provides web search scraping from DuckDuckGo (with Mojeek fallback) and URL content fetching as markdown/text or raw HTML.1ISC
- AlicenseAqualityCmaintenanceGives MCP-capable agents live web access: search the web, scrape pages into Markdown (including JavaScript-heavy and bot-protected sites), and extract named fields as JSON, with job polling, token-aware content offloading, and built-in research guidance. Ships as a self-hostable stdio or HTTP service with spend caps and per-request key support.7MIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP clients to search the web and fetch individual pages through two stdio tools, returning ranked results or extracted page content, titles and outbound links. It wraps a hosted, API-key-authenticated service (or a local daemon) with zero runtime dependencies.8 npmMIT
- AlicenseAqualityBmaintenanceEnables any MCP client to run keyless multi-engine web searches with RRF fusion, fetch pages and documents as Markdown, and full-text search a local SQLite index. It keeps queries and cached content on the user's machine, degrading gracefully across engine tiers when providers are blocked or rate-limited.8MIT