Connect AI assistants to Teamfight Tactics data via MCP. 19 tools cover player profiles, TFT stats, match history, live game, leaderboards, player comparison and AI placement coaching. No Riot API key needed, and it works in Claude Desktop, ChatGPT and any MCP client. By MrBridge (mr-bridge.com)
Billing fairness — error responses and compatibility stubs are no longer charged
Fixed
Error responses are never charged. Billing now fires only on successful tool responses (!result.isError); a typo'd Riot ID, a missing player, or any handler error no longer costs money. Previously every call was billed, success or error.
The two compatibility stubs are free.tft_get_champion_mastery and tft_get_match_timeline return a static "not available for TFT" message with no Riot API call — they are now in a FREE_TOOLS allowlist and never charged (previously $0.003 / $0.005 per call).
Changed
Standby port now prefers the documented ACTOR_WEB_SERVER_PORT, with APIFY_CONTAINER_PORT as legacy fallback
pay_per_event.json event descriptions updated: ladder/leaderboard/status/featured-games tools now listed under Data Retrieval; dead mastery/timeline mentions removed; player profile + live game listed under Match Data
README pricing section simplified: the live price table now lives on the Pricing tab (single source of truth) instead of being duplicated in the README; added the ACTOR_MAX_TOTAL_CHARGE_USD cost-cap note
Legal section rewritten for commercial use (Riot Games API ToS compliance, trademark notice) — replaces the "educational and personal use" wording
tft_get_match_history now supports start, startTime, endTime (pagination + date range)
Surfaces Riot's status.message + endpoint on unhandled HTTP errors for easier diagnosis
Notes
tft_get_featured_games degrades gracefully when the API key tier lacks spectator featured-games access (returns a clear message, not an error)
2026-06-05
Data layer rewired to the TFT API + zero-config built-in key
Fixed (major)
Re-pointed the entire data layer from the League of Legends API to the TFT API. Ranked now returns RANKED_TFT / Hyper Roll / Double Up; match details return placement, traits, starred units, items, augments and the Little Legend; summoner, status and live game use the TFT endpoints. Previously these returned League of Legends data.
tft_get_match_timeline and tft_get_champion_mastery now report "not available for TFT" (no such Riot endpoint) instead of hitting a LoL endpoint
Analysis tools (tft_analyze_performance, tft_get_improvement_tips, tft_analyze_champion) recomputed on TFT placement metrics (avg placement, top-4 / top-1 rate, most-played units & traits) and now accept a Riot ID directly
Changed
Built-in dedicated Riot API key — no user key, no setup, no 24-hour rotation (zero-config). Standby always uses the built-in key.
README realigned with the LoL MCP Server (zero-config Quick Start, sample output, API usage, cross-sell)
Data Dragon resolution switched to TFT assets (units, traits, augments, items, Little Legends, queues)
2026-05-19
Pay-per-event consolidation (5 events → 3)
Pricing simplification
Removed the tool-live ($0.008) and tool-compare ($0.025) events
tft_get_live_game now charges as tool-match ($0.005, price decrease)
tft_compare_players now charges as tool-analysis ($0.015, price decrease)
Final structure: tool-read $0.003 / tool-match $0.005 / tool-analysis $0.015
Why
Apify recommends 2–4 events; 5 made the pricing page noisy
live_game is fundamentally a match-data lookup; compare_players is an AI/analysis feature
Aligns the event taxonomy with the LoL sibling Actor
2026-03-31
Billing robustness
Fixed
Spending limit: the tool result is returned with a warning instead of being silently thrown
Charge on error: calls are billed even when the handler fails (the Riot API calls were already consumed)
Missing mapping: explicit throw if a tool has no billing mapping (instead of a silent fallback to tool-read)
Billing failures: log.error with a consecutive counter and an alert at 5 failures (BILLING_FAILURE)
Simplified
Removed dead code (SPENDING_LIMIT_RESPONSE, getToolPricing, getToolBillingEvent)
PRICING reduced to Record<BillingEvent, number> (removed the unused description field)
Unified billing flow in server.ts: a single chargeForTool call after the handler's try/catch
2026-03-26
PPE audit fixes
Spending limit: added SPENDING_LIMIT_RESPONSE handling in billing.ts / server.ts (returned when eventChargeLimitReached)
Content fix: replaced all League of Legends references with TFT across README, index.ts, schemas and package.json
Streamable HTTP only + Claude Desktop fix — migrated to the official Apify MCP pattern.
BREAKING CHANGE
SSE removed: the /sse and /messages endpoints no longer exist
Port: uses APIFY_CONTAINER_PORT instead of ACTOR_STANDBY_PORT
Changed
Stateless Streamable HTTP: a fresh server + transport per request (sessionIdGenerator: undefined), no session management
CORS: added the cors middleware with exposedHeaders: ['Mcp-Session-Id'] for Claude Desktop compatibility
GET /mcp and DELETE /mcp return 405 Method Not Allowed
Automatic cleanup: transport.close() and server.close() on res.on('close')
2026-02-11
Readiness probe fix
Apify readiness probe: / returns a plain 200 OK instead of creating an unnecessary MCP session
Finding: Apify's Standby proxy does not forward external requests to / (only the internal readiness probe hits it); the MCP connection URL must include /mcp
2026-02-10
Standby support & Console pages
Streamable HTTP: added the /mcp endpoint
Riot API key via the RIOT_API_KEY environment variable; graceful start without a key
Mode detection via APIFY_META_ORIGIN
Improved Input & Information page copy on the Apify Console, with detailed use cases
Categories set to AI, MCP_SERVERS, INTEGRATIONS; actor.json aligned with the Console