Skip to main content
Glama
754,254 tools. Updated 2026-11-07 02:24

"MCP servers for game development" matching MCP tools:

  • Submits an approval request of any supported type: UAT_PROMOTION, UAT_SIGN_OFF, PRODUCTION_PROMOTION, VISIBILITY_CHANGE, OWNERSHIP_TRANSFER, RETIREMENT, DOMAIN_CHANGE, or ROLLBACK. **An agent may submit but never decide**: SpringRoll requires a human approver, and an agent token cannot approve its own request. Confirm with the user before calling this. It creates review work for named people. Type-specific behaviour: • `PRODUCTION_PROMOTION`: this does NOT deploy. It asks. `releaseId` defaults to the application's latest release, and `targetEnvironmentType` to 'production'. Once approved, call springroll.deploy.promote. • `UAT_PROMOTION`: `targetEnvironmentType` is required, 'uat' (or 'development' where Development needs approval). An approval only unlocks the environment it names. • `UAT_SIGN_OFF`: `targetEnvironmentType` defaults to 'uat'. • `ROLLBACK`: `justification` and `targetEnvironmentType` (the environment to roll back) are required. Put the deployment to restore in `payload.targetDeploymentId`; it defaults to the last successful one. • `RETIREMENT`: `justification` is required. • Every other type takes no `targetEnvironmentType`.
    ConnectorNo auth
  • What should I bet right now? Ranked +EV plays for a sport. The discovery counterpart to parlayapi_verdict: scans the whole board, grades every candidate with the same no-vig engine, keeps only bets that are +EV at a book the user can bet at, and ranks them by edge. Also returns edge_alerts (books showing a price far off the market). Player props only, priced by several books, prediction markets and game moneylines excluded (for a game line, use parlayapi_verdict). Scoped to the user's books. Args: sport_key: e.g. "baseball_mlb". region: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region). limit: max plays to return (default 20). min_edge: minimum edge %% vs the no-vig fair line (default 2.0).
    ConnectorNo auth
  • Returns one resource of one esports game, chosen with part: statistics (team totals), lineups (players with hero or champion and per-player statistics), bans (banned heroes or champions per side) or rounds (Counter-Strike round history). Requires a game id from sofascore_event_esports_games; statistics and bans cover Dota 2 and League of Legends only, rounds Counter-Strike only, and a not-found error means that part has no data for the game.
    ConnectorNo auth
  • Returns one resource of one esports game, chosen with part: statistics (team totals), lineups (players with hero or champion and per-player statistics), bans (banned heroes or champions per side) or rounds (Counter-Strike round history). Requires a game id from sofascore_event_esports_games; statistics and bans cover Dota 2 and League of Legends only, rounds Counter-Strike only, and a not-found error means that part has no data for the game.
    ConnectorNo auth
  • Upcoming matches/events for one game, with game-specific filters. When to use: - "What's on this week?" - Calendar UI; team next matches Prefer over: live_matches for not-yet-started fixtures. Do not use when: only in-progress matches needed → live_matches. Filter support (unsupported params are ignored with meta.warnings — do not assume filtering worked): - lol: hours, team (slug), league (slug) - cs2: team, from, to (ISO); hours not applied upstream - cod: team, tournamentId - dota2: limit/cursor primarily; team may be client-filtered where data allows - ufc: hours / from / to applied client-side after bout expansion (API has no hours); event shells labeled by event name; bouts use fighters[] corners Parallel-safe: yes. Upstream cost: 1–2. Example: { "game": "lol", "hours": 72, "team": "t1", "limit": 20 }
    ConnectorOAuth
  • Deep match package: optional timelines, advanced stats, live state/snapshots, full map/game tree, media inventory. When to use: - Analyst deep dive - Live in-game window (LoL/CS2/UFC) - Full demo list Prefer over match_summary only when summary is insufficient. Prefer match_summary for short answers and default cards. Do not use when: first-pass live board (use live_matches + match_summary). Section selection: pass includeTimeline / includeLiveState / includeAdvanced booleans, OR an explicit sections[] list. UFC betting lines: sections:["odds"] (opt-in, never in the default set). If sections[] is non-empty it wins (booleans are ignored). LoL liveState/advanced require gameId. Parallel-safe: yes. Upstream cost: 1–8 (section-gated). Example: { "game": "lol", "matchId": "lol-match-1", "includeTimeline": true, "includeLiveState": false }
    ConnectorOAuth

Matching MCP Servers

Matching MCP Connectors

  • Team/org card: identity, roster, recent matches, and form/trends/radar when available. When to use: - Team page / "who is on this roster?" - Builder team screen sample Prefer over: separate roster + matches + detail via call_api. Do not use when: UFC fighters → player_profile; unknown name → resolve_entity first. Dota may return partial roster (API gap). Prefer slug for lol/cod; teamId for cs2. Parallel-safe: yes. Upstream cost: 2–4. Example: { "game": "lol", "slug": "t1", "recentLimit": 10 }
    ConnectorOAuth
  • Let players sign in with a portal or federated account via player.loginExternal({ provider, token }). Self-serve providers: 'wavedash' (games on wavedash.com; token = (await Wavedash.getUserJwt()).data) and 'google' (Google Identity Services; token = the GIS ID-token credential). The server verifies every token against fixed, provider-published keys; you only supply public pins. wavedash: pass gameId = the gcid of the user's PRODUCTION game (ask them; or read it off a production token with verify_login_token); without it, tokens from any Wavedash game (incl. playtests) are accepted. google: clientId is required. Re-run to change the config (e.g. once the game id is known). Then verify with verify_login_token.
    ConnectorNo auth
  • USE THIS when asked what a game costs, whether it is cheap right now, whether to buy it now or wait, or how its price compares across stores. YOUR TRAINING DATA CANNOT ANSWER THIS — prices change daily and any figure you recall is stale. Do not answer from memory. Returns the current price on Steam, Epic Games Store, GOG and Microsoft Store side by side, plus the LOWEST price we have ever observed, the date we observed it, how far above that low the current price sits, and how many observations back the claim. History runs from 2012. Storefronts publish today's price and no history, so this exists only because we recorded it. Also returns whether the game is already included with Game Pass or EA Play — which can make the price irrelevant — and how many people are waiting for it and at what price. Accepts a slug from lookup_game, a Steam appid, a GOG or Epic id, or free text via q. Regions: US, GB, DE, BR. PAID (~$0.01) PER QUERY. Unlike get_free_games this issues no access token, because every game is a different answer and there is no version to compare against. Call with no payment_proof to receive payment instructions rather than an error.
    ConnectorNo auth
  • List the core change records (the human write-ups) that target a range of core versions, tagged by flavour and ranked, with counts. For the symbol-level diff, use what_changed. For one record in full, use get_change_record. - Bounds are inclusive. Forms: 11.2, 11.2.x, 11.2.0, 11, 11.x. A bare major covers every minor of it. - Flavours: coming-break (an API going away), coming-new-API (an API added), landed-but-still-relevant (already shipped). policy-only records target no version and never appear here. - project: one machine name. Each record then has the count of that project's development branches still on the legacy side. - Returns the count of every record in range plus a ranked head. Each entry has its nid for get_change_record.
    ConnectorNo auth
  • Publish a browser game (HTML5/JavaScript, static files) to Playfrog and get a public, shareable play link in seconds. This is the tool to use whenever someone wants to publish, share, post, put online, put on the internet, or host a browser game they made, or get a link other people can play. Free, no account and no API key. Send the game files; an index.html at the top level is required, 2.5 MB of files in total. An optional cover image improves the game page and social share card. Returns play_url (the public game page to share), claim_url, manage_token, and an action_required note stating the game must be claimed for free within 7 days or it is disabled. Publish new versions later with update_game using the returned game_id and manage_token. Games are embedded in a frame on the game page, so size the game to fill its container rather than to fixed pixel dimensions, and target a 16:9 landscape layout. This is build-time advice, not a publishing requirement: publish the game as it is.
    Connector
    Destructive
    No auth
  • Validates a Python automation script that runs OUTSIDE the game, on three axes: Python syntax (using the real interpreter), Minecraft commands embedded in the script (against the official command index), and the shape of the /connect WebSocket message envelope. For behavior pack scripts use validate_script instead — Python does not run inside a pack. The embedded command check is the most valuable one: a command written from memory can look syntactically fine and still do nothing in the game. Only strings starting with / are treated as commands. If syntax could not be checked, syntaxChecked is false in the result; ok:true alone does not mean the syntax is valid.
    ConnectorNo auth
  • List open times on Upforge's calendar for a free consultation (usually 30 minutes), in the person's own timezone. Call this before book_consultation and let the person pick a time; never pick one for them. Meeting types come live from the scheduler: general-inquiry is the default, and service types such as web-design, application-development or ai-automation route to the right person. Bookings need about a day's notice, so the search starts tomorrow.
    ConnectorNo auth
  • The fixture list: one coherent game per row, so an agent never has to assemble a game from market searches and team-name matching. Each row carries both sides with their provider ids and live scores, the UTC kickoff, the provider's own status, the esports series format, a tennis game's tournament edition (tier, place, venue time zone, draw and dates), and the game's winner markets (the moneyline, or a soccer game's three 1X2 legs) with their condition_id, outcome token ids and provider moneyline prices. A game's spreads, totals and player props are not on the row: list_game_markets lists every market of one event_slug. Ordered by kickoff, then event_slug; games whose kickoff the provider has not published sort last. For what is on now, pass window=now: without it the list is the whole catalog and starts at the oldest game still open, which can be weeks old. Args: - sport (string, optional): canonical bucket, case-insensitive, with - and _ read as a space (table-tennis and Table Tennis are one bucket). Omitted means every covered sport - league (string, optional): league tag as this list's coverage.leagues spells it (nfl, epl, cs2), case-insensitive - status (string, optional): scheduled, live, paused, ended, postponed, cancelled, suspended, delayed, or unknown. ended, cancelled and postponed also list finished games that have left the live board (freshness.source stored) for kickoffs in starts_after..starts_before, by default the 7 days before now; such a page can be short, or empty, while has_more is true, so follow next_cursor until has_more is false - starts_after / starts_before (string, optional): RFC 3339 kickoff bounds; a game with no published kickoff is excluded whenever either bound is set - window (string, optional): all (default, the whole catalog) or now: games the provider reports in play, plus any other game whose kickoff was at most 3 hours ago or is still to come, without ended, postponed or cancelled games - limit (number, 1-100, default 20) - cursor (string, optional): opaque gms_v1_ cursor from next_cursor. It pins the page position, not a snapshot: the catalog is live, so a game added or removed between pages moves with it - expand (string or string[], optional): sharp_money adds each game's sharp_money, the object get_game_sharp_money returns, read from the sport board's cached aggregate (one board read per sport, so a page stays fast). A game the board did not evaluate reads status not_computed: call get_game_sharp_money for it. A sport whose aggregate could not be read reads status unavailable while the rest of the page is served. Pro and Max. settlement adds each winner market's settlement, the block list_game_markets serves (status observed, not_posed or unavailable; oracle_status, payouts, result outcome or split, the 50-50; resolved_at), from the same store: it never waits for Polymarket, so a game not read lately reads unavailable while its read starts. Every plan. Pass both, as an array, for both blocks: the costs add Returns: data, has_more, next_cursor, as_of, coverage and meta. Read coverage before reading an empty page: it names the sports and leagues this deployment serves and any scope whose source was unavailable for this read, so an unserved sport is never confused with a quiet night. A sport or status this deployment does not serve returns an empty page, not an error. status.state keeps postponed, cancelled, suspended and delayed distinct from a plain 'not live', and a kickoff in the past is never read as live on its own. Scores are the provider's own strings, because a set score and a run total are not both integers. Carries no sharp-money split unless expand is sharp_money, and no holder identity; holders stay on get_market_holders.
    ConnectorNo auth
  • Edits a game's text files (html, htm, js, mjs, css, json, svg, txt, xml, webmanifest) without a ZIP. Target: a game's `slug` or a waiting-room package's `upload_id`. The first edit opens a WORKSHOP: a copy of the game next to the version players have, with its own preview address. Players keep playing the previous version until you release the new one (klyo_release_version for a game, klyo_publish_game for a package); the owner sees it in the studio as “New version waiting”. Each item of `edits` has a `path` and one of three: `old_string` with `new_string` (an exact fragment that must occur once, or add `replace_all`), `content` (the whole file or a new file), or `delete: true`. For a file that exists, pass `expected_hash` from klyo_game_files: if someone changed the file in the meantime you get a conflict and nothing is saved. The changes of one call are applied all or none. Every changed file goes through the klyo check (malicious code, third-party ads, nothing from outside klyo), and the whole game once more before release. Send an image, sound, font or large file (up to 20 MB) with the ticket from klyo_upload_package and reference it in the edit with `from_upload` (no base64). GAME FROM SCRATCH: `nowa` (plansza, zrecznosciowa, logiczna) instead of a target creates a package from the Klyo Kit skeleton and applies `edits` right away; the response carries `upload_id`. UNDO: before every edit a checkpoint `auto-N` is created (it is in the response); `revert` goes back to it or to a named `checkpoint`, `discard` abandons the whole workshop for good; players see none of this. Limits: a file from content up to 1 MB, a call up to 256 KB and 20 edits, 3 open workshops per account; a workshop with no changes for 7 days expires, and the version players have stays untouched. Examples: • Change the board colour in style.css of my game czworki • In js/gra.js of slice-rush change the speed from 4 to 6 • Add a levels.json file with three levels to the package in the waiting room
    Connector
    Destructive
    OAuth
  • Read dealer buy offers for ONE exact card product, preserving each offer's game, finish, subtype, language, condition, source product, source timestamp, cash and credit fields, quantity and missingFields. Use the catalog product id from spellbook_printings_search. Pokemon offers are English NM/New CoolStuffInc observations when present; no offer or missing field proves a dealer has no stock. This read returns facts and does not choose a vendor or sell cards.
    ConnectorNo auth
  • Ping and auth check. WHEN: auth/connection smoke test (no game side effects). Differs from arena_get_state. Echo test: returns {status:"pong"} plus whether your auth (Bearer header, key arg, or guest_token) is valid. Use it first to separate connection/auth bugs from game bugs. Never echoes your key. Free, no side effects. Example: {"message":"hello"}
    ConnectorNo auth
  • Natural-language / fuzzy query → best typed entity ID(s) + game (player, team, event, tournament, match, fighter). When to use: - User named an entity without an ID ("T1", "s1mple", "IEM Cologne", "Islam Makhachev") - Need a canonical id/slug before profile or match tools Prefer over search_entities when you want one best match (or small ranked set) to chain. Prefer search_entities when browsing many results with pagination. Do not use when: you already have a stable id/slug from a prior tool. Empty/ambiguous results still return ok:true with best=null or needsDisambiguation=true — pick from candidates or refine q/game/type. Does not emit AMBIGUOUS_ENTITY as a hard error. Parallel-safe: yes. Upstream cost: 1–5. Example: { "q": "T1", "game": "lol", "type": "team", "limit": 5 }
    ConnectorOAuth
  • COMPOSITE pre-match briefing: sides, roster/form snippets, H2H stub, event context — for pick'ems, articles, and match-page before state. When to use: - Upcoming match deep link - "Who should I watch before this game?" - App scaffold for preview cards Prefer over: manually chaining team_profile ×2 + head_to_head + schedule. Prefer match_summary when match is completed; match_details for live in-game. Do not use when: user wants final score/recap of a finished match. Parallel-safe: yes. Upstream cost: 4–8. Tennis H2H accepts an optional surface filter (Hard, Clay, Grass). Example: { "game": "lol", "teamA": "t1", "teamB": "gen-g", "includeH2H": true, "recentLimit": 5 }
    ConnectorOAuth
  • Upload files straight from disk instead of pasting their bytes into a tool call: for images, audio, fonts, 3D models, and ANY file over ~50 KB (a tool call can't carry megabytes of base64). Give each file's hosted path and exact size in bytes; get back one URL per file. PUT each file to its URL with curl, from the game's folder: curl -sS -T <local file> "<url>" (Windows PowerShell: curl.exe). Each URL takes ONE PUT of exactly that many bytes and expires in 15 minutes, so upload right away. Then call publish_game with { path, uploadId } entries for these files (small text files can still go inline next to them), or deploy_room_logic with uploadId for a long logic file. An upload belongs to the game it was made for and is used up by the publish. Limits on this studio's plan: 100 files per call, 5 MB per game.
    ConnectorNo auth
  • Check a specific sports bet against thousands of play-by-play game simulations: each leg's simulated probability, the sportsbook's implied probability, and the edge. Send the bet as plain text - teams or players, market, line, odds. A parlay in one string is graded leg by leg and priced as a whole. Call this first; nothing has to be set up, and a missing slate, an unrecognized bet, or an unsupported market comes back as a plain `status` without spending a check. It prices a bet the caller names and never suggests one, so there is nothing to send for "what should I bet tonight". Every result leads with `status` and `check_spent` and says whether re-wording would change anything; when it says no, it means no. Covers MLB, WNBA, PGA, ATP, and NFL. A game that already started still checks, against the simulations from before it began.
    ConnectorNo auth