Skip to main content

Universal AI search MCP server — Perplexity-level quality with zero API keys. Multi-engine web scraping, intelligent ranking, and citation-native answers.

Project description

maru-deep-pro-search

Force your AI agent to research before it codes.
Zero API keys · 9-engine failover · BM25+semantic ranking · Native citations

🇰🇷 한국어

PyPI Tests Python License

🌐 Website · 📦 PyPI · 💻 GitHub


What it is

maru-deep-pro-search is an MCP server that gives your AI coding agent live web search superpowers — and forces it to use them before writing any code.

Built-in Agent Search maru-deep-pro-search
Engines 1–2, no fallback 9-engine auto-failover
Ranking Raw engine order BM25 + semantic + authority/freshness/code-density
Citations Hallucinated or none Native [1], [2] IDs with real URLs
Defense None 72-signature prompt injection + zero-width char sanitization
Enforcement "Please search first" (ignored) 3-layer technical gatekeeping
Cost Varies $0 forever — zero API keys

Install

macOS / Linux — recommended (auto-installs uv if needed):

curl -sSL https://raw.githubusercontent.com/claudianus/maru-deep-pro-search/main/scripts/install.sh | bash

Windows (PowerShell):

irm https://raw.githubusercontent.com/claudianus/maru-deep-pro-search/main/scripts/install.ps1 | iex

Manual (pip):

pip install maru-deep-pro-search[semantic] && maru-deep-pro-search setup

The setup wizard auto-detects your AI agent, backs up existing configs, injects MCP settings, and enforces research-first rules.


Quick Start

from maru_deep_pro_search.tools import deep_research

result = deep_research(
    "What are the security implications of using pickle in Python?",
    max_sources=5
)
print(result)  # ranked URLs with metadata — agent decides which to fetch

MCP tool decision tree:

  • Quick answer? → answer
  • Need ranked sources? → web_search
  • Deep dive? → deep_research
  • Blocked by bot protection? → stealthy_fetch

See AGENTS.md for per-agent setup details.


Architecture

MCP Client (Claude, Cursor, Kimi, Windsurf, ...)
        │ JSON-RPC 2.0 / stdio
        ▼
┌──────────────────────────────────────┐
│  maru-deep-pro-search MCP Server     │
│  ├─ 8 Tools (search, fetch, cite)   │
│  ├─ 9-Engine Failover Registry      │
│  ├─ Hybrid Ranking (BM25+semantic)  │
│  ├─ 3-Layer Enforcement             │
│  └─ SQLite KnowledgeStore           │
└──────────────────────────────────────┘

The server contains zero generative LLMs. Your agent's LLM handles all reasoning and synthesis. The server focuses on search quality: multi-engine coverage, intelligent ranking, and clean content extraction.

For deep technical details, see docs/engine_insights.md and docs/lessons_learned.md.


8 Tools

Tool Purpose
answer Quick answer with inline citations
web_search Scrape + rank + return cited results
search_with_citations Pre-numbered sources for academic writing
fetch_page Extract clean content from a single URL
fetch_bulk Parallel fetch with deduplication
deep_research Deep multi-engine search with ranked URLs + metadata
stealthy_fetch Anti-bot bypass for protected sites
parallel_search Run multiple searches simultaneously

Security

Fetched content is sanitized through a 72-pattern defense layer before reaching your LLM:

  • Zero-width character removal (\u200b, \u200c, \u200d)
  • Chat-token neutralization (Human:, Assistant:[REDACTED])
  • MCP-specific attack detection (tool poisoning, rug pulls, shadowing)
  • Optional semantic similarity anomaly detection

Every tool call is logged to .maru/audit.db with anomaly detection (rapid-fire, oversized results, suspicious params).

See SECURITY.md for disclosure policy.


Configuration

All optional. Loaded via pydantic-settings with prefix MARU_SEARCH_.

Variable Default Description
ENGINE duckduckgo_lite Default search engine
MAX_RESULTS 10 Results per query per engine
MAX_CONCURRENT 5 Parallel fetch limit
MAX_CONCURRENT 5 Parallel fetch limit
TIMEOUT 30.0 Fetch timeout (seconds)
TIMEOUT 30.0 Fetch timeout (seconds)
RETRIES 3 Retry attempts

GitHub Actions Bot Identity (optional)

By default, workflow comments appear as github-actions[bot]. To use a custom bot name and icon:

  1. Create a GitHub App at Settings → Developer settings → GitHub Apps → New GitHub App
    • Name: marubot (or your preference)
    • Upload a custom icon (PNG, 200×200)
    • Permissions: Issues (write), Pull requests (write), Actions (read)
  2. Install the app on your repository
  3. Go to Settings → Secrets and variables → Actions and add:
    • MARUBOT_APP_ID — your GitHub App ID
    • MARUBOT_PRIVATE_KEY — the PEM private key from the app
  4. The generated workflow automatically falls back to github-actions[bot] if MARUBOT_TOKEN is not set.

CLI Commands

# MCP server (stdio transport)
maru-deep-pro-search

# Setup AI agents with MCP config
maru-deep-pro-search setup
maru-deep-pro-search setup --list
maru-deep-pro-search setup --restore

# Initialize project harness
maru-deep-pro-search init --agents cursor claude

# Generate GitHub Actions workflow
maru-deep-pro-search workflow --force

# Manage plugins
maru-deep-pro-search-plugin list
maru-deep-pro-search-plugin install <git-url>

# Headless deep research (CI/CD friendly)
python -m maru_deep_pro_search.server research "FastAPI vs Django 2025" \
  --output report.md --max-sources 8

Docker

# Build
docker build -t maru-search .

# Run with stdio transport
docker run --rm -i maru-search

# With persistent knowledge store
docker run --rm -i -v $(pwd)/.maru:/app/.maru maru-search

Troubleshooting

No results from search engine

MARU_SEARCH_ENGINE=bing maru-deep-pro-search

Agent not detected by setup wizard

maru-deep-pro-search setup --agent cursor
maru-deep-pro-search setup --list-agents

High memory usage

# Use lighter search mode
MARU_SEARCH_MAX_RESULTS=5 maru-deep-pro-search

Contributing

PRs welcome. See CONTRIBUTING.md for development setup, adding engines, and agent adapters.


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

maru_deep_pro_search-0.11.3.tar.gz (141.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maru_deep_pro_search-0.11.3-py3-none-any.whl (170.6 kB view details)

Uploaded Python 3

File details

Details for the file maru_deep_pro_search-0.11.3.tar.gz.

File metadata

  • Download URL: maru_deep_pro_search-0.11.3.tar.gz
  • Upload date:
  • Size: 141.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for maru_deep_pro_search-0.11.3.tar.gz
Algorithm Hash digest
SHA256 292bb6d877d0e2eb8f411b03d800b4afb0ed11c7358568ea4d0fbc2bb56ca43b
MD5 81179c7db1df01ac6758711e7307429b
BLAKE2b-256 49379af54774b69d2e4a7f69eaaf97e7cb66a25ea3ed31127152adebf90a120b

See more details on using hashes here.

File details

Details for the file maru_deep_pro_search-0.11.3-py3-none-any.whl.

File metadata

  • Download URL: maru_deep_pro_search-0.11.3-py3-none-any.whl
  • Upload date:
  • Size: 170.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for maru_deep_pro_search-0.11.3-py3-none-any.whl
Algorithm Hash digest
SHA256 77f18e53ef7259a1f2571fef86262dec64310ea0be5f2c9554d8e25678f26a28
MD5 bf8ff51700368fd48f0f93126b4343d2
BLAKE2b-256 5b2bd9b2f5358b37f88bceacd27793c6a4b721239f6865e2996cb35c0eaa52ec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page