by deedy5
A metasearch library that aggregates results from diverse web search services
# Add to your Claude Code skills
git clone https://github.com/deedy5/ddgsGuides for using mcp servers skills like ddgs.
Last scanned: 4/23/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-04-23T06:08:00.110Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}ddgs is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by deedy5. A metasearch library that aggregates results from diverse web search services. It has 2,800 GitHub stars.
Yes. ddgs passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/deedy5/ddgs" and add it to your Claude Code skills directory (see the Installation section above).
ddgs is primarily written in Python. It is open-source under deedy5 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ddgs against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
A metasearch library that aggregates results from diverse web search services.
pip install -U ddgs # Base install
pip install -U ddgs[api] # API server (FastAPI)
pip install -U ddgs[mcp] # MCP server (stdio)
ddgs --help
-- Install
pip install -U ddgs[api]
-- CLI
ddgs api # Start server in foreground
ddgs api -d # Start in detached mode (background)
ddgs api -s # Stop detached server
ddgs api --host 127.0.0.1 --port 4479 # Default port 4479
ddgs api -pr socks5h://127.0.0.1:9150 # With proxy
-- Docker compose
git clone https://github.com/deedy5/ddgs && cd ddgs
docker-compose up --build
-- Bash script
git clone https://github.com/deedy5/ddgs && cd ddgs
chmod +x start_api.sh
./start_api.sh
| Endpoint | Method | Description |
|---|---|---|
/search/text |
GET, POST | Text search |
/search/images |
GET, POST | Image search |
/search/news |
GET, POST | News search |
/search/videos |
GET, POST | Video search |
/search/books |
GET, POST | Book search |
/extract |
GET, POST | Extract content from URL |
/health |
GET | Health check |
/docs |
GET | Swagger UI |
/redoc |
GET | ReDoc documentation |
pip install -U ddgs[mcp]
ddgs mcp # Start MCP server (stdio transport)
ddgs mcp -pr socks5h://127.0.0.1:9150 # With proxy
| Tool | Description |
|---|---|
search_text |
Web text search |
search_images |
Image search |
search_news |
News search |
search_videos |
Video search |
search_books |
Book search |
extract_content |
Extract content from a URL |
For MCP clients like Cursor or Claude Desktop:
{
"mcpServers": {
"ddgs": {
"command": "ddgs",
"args": ["mcp"]
}
}
}
| DDGS function | Available backends |
|---|---|
| text() | bing, brave, duckduckgo, google, grokipedia, mojeek, startpage, yandex, yahoo, wikipedia |
| images() | bing, duckduckgo |
| videos() | duckduckgo |
| news() | bing, duckduckgo, yahoo |
| books() | annasarchive |
DDGS class is lazy-loaded.
class DDGS:
"""Dux Distributed Global Search. A metasearch library that aggregates results from diverse web search services.
Args:
proxy (str, optional): proxy for the HTTP client, supports http/https/socks5 protocols.
example: "http://user:pass@example.com:3128". Defaults to None.
timeout (int, optional): Timeout value for the HTTP client. Defaults to 5.
verify: (bool | str): True to verify, False to skip, or a str path to a PEM file. Defaults to True.
"""
Here is an example of initializing the DDGS class.
from ddgs import DDGS
results = DDGS().text("python programming", max_results=5)
print(results)
def text(
query: str,
region: str = "us-en",
safesearch: str = "moderate",
timelimit: str | None = None,
max_results: int | None = 10,
page: int = 1,
backend: str = "auto",
) -> list[dict[str, str]]:
"""DDGS text metasearch.
Args:
query: text search query.
region: us-en, uk-en, ru-ru, etc. Defaults to us-en.
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
max_results: maximum number of results. Defaults to 10.
page: page of results. Defaults to 1.
backend: A single or comma-delimited backends. Defaults to "auto".
Returns:
List of dictionaries with search results.
"""
Example
results = DDGS().text("live free or die", region="us-en", safesearch="off", timelimit="y", page=1, backend="auto")
# Searching for pdf files
results = DDGS().text("russia filetype:pdf", region="us-en", safesearch="off", timelimit="y", page=1, backend="auto")
print(results)
[
{
"title": "News, sport, celebrities and gossip | The Sun",
"href": "https://www.thesun.co.uk/",
"body": "Get the latest news, exclusives, sport, celebrities, showbiz, politics, business and lifestyle from The Sun",
},
...,
]
def images(
query: str,
region: str = "us-en",
safesearch: str = "moderate",
timelimit: str | None = None,
max_results: int | None = 10,
page: int = 1,
backend: str = "auto",
size: str | None = None,
color: str | None = None,
type_image: str | None = None,
layout: str | None = None,
license_image: str | None = None,
) -> list[dict[str, str]]:
"""DDGS images metasearch.
Args:
query: images search query.
region: us-en, uk-en, ru-ru, etc. Defaults to us-en.
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m, y. Defaults to None.
max_results: maximum number of results. Defaults to 10.
page: page of results. Defaults to 1.
backend: A single or comma-delimited backends. Defaults to "auto".
size: Small, Medium, Large, Wallpaper. Defaults to None.
color: color, Monochrome, Red, Orange, Yellow, Green, Blue,
Purple, Pink, Brown, Black, Gray, Teal, White. Defaults to None.
type_image: photo, clipart, gif, transparent, line.
Defaults to None.
layout: Square, Tall, Wide. Defaults to None.
license_image: any (All Creative Commons), Public (PublicDomain),
Share (Free to Share and Use), ShareCommercially (Free to Share and Use Commercially),
Modify (Free to Modify, Share, and Use), ModifyCommercially (Free to Modify, Share, and
Use Commercially). Defaults to None.
Returns:
List of dictionaries with images search results.
"""
Example
results = DDGS().images(
query="butterfly",
region="us-en",
safesearch="off",
timelimit="m",
page=1,
backend="auto",
size=None,
color="Monochrome",
type_image=None,
layout=None,
license_image=None,
)
print(images)
[
{
"title": "File:The Sun by the Atmospheric Imaging Assembly of NASA's Solar ...",
"image": "https://upload.wikimedia.org/wikipedia/commons/b/b4/The_Sun_by_the_Atmospheric_Imaging_Assembly_of_NASA's_Solar_Dynamics_Observatory_-_20100819.jpg",
"thumbnail": "https://tse4.mm.bing.net/th?id=OIP.lNgpqGl16U0ft3rS8TdFcgEsEe&pid=Api",
"url": "https://en.wikipedia.org/wiki/File:The_Sun_by_the_Atmospheric_Imaging_Assembly_of_NASA's_Solar_Dynamics_Observatory_-_20100819.jpg",
"height": 3860,
"width": 4044,
"source": "Bing",
},
...,
]
def videos(
query: str,
region: str = "us-en",
safesearch: str = "moderate",
timelimit: str | None = None,
max_results: int | None = 10,
page: int = 1,
backend: str = "auto",
resolution: str | None = None,
duration: str | None = None,
license_videos: str | None = None,
) -> list[dict[str, str]]:
"""DDGS videos metasearch.
Args:
query: videos search query.
region: us-en, uk-en, ru-ru, etc. Defaults to us-en.
safesearch: on, moderate, off. Defaults to "moderate".
timelimit: d, w, m. Defaults to None.
max_results: maximum number of results. Defaults to 10.
page: page of results. Defaults to 1.
backend: A single or comma-delimited backends. Defaults to "auto".
resolution: high, standart. Defaults to None.
duration: short, medium, long. Defaults to None.
license_videos: creativeCommon, youtube. Defaults to None.
Returns:
List of dictionaries with videos search results.
"""
Example
results = DDGS().videos(
query="cars",
region="us-en",
safesearch="off",
timelimit="w",
page=1,
backend="auto",
resolution="high",
duration="medium",
)
print(results)
[
{
"content": "https://www.youtube.com/watch?v=6901-C73P3g",
"description": "Watch the Best Scenes of popular Tamil Serial #Meena that airs on Sun TV. Watch all Sun TV serials immediately after the TV telecast on Sun NXT app. *Free for Indian Users only Download here: Android - http://bit.ly/SunNxtAdroid iOS: India - http://bit.ly/sunNXT Watch on the web - https://www.sunnxt.com/ Two close friends, Chidambaram ...",
"duration": "8:22",
"embed_html": '<iframe width="1280" height="720" src="https://www.youtube.com/embed/6901-C73P3g?autoplay=1" frameborder="0" allowfullscreen></iframe>',
"embed_url": "https://www.youtube.com/embed/6901-C73P3g?autoplay=1",
"image_token": "6c070b5f0e24e5972e360d02ddeb69856202f97718ea6c5d5710e4e472310fa3",
"images": {
"large": "https://tse4.mm.bing.net/th?id=OVF.JWBFKm1u%2fHd%2bz2e1GitsQw&pid=Api",
"medium": "https://tse4.mm.