Selection guide

Pi Web Search: Keyless, API & Self-Hosted Options

Compare Pi web search and fetching: Exa MCP, explicit DuckDuckGo, Brave, Tavily, Exa APIs, SearXNG and Ollama endpoints.

Overview

Searching discovers URLs; fetching reads a URL you already know. A keyless HTTP fetch is useful for public documentation, but does not replace a search engine or a browser for JavaScript-heavy pages.

Start with pi-web-access for keyless Exa MCP search and multi-format extraction. Use rpiv-web-tools for explicit backend selection, or @ollama/pi-web-search when its fixed local endpoint matches your existing Ollama setup.

Compare by use case

Scroll the table horizontally; configuration and sources follow below.

Resource & purposeMechanismDependencies & keysData sentFailure behaviorEvidence
pi-web-access

Search, page extraction, PDF reading and video analysis through one extension.

Registers native Pi tools. Search routes to provider APIs or Exa MCP; ordinary URLs start with direct HTTP and local HTML extraction, with configured extraction fallbacks. GitHub repository URLs have a local clone path.Pi and outbound network access. Exa MCP needs no API key; keyed providers need their own credentials. GitHub cloning needs Git. PDF text extraction uses bundled unpdf/pdf.js; ffmpeg and yt-dlp are optional for video frames.Queries go to the chosen search service. Hosted extraction receives URLs; configured Datalab/Gemini PDF processing receives PDF bytes. Local video analysis may upload video to Gemini. Browser-cookie access is opt-in.Automatic search tries eligible fallbacks; a named provider is strict. Exhausted routes return diagnostics. Remote hosted HTTP extraction is disabled unless fetchRouting.allowRemoteHostedProviders is enabled.
Search routing source ↗
@juicesharp/rpiv-web-tools

Choose a single search backend, including commercial APIs and self-hosted endpoints.

Registers web_search and web_fetch. A per-call provider overrides the environment, then config, then the Brave default. Fetching uses provider extraction where available, otherwise direct HTTP-to-text.Node.js ≥ 22 and Pi. Brave, Tavily and Exa require keys. SearXNG requires a reachable instance with JSON output enabled. Ollama requires working web-search endpoints; local and cloud endpoint paths differ.The chosen service receives search queries and provider-extracted URLs. Direct HTTP fetch contacts the target site. SearXNG may forward queries to its configured engines.Missing commercial credentials throw an actionable error instead of selecting another service. SearXNG 403 can indicate disabled JSON output; connection errors expose an unavailable local Ollama service.
Provider selection and credentials ↗
@ollama/pi-web-search

A small adapter for an already running local Ollama web-search service.

The published 0.0.5 code registers web_search and web_fetch and posts to localhost:11434/api/experimental/web_search and /web_fetch. It does not load a local language model itself.Pi plus a running Ollama service exposing those experimental APIs. A 401 response asks the user to run ollama signin; the extension has no API-key configuration field.Search queries and fetch URLs go to the local Ollama daemon. The extension does not control the daemon’s upstream routing.API and connection errors are returned to Pi; there is no alternative provider fallback.
Published package and source archive ↗

Installation & operating boundaries

pi-web-access

Search, page extraction, PDF reading and video analysis through one extension.

pi install npm:pi-web-access
Mechanism
Registers native Pi tools. Search routes to provider APIs or Exa MCP; ordinary URLs start with direct HTTP and local HTML extraction, with configured extraction fallbacks. GitHub repository URLs have a local clone path.
Prerequisites
Pi and outbound network access. Exa MCP needs no API key; keyed providers need their own credentials. GitHub cloning needs Git. PDF text extraction uses bundled unpdf/pdf.js; ffmpeg and yt-dlp are optional for video frames.
Data scope
Queries go to the chosen search service. Hosted extraction receives URLs; configured Datalab/Gemini PDF processing receives PDF bytes. Local video analysis may upload video to Gemini. Browser-cookie access is opt-in.
Failure behavior
Automatic search tries eligible fallbacks; a named provider is strict. Exhausted routes return diagnostics. Remote hosted HTTP extraction is disabled unless fetchRouting.allowRemoteHostedProviders is enabled.
Known limitations
Keyless does not mean offline or unlimited. DuckDuckGo is explicit-only. The local PDF fallback has no OCR. Private or age-restricted YouTube videos can fail, and readable content behind a paywall is not guaranteed.

Source / documentation reviewed ·
v0.30.0 · 6c5afa1d0d43eef8552284ad73f4bd9f0612a378

@juicesharp/rpiv-web-tools

Choose a single search backend, including commercial APIs and self-hosted endpoints.

pi install npm:@juicesharp/rpiv-web-tools
Mechanism
Registers web_search and web_fetch. A per-call provider overrides the environment, then config, then the Brave default. Fetching uses provider extraction where available, otherwise direct HTTP-to-text.
Prerequisites
Node.js ≥ 22 and Pi. Brave, Tavily and Exa require keys. SearXNG requires a reachable instance with JSON output enabled. Ollama requires working web-search endpoints; local and cloud endpoint paths differ.
Data scope
The chosen service receives search queries and provider-extracted URLs. Direct HTTP fetch contacts the target site. SearXNG may forward queries to its configured engines.
Failure behavior
Missing commercial credentials throw an actionable error instead of selecting another service. SearXNG 403 can indicate disabled JSON output; connection errors expose an unavailable local Ollama service.
Known limitations
No cross-provider fallback. Plain HTTP fetch does not render arbitrary JavaScript. Self-hosted endpoints do not establish offline operation or prove that the upstream search service stays within your network.

Source / documentation reviewed ·
v2.10.1 · 0fdf4f813980d380e826b84d1280a4960e5d088e

Keyless routes and fallback boundaries

pi-web-access uses Exa MCP without an API key. A configured SearXNG endpoint precedes it; the active Codex model can prioritize authenticated OpenAI search. DuckDuckGo HTML search requires provider: "duckduckgo" and is excluded from automatic selection and provider: "all".

Direct URL extraction starts with local HTTP/HTML processing. Remote hosted page extractors require an explicit opt-in. Search fallback and page-extraction fallback are separate mechanisms; a blocked page is not solved merely by switching the search engine.

Brave, Tavily and Exa APIs

With rpiv-web-tools, Brave uses BRAVE_SEARCH_API_KEY and direct HTTP page fetching; Tavily uses TAVILY_API_KEY and its extraction service; Exa uses EXA_API_KEY and its own content extraction. These are credentialed API routes, unlike pi-web-access’s keyless Exa MCP route.

Run /web-tools to select a backend. Missing credentials are an error, not an automatic switch. For predictable provider selection, verify /web-tools --show before comparing results. Quotas and charges belong to each provider account.

What “local” actually means

rpiv-web-tools accepts SEARXNG_URL and OLLAMA_HOST. SearXNG needs JSON search enabled; it is a metasearch server that can still query public engines. Ollama local and cloud web-search endpoints have different paths, and a local daemon may still require sign-in or upstream access.

Neither package makes the public web available offline. The published @ollama/pi-web-search 0.0.5 source fixes the URL to localhost:11434 and registers web_search/web_fetch, despite different names and OLLAMA_HOST guidance in its README. Treat the published code as the compatibility boundary.

Check search and fetch separately

Install one web extension at a time because these packages can register overlapping tool names. In Pi, ask it to run the calls below, inspect the returned provider and source URLs, then fetch one result.

This checks routing and extraction independently. It does not prove search completeness or factual accuracy. The examples are usage recipes; this guide reviewed source and docs without making billed provider calls.

The calls below are specific to pi-web-access. rpiv and Ollama use their own web_search/web_fetch interfaces and do not accept this DuckDuckGo provider option.

web_search({ query: "Pi coding agent extension documentation", provider: "duckduckgo", numResults: 3 })
fetch_content({ url: "https://pi.dev/" })

Primary sources & verification scope

Source review and runtime testing are distinguished above. Features, performance and savings not marked “Tested” are not measurements by Pi Index.