docs/tools/parallel-search.md
OpenClaw bundles two Parallel web_search providers:
parallel-free) -- Parallel's free
Search MCP. Requires no
account or API key. OpenClaw selects it automatically when no other web search
provider is configured, so web_search works without setup.parallel) -- Parallel's paid Search API. Requires a
PARALLEL_API_KEY and offers higher rate limits and objective tuning.Both return ranked, LLM-optimized excerpts from a web index built for AI agents.
Set tools.web.search.provider to parallel-free or parallel to choose one
explicitly.
parallel-free requires no setup. The paid parallel provider needs an API
key:
```bash
openclaw configure --section web
```
{
plugins: {
entries: {
parallel: {
config: {
webSearch: {
apiKey: "par-...", // optional if PARALLEL_API_KEY is set
baseUrl: "https://api.parallel.ai", // optional; OpenClaw appends /v1/search
},
},
},
},
},
tools: {
web: {
search: {
provider: "parallel",
},
},
},
}
Environment alternative: set PARALLEL_API_KEY in the Gateway environment.
For a gateway install, put it in ~/.openclaw/.env.
The base URL override applies to the paid parallel provider only. The free
parallel-free provider always uses https://search.parallel.ai/mcp.
Set plugins.entries.parallel.config.webSearch.baseUrl when Parallel requests
should go through a compatible proxy or alternate Parallel endpoint (for
example, the Cloudflare AI Gateway). OpenClaw normalizes bare hosts by
prepending https:// and appends /v1/search unless the path already ends
there. The resolved endpoint is included in the search cache key, so results
from different Parallel endpoints are not shared.
OpenClaw exposes Parallel's native search shape so the model can fill in both the natural-language goal and a few short keyword queries — the pairing Parallel recommends for best results.
<ParamField path="objective" type="string" required> Natural-language description of the underlying question or goal (max 5000 chars). Should be self-contained. </ParamField> <ParamField path="search_queries" type="string[]" required> Concise keyword search queries, 3-6 words each (1-5 entries, max 200 chars each). Provide 2-3 diverse queries for best results. </ParamField> <ParamField path="count" type="number"> Results to return (1-40). </ParamField> <ParamField path="session_id" type="string"> Optional Parallel session id (max 1000 chars on `parallel`; the free `parallel-free` Search MCP caps it at 100). Pass the `sessionId` from a previous Parallel result on follow-up searches that are part of the same task so Parallel can group related calls and improve subsequent results. An id past the limit is dropped and a fresh one is generated. </ParamField> <ParamField path="client_model" type="string"> Optional identifier of the model making the call (e.g. `claude-opus-4-7`, `gpt-5.5`). Lets Parallel tailor default settings for your model's capabilities. Pass the exact active model slug; do not shorten to a family alias. </ParamField>excerpts array and are also joined into
the description field for compatibility with the generic web_search
contractsession_id on every response; OpenClaw surfaces it as
sessionId in the tool payload so callers can group follow-up searchessearchId, warnings, and usage from Parallel are passed through when
presentadvanced_settings.max_results. The caller's count arg wins, then the
top-level tools.web.search.maxResults setting, otherwise OpenClaw's
generic web_search default (5). This keeps result volume consistent
when switching between providers; Parallel on its own defaults to 10cacheTtlMinutes)parallel-free provider accepts the same parameters. It applies
count client-side and generates a session_id per call when one is not
supplied.