This guide assumes you downloaded one of the GABS release archives from the GitHub Releases page and want to get from "zip file" to "AI can control my games" as quickly as possible.
Each platform archive includes:
- the
gabsbinary (gabs.exeon Windows) README.md- the full
docs/folder example-config.jsonLICENSE
Archive names follow this pattern:
gabs-<version>-windows-amd64.zipgabs-<version>-darwin-arm64.zipgabs-<version>-darwin-amd64.zipgabs-<version>-linux-amd64.zipgabs-<version>-linux-arm64.zip
- Unzip the archive to a stable folder, for example
C:\Tools\GABS. - Open PowerShell in that folder.
- Verify the binary:
.\gabs.exe versionUse the full path in your AI configuration, for example
C:\Tools\GABS\gabs.exe.
- Unzip the archive to a stable folder.
- Mark the binary as executable:
chmod +x gabs
./gabs versionUse the full path in your AI configuration, for example
/Users/you/Tools/gabs or /opt/gabs/gabs.
Run the interactive setup once for each game:
gabs games add rimworld
gabs games add minecraftThen verify the saved configuration:
gabs games list
gabs games show rimworldBy default, GABS stores its configuration in:
~/.gabs/config.json
Per-game runtime files for running games are written under:
~/.gabs/<gameId>/bridge.json~/.gabs/<gameId>/runtime.json(internal ownership tracking used by GABS)
If you need a complete config example, see example-config.json in the release
archive.
Add GABS to your Claude Desktop MCP configuration:
{
"mcpServers": {
"gabs": {
"command": "/absolute/path/to/gabs",
"args": ["server"]
}
}
}On Windows, point command to gabs.exe.
Add GABS to your Codex CLI configuration:
[mcp_servers.gabs]
command = "/absolute/path/to/gabs"
args = ["server"]On Windows, use the full path to gabs.exe.
Each live Codex session will start its own stdio GABS process. That is
intentional. GABS coordinates shared ownership per game, not with a machine-wide
gabs server singleton.
If your MCP client supports stdio servers, the essential configuration is:
{
"command": "/absolute/path/to/gabs",
"args": ["server"]
}The important part is that the client launches the GABS binary with the
server subcommand.
Some OpenAI-style clients prefer stricter tool names than MCP itself requires.
If that applies to your client, enable tool normalization in
~/.gabs/config.json:
{
"toolNormalization": {
"enableOpenAINormalization": true,
"maxToolNameLength": 64,
"preserveOriginalName": true
}
}This converts mirrored tool names like minecraft.inventory.get into
OpenAI-compatible forms such as minecraft_inventory_get.
See also:
docs/OPENAI_TOOL_NORMALIZATION.md
If your tooling prefers HTTP instead of stdio:
gabs server --http localhost:8080Then talk to the MCP endpoint over HTTP:
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "games.list",
"arguments": {}
}
}'Once your AI client is connected, try prompts like:
- "List my configured games"
- "Start RimWorld"
- "Show the status of all games"
- "Reconnect to RimWorld and list its tools"
If you have more than one live GABS session, the second session will not try to launch or connect to the same game again by default. To intentionally move a running game's ownership to the current session, use:
{
"gameId": "rimworld",
"forceTakeover": true
}with games.connect.
- Make sure the binary path in the AI config is correct.
- Run
gabs servermanually in a terminal and look for startup errors. - Restart the AI client after editing its MCP configuration.
Check stopProcessName with:
gabs games show <game-id>Launcher-based games such as Steam and Epic titles need the actual game process name, not just the launcher.
Make sure the mod first checks the environment variables:
GABP_SERVER_PORTGABP_TOKENGABS_GAME_ID
and only falls back to:
~/.gabs/<gameId>/bridge.json
or the GABS_BRIDGE_PATH environment variable when present.