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.2.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.2-py3-none-any.whl (170.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: maru_deep_pro_search-0.11.2.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.2.tar.gz
Algorithm Hash digest
SHA256 1bec65d4a4b95eee76dc43ea195456ad22b85b5b320858ed784af5b25e50e383
MD5 fb9fd070d40d14358c4d497c1c6fca6a
BLAKE2b-256 d2a8e5f1f0a1382f41b1e6b3445e3ea70caebd7ebdfbd37c944b41d0ac363a79

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maru_deep_pro_search-0.11.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 286df0a3a7bb2962a53800d449fe75b93735b8b037b42988118bb9dce6352325
MD5 05c93cab974a443b91a8f8c64a23f902
BLAKE2b-256 bc3fd6f8b436f9535a3836c315ff3ed444d6e93c215acd22d0a2e4bffd340471

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