Parallel Search: LLM-Optimized Web Search Providers for AI Agents

This page covers the two Parallel search providers for LLM-optimized web excerpts. Developers integrating AI agents need to know how to configure these providers for efficient web search.

Read this when

  • You want web search without an API key
  • You want Parallel's paid Search API
  • You want dense excerpts ranked for LLM context efficiency

The Parallel plugin supplies two web_search providers, both of which are detailed under Parallel. Each one delivers ranked, LLM-optimized excerpts drawn from a web index designed for AI agents:

ProvideridAuth
Parallel Search (Free)parallel-freeNone -- Parallel's free Search MCP
Parallel SearchparallelPARALLEL_API_KEY -- paid Search API, higher rate limits and objective tuning

To choose one explicitly, set tools.web.search.provider to either parallel-free or parallel; neither is detected automatically.

Note

Direct OpenAI Responses models (api: "openai-responses", provider openai, official API base URL) automatically use OpenAI's hosted native web search when tools.web.search.provider is not set, is empty, is "auto", or is "openai". This means they bypass Parallel by default. To route these models through Parallel instead, assign tools.web.search.provider to parallel-free or parallel. Refer to the Web Search overview for more.

Install plugin

openclaw plugins install @openclaw/parallel-plugin
openclaw gateway restart

API key (paid provider)

No key is required for parallel-free, but it still must be explicitly chosen. The paid parallel provider, on the other hand, requires an API key:

Create an account

Visit platform.parallel.ai to sign up, then generate an API key from your dashboard.

Store the key

Configure PARALLEL_API_KEY in the Gateway environment, or use the following setup:

openclaw configure --section web

Config

{
  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: {
        // "parallel-free" for the free Search MCP, or "parallel" for the
        // paid API-backed provider shown here.
        provider: "parallel",
      },
    },
  },
}

Environment alternative: define PARALLEL_API_KEY within the Gateway environment. For a gateway installation, place it inside ~/.openclaw/.env.

Base URL override

This setting applies only to the paid parallel provider; parallel-free always uses https://search.parallel.ai/mcp and disregards this value.

To route paid requests through a compatible proxy or alternative endpoint (such as the Cloudflare AI Gateway), set plugins.entries.parallel.config.webSearch.baseUrl. OpenClaw normalizes bare hosts by adding https:// at the beginning and appending /v1/search unless the path already ends there. The resolved endpoint becomes part of the search cache key, so results from different endpoints are never shared.

Tool parameters

Both providers expose Parallel's native search shape, which prompts the model to supply a natural-language goal along with a few short keyword queries. This pairing is what Parallel recommends for optimal results.

  • objective (string, required), A natural-language description of the underlying question or objective, up to 5000 characters. Must be self-contained.

  • search_queries (string[], required), Short keyword search queries, each 3-6 words long. Provide 1-5 entries, each capped at 200 characters. For best outcomes, supply 2-3 diverse queries.

  • count (number), The number of results to retrieve, from 1 to 40.

  • session_id (string), An optional Parallel session id taken from a previous result's sessionId. Use it on follow-up searches within the same task so Parallel groups related calls and improves later results. Maximum 1000 characters on parallel; the free parallel-free Search MCP limits it to 100. An id exceeding the limit is discarded (paid) or a new one is generated (free).

  • client_model (string), An optional identifier for the model making the call (e.g., claude-opus-4-7, gpt-5.6-sol), up to 100 characters. This allows Parallel to adjust default settings for your model's capabilities. Pass the exact active model slug; do not shorten it to a family alias.

Notes

  • Results are condensed and compressed for LLM reasoning, not for human browsing. Expect short excerpts per result rather than full page content.

  • Result excerpts are returned as the excerpts array and also concatenated into description for compatibility with the standard web_search contract.

  • Both providers return a session_id; OpenClaw exposes it as sessionId in the tool payload so callers can group follow-up searches. A session id generated by Parallel (one the caller did not provide) is omitted from the cache entry, since unrelated tasks with identical queries should not inherit it.

  • searchId, warnings, and usage from Parallel are forwarded when available.

  • OpenClaw always sends a resolved result count to Parallel as advanced_settings.max_results (parallel) or applies count on the client side after Parallel's fixed-size response (parallel-free). The caller's count argument takes precedence, then tools.web.search.maxResults, otherwise OpenClaw's generic web_search default of 5 is used. Parallel's own API defaults to 10.

  • Results are cached for 15 minutes by default (cacheTtlMinutes).

  • parallel-free creates a fresh session_id per call through its MCP handshake when the caller does not provide one; parallel leaves it unset in that scenario.