Carved out from the google-mcp monorepo. MCP server exposing DuckDuckGo search over SearXNG, with the shared search library.
57 lines
1.4 KiB
YAML
57 lines
1.4 KiB
YAML
services:
|
|
searxng:
|
|
image: searxng/searxng:latest
|
|
container_name: searxng
|
|
expose:
|
|
- "8080"
|
|
volumes:
|
|
- ./searxng-settings.yml:/etc/searxng/settings.yml:ro
|
|
environment:
|
|
- SEARXNG_BASE_URL=http://localhost:8080/
|
|
- SEARXNG_SECRET=${SEARXNG_SECRET:-}
|
|
- UWSGI_WORKERS=4
|
|
- UWSGI_THREADS=4
|
|
restart: unless-stopped
|
|
stop_grace_period: 5s
|
|
networks:
|
|
- mcp-internal
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/healthz')"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 15s
|
|
|
|
duckduckgo-search:
|
|
build:
|
|
context: .
|
|
dockerfile: duckduckgo-mcp/Dockerfile
|
|
container_name: duckduckgo-mcp
|
|
ports:
|
|
- "3002:3002"
|
|
environment:
|
|
- RATE_LIMIT_SECONDS=3
|
|
- MCP_PORT=3002
|
|
- SEARXNG_URL=http://searxng:8080
|
|
- PYTHONUNBUFFERED=1
|
|
depends_on:
|
|
searxng:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
stop_grace_period: 5s
|
|
networks:
|
|
- mcp-internal
|
|
- mcp-external
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3002/health')"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
networks:
|
|
mcp-internal:
|
|
internal: true
|
|
mcp-external:
|
|
driver: bridge
|