Best MCP Servers for Pi in 2026
Firecrawl, Bright Data, Zyte, and Crawlora as MCP servers for Pi 1.0 — native mcp.json syntax, codemode exposure, and the pi mcp list output we got.
Pi is a minimal, open-source terminal coding agent from Earendil — created by Mario Zechner and Armin Ronacher, MIT-licensed, 112.6K GitHub stars as of October 5, 2026. Its 1.0 release on October 1 hit the top of Hacker News (1,683 points as of October 5) and made MCP a headline feature in a project that had left it out on purpose. Earendil's own explanation is that MCP has changed, that composition was the real objection, and that embracing a standard is the better way to influence it.
A naming note: this is Pi from pi.dev and the earendil-works GitHub organization, not Inflection AI's consumer chatbot of the same name.
This post is built from Pi's own documentation and from running the client. Where we could not test something — a model-driven session, Zyte's sign-in — we say so.
Pi's native MCP config
Pi reads MCP servers from ~/.pi/agent/mcp.json (user-level) and .pi/mcp.json (project-level, read only after you grant project trust; a project entry replaces a same-named user entry). The shape matches other MCP clients — a top-level mcpServers object:
- Stdio:
command,args,env,cwd.commandis one executable, not a shell string. - Streamable HTTP:
url,headers, and an optionaloauthblock. The legacy SSE transport is rejected; Pi's docs note that servers advertising an SSE endpoint often also serve streamable HTTP at/mcp. - Both:
timeout(seconds, default 60),enabled,exposure,toolExposure, anddescription.envandheadersvalues can reference environment variables as${NAME}.
You rarely need to hand-edit it. pi mcp add writes the file, pi mcp list connects to every enabled server and prints state, tools, and errors (exiting 1 if any fail), and pi mcp login <server> runs OAuth. Inside a session, /mcp inspects connections and changes exposure, and /reload picks up edits made outside it.
# Remote server, key from an environment variable
pi mcp add crawlora --url https://mcp.crawlora.net/mcp --bearer-token-env-var CRAWLORA_API_KEY
# Local stdio server
pi mcp add brightdata --env API_TOKEN='${BRIGHT_DATA_API_TOKEN}' -- npx -y @brightdata/mcp
Two details we hit while testing. An unset ${VAR} fails only that server, with a clear message (Failed to resolve MCP server "crawlora" header "Authorization" from environment variable: CRAWLORA_API_KEY) — the other servers still connect. And the pi-mcp-adapter extension that older guides use takes over completely when installed: Pi then stops reading mcp.json for the session and /mcp belongs to the extension.
What to evaluate, in Pi specifically
- Exposure fit. Each server has an exposure: codemode (default — tools are hidden from the model and reached through scripts), deferred (loaded on demand by a tool_search tool, then called directly), direct (declared like a built-in tool), or hidden. Pi's own guidance maps direct to small, frequently used tool sets and deferred to large servers. Neither the docs nor Earendil's announcement include token benchmarks, and we did not measure any.
- Transport. Pi only speaks stdio and streamable HTTP. An SSE-only endpoint, or an older vendor snippet pointing at /sse, will not connect — use the vendor's /mcp URL or its stdio package.
- Large results. Text results over 20 KB reach the model with the middle removed (the full text goes to a temp file). Codemode scripts receive the complete result and can reduce it first, which matters for full-page markdown from a scraper.
- Timeouts. The default per-request timeout is 60 seconds, reset by progress notifications. Long crawls or slow browser renders may need a larger timeout on that server.
- Permissions. MCP calls go through Pi's normal tool pipeline, so permission extensions apply, and Pi reports each server's readOnly / destructive hints to them. Codemode's QuickJS sandbox has no network or file access, but its tool calls are real and are not undone if a script fails midway.
- Auth. OAuth with Pi's built-in flow (pi mcp login) versus an API key in an environment variable. Remote servers that support OAuth need no credentials in mcp.json.
The contenders
| Tool | Format | What pi mcp list showed (Oct 5, 2026) | Auth | Best for |
|---|---|---|---|---|
| Firecrawl MCP | Hosted, streamable HTTP, https://mcp.firecrawl.dev/v2/mcp | Connected, 3 tools (firecrawl_scrape, firecrawl_search, firecrawl_parse) | Keyless to start; OAuth or API key for the broader tool set | Reading arbitrary pages with zero setup |
| Bright Data | Local stdio, npx -y @brightdata/mcp | 74 tools with PRO_MODE=true; 5 without (search_engine, scrape_as_markdown, search_engine_batch, scrape_batch, discover) | API_TOKEN env var | Anti-bot-hardened extraction from named sites |
| Zyte | Hosted, streamable HTTP, https://mcp.zyte.com/v1/mcp | Needs sign-in (OAuth) — tools not listed until you log in | OAuth via pi mcp login zyte | Zyte API and Scrapy Cloud users who want both in the agent |
| Crawlora | Hosted, streamable HTTP, https://mcp.crawlora.net/mcp | Connected, 3,467 tools | API key as Bearer header | Structured JSON records from named platforms |
Firecrawl MCP: three tools, no setup
Firecrawl doesn't publish a Pi-specific guide, but its hosted endpoint works as-is. One command, no key:
pi mcp add firecrawl --url https://mcp.firecrawl.dev/v2/mcp
pi mcp list reported firecrawl: connected, 3 tools (codemode, global). Firecrawl documents the keyless tier as search, scrape, and parse, shared and rate-limited by IP, with the broader tool surface behind an API key or OAuth sign-in; we tested only the keyless tier. With three tools, --exposure direct is the natural fit per Pi's own guidance, so the model sees them without a search step. Choose it for reading a spec or doc page into context with no account.
Bright Data: a local process, two very different tool counts
Bright Data publishes @brightdata/mcp on npm, and it launched cleanly under Pi's stdio transport. PRO_MODE changes what you get: with it, our run registered 74 tools — web_data_* extractors for named platforms (Amazon, LinkedIn, Instagram, TikTok, Reddit, and more) plus a set of scraping_browser_* tools; without it, 5 tools for search and scraping.
export BRIGHT_DATA_API_TOKEN=... # your Bright Data API token
pi mcp add brightdata --env API_TOKEN='${BRIGHT_DATA_API_TOKEN}' --env PRO_MODE=true -- npx -y @brightdata/mcp
(We listed tools with a placeholder token, so we cannot speak to live extraction results, and Pro-mode tools bill at Bright Data's Pro-mode rates.) Bright Data's own Pi guide, last modified September 1, installs pi-mcp-adapter and uses the shared .mcp.json path; the command above is the native route. Its hosted endpoint at https://mcp.brightdata.com/mcp answered 401 without a token, which is expected, but we did not test it with one. At 74 tools, codemode (the default) or deferred keeps the declarations out of the prompt. Choose it when the target is a hard, named site and anti-bot reliability is the constraint.
Zyte: now an option, with a sign-in step
Zyte announced a hosted MCP server on September 30, 2026, five days before this post. It is a remote streamable-HTTP server with OAuth rather than a stored key:
pi mcp add zyte --url https://mcp.zyte.com/v1/mcp
pi mcp login zyte
Without signing in, pi mcp list reported zyte: needs sign-in, and a raw unauthenticated request returned 401 — consistent with Zyte's docs. We did not create a Zyte account, so we have not listed its tools in Pi. According to Zyte's documentation, the server exposes fetch_http and fetch_page for retrieval, extract_from_http and extract_from_browser for structured extraction, search, pricing and usage tools, and a group of Scrapy Cloud tools for running and monitoring spiders. Usage is metered at normal Zyte API rates with no separate MCP fee; Zyte lists a $5 trial credit for new users for one month, and access requires an organization with an active Zyte API or Scrapy Cloud plan. Zyte's setup docs list Claude Code, Codex CLI, GitHub Copilot CLI, and VS Code — not Pi — so the Pi line above is the generic remote-server path, confirmed only as far as the sign-in prompt. Choose it if you already run Zyte API or Scrapy Cloud and want spider management inside the agent.
Crawlora: a catalog built for codemode
Crawlora's MCP server is a hosted streamable-HTTP endpoint. In Pi:
export CRAWLORA_API_KEY=... # free key from crawlora.net
pi mcp add crawlora --url https://mcp.crawlora.net/mcp --bearer-token-env-var CRAWLORA_API_KEY \
--description "Structured JSON from named platforms: e-commerce, news, social, travel, finance, jobs"
pi mcp list reported crawlora: connected, 3467 tools (codemode, global). That count is the interesting part. In most clients, thousands of tool definitions would be a context problem; in Pi's default exposure none of them are declared, and the model finds the right one with searchTools(), which ranks by relevance (BM25, default limit 8) and also uses the server's description — so write a good one, as above. If you would rather have the model call a discovered tool directly instead of through a script, --exposure deferred loads matching tools on demand; we confirmed Pi accepts that setting and still connects all 3,467. Tools return normalized JSON, billed only on success, with 2,000 free credits a month and no card. Choose it when Pi needs a record from a named platform — a price, a ranking, a listing, a filing — rather than a page to read. We did not run a model-driven session, so we have no measurements of how well search-then-call performs on a given task.
How to choose, by job
- Want a spec page in context in under a minute, no account? Firecrawl's keyless endpoint, with
--exposure direct. - Hitting a genuinely hard, named site at volume? Bright Data in
PRO_MODE, with the local process and Pro-mode billing that implies. - Already paying for Zyte API or Scrapy Cloud? Zyte's hosted server, signing in with
pi mcp login. - Need structured records from many different named platforms without writing parsers? Crawlora MCP, leaning on codemode so the catalog size costs nothing up front.
- Mixing several? Pi connects every enabled server in the background; give each a one-line
descriptionsosearchTools()can route between them.
Add structured web data to Pi
Thousands of tools, one API key, billed only on success. 2,000 free credits a month, no card.
Sources
Related reading
- Best MCP Servers for OpenCode in 2026 · Best MCP Servers for OpenAI Codex in 2026 — the same comparison, two more terminal-first clients.
- Best MCP Servers for Meta Muse Code in 2026 · Best MCP Servers for Warp in 2026 — more terminal agents, same vendors.
- Crawlora vs Firecrawl · Crawlora vs Bright Data · Crawlora vs Zyte.
- Give your AI agent live web data with MCP — how MCP works and how to connect in three minutes.
Frequently asked questions
Does Pi support MCP servers?
Yes, since Pi 1.0 (October 1, 2026). Pi reads servers from ~/.pi/agent/mcp.json (global) or .pi/mcp.json (per project, trusted projects only) and supports stdio and streamable HTTP; the legacy SSE transport is rejected. Older articles saying Pi has no MCP support, or that it needs the pi-mcp-adapter extension, predate 1.0.
How do I add an MCP server to Pi?
Run pi mcp add <name> --url <endpoint> for a remote server, or pi mcp add <name> -- <command> <args> for a local stdio server, then pi mcp list to check the connection. Use pi mcp login <name> for servers that need OAuth, and /reload inside a session after editing mcp.json by hand.
What is codemode in Pi, and how does it change MCP tool counts?
By default Pi does not declare an MCP server's tools to the model. The model writes a short JavaScript script that finds tools with searchTools() and calls them, and only the script's output reaches its context. Servers can instead use deferred (tools loaded on demand), direct (declared like built-in tools), or hidden exposure. Earendil has published no token benchmarks, so treat the savings as a design property, not a measured number.
Does Zyte have an MCP server for Pi?
Zyte launched an official hosted MCP server on September 30, 2026 at https://mcp.zyte.com/v1/mcp, with OAuth sign-in. Zyte's docs list Claude Code, Codex CLI, GitHub Copilot CLI, and VS Code as supported clients; in Pi the generic remote-server command (pi mcp add zyte --url ... then pi mcp login zyte) reaches the sign-in prompt, but we did not complete sign-in or list its tools.
How do I install Crawlora's MCP server for Pi?
Run pi mcp add crawlora --url https://mcp.crawlora.net/mcp --bearer-token-env-var CRAWLORA_API_KEY, with a free API key from crawlora.net (2,000 credits/month, no card) exported as CRAWLORA_API_KEY. Pi 1.0.3 listed 3,467 tools; add a --description so Pi's tool search can rank them.
