Steam-mcp demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive parameter descriptions, and proper schema definitions using Zod. All 22 tools have clear descriptions (avg ~120 chars) and typed inputs. However, output schemas are not formally documented in the code, responses are shaped via helper functions but LLMs cannot see the return structure. Error handling is minimal; most tools lack recovery guidance. Parameter descriptions are good but some lack format/constraint details (e.g., steam_id accepts 'SteamID64, vanity name, or profile URL' but no validation examples). Tool composition is strong, each tool has one responsibility and chains well (search_store → get_app_details). Security is sound: no secrets in params, read-only operations dominate (21/22 tools), and write operations (add/remove_from_wishlist) are clearly marked destructive.
Adds a game to your own wishlist. Requires STEAM_ACCESS_TOKEN; always acts on the account that token belongs to.
Store details for one game: description, price, genres, developers, release date, Metacritic score, and review count. No API key required.
Review score summary for a game plus a sample of individual reviews. No API key required.
The player's badges, XP, level, and progress toward the next level.
How many people are playing a game right now. No API key required.
Lists a player's friends with the date each was added. Requires a public friends list.
Output schemas not formally documented. Tools return structured JSON via helper functions (jsonResult), but LLMs cannot see the response schema. This forces LLMs to infer field names and types, increasing hallucination risk and breaking downstream tool chains.
Error handling lacks recovery guidance. Tools throw generic errors (e.g., 'No store details for appid X') without suggesting next steps. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
steam_id parameter accepts multiple formats (SteamID64, vanity name, profile URL) but lacks validation examples or format constraints in descriptions. LLMs may pass invalid formats without clear feedback.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
The achievement and stat definitions for a game — display names, descriptions, and icons.
How many players worldwide have each achievement in a game, as a percentage. Useful for spotting rare achievements. No API key required.
Recent news items and patch notes for a game. No API key required.
Lists games in a player's library with playtime. Sorted by total playtime by default and trimmed to a limit, since libraries can hold thousands of entries. Requires a public 'game details' privacy setting.
A player's achievements for one game, with a completion summary. Requires public game details; games without achievements return an error.
VAC, game, economy, and community ban status for one or more players.
Profile info for one or more players: persona name, avatar, online state, country, account creation date, and the game they are currently playing.
Games a player has played in the last two weeks, with playtime for that window.
The player's Steam community level.
Lists the Steam Community group IDs a player belongs to.
A player's raw stat values for one game (kills, distance travelled, and similar).
A player's Steam wishlist, enriched with game names and current prices. Requires the wishlist to be public.
How many games are on a player's wishlist.
Removes a game from your own wishlist. Requires STEAM_ACCESS_TOKEN; always acts on the account that token belongs to.
Converts a Steam vanity name or profile URL into a SteamID64.
Finds games on the Steam store by name and returns their app IDs. Use this first when the user names a game rather than an app ID. No API key required.
Pagination not implemented. Tools like get_owned_games and get_friend_list accept limit but no offset/cursor. Large result sets may exceed context windows; no guidance on handling truncation.
Destructive operations (add_to_wishlist, remove_from_wishlist) lack confirmation/dry-run support. No pattern to prevent accidental modifications; agents cannot preview changes before committing.