{"slug": "t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot", "title": "t3-fleet-gateway: A Unified MCP Gateway for T3 Code, Driven by Grok Bot", "summary": "Developer boundsj released t3-fleet-gateway v0.1, an MIT-licensed MCP gateway that lets xAI's Grok Bot run coding jobs on the user's own machines running T3 Code. The gateway acts as an MCP server to Grok Bot with OAuth 2.1 sign-in and as an MCP client to each T3 Code server, exposing fleet_status plus eight work_* tools instead of T3's roughly 80 raw tools per machine, and tracking jobs in a SQLite ledger. Job start, follow, continue and cancel are confirmed live, while answering questions, approvals and failed runs remain unconfirmed, and boundsj is filing T3 issues including #16906 (Grok Bot could not call T3's tools directly due to an empty 400) and #17030 (no way to read the newest items of a thread).", "body_md": "After [maxing out my T3 Code setup](https://www.bounds.dev/posts/environment-update-a-t3-code-tokenmaxing-constellation/), I built [t3-fleet-gateway](https://github.com/boundsj/t3-fleet-gateway), a small always-on gateway (MIT) that lets me code with Grok Bot on my phone and have the work happen on my own machines.\n\n## Try it\n\nSetup is two prompts. Grok Bot runs in the cloud, so the gateway needs a public HTTPS URL. It only listens on localhost. I expose it with Tailscale Funnel, but any tunnel (Cloudflare Tunnel, ngrok) works.\n\nGive this to a coding agent on the always-on machine that runs T3 Code:\n\n```\nSet up https://github.com/boundsj/t3-fleet-gateway on this machine by\nfollowing its README. Enroll this machine's T3 Code server as a host\nand add these projects: <your projects>. Run the gateway as a service\nand expose it over HTTPS with <your tunnel>. Make sure `doctor` passes.\nThen give me the public /mcp URL. When I connect each Grok bot, mint\na one-time approval code for it.\n```\n\nThen make one Grok bot per project and give each one this:\n\n```\nConnect to my T3 fleet gateway at https://<your public URL>/mcp.\nYou own the <project> project. Set up a 15-minute routine that checks\nonly <project>'s jobs, keeps your place in the feed between checks,\nand stays quiet unless a job needs an answer, is ready for review,\nor failed.\n```\n\nEach bot opens the gateway’s approval page. Ask the agent from the first step for a code (they expire after 15 minutes) and choose Operate. I stagger the routines a few minutes apart so they don’t all check at once.\n\n## How it works\n\nThe gateway is an MCP server to Grok Bot, with OAuth 2.1 sign-in, and an MCP client to the [T3 Code](https://github.com/pingdotgg/t3code) server on each machine.\n\n```\nGrok Bot  (xAI cloud, long-running)\n   |  HTTPS + OAuth 2.1, one URL\n   v\nt3-fleet-gateway  (Mac mini, always on)\n   |  SQLite job ledger, one T3 credential per host\n   +--> T3 Code on the Mac mini\n   +--> T3 Code on the M3 (next)\n          |\n          +--> worktree + fleet/<job> branch + thread\n```\n\nT3 exposes about 80 raw tools per machine; the gateway exposes `fleet_status` plus eight `work_*` tools. Grok names a project and a task; the gateway picks the host, creates a worktree, a `fleet/<job>` branch and a T3 thread, and follows the job. `work_feed` returns what changed since Grok’s last check. Grok’s tokens never reach T3 and T3’s credentials never leave the gateway.\n\n## One project, one bot\n\n`jobs adopt` registers a long-lived T3 thread, a project Chief of Staff (CoS), as that project’s front door, and `allowWorkStart: false` makes it the only way in. Grok sends it instructions with `work_continue`. The CoS plans, delegates to its own subagents (Opus implements, Fable reviews) and reports back. Each project gets one conversation in Grok and one thread in T3.\n\nSay I ask the Crumb Exchange bot (a toy prediction market for sandwich questions) for a resting-orders panel. The instruction lands in the CoS thread in T3, and Grok relays the summary when the CoS is done.\n\n## Status\n\nThis is v0.1. Starting, following, continuing and cancelling a job are confirmed live; answering questions, approvals and failed runs are unconfirmed. Approvals happen only in T3 itself, so unattended projects need the `auto` or `full-access` runtime mode.\n\nThis project also tests T3’s own MCP server, and I’m filing issues as I go, like [#16906](https://github.com/pingdotgg/t3code/issues/16906) (Grok Bot couldn’t call T3’s tools directly because of an empty 400) and [#17030](https://github.com/pingdotgg/t3code/issues/17030) (no way to read the newest items of a thread).", "url": "https://wpnews.pro/news/t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot", "canonical_source": "https://www.bounds.dev/posts/t3-fleet-gateway/", "published_at": "2026-10-08 00:00:00+00:00", "updated_at": "2026-10-22 02:40:58.975997+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["t3-fleet-gateway", "T3 Code", "Grok Bot", "xAI", "boundsj", "Tailscale Funnel", "Opus", "Fable"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot", "markdown": "https://wpnews.pro/news/t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot.md", "text": "https://wpnews.pro/news/t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot.txt", "jsonld": "https://wpnews.pro/news/t3-fleet-gateway-a-unified-mcp-gateway-for-t3-code-driven-by-grok-bot.jsonld"}}