MCP server that wraps the RGL API with natural-language tools. Designed for hosting on fly.io.
Translates queries like "every player who played IM in S7 of 6s" into the right sequence of API calls:
- Resolves "6s" → format/region (defaults to NA when not specified).
- Resolves "S7" → SeasonId by fuzzy-matching cached season list.
- Resolves "IM" → DivisionId scoped to the region.
- Fetches the corresponding Group, then its rosters.
- Optionally bulk-fetches profile data for every unique player.
| Tool | Purpose |
|---|---|
find_season |
Resolve season phrase → SeasonId |
get_season |
Reverse lookup: SeasonId → season/region/format metadata (inverse of find_season) |
find_region |
Resolve region phrase → RegionId |
find_division |
Resolve division phrase → DivisionId (scoped to a region) |
find_team |
Substring search on team name/tag |
find_player |
Substring search on player aliases |
get_player |
Profile by SteamID |
get_team |
Team data by TeamId (includes a resolved region block — use region.regionId as the r= value in rgl.gg URLs) |
get_match |
Match data by MatchId |
list_season_divisions |
Groups in a season |
list_division_teams |
Teams in a (season, division) |
list_division_players |
Every unique player in (season, division), optionally with full profile data |
list_formats |
All formats (lookup) |
list_regions |
All regions (lookup) |
npm install
npm run devThe server reads .env.local for RGL_API_BASE_URL etc. By default it points at the production RGL API.
fly launch --name rgl-mcp --copy-config --no-deploy # first time only
fly deployThen point your MCP client at https://rgl-mcp.fly.dev/mcp (Streamable HTTP transport).
Edits aren't live until you
fly deploy. The hosted server athttps://rgl-mcp.fly.dev/mcpis what MCP clients talk to, so any change tosrc/requires afly deployto take effect. A connected client also caches the tool list at session start — new or renamed tools only appear in a fresh session after the deploy.
This is an unauthenticated, read-only endpoint over already-public RGL data. Every tool just proxies the public RGL API, so the URL isn't a secret. The server adds no auth of its own, and abuse is naturally bounded by the upstream RGL API's own rate limiting. The open pattern is safe only because nothing here is sensitive — don't bolt private or authenticated data onto this server without first adding auth.
The server is live at https://rgl-mcp.fly.dev/mcp. Add it to Claude Code with the HTTP transport — no local clone or build required, you're connecting straight to the hosted fly instance:
claude mcp add --transport http rgl https://rgl-mcp.fly.dev/mcpBy default this adds the server at local scope (just you, this project). Use --scope user to make it available across all your projects, or --scope project to share it with the repo via a checked-in .mcp.json:
claude mcp add --transport http --scope user rgl https://rgl-mcp.fly.dev/mcpVerify and inspect the connection:
claude mcp list # shows rgl as connected
claude mcp get rgl # shows the URL, transport, and scopeInside a session, /mcp lists the connected servers and their tools. The tools then show up as mcp__rgl__<tool> (e.g. mcp__rgl__find_season). To remove it later: claude mcp remove rgl.
| Env var | Default | Meaning |
|---|---|---|
RGL_API_BASE_URL |
https://rglgg-api.fly.dev/v0 |
Base URL of the RGL API |
PORT |
3000 |
HTTP listen port |
CACHE_REFRESH_MS |
3600000 |
Lookup cache TTL (1h) |
DEFAULT_REGION_ID |
40 |
NA Sixes — used when only a format is given |