Providers & Search

Web Search

Quick answer
Prism ships a managed local SearXNG instance that gives agents web search with no API key, no rate limits and no Cloudflare blocks, and it can also route search through Exa, Tavily, Brave, Serper or a user-defined REST provider. Prism intercepts the agent's web search tool calls and answers them locally, streaming the results back as ordinary tool output.

Last updated Reviewed against Prism v0.3.26

Which search providers does Prism support?

ProviderAPI keyNotes
SearXNG (managed)Not neededBundled local metasearch instance. Free, unlimited, no sign-up.
ExaEXA_API_KEYNeural and keyword search tuned for AI agents.
TavilyTAVILY_API_KEYSearch API built for LLM use cases.
BraveBRAVE_SEARCH_API_KEYIndependent web index.
SerperSERPER_API_KEYGoogle-compatible search results.
Custom RESTYour ownAny HTTP endpoint described declaratively in config, no code required.

Whichever you choose, Prism applies the same limits and supports a fallback chain, so a provider that fails or returns nothing is skipped automatically.

How search interception works

You do not have to change your agent. When an agent calls a web search tool, Prism recognises it, runs the search itself through the active provider, and streams the result back inline as a server tool use plus a search result block.

Client tool callWhat Prism does
Anthropic web_searchRewritten into a local search and returned as a search result block.
Anthropic web_fetchFetched locally and returned as tool output.
OpenAI Responses web_searchServed locally instead of upstream.
OpenAI Responses x_searchServed locally instead of upstream.
Two routes where interception is skipped
Prism does not intercept search on Codex OAuth accounts or on any model with api: "responses". Those tool calls pass through to the upstream untouched.

Start the managed SearXNG instance

1

Open the SearXNG tab

In the Admin UI, select SearXNG. You can also use the tray menu's Start SearXNG item.
2

Click Start

Prism boots the managed process and it begins listening on 127.0.0.1:8888.
3

Wait for the first-run bootstrap

The first start prepares an isolated runtime. Later starts are immediate.
4

Toggle auto-start

Turn on auto-start so SearXNG comes up with Prism instead of being started by hand.
First-run bootstrap
On first start Prism creates an isolated Python virtual environment and installs the SearXNG requirements into it — roughly an 80 MB download. It needs Python 3.11 or newer; if none is on the machine, Prism downloads a pinned python-build-standalone interpreter so search works without a system Python at all.

The SearXNG endpoint

http://127.0.0.1:8888/search?q=<query>&format=json
# Example: query SearXNG directly
curl "http://127.0.0.1:8888/search?q=glm+5.1+release+notes&format=json"

# Returns JSON with a results array:
# { "results": [ { "url": "...", "title": "...", "content": "..." } ] }

Any agent or script that can issue an HTTP GET can use this endpoint. There are no headers and no authentication, because it only listens on loopback.

Configure a search provider

In the Admin UI's Search tab, choose the active provider, add its API key, order the fallback chain, and test a query without leaving the page. Everything it edits lives under the search key in config.json.

{
  "search": {
    "active": "searxng",
    "fallback": ["exa", "tavily"],
    "max_per_turn": 5,
    "timeout_ms": 8000,
    "default_num_results": 5,
    "providers": {
      "searxng": { "enabled": true, "base_url": "http://127.0.0.1:8888" },
      "exa":     { "enabled": true, "api_key": "your-exa-key" }
    }
  }
}
KeyDefaultMeaning
activesearxngThe provider used first for every intercepted search.
fallback[]Ordered provider ids to try when the active one fails or returns nothing.
max_per_turn5Maximum searches served within one agent turn.
timeout_ms8000Per-request timeout.
default_num_results5Results per query, capped at 10.
providers{}Per-provider enabled flag, API key and base URL.
Keys can come from the environment
If a provider has no key in config, Prism falls back to EXA_API_KEY, TAVILY_API_KEY, BRAVE_SEARCH_API_KEY or SERPER_API_KEY.

Add a custom REST search provider

Any search API can be described declaratively, with no code. Prism substitutes template placeholders into the URL, parameters and body, then reads results out of the response using a JSON path and a field map.

{
  "search": {
    "custom_providers": [
      {
        "id": "linkup",
        "name": "Linkup",
        "endpoint": "https://api.linkup.so/v1/search",
        "method": "POST",
        "authHeader": "Authorization",
        "apiKey": "Bearer your-key",
        "resultsJSONPath": "results",
        "fieldMap": {
          "title": "name",
          "url": "url",
          "content": "content"
        },
        "enabled": true
      }
    ]
  }
}
FieldPurpose
endpointThe HTTP URL to call.
methodGET or POST. Defaults to POST.
authHeader / apiKey / keyEnvHeader name and value for authentication, or the environment variable holding the key.
queryParam / params / bodyWhere the query and options go. Supports the {{query}}, {{numResults}}, {{allowedDomains}} and {{blockedDomains}} placeholders.
resultsJSONPathDotted path to the array of results in the response.
fieldMapMaps Prism's title, url and content fields onto your API's field names.

File locations

PlatformSearXNG data
Windows%APPDATA%\prism\searxng\
macOS~/Library/Application Support/prism/searxng/
Linux$XDG_CONFIG_HOME/prism/searxng/ (default ~/.config/prism/searxng/)
Resetting search
Deleting the searxng folder resets the metasearch engine to a clean state. Prism re-bootstraps it on the next start.