About OpenSERP
@openserp/mcp is an MCP server for AI agents that need web and image search or page content extraction. It searches six engines while retaining each result’s engine and rank, and can run against a self-hosted OpenSERP server or OpenSERP Cloud.
Key features
- 01Search across six engines
- 02Preserve source engine and rank
- 03Search images on one or more engines
- 04Extract pages as Markdown
- 05Batch extraction for up to 20 URLs
- 06Check Cloud usage and credits
Use cases
- 01Compare results from multiple engines
- 02Search images from an engine
- 03Read several source pages for an answer
- 04Check Cloud credit balance
MCP support
Exposes search, image-search, extraction, engine-status, and usage tools to MCP clients. It can use a self-hosted OpenSERP server or OpenSERP Cloud.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @openserp/mcpOPENSERP_API_KEYSecretOpenSERP Cloud API key. Leave unset to use a self-hosted OpenSERP server (http://localhost:7000 by default).OPENSERP_BASE_URLOpenSERP API base URL, for a self-hosted server on another host or port.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
10Saved tool list · updated today
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | No | Published-date range YYYYMMDD..YYYYMMDD. Cloud web search supports Google and Ecosia; unsupported filters return 400 without charge. |
| file | string | No | File extension filter, such as PDF. |
| lang | string | No | Language code, such as EN or de. |
| site | string | No | Domain filter, such as example.com. |
| text | string | No | Search query text. At least one of text, site, or file should be provided. |
| limit | integer | No | Maximum result count, 1-100. Keep 10 when paging with start. |
| start | integer | No | Result offset. On Cloud, Google/Bing/Yandex use multiples of 10, Baidu supports early pages, Ecosia any offset, DuckDuckGo none. Balanced mega requires 0; unsupported offsets return 400. |
| engine | enum | Yes | Engine to query: google, bing, yandex, baidu, duckduckgo (or duck), ecosia.google | bing | yandex | baidu | duck | duckduckgo | ecosia |
| filter | boolean | No | Let the engine collapse near-duplicate results (default true, mostly affects Google). |
| format | enum | No | json (default) for structured results; markdown, text or ndjson for compact plain text.json | markdown | text | ndjson |
| region | string | No | Market or location hint, such as US, DE, en-GB, Berlin, or a Yandex lr id. |
| extract | any | No | Enrich the top web results with cleaned page content. Boolean or integer depth: false/0 off, true/1 top result, N top N (1-5). |
| features | boolean | No | Add serp_features (AI summary, answer box, People Also Ask, related searches) when the engine shows them. |
| minRunes | integer | No | Minimum text length (in runes) before auto mode escalates to a browser render. 0 uses the built-in floor. |
| extractMode | enum | No | auto (default): fast HTTP fetch, browser render if the page comes back empty. fast: HTTP only. rendered: always a browser, for JavaScript-heavy pages.auto | fast | rendered |
Details
From the project README@openserp/mcp
Live search on six engines (Google, Bing, Yandex, Baidu, DuckDuckGo, Ecosia), image search and single/batch page extraction for AI agents. Results keep the source engine and rank. Runs against a self-hosted OpenSERP server or OpenSERP Cloud.
When OPENSERP_API_KEY is not set, the server uses OSS mode at http://localhost:7000 and writes:
[openserp-mcp] No OPENSERP_API_KEY set - using OSS mode at http://localhost:7000.
[openserp-mcp] Get an API key: https://openserp.org/dashboard/keys
[openserp-mcp] Docs: https://openserp.org/docs | Issues: https://github.com/openserpapi/mcp/issues
Set OPENSERP_API_KEY to use OpenSERP Cloud. API keys are available at https://openserp.org/dashboard/keys. Set OPENSERP_BASE_URL to target another compatible OpenSERP API base URL.
Install
npm install -g @openserp/mcp
You can also run it without installing:
npx -y @openserp/mcp --stdio
Tools
| Tool | Use it when |
|---|---|
search | The engine matters (Yandex for Russian, Baidu for Chinese), or you page with start |
any_search | You want a preferred engine with fallbacks, in your order |
fast_search | Any engine will do; picks the healthiest, fastest one |
mega_search | You compare engines or want wider coverage; results keep engine and rank |
image_search | Images from one engine |
mega_image | Images merged from several engines |
extract | Reading one page as Markdown |
batch_extract | Reading several pages (up to 20) in one call; a failed URL doesn't fail the batch |
list_engines | Searches keep failing and you need a healthy engine |
get_usage | Checking the Cloud credit balance or what the last call cost |
extract and batch_extract cut long pages to fit an agent's context: 20,000 characters per page, or 40,000 shared across a batch (at least 2,000 per URL). Cut content ends with a [truncated: ...] line and is flagged (truncated / metadata.truncated). Pass maxChars to read more.
Quick Examples
Ask your MCP client to:
- Search Google for current docs and return the top 5 URLs.
- Compare Google and Bing results for an SEO keyword.
- Extract clean Markdown from a URL before passing it to an LLM.
- Ground an answer in several sources at once with
batch_extract- up to 20 URLs in one round-trip, where a dead link returns an error item instead of failing the batch. - Read a geo-fenced page as a local visitor by passing
region: "DE". - Check remaining Cloud credits with
get_usage.
Cloud search parameters
Cloud requests use Authorization: Bearer with OPENSERP_API_KEY. For paging, use start and keep limit: 10; pass the previous response's pagination.next_start while has_more is true. Google, Bing, and Yandex take multiples of 10; Baidu supports early pages, Ecosia any offset, and DuckDuckGo only the first page. mega_search with mode: "balanced" rejects start > 0; use search, any_search, or fast_search for later pages.
Cloud web search supports date: "20250101..20251231" on Google and Ecosia. Unsupported offsets or date filters return 400 invalid_request without charge; adjust the request before retrying.
list_engines returns Cloud capabilities plus operational status. Omit engines to use defaults. Any starts engines in your order, overlapping slow attempts; Fast prioritizes recent health and latency. Read meta.engine_used for the winner; engines_tried and engines_skipped may be absent.
Tool errors include the public HTTP status, error code, request ID, and retry delay when present. Honor retry_after for 429 and 503; 503 engine_unavailable carries a 60-second delay. The server does not retry automatically.
Claude Desktop
Local OSS mode:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"]
}
}
}
Cloud mode:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"],
"env": {
"OPENSERP_API_KEY": "osk_live_..."
}
}
}
}
Cursor
For stdio use, add an MCP server entry:
{
"mcpServers": {
"openserp": {
"command": "npx",
"args": ["-y", "@openserp/mcp"],
"env": {
"OPENSERP_API_KEY": "osk_live_..."
}
}
}
}
For remote-style HTTP use, run:
npx -y @openserp/mcp --http --host 127.0.0.1 --port 3333
Then point a streamable HTTP MCP client to:
http://127.0.0.1:3333/mcp
Clients that still use the older SSE transport can connect to:
http://127.0.0.1:3333/sse
Environment
OPENSERP_API_KEY: Cloud API key from https://openserp.org/dashboard/keys.OPENSERP_BASE_URL: API base URL override.OPENSERP_BACKEND: Optional backend hint,ossorcloud.OPENSERP_TIMEOUT_MS: SDK request timeout in milliseconds.HOST: HTTP host, default127.0.0.1.PORT: HTTP port, default3333.
Resources
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.