MCP server.

Web search and page fetch as two tools for any agent that speaks MCP, on your metasearch.sh key and balance.

The server lives at https://metasearch.sh/mcp. It speaks streamable HTTP, stateless, on protocol 2026-07-28 and the 2025 revisions before it, and every request carries your API key as a bearer token. Tool calls go through the same validation, rate limits and ledger as POST /api/v1/search, so a search costs the same here as anywhere else.

Get a key

Sign in, then create a key in the dashboard. New accounts start with $1.00 of credit. Put the key in your shell profile so every client below can read it:

$ export METASEARCH_API_KEY=ms_live_…

Claude Code

$ claude mcp add --transport http metasearch https://metasearch.sh/mcp \
  --header "Authorization: Bearer $METASEARCH_API_KEY"

Add --scope user to use it in every project, or --scope project to share it through .mcp.json. Check it with claude mcp list.

Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in a project)
{
  "mcpServers": {
    "metasearch": {
      "url": "https://metasearch.sh/mcp",
      "headers": { "Authorization": "Bearer ${env:METASEARCH_API_KEY}" }
    }
  }
}

VS Code

Install in VS Code and paste your key when asked, or add it to the workspace by hand:

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "metasearch-api-key",
      "description": "metasearch.sh API key",
      "password": true
    }
  ],
  "servers": {
    "metasearch": {
      "type": "http",
      "url": "https://metasearch.sh/mcp",
      "headers": {
        "Authorization": "Bearer ${input:metasearch-api-key}"
      }
    }
  }
}

Codex

$ codex mcp add metasearch --url https://metasearch.sh/mcp --bearer-token-env-var METASEARCH_API_KEY
or ~/.codex/config.toml
[mcp_servers.metasearch]
url = "https://metasearch.sh/mcp"
bearer_token_env_var = "METASEARCH_API_KEY"

Other clients

Any client that supports remote MCP servers over HTTP works: give it the URL https://metasearch.sh/mcp and the header Authorization: Bearer ms_live_…. A request with a missing, unknown or revoked key gets HTTP 401, so the client can ask for a new key. If the key cannot be checked during an outage, the answer is HTTP 503 with a Retry-After header.

Tools

ToolArgumentsReturns
searchquery; optional mode, providers, count (1-20), freshness, include_domains, exclude_domains, country, languageRanked results: title, URL and snippet, plus any provider answers
fetchurlThe page as markdown, up to 40,000 characters

Leave mode out and the server picks one from the query, then says which and why in routing.auto; see Routing. It never picks deep, and picks social only when the query names X or Twitter, because those cost several times more: ask for them by name. One entry in providers pins that provider; several are queried together and their results merged.

Each tool returns a short text list for the model and the full API response as structured content. The text ends with one line of billing:

search result text
Mode news (auto, jev): Asked about recent events (p 0.97); used news with freshness week.
1. Solid-state batteries clear a manufacturing hurdle
   https://…
   Toyota and Idemitsu say their sulfide electrolyte line…
2. …
Charged $0.0015 · balance $0.9985 · served by serper

Pages from fetch start with a line marking them as untrusted web content. Treat that text as data: a page can contain instructions aimed at your agent.

What it costs

Tools are priced exactly like the API: the provider's price for the call times 1.5, taken from your prepaid balance. A search starts at $0.00075 and a page fetch at $0.000375; empty and failed attempts cost nothing. Every provider and mode is on the pricing page.

When a call fails, the tool result is an error whose text starts with the API error code, such as insufficient_credits (with a top-up link) or rate_limited. When the API would send Retry-After, the text ends with how many seconds to wait, and the structured content carries the same number as retry_after_s. The codes are listed under Errors.