Free to browse, every day. Go Pro for unlimited installs and Airsc MCP.

See Pro
MCP serverSafeBrowser automation & web dataSome setup Verified live

openserp

karust · karust/openserp

A self-hosted MCP server for web searching across Google, Bing, and more, providing clean Markdown results to your agent.

Self-hosted web search for AI agents and SEO. Google, Bing, Yandex, Baidu, DuckDuckGo & Ecosia, rendered in a real browser: ranked results and clean page Markdown. API, CLI, MCP 🎉

1.5k stars180License: MITUpdated today0 opens

See it in action

Command-line interface showing live search results

From the author's READMECommand-line interface showing live search results

From the author's README karust ·Source

What you can do with it

  • Give your AI agent real-time web search capabilities without paying for search APIs.
  • Extract clean Markdown content from search results for the agent to analyze.
  • Perform 'megasearch' across multiple engines simultaneously to find niche information.

Verified live · 10 tools

We started this MCP server in an isolated sandbox and it exposed these tools:

  • search

    Search web results with a specific OpenSERP engine.

  • mega_search

    Search across multiple engines with balanced, any, or fast execution.

  • fast_search

    Return the first successful web result set, prioritizing healthy, low-latency engines.

  • any_search

    Start engines in your order and return the first successful web result set. On Cloud, slow attempts can overlap.

  • image_search

    Search image results with a specific OpenSERP engine.

  • mega_image

    Search images across multiple engines.

  • get_usage

    Return OpenSERP Cloud account and credit information.

  • list_engines

    List OSS engines or Cloud capabilities and operational status.

  • extract

    Extract LLM-ready content from a URL.

  • batch_extract

    Extract LLM-ready content from up to 20 URLs in one request. Prefer this over repeated extract calls when grounding an answer in several pages: it is one round-trip, and a URL that fails returns an it

npx -y @openserp/mcp · 26/10/2026

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

OpenSERP

OpenSERP is a free, open-source SERP API and CLI for Google, Yandex, Baidu, Bing, DuckDuckGo, and Ecosia.

No API keys, no per-search billing: one command gives you live, structured search results on localhost - including engines the paid APIs don't cover. Use it as a search tool for LLMs and agents, or as a backend for SEO rank tracking. If you'd rather not run infrastructure, there is a hosted version with the same API.

Features

  • Dedicated endpoints for six engines, same JSON schema across all of them
  • Megasearch - one query across several engines at once, merged and deduped
  • URL extraction - search results plus clean markdown of the target pages in one call
  • SERP features: AI summaries, answer boxes, people-also-ask, related searches
  • Image search, filters (language, date range, file type, site), JSON/Markdown/Text/NdJSON output
  • Proxies, cache, resilient mode, prebuilt Docker images

Quick Start

Docker

Prebuilt images are published to docker hub: karust/openserp.

# Run the API server via prebuilt image
docker run --rm -p 127.0.0.1:7000:7000 karust/openserp:latest serve -a 0.0.0.0 -p 7000

# Or
docker compose up

Go install

go install github.com/karust/openserp@latest
openserp search duckduckgo "open source serp api" --format markdown

From Source

git clone https://github.com/karust/openserp.git
cd openserp
go build -o openserp .
./openserp serve

First request

# mode=any returns the first engine that responds
curl "http://127.0.0.1:7000/mega/search?engines=bing,google&text=golang+vs+rust&extract=1&mode=any"

Example JSON response

{
  "query": {
    "text": "golang vs rust",
    "engines_requested": ["bing", "google"]
  },
  "meta": {
    "request_id": "019ecdc0-a66d-79a4-9d2b-9e9b480d495e",
    "requested_at": "2026-06-16T00:06:55Z",
    "took_ms": 720,
    "engines_responded": ["bing"],
    "engines_failed": [],
    "version": "2.1"
  },
  "results": [
    {
      "id": "s_5a8273f16b19ab64",
      "rank": 1,
      "type": "organic",
      "title": "The Go Programming Language",
      "url": "https://go.dev/",
      "display_url": "go.dev",
      "snippet": "Get Started Playground Tour Stack Overflow Help Packages Standard Library …",
      "domain": "go.dev",
      "favicon": "https://go.dev/favicon.ico",
      "position": {
        "absolute": 1
      },
      "engine": "bing",
      "domain_info": {
        "tld": "dev",
        "sld": "go",
        "category": ""
      },
      "extracted": {
        "title": "Build simple, secure, scalable systems with Go",
        "format": "markdown",
        "content": "## Build simple, secure, scalable systems with Go\n\n\n\n- “At the time, no single team member knew Go, but **within a month, everyone was writing in Go** and we were building out the endpoints. ........",
        "mode_used": "fast",
        "fetched_at": "2026-06-16T00:06:56Z"
      }
    },
    {
      "id": "s_1a364ebcb3035539",
      "rank": 2,
      "type": "organic",
      "title": "Go (programming language) - Wikipedia",
      "url": "https://en.wikipedia.org/wiki/Go_(programming_language)",
      "display_url": "en.wikipedia.org › wiki › Go_(programming_language)",
      "snippet": "In Go's package system, each package has a path (e.g., \"compress/bzip2\" or \"golang.org/x/net/html\") and a name (e.g., bzip2 or html). …",
      "domain": "en.wikipedia.org",
      "favicon": "https://en.wikipedia.org/favicon.ico",
      "position": {
        "absolute": 2
      },
      "engine": "bing",
      "domain_info": {
        "tld": "org",
        "sld": "wikipedia",
        "category": ""
      },
      "classification": {
        "content_type": "article",
        "source_hint": "encyclopedia"
      }
    },
    ...
  ],
  "serp_features": [],
  "pagination": {
    "page": 1,
    "has_more": false,
    "next_start": 10
  },
  "clusters": [
    {
      "id": "c_f20b23a020101dce",
      "canonical_url": "https://go.dev/",
      "domain": "go.dev",
      "title": "The Go Programming Language",
      "occurrences": [
        {
          "engine": "bing",
          "rank": 1,
          "result_id": "s_5a8273f16b19ab64"
        }
      ],
      "engines_count": 1,
      "best_rank": 1,
      "score": 0.5
    },
    ...
  ]
}

SDKs & Examples

Official client packages. Each works against your self-hosted server (set baseUrl) or the hosted API (set apiKey):

TypePackageSourceInstall
JavaScript / TypeScript SDK@openserp/sdkopenserpapi/sdk-jsnpm install @openserp/sdk
Python SDKopenserpopenserpapi/sdk-pythonpip install openserp
MCP server (AI agents)@openserp/mcpopenserpapi/mcpnpx @openserp/mcp
n8n community node@openserp/n8n-nodes-openserpopenserpapi/n8nInstall via n8n community nodes

See examples for smal

View source on GitHub