mcp-box
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-box Create a small Linux box, run `ls -la /home`, and show the file listing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-box
Private MCP server that turns the ascii Box API into tools an external agent can drive. ChatGPT, Claude, Cursor, or Grok is the agent. The Box is the Linux machine.
POST /prompt is never used. Agents run shell and file tools only.
Install
npm install
cp .env.example .env # set BOX_API_KEY
npm run typecheck
npm testRelated MCP server: can-see
Run
stdio (Claude Desktop, Cursor, Grok local):
npm run start:stdio
# or
npx tsx src/stdio.tsStreamable HTTP (local Inspector, or behind tunnel-client):
npm run start:http
# listens on http://127.0.0.1:8787/mcp when PORT=8787 in .envChatGPT: use OpenAI Secure MCP Tunnel, not a public Cloudflare URL. See docs/chatgpt.md.
# after tunnel-client is installed and CONTROL_PLANE_API_KEY is set
export CONTROL_PLANE_TUNNEL_ID=tunnel_6a7290ef51b88191af7b32deba8e0640
tunnel-client run \
--control-plane.tunnel-id "$CONTROL_PLANE_TUNNEL_ID" \
--mcp.server-url http://127.0.0.1:8787/mcpThen in ChatGPT: Criar app → Conexão Túnel → select mcp-box → Sem autenticação.
Environment
Variable | Default | Purpose |
| (required for live) | Box dashboard API key; never sent to the MCP client |
|
| API base |
|
|
|
|
| When |
|
| HTTP bind address |
|
| HTTP port |
| stderr (trusted) | Optional audit JSONL path |
See .env.example.
Trust modes
Mode |
| Account secrets | Audit log | Force stop |
isolated (default) | always | blocked | off | denied |
trusted | may be | allowed via | JSON lines | allowed with |
Isolated boxes cannot act on your account secrets. Use them for untrusted agent work.
Trusted mode records every tool call (timestamp, tool, boxId, outcome). Desktop URLs and tokens are redacted in logs.
Tools
Tool | Read-only | Notes |
| no | Default size small; TTL 3600s; waits until ready |
| yes | Optional state filter |
| yes | Desktop URL redacted in summary |
| no |
|
| no | Convention under |
| yes | Poll pid/exit/log tails |
| yes | Relative paths only |
| no | utf8 or base64 |
| yes | Base64, max ~2MB |
| yes | Secret URL; do not log full value |
| no | Requires |
| no | Wait until ready |
| no | Isolated forks are noEnv |
| no | Best-effort; prompt-oriented |
There is no box_prompt tool.
Background jobs
Box has no native shell job API. Background work is:
Write a launcher under
.mcp-box-jobs/<jobId>/nohupthe command; store pid and logsPoll with
box_job_status
Clients
Local JSON snippets: docs/clients.md
ChatGPT Developer Mode + tunnel: docs/chatgpt.md
Grok Build on a template box (OAuth sub): docs/grok-template.md
Box selected repos (go-zoen): docs/box-repos.md
Grok template
npm run grok:template # small box: grok CLI + OAuth + EnzoTironi/skills + zoen-skills/pstack
npm run grok:diagnose -- bx_… # resume + smoke; REARCHIVE=1 to stop againCurrent template: go-zoen / bx_sb5sbxzz (see docs/grok-template.md). Fork for ChatGPT work with Grok + skills + go-zoen.
ChatGPT write caveat
Full write MCP tools in ChatGPT generally need Business / Enterprise / Edu. Pro is often read-only for connectors. Confirm your plan before relying on ChatGPT as the primary write agent.
Security
Keep
BOX_API_KEYon the host only.Prefer isolated mode unless you intentionally need account secrets.
Redact desktop URLs (
_token) from logs and tickets.Bind HTTP to localhost unless you add auth (v1 has no OAuth).
Non-goals (v1)
Multi-tenant OAuth
Wrapping
POST /promptNative job queue
Cloudflare Workers deploy
Development
npm test
npm run typecheck
npm run smoke # fake client tools/list
LIVE_BOX=1 npm run smoke # live create → exec → write/read → stopLicense
Private / unlicensed unless you add one.
Available Tools
14 toolsbox_createA
Create a Box cloud computer. Isolated mode always uses noEnv. Waits until ready when possible.
Inputs: env, name, type, ttlSeconds.
box_desktopBRead-only
Get a secret-bearing desktop/noVNC URL. Never log the full URL.
Inputs: boxId (required), vnc, publicAccess.
box_download_artifactARead-only
Download an artifact as base64 (max ~2MB). Prefer box-side tools for larger files.
Inputs: path (required), boxId (required).
box_execC
Run a shell command in a ready box. timeoutSeconds is capped at 60.
Inputs: boxId (required), command (required), cwd, timeoutSeconds.
box_exec_backgroundA
Start a long command via nohup under .mcp-box-jobs// and return immediately.
Inputs: boxId (required), command (required).
box_forkA
Fork a box from its latest snapshot. Isolated forks always use noEnv.
Inputs: boxId (required), env.
box_getARead-only
Get box state. Desktop URLs are redacted in the summary field.
Inputs: boxId (required).
box_interruptA
Best-effort interrupt of prompt work on a box (not shell background jobs).
Inputs: boxId (required).
box_job_statusBRead-only
Poll background job state from .mcp-box-jobs// files.
Inputs: boxId (required), jobId (required).
box_listBRead-only
List boxes for the account.
Inputs: limit, state, cursor.
box_read_fileARead-only
Read a file relative to the box workdir.
Inputs: path (required), boxId (required), encoding.
box_resumeA
Resume an archived box and wait until ready.
Inputs: boxId (required).
box_stop_and_waitADestructive
Stop a box and wait until archived. Requires confirm:true. force requires trusted mode.
Inputs: boxId (required), confirm (required), force.
box_write_fileB
Write a file relative to the box workdir.
Inputs: path (required), boxId (required), content (required), encoding.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct operation: lifecycle (create/list/get/resume/stop/fork), execution (exec/exec_background/job_status/interrupt), file access (read/write/download), and desktop. The overlap between exec and exec_background is clear from their descriptions—one is synchronous with a timeout, the other is asynchronous via nohup.
All tools share the 'box_' prefix and use lowercase verbs or verb_noun patterns (e.g., box_create, box_read_file, box_stop_and_wait). The naming is uniformly descriptive and follows a recognizable convention throughout.
14 tools is well-scoped for a cloud computer management server, covering lifecycle, command execution, job handling, file operations, and desktop access without being excessive. Each tool serves a distinct purpose and earns its place.
The surface covers the major workflows: box lifecycle (create, get, list, resume, stop, fork), command execution (foreground, background, interrupt, job status), and file operations (read, write, download). Minor gaps exist, such as no explicit delete/destroy tool and no direct retrieval of background job stdout/stderr, but agents can work around these with existing tools.
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn educational MCP server that exposes system tools (like IP, hostname, file operations, ping) for AI agents to execute via HTTP.511 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server that lets AI agents see and interact with terminal/CLI applications through virtual terminals and PNG screenshots.75 npmMIT
- AlicenseAqualityCmaintenanceAn open MCP server that gives any AI agent SSH access to remote Linux/Unix machines — shell commands, file read/write, and SFTP transfers.11MIT
- FlicenseAqualityDmaintenanceA simple MCP server that exposes a terminal tool, allowing AI agents to execute shell commands.1-