Skip to main content
Glama

serpent

MCP / AI 에이전트 워크플로우를 위해 구축된 오픈 소스 메타 검색 백엔드입니다.

여러 검색 엔진의 결과를 통합하고, 통일된 스키마를 반환하며, 표준 HTTP API와 LLM 에이전트가 직접 호출할 수 있는 MCP 서버를 모두 제공합니다.


이 프로젝트의 존재 이유

대부분의 검색 애그리게이터는 사람이 읽을 수 있는 출력(HTML 페이지, 결과 카드, 페이지네이션 UI)을 위해 설계되었습니다. LLM 에이전트가 웹을 검색해야 할 때는 구조화된 JSON, 안정적인 필드 이름, 동시 다중 소스 결과, 예측 가능한 오류 처리와 같은 다른 것이 필요합니다.

serpent는 이러한 사용 사례를 위해 설계되었습니다. SearXNG의 복제본이 아닙니다.

포지셔닝

  • 에이전트 친화적인 메타 검색 백엔드

  • LLM 워크플로우를 위한 MCP 우선 검색 게이트웨이

  • AI 파이프라인을 위해 설계된 구조화된 검색 API


지원하는 제공자

Google

Google은 직접 스크래핑하지 않습니다. 그 이유는 실용적입니다. Google의 봇 방지 조치로 인해 자체 호스팅 스크래핑은 취약합니다. 지속적으로 진화하는 Google의 탐지 기술에 대응하여 안정적인 스크래퍼를 유지하는 것은 끊임없는 고장과 높은 유지 관리 오버헤드를 의미합니다. 프로덕션 사용 사례에서는 타사 제공자가 더 안정적이고 비용 효율적입니다.

현재 지원되는 Google 제공자:

제공자

환경 변수

참고

serpbase.dev

SERPBASE_API_KEY

사용량 기반 과금; 일반적으로 소량 사용 시 더 저렴

serper.dev

SERPER_API_KEY

2,500회 무료 쿼리 후 사용량 기반 과금

둘 다 저비용 옵션입니다. 캐주얼하거나 소량 사용 시에는 serpbase.dev가 쿼리당 더 저렴한 경향이 있습니다. 둘 다 작동하며, 선호하는 것을 구성하거나 둘 다 구성하여 대체용으로 사용할 수 있습니다.

웹 검색

제공자

이름

방식

인증

DuckDuckGo

duckduckgo

HTML 스크래핑 (lite 엔드포인트)

아니오

Bing

bing

HTML 스크래핑

아니오

Yahoo

yahoo

HTML 스크래핑

아니오

Brave

brave

공식 검색 API

선택 사항 (무료 티어: 월 2000회)

Ecosia

ecosia

HTML 스크래핑

아니오

Mojeek

mojeek

HTML 스크래핑

아니오

Startpage

startpage

HTML 스크래핑 (최선 노력)

아니오

Qwant

qwant

내부 JSON API (최선 노력)

아니오

Yandex

yandex

HTML 스크래핑 (최선 노력)

아니오

Baidu

baidu

HTML 스크래핑 (최선 노력)

아니오

**최선 노력(best-effort)**으로 표시된 제공자는 문서화되지 않은 엔드포인트나 강력한 봇 방지 조치가 적용된 스크래핑 대상을 사용합니다. 예고 없이 작동이 중단될 수 있습니다.

지식 / 참조

제공자

이름

방식

인증

Wikipedia

wikipedia

MediaWiki Action API

아니오

Wikidata

wikidata

Wikidata API (엔티티 검색)

아니오

Internet Archive

internet_archive

고급 검색 API

아니오

개발자

제공자

이름

방식

인증

GitHub

github

GitHub REST API

아니오 (토큰 사용 시 제한 상향)

Stack Overflow

stackoverflow

Stack Exchange API

아니오 (키 사용 시 제한 상향)

Hacker News

hackernews

Algolia HN API

아니오

Reddit

reddit

공개 JSON API

아니오

npm

npm

npm 레지스트리 API

아니오

PyPI

pypi

HTML 스크래핑

아니오

crates.io

crates

crates.io REST API

아니오

학술

제공자

이름

방식

인증

arXiv

arxiv

Atom API

아니오

PubMed

pubmed

NCBI E-utilities

아니오 (키 사용 시 제한 상향)

Semantic Scholar

semanticscholar

Graph API

아니오 (키 사용 시 제한 상향)

CrossRef

crossref

REST API (1억 4500만 개 이상의 DOI)

아니오


설치

# 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]"

구성

.env.example.env로 복사하고 키를 입력하세요:

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

실행

HTTP API 서버

python -m serpent.main
# or
serpent

서버는 http://localhost:8000에서 시작됩니다. 대화형 문서는 /docs에서 확인할 수 있습니다.

MCP 서버

python -m serpent.mcp_server
# or
serpent-mcp

MCP 서버는 stdio를 통해 통신합니다. MCP 호환 클라이언트(Claude Desktop, cline, continue.dev 등)와 함께 사용하세요.

Docker

이미지 빌드:

docker build -t serpent .

HTTP API 실행:

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

또는 Docker Compose 사용:

docker compose up --build

컨테이너는 http://localhost:8000에서 HTTP API를 시작합니다.


HTTP API

POST /search

활성화된 모든 제공자에 걸쳐 검색을 통합합니다.

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

명시적 제공자 및 매개변수 사용:

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"}
  }'

응답:

{
  "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 사용법

MCP 클라이언트가 serpent-mcp(또는 python -m serpent.mcp_server)를 실행하도록 구성하세요.

Claude Desktop 구성 예시 (~/.claude/claude_desktop_config.json):

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

사용 가능한 MCP 도구

search_web

활성화된 모든 제공자에 대한 일반 웹 검색.

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

search_google

구성된 타사 제공자를 통한 Google 검색.

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

search_academic

arXiv 및 Wikipedia 검색.

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

search_github

GitHub 저장소 검색.

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

compare_engines

여러 제공자에 걸쳐 동일한 쿼리를 실행하고 엔진별로 그룹화된 결과를 반환합니다.

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

결과 스키마 참조

모든 결과 객체는 다음 필드를 가집니다:

필드

타입

설명

title

string

결과 제목

url

string

결과 URL

snippet

string

텍스트 발췌 / 설명

source

string

도메인 이름

rank

int

최종 병합된 목록에서의 1부터 시작하는 위치

provider

string

이 결과를 반환한 제공자

published_date

string

null

ISO 날짜 (YYYY-MM-DD), 가능한 경우

extra

object

제공자별 데이터 (예: GitHub 별점, arXiv 저자)


개발

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

# Run tests
pytest

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

로드맵

  • [ ] 반복 쿼리를 위한 캐싱 계층 (인메모리 / Redis)

  • [ ] 제공자 간 관련성 재순위 지정

  • [ ] 추가 제공자: Bing (공식 API), Kagi, Tavily

  • [ ] 백오프를 포함한 제공자별 속도 제한

  • [ ] 긴 통합 작업을 위한 스트리밍 응답 (SSE)

  • [ ] Docker 이미지 및 Compose 설정

  • [ ] 제공자 상태 모니터링 엔드포인트

  • [ ] 결과 점수 매기기 및 신뢰도 신호


라이선스

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