Skip to main content
Glama

serpent

Ein Open-Source-Metasuch-Backend, das für MCP- / KI-Agenten-Workflows entwickelt wurde.

Es aggregiert Ergebnisse von mehreren Suchmaschinen, gibt ein einheitliches Schema zurück und stellt sowohl eine Standard-HTTP-API als auch einen MCP-Server bereit, den LLM-Agenten direkt aufrufen können.


Warum existiert dies?

Die meisten Suchaggregatoren sind für menschenlesbare Ausgaben konzipiert: HTML-Seiten, Ergebniskarten, Paginierungs-UIs. Wenn ein LLM-Agent das Web durchsuchen muss, benötigt er etwas anderes: strukturiertes JSON, stabile Feldnamen, gleichzeitige Ergebnisse aus mehreren Quellen und eine vorhersehbare Fehlerbehandlung.

serpent ist für diesen Anwendungsfall konzipiert. Es ist kein SearXNG-Klon.

Positionierung

  • Agentenfreundliches Metasuch-Backend

  • MCP-First-Such-Gateway für LLM-Workflows

  • Strukturierte Such-API für KI-Pipelines


Unterstützte Anbieter

Google

Google wird nicht direkt gescrapt. Der Grund ist praktisch: Googles Anti-Bot-Maßnahmen machen selbst gehostetes Scraping anfällig. Die Aufrechterhaltung eines zuverlässigen Scrapers gegen Googles sich ständig weiterentwickelnde Erkennung bedeutet ständige Ausfälle und einen hohen Wartungsaufwand. Für Produktionsanwendungsfälle sind Drittanbieter zuverlässiger und kostengünstiger.

Derzeit unterstützte Google-Anbieter:

Anbieter

Umgebungsvariable

Hinweise

serpbase.dev

SERPBASE_API_KEY

Pay-per-Use; generell günstiger bei geringem Volumen

serper.dev

SERPER_API_KEY

2.500 kostenlose Abfragen, danach Pay-per-Use

Beide sind kostengünstige Optionen. Für gelegentliche oder geringe Nutzung ist serpbase.dev pro Abfrage tendenziell günstiger. Beide funktionieren; konfigurieren Sie, was Sie bevorzugen, oder beide als Fallback.

Websuche

Anbieter

Name

Methode

Authentifizierung

DuckDuckGo

duckduckgo

HTML-Scraping (Lite-Endpunkt)

Nein

Bing

bing

HTML-Scraping

Nein

Yahoo

yahoo

HTML-Scraping

Nein

Brave

brave

Offizielle Such-API

Optional (kostenlose Stufe: 2000/Monat)

Ecosia

ecosia

HTML-Scraping

Nein

Mojeek

mojeek

HTML-Scraping

Nein

Startpage

startpage

HTML-Scraping (Best-Effort)

Nein

Qwant

qwant

Interne JSON-API (Best-Effort)

Nein

Yandex

yandex

HTML-Scraping (Best-Effort)

Nein

Baidu

baidu

HTML-Scraping (Best-Effort)

Nein

Anbieter, die als Best-Effort gekennzeichnet sind, verwenden undokumentierte Endpunkte oder Scraping-Ziele mit starken Anti-Bot-Maßnahmen. Sie können ohne Vorwarnung aufhören zu funktionieren.

Wissen / Referenz

Anbieter

Name

Methode

Authentifizierung

Wikipedia

wikipedia

MediaWiki Action API

Nein

Wikidata

wikidata

Wikidata API (Entitätssuche)

Nein

Internet Archive

internet_archive

Advanced Search API

Nein

Entwickler

Anbieter

Name

Methode

Authentifizierung

GitHub

github

GitHub REST API

Nein (Token erhöht Ratenlimit)

Stack Overflow

stackoverflow

Stack Exchange API

Nein (Schlüssel erhöht Limit)

Hacker News

hackernews

Algolia HN API

Nein

Reddit

reddit

Öffentliche JSON-API

Nein

npm

npm

npm Registry API

Nein

PyPI

pypi

HTML-Scraping

Nein

crates.io

crates

crates.io REST API

Nein

Akademisch

Anbieter

Name

Methode

Authentifizierung

arXiv

arxiv

Atom API

Nein

PubMed

pubmed

NCBI E-utilities

Nein (Schlüssel erhöht Ratenlimit)

Semantic Scholar

semanticscholar

Graph API

Nein (Schlüssel erhöht Ratenlimit)

CrossRef

crossref

REST API (145M+ DOIs)

Nein


Installation

# Clone the repository
git clone https://github.com/your-org/serpent
cd serpent

# Install with pip (editable)
pip install -e ".[dev]"

# Or with uv
uv pip install -e ".[dev]"

Konfiguration

Kopieren Sie .env.example nach .env und tragen Sie Ihre Schlüssel ein:

cp .env.example .env
# Required for Google search (at least one)
SERPBASE_API_KEY=your_key_here
SERPER_API_KEY=your_key_here

# Optional — omit to use unauthenticated/public access
BRAVE_API_KEY=            # free tier: 2000 req/month
GITHUB_TOKEN=             # raises rate limit from 60 to 5000 req/hour
STACKEXCHANGE_API_KEY=    # raises limit from 300 to 10,000 req/day
NCBI_API_KEY=             # PubMed; raises from 3 to 10 req/sec
SEMANTIC_SCHOLAR_API_KEY= # raises from 1 to 10 req/sec

# Server
HOST=0.0.0.0
PORT=8000

# Restrict which providers are active (comma-separated, empty = all available)
ENABLED_PROVIDERS=
ALLOW_UNSTABLE_PROVIDERS=false

# Timeouts in seconds
DEFAULT_TIMEOUT=10
AGGREGATOR_TIMEOUT=15
MAX_RESULTS_PER_PROVIDER=10

Ausführung

HTTP-API-Server

python -m serpent.main
# or
serpent

Der Server startet unter http://localhost:8000. Interaktive Dokumentation unter /docs.

MCP-Server

python -m serpent.mcp_server
# or
serpent-mcp

Der MCP-Server kommuniziert über stdio. Verwenden Sie ihn mit jedem MCP-kompatiblen Client (Claude Desktop, cline, continue.dev, etc.).

Docker

Bauen Sie das Image:

docker build -t serpent .

Führen Sie die HTTP-API aus:

docker run --rm -p 8000:8000 --env-file .env serpent

Oder mit Docker Compose:

docker compose up --build

Der Container startet die HTTP-API unter http://localhost:8000.


HTTP-API

POST /search

Aggregiert die Suche über alle aktivierten Anbieter.

curl -X POST http://localhost:8000/search \
  -H "Content-Type: application/json" \
  -d '{"query": "rust async runtime"}'

Mit expliziten Anbietern und Parametern:

curl -X POST http://localhost:8000/search \
  -H "Content-Type: application/json" \
  -d '{
    "query": "rust async runtime",
    "providers": ["duckduckgo", "wikipedia"],
    "params": {"num_results": 5, "language": "en"}
  }'

Antwort:

{
  "engine": "serpent",
  "query": "rust async runtime",
  "results": [
    {
      "title": "Tokio - An asynchronous Rust runtime",
      "url": "https://tokio.rs",
      "snippet": "Tokio is an event-driven, non-blocking I/O platform...",
      "source": "tokio.rs",
      "rank": 1,
      "provider": "duckduckgo",
      "published_date": null,
      "extra": {}
    }
  ],
  "related_searches": ["tokio vs async-std", "rust futures"],
  "suggestions": [],
  "answer_box": null,
  "timing_ms": 843.2,
  "providers": [
    {"name": "duckduckgo", "success": true, "result_count": 10, "latency_ms": 840.1, "error": null},
    {"name": "wikipedia", "success": true, "result_count": 3, "latency_ms": 320.5, "error": null}
  ],
  "errors": []
}

POST /search/google

curl -X POST http://localhost:8000/search/google \
  -H "Content-Type: application/json" \
  -d '{"query": "site:github.com rust tokio"}'

GET /health

curl http://localhost:8000/health
# {"status": "ok"}

GET /providers

curl http://localhost:8000/providers
{
  "available": [
    {"name": "google_serpbase", "tags": ["google", "web"]},
    {"name": "duckduckgo", "tags": ["web", "privacy"]},
    {"name": "wikipedia", "tags": ["web", "academic", "knowledge"]},
    {"name": "github", "tags": ["code", "web"]},
    {"name": "arxiv", "tags": ["academic", "web"]}
  ],
  "count": 5
}

MCP-Nutzung

Konfigurieren Sie Ihren MCP-Client so, dass er serpent-mcp (oder python -m serpent.mcp_server) ausführt.

Beispiel für die Claude Desktop-Konfiguration (~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "serpent": {
      "command": "serpent-mcp",
      "env": {
        "SERPBASE_API_KEY": "your_key",
        "SERPER_API_KEY": "your_key"
      }
    }
  }
}

Verfügbare MCP-Tools

search_web

Allgemeine Websuche über alle aktivierten Anbieter.

{
  "query": "fastapi vs flask performance 2024",
  "num_results": 10
}

search_google

Google-Suche über einen konfigurierten Drittanbieter.

{
  "query": "site:docs.python.org asyncio",
  "provider": "google_serpbase"
}

search_academic

Suche in arXiv und Wikipedia.

{
  "query": "transformer architecture attention mechanism",
  "num_results": 8
}

search_github

Suche in GitHub-Repositories.

{
  "query": "python mcp server implementation",
  "num_results": 5
}

compare_engines

Führen Sie dieselbe Abfrage über mehrere Anbieter aus und geben Sie die nach Engine gruppierten Ergebnisse zurück.

{
  "query": "vector database comparison",
  "providers": ["duckduckgo", "brave"],
  "num_results": 5
}

Referenz des Ergebnisschemas

Jedes Ergebnisobjekt hat diese Felder:

Feld

Typ

Beschreibung

title

string

Ergebnistitel

url

string

Ergebnis-URL

snippet

string

Textauszug / Beschreibung

source

string

Domainname

rank

int

1-basierte Position in der endgültigen zusammengeführten Liste

provider

string

Anbieter, der dieses Ergebnis zurückgegeben hat

published_date

string

null

ISO-Datum (JJJJ-MM-TT), falls verfügbar

extra

object

Anbieterspezifische Daten (z. B. GitHub-Sterne, arXiv-Autoren)


Entwicklung

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with auto-reload
uvicorn serpent.main:app --reload

Roadmap

  • [ ] Caching-Schicht (In-Memory / Redis) für wiederholte Abfragen

  • [ ] Relevanz-Neubewertung über Anbieter hinweg

  • [ ] Weitere Anbieter: Bing (offizielle API), Kagi, Tavily

  • [ ] Ratenbegrenzung pro Anbieter mit Backoff

  • [ ] Streaming-Antworten (SSE) für lange Aggregationen

  • [ ] Docker-Image und Compose-Setup

  • [ ] Endpunkt zur Überwachung des Anbieterstatus

  • [ ] Ergebnis-Scoring und Konfidenzsignale


Lizenz

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/reurinkkeano/serpent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server