Remote MCP server exposing Steam library, achievements and stats. Cloudflare Workers + OAuth 2.1 via GitHub.
Strong tool definitions with consistent naming (verb_noun pattern), comprehensive parameter schemas, and clear descriptions. All 13 tools have descriptions (avg 156 chars, within 10-1024 baseline). Parameters include types, descriptions, and constraints (enums, min/max). Output schemas are documented in descriptions. Key gaps: no tool annotations (readOnlyHint/destructiveHint), no error recovery guidance in descriptions, and some descriptions lack dependency hints or when-to-use context. All tools are READ_ONLY, reducing risk but missing opportunity to document idempotency guarantees.
Completion percentage across the most-played games. Capped at 15 games per call because each game costs one upstream request.
Search for a game by name and get its appid. Looks through the owned library first, then the Steam store.
Friends list with online status and what they are playing. Requires the friends list to be public.
Store information for a game: description, release date, developer, genres, Metacritic score and current price.
Lifetime counters Steam keeps for one game — kills, wins, time played, per-map and per-weapon totals. Distinct from achievements, which are only unlocked/locked. Coverage is uneven and set by the developer, not by Steam: CS2 reports 184 self-describing counters, many games report none, and some report opaque names like `stat_25` or `AchievementStat_3` that carry no meaning. Use `match` to narrow a large set.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) declared. All tools are READ_ONLY but this is not signaled in the tool definition, forcing LLMs to infer safety from descriptions.
Descriptions lack explicit 'when to use' context and dependency hints. E.g., achievement_progress says 'Capped at 15 games' but doesn't explain when to call it vs get_achievements. game_stats mentions 'Use match to narrow' but doesn't guide LLM on discovery flow.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 72 | 2026-07-28+ | v2 |
Achievement progress for one game, including how rare each achievement is across all players.
Latest news items and patch notes for a game.
Aggregate view of the account: game count, total hours, unplayed count, and the top titles by playtime.
Owned games with playtime, sorted by hours played. Use min_hours/max_hours/limit to keep the output small; max_hours: 0 gives the backlog.
Current concurrent player count for a game.
Account status: online state, current game, Steam level and ban flags.
Games played in the last two weeks, with hours for that window.
Wishlist contents with names, prices and release state.
No error recovery guidance in tool descriptions. Tools that call external APIs (Steam store, player counts) may fail, but descriptions don't explain what to do on failure or which errors are retryable.
library_stats and profile_status have empty input schemas (no parameters), but descriptions don't clarify whether they operate on the authenticated user or accept optional filters. Ambiguous for multi-user scenarios.
Output schemas are documented only in descriptions, not in formal JSON Schema. LLMs cannot parse response structure from text alone; explicit output schema definitions would improve downstream tool chaining.