DDGS Metasearch via local MCP

v1.0.1

Use a local DDGS MCP server (SSE) via mcporter to access fast web search tools (text/news/images/videos/books) without API keys. Use when user requests gener...

0· 120·0 current·0 all-time
MIT-0
Download zip
LicenseMIT-0 · Free to use, modify, and redistribute. No attribution required.
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description (local DDGS MCP via mcporter) aligns with the declared binaries (mcporter, python3) and the SKILL.md steps (pip install ddgs, run ddgs api, add server to mcporter). Required env vars/credentials are none, which is consistent with a local-only tool.
Instruction Scope
Instructions stay within the described scope (install ddgs, run a local SSE endpoint, add it to mcporter, and call search endpoints). The SKILL.md references a default mcporter config location (~/.openclaw/workspace/config/mcporter.json) and suggests using --allow-http; these are troubleshooting hints rather than unexplained data collection, but users should confirm actual config paths and be aware that the server communicates over plain HTTP (localhost). The docs also recommend the 'annasarchive' backend for books — that may have legal/ethical implications depending on content.
Install Mechanism
Install spec is a brew formula (steipete/tap/mcporter) which is a reasonable mechanism for the mcporter binary. The runtime instructions also call for 'python3 -m pip install -U ddgs' to install the ddgs package; installing a PyPI package is expected for this workflow but users should vet the package source and pip target environment (user vs system).
Credentials
No environment variables or credentials are requested. The skill operates against a local service and mcporter; the lack of declared secrets is proportional to the stated purpose.
Persistence & Privilege
always is false and there is no request to modify other skills or system-wide settings beyond optional a user-level systemd service. The skill does not request elevated persistence or cross-skill configuration changes.
Assessment
This skill is internally consistent, but take these practical steps before installing: (1) Verify the brew tap and the 'ddgs' PyPI package are sources you trust (brew steipete/tap and PyPI packages are third-party). (2) The workflow runs a local HTTP SSE server (127.0.0.1:8000); ensure you run it in a user context you control and that firewalls/port bindings are appropriate. (3) Note the SKILL.md suggests using --allow-http and references a default mcporter config path — confirm your mcporter config location before changing files. (4) The recommended books backend ('annasarchive') may host copyrighted material; consider legal/ethical implications. (5) If you need stronger assurance, inspect the brew formula and the ddgs package source (or run them in an isolated environment) before enabling this skill.

Like a lobster shell, security has layers — review code before you run it.

latestvk971ekxxwc79tf833mp1rce5cd83264v

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

🔍 Clawdis
Binsmcporter, python3

Install

Install mcporter (brew)
Bins: mcporter
brew install steipete/tap/mcporter

SKILL.md

DDGS web search

Setup: install ddgs, run MCP server (SSE), optionally keep it as a daemon

It is recommended to enable built-in mcporter skill.

Install the Python package

python3 -m pip install -U ddgs

Run the DDGS MCP server (SSE)

Foreground (good for debugging):

ddgs api --host 127.0.0.1 --port 8000

Detached/background mode (convenient on a dev machine):

ddgs api -d --host 127.0.0.1 --port 8000

Stop the detached server:

ddgs api -s

Optional: systemd user service (always available)

Create ~/.config/systemd/user/ddgs.service:

[Unit]
Description=DDGS MCP SSE server
After=network-online.target

[Service]
Type=simple
ExecStart=%h/.local/bin/ddgs api --host 127.0.0.1 --port 8000
Restart=on-failure
RestartSec=2

[Install]
WantedBy=default.target

Then:

systemctl --user daemon-reload
systemctl --user enable --now ddgs
systemctl --user status ddgs --no-pager

Add the MCP server to mcporter

Add a named server pointing at the DDGS SSE endpoint:

mcporter config add ddgs http://127.0.0.1:8000/sse --allow-http

Verify it shows up:

mcporter config list ddgs

Then you can call tools as ddgs.<tool> (examples below).

Key idea:

  • DDGS runs an MCP SSE endpoint at http://127.0.0.1:8000/sse
  • mcporter connects to that endpoint and exposes tools like ddgs.search_text_search_text_post

Defaults (use unless user says otherwise)

  • backend="duckduckgo" (most reliable)
  • max_results=10 (“SERP page 1”)
  • region="us-en", safesearch="moderate"

Workflow

0) Preconditions / sanity

  1. Confirm DDGS server is up:
    • curl -s http://127.0.0.1:8000/health
  2. Confirm mcporter can see the server:
    • mcporter config list ddgs

If the server is down, either:

  • start/restore it (if you have permission), or
  • use fallback (web_search).

1) Execution examples

Use mcporter to call DDGS tools and parse JSON.

Text search:

mcporter call ddgs.search_text_search_text_post \
  query="<query>" max_results=10 backend="duckduckgo" region="us-en" safesearch="moderate" --json

News search:

mcporter call ddgs.search_news_search_news_post \
  query="<query>" max_results=10 backend="bing" timelimit="w" --json

Images:

mcporter call ddgs.search_images_search_images_post \
  query="<query>" max_results=10 backend="duckduckgo" region="us-en" safesearch="moderate" --json

Videos:

mcporter call ddgs.search_videos_search_videos_post \
  query="<query>" max_results=10 backend="duckduckgo" region="us-en" safesearch="moderate" --json

Books:

mcporter call ddgs.search_books_search_books_post \
  query="<query>" max_results=10 backend="annasarchive" --json

Available tools (via mcporter)

  • ddgs.search_text_search_text_post
  • ddgs.search_images_search_images_post
  • ddgs.search_news_search_news_post
  • ddgs.search_videos_search_videos_post
  • ddgs.search_books_search_books_post

Tool parameters

Common parameters (most endpoints):

  • query — the search string.
  • max_results — cap results; default 10 (fast, “page 1”).
  • backend — engine selector. Prefer duckduckgo for reliability; bing as second choice; avoid google on servers (403/captcha risk)
  • region — locale for results (e.g. us-en, uk-uk).
  • safesearch — content filtering (off|moderate|strict); default moderate.

News-specific:

  • timelimit — recency filter (commonly d, w, m, y).

Books-specific:

  • recommended backend is annasarchive.

Tip: when you need reproducibility, explicitly pass backend, region, safesearch, max_results even if they match defaults.

Troubleshooting

  • mcporter says server not found → you’re using a different config file; if you use a non-default config, pass --config path from your system (default is ~/.openclaw/workspace/config/mcporter.json).

  • backend="google" often returns HTTP 403 in server environments → use another backend, e.g. duckduckgo/bing.

  • Full API docs available locally at http://localhost:8000/docs.

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…