Write a tool in the browser. Hit deploy. A containerized FastMCP server is live at a stable URL — ready for Claude Desktop, Claude Code, or any MCP client.
Every deployed server gets a stable route: http://<host>:3080/s/<name>/mcp — shared across your team, secured with scoped bearer tokens.
Network engineers and developers are sitting on years of scripts and hard-won automation that belong in the new paradigm — AI running lead, your tooling on call. Plugging that code in shouldn't mean mastering the MCP spec and a DevOps pipeline in the same week. And for Federal and air-gapped networks, cloud-hosted platforms were never on the table: no connectivity, no integrations, no option.
The big vendors won't save you either — they ship MCP servers for their products. The tools your team actually needs are custom: your network, your phone system, your runbooks, that one legacy system everything depends on. Roundhouse runs entirely on your hardware and gives each of them a permanent stall: codegen, an image build, a container behind Traefik, and a URL that never moves — with scoped bearer tokens from day one.
Define primitives in a structured form — or paste raw Python. Roundhouse generates server.py + Dockerfile, builds the image, and runs the container behind Traefik.
One stable URL per server, shared across your team. No tunnel hacks, no port juggling. Traefik routes clients straight to the container — never proxied on the hot path.
Scoped bearer tokens out of the box, enforced per-tool by middleware. Encrypted at rest. Swap in OIDC when you outgrow them — not before you need to.
Status, logs, redeploys, scopes, and tokens — all in the same two-pane editor. Batched changes deploy together with one Save & Redeploy.
Structured (forms → codegen) for quick tools. Code-first when you need full control. Remote proxy to put scoped auth in front of MCP servers you don't host.
Run the whole yard on a laptop with docker compose, or on a Swarm cluster with scoped socket proxies and per-server replica caps.
Describe a tool's inputs, outputs, and body in a form — or paste a whole server.py. Your call.
Roundhouse writes the FastMCP server and its Dockerfile. You review it in the editor, like any other code.
The image is built and the container spun up behind Traefik — health-checked, logged, capped.
Live at /s/your-server/mcp. Mint a scoped token, point Claude at it, done.
1# generated by roundhouse — structured mode
2from fastmcp import FastMCP
3
4mcp = FastMCP("net-config")
5
6@mcp.tool
7def find_switch_port(mac: str) -> dict:
8 """Locate the switch port a MAC address is on."""
9 return fabric.trace_mac(mac.lower())
10
11if __name__ == "__main__":
12 mcp.run(transport="http", port=8000)
Requires Docker and Docker Compose — nothing else. When the API logs print
Application startup complete, open
http://localhost:3080 and sign in with the seed admin.
From there, the field manual covers every surface —
creating servers, tokens, usage metrics, and platform administration.
{
"mcpServers": {
"my-server": {
"url": "http://localhost:3080/s/my-server/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
$ claude mcp add my-server \ --url http://localhost:3080/s/my-server/mcp \ --header "Authorization: Bearer <token>"
$ git clone https://github.com/Karmatek-Consulting-LLC/roundhouse.git $ cd roundhouse $ cp .env.example .env $ docker compose up -d # …images build, migrations run, Traefik takes the door… ✓ platform-api | Application startup complete # open http://localhost:3080 → admin@mcp.local / admin