
Grok Build
io.github.Nuruvala由 GitHub 帳號 Nuruvala 發布v0.2.5更新於 Oct 24, 2026
Run the Grok Build CLI as MCP tools: agent runs with live progress, code review, web research.
發布方自己的服務:Surface
概覽
一個本機 MCP 伺服器,封裝 Grok Build CLI,讓助理執行無頭 Grok 代理、審查 git 差異並進行網路研究。
- 可以做什麼
- 執行無頭 Grok 代理工作階段,可指定模型、推理強度、工作階段恢復/繼續/分叉以及工具允許或禁止,支援前景執行或帶即時進度的背景分離執行並可停止。審查 git 差異(工作區、相對某個 ref 的 merge-base 差異或單一提交),可選輸出結構化發現。在網路上研究問題,並回報實際使用了哪些搜尋和來源。列出、搜尋和查詢本機儲存的 Grok 工作階段,並輪詢或列出背景執行。檢查伺服器版本、解析到的執行檔、CLI 版本、驗證狀態和權限上限,並透傳 grok 說明。
- 適用情境
- 當你已在使用 Grok Build CLI,並希望把它的代理執行、程式碼審查和網路研究作為工具用於 Claude Code、Cursor、VS Code 或其他 MCP 用戶端時使用,包括需要在背景繼續的長時間工作。
- 執行需求
- 透過 npx 以 stdio 在本機執行,需要 Node.js 22 或更新版本。需安裝並驗證 Grok Build CLI 1.0.0 或更新版本(grok models 應能成功);若 grok 不在 PATH 中,需設定 GROK_BINARY。選用變數用於設定預設值:GROK_MCP_DEFAULT_MODEL、GROK_MCP_DEFAULT_EFFORT、GROK_MCP_DEFAULT_PERMISSION、GROK_MCP_PERMISSION_CEILING、GROK_MCP_TIMEOUT_MS、GROK_MCP_STATE_DIR、GROK_MCP_MAX_CONCURRENT_RUNS、STRUCTURED_CONTENT_ENABLED。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Grok Build,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
grok-build-mcp-server
[npm] [MCP Registry] [CI] [Node] [License]
[Install in VS Code] [Install in Cursor]
An MCP stdio server that exposes the Grok Build
CLI (grok) as tools you can call from Claude Code, Cursor, VS Code, or any other MCP client.
It is a thin process wrapper. It does not reimplement agent logic and does not talk to the xAI API
directly — all the intelligence stays in the grok CLI. What this server adds is faithful argument
construction, robust process supervision, and clean MCP-shaped output.
Status: 0.2.2. The tool surface is complete. The server runs real headless Grok agents in the foreground or detached in the background, streams progress while they run, stops a run on request, reviews git diffs, researches questions on the web, lists the sessions those runs created, and reports session, usage, and cost. See CHANGELOG.md for what shipped and ROADMAP.md for what was considered and rejected.
Progress
A long agent run is visible while it happens, rather than a silent wait ending in a wall of text.
When your client sends a progressToken, the server runs Grok with --output-format streaming-json
and forwards a notification per event:
Progress tracks what the agent is doing, not what phase it is in. Reasoning and response text are
coalesced so a token stream does not flood your client, while tool calls are reported as they
happen. Clients that support resetTimeoutOnProgress will not time out mid-run.
A client that sends no progressToken gets the cheaper non-streaming path and pays nothing for
this.
Requirements
- Grok Build CLI 1.0.0 or newer, authenticated (
grok modelsshould succeed) - Node.js 22 or newer
If grok is not on your PATH, set GROK_BINARY to its full path when you register the server.
Install
Claude Code
-s user registers the server for your whole account rather than for the directory you happen to be
in. Without it the scope is that one project, which is rarely what you want for a general coding
assistant, and the symptom is a server that is missing the next time you start Claude Code somewhere
else.
Then, in Claude Code:
check reports the resolved binary, the CLI version, whether you are authenticated, and the active
permission ceiling. If it is happy, the rest will work.
Any other MCP client
The server speaks MCP over stdio and takes no arguments of its own:
VS Code and Cursor accept the install badges at the top of this page, which carry exactly that configuration.
Clients that install from the MCP Registry know this
server as io.github.Nuruvala/grok-build-mcp-server. The registry entry is published from the same
tag as the npm release and points at the same package.
If npx cannot find the server
npx resolves a bare package name against the local project first. If your MCP client's working
directory is a checkout of this repository — or of anything else whose package.json is named
grok-build-mcp-server — npx -y grok-build-mcp-server runs the local entry point, does not find
one, and fails with command not found. Install it somewhere of its own and register that path:
Permissions
Grok runs launched through this server are read-only by default: --permission-mode plan with
--sandbox read-only. Nothing can modify your files until you say so.
Permission is a ceiling, set once when you register the server, rather than a prompt on every call. Three levels:
The sandbox is not advisory, and a refusal is not a warning. Under write the run cannot write
outside cwd, and a refused tool call ends the whole run: the CLI reports
stopReason: cancelled, exits 0, and returns only whatever the model had said before the refusal.
The server names the refused call and its path in that case, so a refused tool is not mistaken for a
model that gave up. The server can see which call failed, not why the CLI refused it. If a run must
write somewhere else, say a report outside the repository, either point it at a path inside cwd or
use full.
write uses --permission-mode auto rather than acceptEdits, which is measured rather than
inherited from the flag's name. Headless grok has no human to accept an edit, so under
acceptEdits, dontAsk and default every file mutation is refused and the run dies, on both
sandbox profiles. auto and bypassPermissions both work; auto is the narrower one, and it still
refuses a write outside the workspace, so full remains a real step up rather than a synonym.
To let Grok make edits:
Use full only if you already run your MCP client with full approval and want the delegated Grok
run to be equally unattended. It grants the spawned grok process the same authority you have.
A call that requests more than the ceiling is rejected, not silently downgraded — a clamped run would report success while changing nothing, which is worse than a clear error.
Environment variables
Grok's own variables (XAI_API_KEY, GROK_HOME, GROK_DISABLE_AUTOUPDATER) pass through to the
child process untouched.
Tools
review
The diff is collected in-process and embedded in the prompt, so the model does not spend turns rediscovering what it is meant to review.
Targets are uncommitted, base: "<ref>" (a merge-base diff, so commits that landed on the base
after you branched are not attributed to you), or commit: "<sha>". With none given it
auto-detects: the upstream diff when your branch is ahead, otherwise the working tree — and it says
which it chose rather than guessing silently.
review is always read-only, whatever GROK_MCP_PERMISSION_CEILING allows. It takes no
permission, write, or yolo argument, because a review that edits the code under review is
never what was wanted.
Pass structured: true for machine-readable findings (severity, file, line, summary,
rationale) on _meta.findings, validated before you see them.
Two different things can go wrong, and they are reported differently rather than blurred together:
- The run never finished — it was cut off, or ended without producing its findings. There is no
review, so the call is
isError: trueand_meta.findingsCompleteisfalse. The body leads with why, quoting the CLI's own reason, and names the fix that fits the actual cause. - The run finished but its output will not validate. The call still succeeds, returning the raw
text plus a
_meta.parseError— a degraded review beats a failed one.
What you will never get is a plausible-looking finding that the model made up. --json-schema
constrains every message the model emits, so while it is still reading it has no way to say "I am
working" except in the shape of a finding — and left unchecked it does exactly that. The schema
carries a required status field to keep that narration out of your results, and nothing is ever
salvaged from a partial response by pattern-matching.
Structured reviews of large targets do fail this way with some regularity. The failure is loud by design.
A review that reaches for a shell is refused, not killed. In headless mode an unapprovable tool
request cancels the entire run while the CLI still exits 0, so review denies the shell and edit
tools outright — the model is told no and finishes its review instead of dying mid-sentence.
websearch
numResults (1–50) and searchDepth (basic or full) shape the prompt — the grok CLI has no
flags for either, and neither parameter pretends otherwise. They do work: the same question asked at
basic made one search across two pages, and at full made six searches across three, for two and
a half times the cost.
The result tells you what was actually looked up, not just what the model wrote:
with _meta carrying webSearches, webToolCalls, searchQueries, sources, sourceCount,
pagesOpened, and searchPerformed. That matters more than it sounds. Grok can research through
web search or through X, and when the web is unavailable it will quietly do the second — answering
confidently, citing x.com, exiting successfully. The prose gives you no way to tell. So a run that
searched X and not the web says so in its first line and reports xSearches separately, and a run
where nothing came back at all is an error rather than a confident-looking answer from the model's
own memory:
searchPerformed means sources came back — not that a search was attempted. A search that started
and never returned, or returned an empty result set, is reported as what it was.
Like review, websearch is always read-only and takes no permission, write, or yolo
argument. It never passes --disable-web-search.
Background runs, status, and stop
A long agent run does not have to occupy your client. Pass background: true to grok, review,
or websearch and the call returns a runId immediately, while a detached worker process runs the
job to completion:
The run belongs to the machine, not to this server: it keeps going if your MCP client disconnects,
if the server restarts, or if you close your editor. Records live under GROK_MCP_STATE_DIR, one
directory per run.
status on a finished run returns what the synchronous call would have returned — same text,
same metadata, same error flag. Background is a transport for a tool call, not a second
implementation of one. While a run is live you get its state, elapsed time, both process ids, and
the tail of its progress log; waitMs blocks for up to two minutes and forwards progress
notifications as they arrive. A timed-out wait is not an error.
Two kinds of dishonesty are ruled out by construction. A run whose worker process no longer exists
is reported as abandoned rather than as still running — the machine rebooted, or something killed
it. And a run that finished early is labelled as such:
Validation still happens before you get a runId: a request above GROK_MCP_PERMISSION_CEILING, or
a contradictory pair of session flags, is rejected as a failed call rather than accepted and then
failed in a process nobody is watching.
stop ends a run early. It signals the worker's whole process group — the worker and the grok
process it spawned — with SIGTERM, then SIGKILL if that is not enough. Stopping an already-finished
run is not an error, and neither is stopping one that finished a moment before your call landed.
A stop that could not kill the process tree is reported as a failure, not as a stopped run. If
there is nothing to signal, or the kill is refused, or the tree survives SIGKILL, the run is left
reading running and the call returns an error naming the pid. A cancelled record sitting next to
a live process would be the tidier answer and the useless one.
A run you stop mid-flight has usually already produced something worth keeping, and both the partial result and the session id are preserved:
Grok only reports a session id when a run reaches its end, which a stopped one never does — so that
id is read back from the CLI's own session store rather than reconstructed. _meta.sessionIdSource
tells you which you have. If two runs in the same directory could both match, you get the candidate
ids and no resume command: resuming the wrong session continues somebody else's work.
sessions
Every Grok run leaves a session on disk, and every session id this server reports can be resumed later — from any directory, by you in a terminal or by another tool call.
Sessions are read from $GROK_HOME/sessions (default ~/.grok/sessions), which is the CLI's own
store, so they survive restarts of this server, of your MCP client, and of your machine. Pass id
for one session, query for a case-insensitive search over titles, first prompts, and ids, cwd to
scope to one project, and limit to bound the list.
A run that has just finished has no title yet — Grok fills those in later, if at all — so rows fall
back to the first prompt of the session, and titleSource tells you which you are looking at. Every
row carries resumeCommand, and so does every grok and review result:
Search is local-only. grok sessions search also consults a remote index; this tool does not, so a
session that exists only server-side will not appear.
Development
- docs/api-reference.md — every tool's parameters, result text,
_metakeys, and the exact conditions under which each is set. - docs/security.md — what registering this server authorises, what each permission level actually grants, and what leaves your machine.
- docs/engineering.md — how code is written here: architecture, functional TypeScript rules, error and effect discipline, testing and coverage policy, commit workflow.
- CLAUDE.md — project background and the verified
grokCLI behaviour this server depends on. - ROADMAP.md — milestones, acceptance criteria, and the ideas that were measured and rejected.
Releasing
Bump version in package.json, move the Unreleased section of CHANGELOG.md
under the new version heading, commit, then:
.github/workflows/release.yml runs the full gate, refuses to
publish if the tag and package.json disagree, installs the packed tarball into a scratch directory
and drives a real initialize against the installed binary, then publishes that same file and
cuts a GitHub release.
There is no publish credential to manage. Authentication is
npm trusted publishing: the workflow exchanges a
short-lived OIDC token, and npm generates the provenance attestation on its own. The trust is
registered against this repository and this workflow's filename, so renaming release.yml
breaks publishing — and npm does not check the configuration until a publish is attempted, where the
symptom is ENEEDAUTH rather than anything that names the cause.
License
MIT — see LICENSE.
來源:README.md,提交 f2f920b
工具
0版本歷史
1- v0.2.5最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Grok 整合

Surface
me.grok.nova-otter-delta-cloud官方發布者
遠端 MCP 伺服器,用來展開短連結,並在助理開啟使用者貼上的網址前給出 fetch 或 skip 的判斷。
Grok Crypto Quant API
dev.fly.grok-backtest-api官方發布者
遠端 MCP 伺服器,提供按次付費的加密量化工具:無倖存者偏差回測、每日市場訊號、策略參數最佳化與代幣詐騙檢查。

Server Track Lab
由 GitHub 帳號 Surface-ops 發布
將伺服器端轉換事件送往廣告平台(Meta 即時、Google 與 LinkedIn 僅預覽),並查看工作區事件統計。

API Meter
由 GitHub 帳號 Surface-ops 發布
API Meter 依客戶、端點與方案統計 API 請求量,讓助理註冊 API、取得接入程式碼並讀取或匯出用量。
three.ws for Grok
由 GitHub 帳號 nirholas 發布
three.ws 遠端伺服器,讓助理依文字或圖片生成、綁定骨架、迭代與檢視 3D 模型和虛擬形象,並賦予其可持續沿用的代理人格。