Best MCP Servers for Grok Build in 2026
Firecrawl, Bright Data, Zyte, and Crawlora as MCP servers for Grok Build: grok mcp add syntax, how its tool search ranks them, and what we measured.
Grok Build is SpaceXAI's terminal coding agent. It runs interactively, headless with grok -p, or inside editors over the Agent Client Protocol, and its docs live at docs.x.ai/build. Firecrawl published a Grok plugin roundup on June 24, 2026, and Bright Data published a Grok Build guide on July 20, 2026, so the vendors have been here for months. We have not seen anyone publish what happens when a web-data server with thousands of tools meets Grok's tool search, so we measured it.
Where we could not test something, we say so. We did not run Bright Data or Zyte in Grok, and we ran Firecrawl's keyless endpoint twice with mixed results (see below).
Grok Build's MCP config
Grok keeps MCP servers in ~/.grok/config.toml (user scope) or ./.grok/config.toml (project scope, written by --scope project), under [mcp_servers.<name>]. A project server with the same name as a user one replaces it entirely.
- Stdio:
command,args,env, plusstartup_timeout_sec(default 30) andtool_timeout_sec. - Remote HTTP:
urland aheaderstable.${VAR}is expanded inurl,command,args,envandheaders, so secrets can stay in the environment. Servers that need OAuth open a browser flow on first use. - Other sources: Grok also loads
~/.claude.json,.cursor/mcp.jsonand a project.mcp.json, merged belowconfig.toml.[compat.claude] mcps = falseturns the Claude one off.
You rarely edit the file by hand. grok mcp add writes it, grok mcp list shows what is configured, grok mcp doctor [name] checks connectivity, grok inspect shows every server Grok discovered and where it came from, and /mcps in the TUI toggles servers.
# Remote server, key from an environment variable (single quotes: see the gotchas)
grok mcp add --transport http crawlora-web https://mcp.crawlora.net/mcp/family/web \
--header 'Authorization: Bearer ${CRAWLORA_API_KEY}'
# Local stdio server: everything after -- is the server command
grok mcp add brightdata -e API_TOKEN=... -e PRO_MODE=true -- npx -y @brightdata/mcp
The part that changes the comparison: Grok searches tools
Most clients list every tool a server offers. Grok does not. We pointed a custom model at a local mock server and logged what Grok sent it: 24 built-in tools (file, shell, grep and so on) and two meta-tools that front every MCP server.
search_tooltakes keywords, matches them against server names, tool names and descriptions, and returns the best matches with their input schemas (default limit 5).use_toolcalls one of them by its qualified name, such ascrawlora_web__web_search. It only works for tools a search has already returned.
So the question for any MCP server in Grok is not "how many tools" but "does a plain-language search find the right one". For a server with a handful of tools that is easy. For Crawlora's default endpoint, which lists 3,663 tools across 469 platform groups, it is not.
We ran search_tool on October 19, 2026, with Grok Build 0.2.111 and a scripted mock model, against the default endpoint before and after we reworded web_search's description, and against a one-platform endpoint:
Query given to search_tool | Default endpoint /mcp, original wording | Default endpoint /mcp, reworded web_search | One-platform endpoint /mcp/family/web |
|---|---|---|---|
search the web (limit 10) | web_search not in the 10 results; baidu_search, chromewebstore_search, yandex_search, yahoo_search_news, similarweb_search and foxnews_search came first | web_search ranked 6th, behind baidu_search, chromewebstore_search, yandex_search, yahoo_search_news and similarweb_search | web_search ranked first |
web search brave (limit 5) | brave_search, brave_news, brave_images, brave_videos, brave_suggest; no web_search | the same five brave_* tools; still no web_search | web_search ranked first |
web_search (the exact tool name, limit 5) | 1 result, the right tool | 1 result, the right tool | 1 result, the right tool |
The default endpoint is not broken: Grok indexed every tool on it, and the exact name works. Plain-language queries lose to the many tools with "search" in their name. We changed that one description, to open with general web-search wording, and deployed it later the same day. It helped: web_search went from outside the top 10 to 6th for search the web and for crawlora web search. It is still behind five other *_search tools and outside Grok's default of five results, and the web search brave query still misses it. A model that knows the name can use it. A model working from the task description still cannot count on it.
Crawlora's /mcp/agent endpoint takes the opposite approach: three tools (search_tools, get_tool, call_tool) with a search that ranks by task. Called directly, search_tools returned web_search first for both search the web and crawlora web search. Through Grok it worked end to end: Grok's search found the three tools, use_tool ran search_tools, then call_tool ran web_search and returned live Brave results (the top hit for "grok build mcp servers" was xAI's own MCP docs page). That is three tool calls (a search, then two use_tool calls) against two for a family endpoint, so we would pick the family endpoint when the agent needs one platform.
What to evaluate, in Grok Build specifically
- Searchability. Grok finds tools by keyword over names and descriptions. A server with a few tools, or one scoped to a platform, is found reliably; a catalog with thousands is found by exact name. Prefer endpoints that expose only what the agent needs.
- Auth in non-interactive sessions. A remote server with no Authorization header triggers an OAuth discovery step. In headless runs it has 5 seconds; if that times out, Grok drops the server for the session with 'Auth required (non-interactive session)'. Give remote servers an explicit header where you can.
- Where secrets end up. grok mcp add -e API_TOKEN=... writes the token into config.toml in plain text. Use ${VAR} references in the file (Grok expands them) and single quotes on the command line so your shell does not expand them first.
- Scope and trust. Project-scope servers do not start in a folder Grok has not trusted; grok mcp doctor says so. User scope avoids that.
- Transport. Grok supports stdio, streamable HTTP and SSE. Prefer the vendor's streamable HTTP URL where one exists.
- Cost model. Pay-on-success APIs, free tiers and Pro modes bill differently, and an agent that calls search tools repeatedly can multiply it. Check what each call costs before leaving an agent unattended.
The contenders
| Tool | Format | Grok Build route | Auth | Best for |
|---|---|---|---|---|
| Firecrawl | Official Grok plugin; hosted MCP https://mcp.firecrawl.dev/v2/mcp | /plugin, search "firecrawl" (per Firecrawl); or grok mcp add --transport http | Keyless on eligible networks; sign-in or key for more | Reading arbitrary pages with the least setup |
| Bright Data | Local stdio, npx -y @brightdata/mcp | grok mcp add brightdata -e API_TOKEN=... -- npx -y @brightdata/mcp (per Bright Data's guide) | API_TOKEN env var | Anti-bot-hardened extraction from named sites |
| Zyte | Hosted MCP https://mcp.zyte.com/v1/mcp | Not in Zyte's documented clients; generic remote entry | OAuth sign-in | Zyte API and Scrapy Cloud users |
| Crawlora | Hosted MCP: /mcp/family/<family>, /mcp/agent, or the full /mcp | grok mcp add --transport http with a Bearer header (tested) | API key as Bearer header | Structured JSON from named platforms |
Firecrawl: the plugin route, and a keyless endpoint that was flaky for us
Firecrawl's own roundup (June 24, 2026) lists it as an official plugin in xAI's marketplace: run /plugin in Grok Build, search "firecrawl" and install. It says the bundled MCP server is keyless on eligible networks with 1,000 free credits a month, and that signing in with a browser is optional for higher limits.
We also added the hosted endpoint directly, with no header, to a headless session. In one run it connected and Grok indexed three tools (firecrawl_scrape, firecrawl_search, firecrawl_parse). In the next run the OAuth discovery step timed out after 5 seconds and Grok dropped the server. Two runs is a small sample, and an interactive TUI session can finish the sign-in, but if you script Grok, the plugin or an explicit credential is the safer path. Choose it for reading arbitrary pages and docs into context with almost no setup.
Bright Data: a local process, two very different tool counts
Bright Data's guide (July 20, 2026) installs the @brightdata/mcp package and registers it with grok mcp add. Its default Rapid mode exposes five tools (search_engine, search_engine_batch, scrape_as_markdown, scrape_batch, discover) under a free monthly allowance (its guide says 5K requests a month); turning on PRO_MODE=true gives you the larger set, which its guide puts at "70+" tools and which we counted as 74 in a Pi test on October 5, including named-platform extractors and browser automation. The guide also copies its Agent Skills into ~/.grok/skills.
Two cautions from the guide itself. The printed command has a stray comma after PRO_MODE=true, so drop it. And the config it shows stores the API token in plain text; keep it as a ${VAR} reference instead. Grok itself still needs an xAI sign-in or key (Bright Data's guide mentions a SuperGrok or X Premium+ subscription, or an API key). We did not run Bright Data in Grok. Choose it for a stubborn, anti-bot-protected target where reliability matters more than a process-free setup.
Zyte: a hosted server, but Grok is not on its list
Zyte launched a hosted MCP server on September 30, 2026 at https://mcp.zyte.com/v1/mcp. Its docs give setup commands for Claude Code, Codex CLI, GitHub Copilot CLI, VS Code, claude.ai and a generic JSON entry, and do not mention Grok Build. Grok documents automatic OAuth for remote servers, so the generic form should work:
grok mcp add --transport http zyte https://mcp.zyte.com/v1/mcp
That is untested. We did not create a Zyte account, so we cannot say whether Zyte's sign-in completes through Grok's flow. Zyte's docs list Zyte API tools (fetch_http, fetch_page, extract_from_http, extract_from_browser, search) plus Scrapy Cloud management tools. Choose it if you already run Zyte API or Scrapy Cloud and want both reachable from the agent.
Crawlora: use a family endpoint, not the full catalog
Crawlora's MCP server is hosted streamable HTTP with three views of the same tools. In Grok, the one that fits most jobs is a family endpoint: https://mcp.crawlora.net/mcp/family/<family>, which exposes only one platform's tools. The family name is the first path segment of the REST route, so /api/v1/youtube/search belongs to youtube; web covers web search, scrape, crawl and map. On October 19, web served 9 tools and youtube 14. GET https://mcp.crawlora.net/mcp/family/ lists every valid family with its tool count (474 that day), and an unknown name answers 404 with the same list.
export CRAWLORA_API_KEY=... # free key from crawlora.net
# Web search, scrape, crawl and map
grok mcp add --transport http crawlora-web https://mcp.crawlora.net/mcp/family/web \
--header 'Authorization: Bearer ${CRAWLORA_API_KEY}'
# One connection that can reach every platform (3 tools, more hops)
grok mcp add --transport http crawlora https://mcp.crawlora.net/mcp/agent \
--header 'Authorization: Bearer ${CRAWLORA_API_KEY}'
Add one entry per platform you need. web_search bills 3 credits per result page read, and Crawlora is billed only on success, with 2,000 free credits a month and no card. Because Grok reads ~/.claude.json, a Crawlora entry you already added for Claude Code is also visible to Grok, but it points at the default endpoint, so re-add it with a family URL. Choose it when you want one specific record or figure from a named platform (a price, a ranking, a listing, a filing) and not a page to read.
Gotchas we hit
- Single-quote the header.
--header "Authorization: Bearer ${KEY}"lets your shell expand the key, and grok writes the real value intoconfig.toml. With single quotes the file keeps${CRAWLORA_API_KEY}and Grok expands it at load time. grok mcp doctorreports 1000 tools for the full Crawlora endpoint. That is the first page of the list; the endpoint pages its tool list in chunks of 1000 and Grok does follow the rest (its search reported the full count).- A healthy
doctordoes not prove your key works. On Crawlora's serverinitializeandtools/listneed no key; only a tool call checks it. Test with a real call. - Project-scope servers need a trusted folder.
doctorsuggests a--trustflag, butgrok mcp doctoritself rejects it. Use user scope. - Headless runs drop slow servers. Grok waits a bounded 15 seconds for MCP handshakes before the first turn, and our runs lost a different server each time: once Firecrawl on the OAuth timeout above, once a Crawlora family server that was missing from the search index for a reason we did not pin down. In scripts, check
grok inspector retry rather than assuming every server is present.
How to choose, by job
- Want a page or a docs site in context, no account, no key? Firecrawl's plugin.
- Hitting a genuinely hard, named site at volume? Bright Data in
PRO_MODE, with a local process and Pro-mode billing. - Already paying for Zyte API or Scrapy Cloud? Zyte's hosted server, signing in through the generic remote entry, then confirm it connects.
- Need structured records from named platforms without writing parsers? Crawlora MCP, through a family endpoint such as
/mcp/family/webor/mcp/family/youtube. - Need one connection for everything and can accept extra hops? Crawlora's
/mcp/agent. - Mixing several? Keep each server small and distinctly named: Grok's search ranks by server and tool names, so
crawlora-webandfirecrawlstay easy to tell apart.
Add structured web data to Grok Build
One API key, billed only on success. 2,000 free credits a month, no card.
Sources
Related reading
- Best MCP Servers for Pi in 2026 · Best MCP Servers for OpenCode in 2026 — more terminal-first agents, same vendors.
- Best MCP Servers for OpenAI Codex in 2026 · Best Web Search MCP Servers in 2026 — the same comparison for Codex, and a head-to-head of search servers.
- 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 Grok Build support MCP servers?
Yes. Grok Build reads MCP servers from ~/.grok/config.toml under [mcp_servers.<name>], from a project .grok/config.toml, and from ~/.claude.json, .cursor/mcp.json and a project .mcp.json. grok mcp add registers stdio, streamable HTTP or SSE servers, and grok mcp doctor checks them.
How do I add an MCP server to Grok Build?
Run grok mcp add --transport http <name> <url> --header 'Authorization: Bearer ${API_KEY}' for a remote server, or grok mcp add <name> -e KEY=value -- <command> <args> for a local one. Use single quotes around the header so your shell does not expand the key into config.toml, then run grok mcp doctor <name>.
Why can't Grok Build find my MCP server's tool?
Grok does not declare MCP tools to the model. It gives the model search_tool, which ranks tools by keyword over server and tool names and descriptions, and use_tool, which calls a tool a search has already returned. On a server with thousands of tools, plain-language queries can lose to tools with similar names; use a smaller, scoped endpoint or search by the exact tool name.
Which web-data MCP servers work with Grok Build?
Firecrawl ships an official Grok plugin and a hosted MCP endpoint, Bright Data has a July 2026 guide using its npx server, and Crawlora works as a hosted remote server with a Bearer header. Zyte has a hosted MCP server but its docs do not list Grok Build as a supported client; the generic remote entry should work but we did not test it.
How do I connect Crawlora to Grok Build?
Create a free API key at crawlora.net (2,000 credits a month, no card), export it as CRAWLORA_API_KEY, then run grok mcp add --transport http crawlora-web https://mcp.crawlora.net/mcp/family/web --header 'Authorization: Bearer ${CRAWLORA_API_KEY}'. Use /mcp/family/<family> for one platform (GET /mcp/family/ lists the valid names) or /mcp/agent for a three-tool search_tools, get_tool, call_tool endpoint over everything.
