Skip to content

Commit 8602b22

Browse files
committed
docs(mcp): add macOS setup and gotchas to Fortress MCP README
Native macOS engine binary isn't published yet, so on a Mac the engine runs via the tilion/fortress:149 Docker image. Document the Colima path, the FORTRESS_CHANNEL=latest / :151-not-on-Hub trap, the stale credsStore=desktop failure, the harmless amd64/arm64 platform warning, the port 9222 collision, and the headless-only constraint.
1 parent 7fe5d6b commit 8602b22

1 file changed

Lines changed: 50 additions & 1 deletion

File tree

mcp/README.md

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,56 @@ tilion-mcp # or: python -m tilion.mcp (stdio transport)
1919
```
2020

2121
The MCP server is a thin, open wrapper (BSD-3) over the `tilion` framework, which drives the
22-
Fortress engine. The stealth Chromium downloads on first run and is cached locally.
22+
Fortress engine. On Linux and Windows the stealth Chromium downloads on first run and is cached
23+
locally. On macOS the engine runs as a Docker image instead. Read the macOS section below before
24+
you start.
25+
26+
## macOS setup (Apple Silicon and Intel)
27+
28+
There is no native macOS engine binary yet, so on a Mac the Fortress engine runs as the official
29+
Docker image (`tilion/fortress:149`). `tilion-mcp` itself runs natively in Python. Only the
30+
browser engine is containerised, and the server starts and stops that container for you. All you
31+
supply is a running Docker daemon.
32+
33+
### Setup
34+
35+
1. Install the MCP and engine wrapper:
36+
```bash
37+
pip install "tilion[mcp]"
38+
```
39+
2. Give it a Docker daemon. Colima is lighter than Docker Desktop and needs no license or GUI:
40+
```bash
41+
brew install colima docker
42+
# Apple Silicon: vz + Rosetta runs the amd64 engine image fast.
43+
colima start --cpu 4 --memory 6 --disk 30 --vm-type=vz --vz-rosetta
44+
# Intel Macs: plain `colima start` works. Docker Desktop is also fine if you already run it.
45+
```
46+
Give the VM at least 4 CPUs and 4 GB of RAM, since it runs a real Chromium.
47+
3. Register the server with your client. For Claude Code:
48+
```bash
49+
claude mcp add fortress -- tilion-mcp
50+
```
51+
4. The first tool call pulls the image once (about 300 MB), then the container stays warm and
52+
calls are fast. Call `get_egress_info` to confirm the engine is alive; it returns the public
53+
IP the target sees.
54+
55+
### What not to do on macOS
56+
57+
| Pitfall | What happens, and the fix |
58+
|---|---|
59+
| Setting `FORTRESS_CHANNEL=latest` | That channel points at `tilion/fortress:151`, which is not published to Docker Hub, so the pull 404s and the engine never starts. Stay on the default `stable` channel, `tilion/fortress:149`. Native Linux and Windows are unaffected, since they fetch the GitHub release rather than the image. |
60+
| A leftover Docker Desktop credential helper | `docker pull` fails with `docker-credential-desktop … executable file not found`. Open `~/.docker/config.json` and delete the `"credsStore": "desktop"` line. |
61+
| Worrying about the platform warning | `The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)` is expected on Apple Silicon and harmless. The amd64 engine runs under Rosetta, a little slower than native Linux. |
62+
| Running two `tilion-mcp` servers at once | Each launches a Fortress container on host port `9222`, so the second fails with `docker … exit status 125` (port already allocated). Run one server per machine. |
63+
| Assuming Colima survives a reboot | If tool calls fail with a Docker error after a reboot, run `colima start`. To start it at login, run `brew services start colima`. |
64+
| Setting `TILION_MCP_HEADLESS=0` for a visible window | This has no effect on macOS. The containerised engine is headless only. A visible window needs the native Linux or Windows binary. |
65+
66+
### Still getting blocked on a hard target
67+
68+
Your Mac's home or office IP is residential, which suits most sites. For the hardest targets, or
69+
when running from a datacenter, route the engine through a residential proxy. Set
70+
`TILION_PROXY=http://user:pass@host:port` (and optionally `TILION_REGION=us`) before starting the
71+
server, then confirm with `get_egress_info`.
2372

2473
## Add to your client
2574

0 commit comments

Comments
 (0)