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 & purpose | Mechanism | Dependencies & keys | Data sent | Failure behavior | Evidence |
|---|---|---|---|---|---|
| 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
@ollama/pi-web-search
A small adapter for an already running local Ollama web-search service.
pi install npm:@ollama/pi-web-search- Mechanism
- 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.
- Prerequisites
- 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.
- Data scope
- Search queries and fetch URLs go to the local Ollama daemon. The extension does not control the daemon’s upstream routing.
- Failure behavior
- API and connection errors are returned to Pi; there is no alternative provider fallback.
- Known limitations
- The npm source hardcodes localhost:11434 despite README advice about OLLAMA_HOST, and actual tool names differ from the README. Endpoint compatibility depends on Ollama. A local endpoint is not a guarantee of offline or local-only search.
Source / documentation reviewed · npm 0.0.5 · shasum c36fd7dabda15c15e01566f4c4b3dbdf5ef34af4
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.