You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- wrapper.sh: add `mcp` to passthrough commands so `claudebox mcp list`, `claudebox mcp add ...`, etc. work end-to-end (previously only -v/--version/doctor/auth were passed through)
- tests/test_wrapper.sh: add `mcp list` passthrough case to the table
- README: new "MCP servers" subsection under Customization documenting the three scopes (project `.mcp.json`, user/local `~/.claude.json` under top-level mcpServers), file format, `claude mcp add --scope project|user|local` CLI examples, and how cron/Telegram modes reach external systems via MCP
- README: utility-commands list now mentions `claudebox mcp <args>`
claudebox stop # stop the running interactive container for this workspace
253
255
claudebox clear-session # delete session history for this workspace
@@ -931,6 +933,51 @@ EOF
931
933
932
934
Multiple skills stack — every `SKILL.md` found is injected. Any user-supplied `appendSystemPrompt` (via API request body, `--append-system-prompt` CLI flag, `X-Claude-Append-System-Prompt` header, etc.) is appended after the always-skills content, so per-request instructions take precedence.
933
935
936
+
### MCP servers
937
+
938
+
Claude Code reads MCP server definitions from a few standard locations. Inside claudebox, all of these work because `~/.claude` is mounted from the host and the workspace is mounted from the host cwd:
| Project | `<workspace>/.mcp.json` | Per-repo, intended to be checked into git so the team shares the same servers |
943
+
| User | `~/.claude.json` (under the `mcpServers` key) | Global, available across every project on the host |
944
+
| Local | `~/.claude.json` (per-project section) | Default scope of `claude mcp add`, only affects the current project, not shared |
945
+
946
+
**File format** (same for `.mcp.json` and the `mcpServers` block inside `~/.claude.json`):
947
+
948
+
```json
949
+
{
950
+
"mcpServers": {
951
+
"my-server": {
952
+
"command": "npx",
953
+
"args": ["-y", "@some/mcp-server"],
954
+
"env": { "API_KEY": "..." }
955
+
},
956
+
"remote-http": {
957
+
"type": "http",
958
+
"url": "https://example.com/mcp/"
959
+
}
960
+
}
961
+
}
962
+
```
963
+
964
+
**Add via CLI inside the container:**
965
+
966
+
```bash
967
+
# project scope — writes to ./.mcp.json in the workspace (commit-friendly)
968
+
claude mcp add --scope project my-server -- npx -y @some/mcp-server
969
+
970
+
# user scope — writes to ~/.claude.json, available in every project
971
+
claude mcp add --scope user my-server -- npx -y @some/mcp-server
972
+
973
+
# local scope (default) — per-project entry inside ~/.claude.json
974
+
claude mcp add my-server -- npx -y @some/mcp-server
975
+
```
976
+
977
+
**Inspect what's loaded:** run `/mcp` inside an interactive session.
978
+
979
+
This is how cron and Telegram modes reach external systems — drop your server config in `.mcp.json` (project) or `~/.claude.json` (global) and reference it from the instruction.
980
+
934
981
## Gotchas
935
982
936
983
- **`--dangerously-skip-permissions`** is always enabled. Claude has full, unrestricted access to the container. That's the entire point.
0 commit comments