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 🎉
See it in action
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:
searchSearch web results with a specific OpenSERP engine.
mega_searchSearch across multiple engines with balanced, any, or fast execution.
fast_searchReturn the first successful web result set, prioritizing healthy, low-latency engines.
any_searchStart engines in your order and return the first successful web result set. On Cloud, slow attempts can overlap.
image_searchSearch image results with a specific OpenSERP engine.
mega_imageSearch images across multiple engines.
get_usageReturn OpenSERP Cloud account and credit information.
list_enginesList OSS engines or Cloud capabilities and operational status.
extractExtract LLM-ready content from a URL.
batch_extractExtract 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
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):
| Type | Package | Source | Install |
|---|---|---|---|
| JavaScript / TypeScript SDK | @openserp/sdk | openserpapi/sdk-js | npm install @openserp/sdk |
| Python SDK | openserp | openserpapi/sdk-python | pip install openserp |
| MCP server (AI agents) | @openserp/mcp | openserpapi/mcp | npx @openserp/mcp |
| n8n community node | @openserp/n8n-nodes-openserp | openserpapi/n8n | Install via n8n community nodes |
See examples for smal
