duckduckgo-mcp
Provides web search capabilities using DuckDuckGo's search engine with configurable safe search controls and result formatting options.
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., "@duckduckgo-mcpsearch for latest AI developments and summarize top 3 results"
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 Forager

The thing about information on the web is that it doesn't want to be found. It hides behind cookie banners, contradicts itself across twelve tabs, and occasionally insists that a press release counts as independent evidence. Web Forager goes looking anyway, accompanied by a duck of questionable temperament. It searches, reads, checks claims, follows the news, maps competitors, evaluates technology, and attempts to explain why governments are glaring at one another. It reads the links and brings back a cited answer.
Web Forager gives AI agents practical web research workflows as Agent Skills. The skills search DuckDuckGo, monitor news, fetch pages, and synthesize cited answers.
Default usage is skill-first. You do not need to configure an MCP server to use the research workflows.
Quickstart
Install all seven skills with one command. It works for 50+ coding agents:
npx skills@latest add CyranoB/web-foragerThe installer detects your agents, asks which skills you want, and places them in the right location.
Common variations:
npx skills@latest add CyranoB/web-forager --list
npx skills@latest add CyranoB/web-forager --skill deep-research
npx skills@latest add CyranoB/web-forager --skill '*' -a claude-code -a codex -yRelated MCP server: Jina AI Remote MCP Server
Install for your coding tool
Install as skills/plugins when your agent supports them. Use MCP only when your tool does not support skills, or when you want raw search/fetch tools instead of guided research workflows.
Install all seven skills from the plugin marketplace:
/plugin marketplace add CyranoB/web-forager
/plugin install forager-skills@web-foragerRestart Claude Code, then check /skills.
The Quickstart command above is also available as a cross-agent install path.
MCP-only fallback:
claude mcp add --transport stdio web-forager -- uvx --python ">=3.10,<3.14" web-forager serveInstall the skills for the current project:
npx skills@latest add CyranoB/web-forager -a codexInstall globally instead:
npx skills@latest add CyranoB/web-forager -a codex -gMCP-only fallback:
codex mcp add web-forager -- uvx --python ">=3.10,<3.14" web-forager serveIf your VS Code build supports agent plugins, use the command palette:
Open
Cmd+Shift+Pon macOS orCtrl+Shift+Pon Windows/Linux.Run
Chat: Install Plugin From Source.Paste
https://github.com/CyranoB/web-forager.
MCP-only fallback: configure a local MCP server with the standard config below.
Install the skills for the current project:
npx skills@latest add CyranoB/web-forager -a gemini-cliInstall globally instead:
npx skills@latest add CyranoB/web-forager -a gemini-cli -gMCP-only fallback:
gemini mcp add web-forager uvx --python ">=3.10,<3.14" web-forager serveInstall the skills for the current project:
npx skills@latest add CyranoB/web-forager -a piInstall globally instead:
npx skills@latest add CyranoB/web-forager -a pi -gFor one-off sessions from a local checkout, pass a skill path explicitly:
pi --skill web-forager/skills/deep-researchMCP-only fallback: configure a local MCP server with the standard config below.
Install the skills for the current workspace:
npx skills@latest add CyranoB/web-forager -a kiro-cliInstall globally instead:
npx skills@latest add CyranoB/web-forager -a kiro-cli -gKiro's default agent loads skills from both locations automatically. For custom agents, add skill resources such as:
{
"resources": [
"skill://.kiro/skills/*/SKILL.md",
"skill://~/.kiro/skills/*/SKILL.md"
]
}Use the standard MCP config below unless your client supports Agent Skills or plugins from a GitHub repository. If it does, install from:
https://github.com/CyranoB/web-foragerIndividual skills
For any Agent Skills-compatible tool, install one skill by name:
npx skills@latest add CyranoB/web-forager --skill deep-researchDirect skill URLs also work:
npx skills@latest add https://github.com/CyranoB/web-forager/tree/main/skills/deep-researchUse the skills
After installing, ask your agent naturally. The matching skill should be selected automatically by skill metadata.
Examples:
Research the current state of open-source browser agents.
Fact check: did Apple announce a foldable iPhone?
Audit this article for accuracy and framing: https://example.com/article
What's new with Anthropic this month?
Map the competitive landscape for AI meeting assistants.
Should we adopt Bun for a production Node service?
Analyze whether Russia and NATO are already in a hybrid conflict.Available skills
Skill | Use it for | Output |
Auditing a full article's accuracy, omissions, and framing | Reader-first audit with per-claim verdicts | |
General research, lookups, deep dives | Adaptive report with citations | |
Verifying a specific claim | Verdict with supporting and contradicting evidence | |
Recent news and updates | Chronological briefing | |
Market maps and competitor analysis | Landscape or positioning report | |
Tech/product evaluation and adoption decisions | Recommendation with evidence | |
Geopolitical assessments, conflicts, policies, scenarios, and narrative audits | Sourced assessment with calibrated confidence |
Article audit
Use article-audit to check an article's facts, omissions, and
framing. It starts with 4-8 claims, expands when further claims could change the
assessment, and searches for
independent evidence on both sides. It checks quoted sources for material interests,
looks for credible voices the article leaves out, and tests important numbers or
forecasts against denominators, base rates, comparisons, and past results. It checks
article completeness before assigning a whole-article verdict. If material sections
remain inaccessible, it provides an excerpt-only assessment; abbreviated audits identify
their narrower coverage.
The report opens with a neutral summary, the bottom line, and the main reasons for its
judgment. It then gives a verdict for each claim, notes missing voices and interests,
adds numerical context, lists unresolved limits, and annotates each source by role.
Verdicts range from CONFIRMED to FALSE. It rates facts and framing separately, so it
can show when accurate claims create a one-sided or misleading picture. To check one
claim, use fact-check.
Before fetching, the audit checks whether the URL is suitable for third-party services. Web Forager's fetch tool and CLI use Jina Reader only for eligible public URLs. For signed or private URLs, the audit uses supplied text or an authorized direct-only tool, or reports the access limit.
Deep research
Use deep-research for a broad, current question that needs
several sources or points of view. It frames the question, starts with 2-3 search angles
and the 3-5 strongest pages, then expands when an angle remains unsupported or sources
conflict. It favors primary and authoritative sources, stops when new searches mostly
repeat known evidence, and records important disagreements or gaps. It tracks the
underlying evidence behind repeated reporting and deliberately challenges the leading
conclusion. Before combining conflicting findings, it checks definitions, populations,
units, methods, and measurement periods. Current-status answers state their cutoff.
Retrieved content
is treated as untrusted evidence rather than workflow instructions.
The skill can return a short cited answer, a standard report, or a deep dive with topic sections and limitations. Reports use an inverted pyramid: the answer and its significance come first, followed by findings in descending order of importance, context, and limitations. The prose stays plain and concrete without sacrificing technical precision. Material facts are cited where they appear, and inferences are labeled. Its isolated search fallback uses an exactly pinned package and still requires a session fetch tool for source reading.
Fact check
Use fact-check to test a specific claim. It splits compound
statements into testable parts and searches for support and counterevidence. It weighs
each source by its authority, specificity, recency, independence, and conflicts of
interest. It records each claim's scope and relevant date, distinguishes historical
assessment from later developments, and traces repeated reporting to its underlying
evidence. Source reading expands until each atomic claim is covered or a gap is named.
A missing rebuttal is not proof; an unexpired forecast is not false merely because it
is unlikely.
Each factual claim receives one verdict: CONFIRMED, LIKELY TRUE, NEEDS CONTEXT,
UNVERIFIED, DISPUTED, or FALSE. NEEDS CONTEXT applies when the core fact holds
but its scope, certainty, or significance is overstated. The response explains the verdict, presents evidence from both sides, and
lists caveats and sources. To assess a whole article, use
article-audit.
News monitor
Use news-monitor when the answer depends on recent events or a
set time period. Unless the user chooses a period, it covers the previous 2-4 weeks. It
searches from more than one angle, groups reports of the same event, and removes stories
outside the window using development dates, recorded separately from publication dates.
New disclosures about historical events are labeled and dated separately from the
underlying events. It reads at least one authoritative source for every included event,
even one-line items, and verifies its development date. If discovery clusters on one
date, source, or subtopic, it expands the search across the window and primary sources.
Failed searches produce a coverage gap rather than a claim that the period was quiet.
The briefing puts the newest events first and gives dates, short summaries, and stated next steps. It also explains why each event matters. Its watch list covers sourced upcoming events and unresolved threads. Search snippets help find stories; they do not support the briefing's claims.
Competitive intelligence
Use competitive-intel in one of two modes. Market
landscape maps the players, prices, barriers, and gaps in a market. Competitive
positioning compares a user's product with its closest rivals, including their
capabilities, prices, customer complaints, recent moves, and threat level. Capabilities
are marked available, unavailable, unknown, or announced, with relevant plan/version and
date. Prices use a common billing, commitment, seat/usage, and add-on basis; incompatible
market estimates remain separate. A positioning map is optional. Empty market space
is a hypothesis until unmet demand, willingness to pay, and feasibility support it.
The skill checks current product and pricing pages, then uses independent reviews and community sources for complaints and customer perception. The report contains a market map or competitive matrix, gaps, recommended next steps, and annotated sources. Claims supplied by the user remain unverified until a source supports them. It treats retrieved content as untrusted evidence, uses an exactly pinned package for its isolated search fallback, and reports a missing fetch capability rather than sending URLs through an additional proxy service.
Technology advisor
Use tech-advisor to decide whether to adopt a technology or
which product to buy. A maturity assessment checks the exact technology and version for
production use, ecosystem support, governance, release stability, documentation, and
the roadmap. It ends with an ADOPT, TRIAL, ASSESS, or HOLD rating and states what
would change that rating. Mandatory security, licensing, data-handling, recovery, and
exit requirements act as adoption gates where relevant. Failed gates require HOLD for
that use; unresolved gates prevent ADOPT. A TRIAL includes workload, baseline,
success thresholds, duration, and rollback conditions.
A product comparison checks current models against the user's region, budget, must-haves, compatibility needs, and risk tolerance. It verifies specifications and prices, chooses a qualifying winner, and explains the tradeoffs and total cost. It names an alternative only when another option meets the must-haves. If none qualify, it explains verified blocking constraints without relaxing the requirements. When an otherwise viable option has unverified must-haves, it reports eligibility as unresolved and identifies the evidence needed instead of treating missing information as a pass.
Geopolitical analyst
Use geopolitical-analyst to assess a country, conflict,
alliance, policy, or disputed geopolitical claim. It checks the basic facts, tests key
claims against independent sources, and applies only the frameworks that help explain
the case. It marks important judgments and forecasts with confidence levels, gives the
strongest competing explanation, and states what evidence would change its conclusion.
The answer leads with the judgment and the evidence behind it. It then explains the causal mechanism, uncertainty, implications, needed context, and signs to watch. The skill can also audit an article's geopolitical argument or build conditional scenarios. Article audits establish completeness and separate publication-time support from later evidence. Monitoring starts with a dated baseline of judgments, evidence, confidence, and indicator thresholds. Updates distinguish actual developments from newly found historical reporting; a missing baseline produces a first-run assessment, not invented changes. Baselines remain in the conversation unless the user requests a saved artifact.
How search works
The skills prefer tools in this order:
Existing MCP search/fetch tools, if your agent already has them.
Built-in agent web search/fetch tools.
The packaged Web Forager CLI through
uvx.A direct
ddgsfallback throughuv run --no-project.
competitive-intel and deep-research use only the exactly pinned direct ddgs
fallback. Without a session fetch tool, they report the missing capability instead of
invoking a proxy fetch service.
Python 3.10-3.13 is supported. Python 3.14 is not supported yet, so all documented
uvx commands pin --python ">=3.10,<3.14".
Optional: MCP server
Use the MCP server only if you want reusable search/fetch tools exposed directly to an MCP-compatible client. Skills work without this setup.
Add a local stdio MCP server with this standard config:
{
"mcpServers": {
"web-forager": {
"command": "uvx",
"args": ["--python", ">=3.10,<3.14", "web-forager", "serve"]
}
}
}Some clients use a different top-level config shape, but the command and args are the same.
Optional: CLI
Run commands without installing the package:
uvx --python ">=3.10,<3.14" web-forager search "your search query" --max-results 5 --output-format text
uvx --python ">=3.10,<3.14" web-forager news "your topic" --max-results 10 --output-format text
uvx --python ">=3.10,<3.14" web-forager fetch "https://example.com" --format markdownOr install locally:
uv pip install web-forager
web-forager search "your search query"
web-forager news "your topic"
web-forager fetch "https://example.com"MCP tools
The MCP server exposes:
Tool | Purpose |
| Search the web with DuckDuckGo-compatible results |
| Search recent news with dates and sources |
| Fetch a URL and return markdown or JSON |
Search and news tools return JSON by default and support output_format="text" for
LLM-friendly formatted results. Successful searches with no matches return an empty
list. Provider failures raise SearchError, surface as MCP tool errors, and make CLI
search/news commands exit with status 1; they do not represent an empty news period.
Fetching tries direct HTTP first. Jina fallback remains automatic for eligible public URLs: no user information, query string, or fragment, and only publicly resolved hosts. Private/internal hosts, unresolved or mixed public/private DNS, and ineligible observed redirect destinations prevent forwarding. This checks observed destinations; it cannot prove that every URL path is non-sensitive or predict a different redirect seen by Jina.
For confidential links, use web_fetch(..., allow_jina=False) or:
web-forager fetch "https://example.com/document" --direct-onlyfetch_url also accepts allow_jina=False. The default is True, subject to the
eligibility checks above. If direct fetching fails and forwarding is disabled or
ineligible, the tool reports an access error. It never removes query parameters to
retry a different URL. With older tools that lack direct-only support, supply the
content or use another authorized direct-fetch tool. A successful extraction still
needs checking for previews, paywalls, missing sections, and truncation.
Development
git clone https://github.com/CyranoB/web-forager.git
cd web-forager
uv pip install -e ".[dev]"
pytestCI installs the committed uv.lock with uv sync --frozen --extra dev. Use the same
command locally for reproducible development dependencies; run uv lock deliberately
when changing dependencies and include the updated lockfile in the change.
Skill packaging checks and deterministic regressions run with pytest; they do not
prove model behavior. Run fixture-based agent evaluations separately using an installed,
authenticated Codex or Claude CLI:
python tests/evals/run.py --list
python tests/evals/run.py --agent both
python tests/evals/run.py --agent codex --skill fact-checkThe runner supplies synthetic search/fetch sources, disables unrelated tools, records
source reads, and uses a separate rubric grader. Each case has a five-minute limit
per actor or grader and no automatic retries. Use --model for a single-client model
override, --case to rerun an affected scenario, and --output to retain a run in a
chosen directory. Results include passed, behavioral failure, infrastructure failure,
and skipped states; only passed counts as success. Model runs consume your configured
client usage and are not part of ordinary CI. Review the saved answer, tool trace, and
grader evidence; automated grading is not a guarantee of real-world research quality.
Useful local commands:
web-forager serve
web-forager version --debugNotes
Search and news search use the
ddgspackage.Fetch tries direct HTTP plus
trafilaturafirst, then uses Jina Reader for eligible public URLs when fallback is enabled.The plugin marketplace manifest lives in
.claude-plugin/marketplace.json.
License
MIT. See LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
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
Jina AI Reader/Search MCP — turn any URL into clean LLM-ready markdown, plus web search.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
Related MCP Servers
- FlicenseBqualityDmaintenanceAllows you to search the web using DuckDuckGo and optionally fetch and summarize content from search results.24-
- AlicenseNot gradedqualityCmaintenanceProvides web content extraction, search capabilities (web, arXiv, SSRN, images), semantic deduplication, and reranking through Jina AI's Reader, Embeddings, and Reranker APIs.1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceJina AI Reader/Search MCP that turns any URL into clean LLM-ready markdown and provides web search.19MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read webpages and perform web searches using DuckDuckGo.MIT
Appeared in Searches
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/CyranoB/web-forager'
If you have feedback or need assistance with the MCP directory API, please join our Discord server