{
  "markdown": "<!-- mcp-name: io.github.Sarg338/steam-mcp -->\n\n# Steam MCP\n\n[![PyPI](https://img.shields.io/pypi/v/steam-mcp?cacheSeconds=3600)](https://pypi.org/project/steam-mcp/)\n[![Python](https://img.shields.io/pypi/pyversions/steam-mcp)](https://pypi.org/project/steam-mcp/)\n[![CI](https://github.com/Sarg338/steam-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Sarg338/steam-mcp/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.Sarg338%2Fsteam--mcp-blue)](https://registry.modelcontextprotocol.io)\n\nA read-only [Model Context Protocol](https://modelcontextprotocol.io) server for the\npublic Steam Web API and storefront — **37 tools, 5 prompts, and 2 resources** that let\nany MCP client (Claude Desktop, Claude Code, Cursor, …) answer questions about Steam:\nyour friends, games, playtime, and achievements, plus account-independent things like\nsales, reviews, live player counts, Steam Deck compatibility, discovery,\nrecommendations, and co-op planning.\n\n**Read-only · official Steam APIs only · open source.** Nobody logs in, and the server\nnever writes, trades, posts, launches games, or makes purchases.\n\n## Quick start — no API key needed\n\nInstall [`uv`](https://docs.astral.sh/uv/), then:\n\n**Claude Code**\n\n```bash\nclaude mcp add steam -- uvx steam-mcp\n```\n\nThat's the whole setup. **15 of the 37 tools work with no credential at all** — anything\nabout the store or a game itself:\n\n> *\"Is Baldur's Gate 3 worth buying, and how are its recent reviews trending?\"*\n> *\"What co-op games are on sale under £20 right now?\"*\n> *\"How many people are playing Helldivers 2 this minute?\"*\n> *\"Will Hades II run properly on my Steam Deck?\"*\n\nThe three game-finders (`steam_discover`, `steam_should_i_buy`, `steam_recommend`) work\nwithout a key too, as long as you don't personalize them.\n\n### Adding your own account\n\nA [free Steam Web API key](https://steamcommunity.com/dev/apikey) (a minute to get)\nunlocks the other 22 — the ones that read a *specific account*: library, playtime,\nfriends, achievements, wishlist, inventory. Add `STEAM_USER` too and \"my\"/\"I\" default to\nyou, so you never have to paste a SteamID:\n\n```bash\nclaude mcp add steam --env STEAM_API_KEY=YOUR_KEY --env STEAM_USER=your_steam_name -- uvx steam-mcp\n```\n\n> Tip: this defaults to the current project. Add `--scope user` only if you want\n> Steam in *every* project — that keeps its tools in context everywhere, so prefer\n> per-project scope unless Steam is cross-cutting for you.\n\n**Claude Desktop** — download `steam-mcp.mcpb` from the\n[latest release](https://github.com/Sarg338/steam-mcp/releases/latest) and open it\n(Settings → Extensions). Both fields are optional; leave them blank for the keyless\ntools and fill them in later.\n\nCursor / Cline / Windsurf and the manual `pip` setup are under [Setup](#setup) below.\n\n> Without a key, the account tools are still listed but marked\n> `[unavailable: needs STEAM_API_KEY]`, so your assistant knows to reach for a keyless\n> tool instead of failing at one it can't use.\n\n---\n\n## What it can answer\n\nAccount / profile (needs a public profile; set `STEAM_USER` and \"my\"/\"I\" default\nto you — no SteamID needed):\n- \"Who's on my friends list, and who's online right now?\"\n- \"Which of my friends own *Helldivers 2* — and who's playing it now?\"\n- \"It's game night — what co-op games do my online friends and I all own?\"\n- \"Analyze my library — my backlog, and what I loved but abandoned.\"\n- \"Which achievements am I missing in *Hollow Knight*, and which are my rarest?\"\n- \"What's on my wishlist, and is any of it on sale?\"\n- \"Based on what I play most, what should I check out next?\"\n- \"What's in my CS2 inventory, and which items are marketable?\"\n\nAccount-independent (works for any game, no SteamID needed):\n- \"Is *Baldur's Gate 3* worth buying — and how are its recent reviews trending?\"\n- \"What's on sale right now, and what are the current top sellers?\"\n- \"How many people are playing *Counter-Strike 2* this minute?\"\n- \"Will *Hades II* run on my Steam Deck?\"\n- \"What's the Community Market price of a Field-Tested AK-47 | Redline?\"\n- \"Is *Elden Ring* a soulslike? What are its community tags?\"\n- \"Find well-reviewed co-op roguelikes under $20.\"\n- \"Recommend games like *Hollow Knight* that I don't already own.\"\n\n---\n\n## Tools\n\n| Tool | What it returns | Needs key? |\n|------|-----------------|-----------|\n| `steam_resolve_vanity_url` | Vanity name / profile URL → SteamID64 | yes |\n| `steam_get_player_summary` | Status (Online/Away/In-Game…), current game, for 1–100 users | yes |\n| `steam_get_friend_list` | Friends enriched with name + live status | yes |\n| `steam_find_friends_who_own` | **Which friends own (or are playing) a game** — \"who can I play X with\" | yes |\n| `steam_get_user_groups` | The Steam groups/clans a user is in (name, URL, member count) | yes |\n| `steam_plan_coop_night` | **Co-op games the host + friends all own** (ranked by owners) — or `mode=\"new\"` for **fresh co-op games none of them own yet**; with who's online now | yes |\n| `steam_get_owned_games` | Owned games with total/recent hours (sortable) | yes |\n| `steam_analyze_library` | **Backlog, playtime distribution, abandoned games** across a whole library | yes |\n| `steam_get_recently_played_games` | Last-2-weeks playtime | yes |\n| `steam_get_steam_level` | Steam community level | yes |\n| `steam_get_player_bans` | VAC / game / community / economy bans | yes |\n| `steam_get_player_achievements` | Per-game unlocked vs locked achievements | yes |\n| `steam_get_game_schema` | A game's full achievement/stat definitions | yes |\n| `steam_get_global_achievement_percentages` | Achievement rarity (global %) | no |\n| `steam_get_user_game_stats` | **A user's in-game stats** (kills, wins, distance…) for a game | yes |\n| `steam_get_rarest_unlocks` | **A player's rarest achievement unlocks** in a game (by global rarity) | yes |\n| `steam_search_apps` | Game title → appid (+ price) | no |\n| `steam_discover` | **Find/recommend games** by tag, price, sale, platform, **release window** (\"last N days\") — optionally **personalized** to a user's taste (excludes games they own) | no* |\n| `steam_should_i_buy` | **Buying brief** — price, lifetime + recent reviews (trend), tags, Metacritic, and your taste match | no* |\n| `steam_recommend` | **Recommend games** like a seed game or your taste, with the shared tags as the \"why\" | no* |\n| `steam_get_app_details` | **Full store details** — play modes/co-op, controller, DLC, languages, requirements, Metacritic, Steam Deck | no |\n| `steam_get_deck_compatibility` | **Steam Deck rating** (Verified/Playable/Unsupported) + the per-criterion test results | no |\n| `steam_get_dlc` | **A game's DLC**, with live prices and what's on sale | no |\n| `steam_get_app_regional_pricing` | A game's price **across regions** (each in local currency) | no |\n| `steam_get_workshop_item` | **Workshop item** metadata (game, tags, subscribers, favorites, views) | no |\n| `steam_get_app_tags` | **A game's top community tags** (Souls-like, Roguelike, Cozy…) | no |\n| `steam_get_app_reviews` | Lifetime verdict, +/- counts, sample reviews; optional **recent (last-N-days) score** via `review_filter='recent'` | no |\n| `steam_get_featured_specials` | Games currently on sale (regional) | no |\n| `steam_get_store_highlights` | **Top sellers, new releases, or coming soon** | no |\n| `steam_get_wishlist` | **A user's wishlist, with live prices + what's on sale** | yes |\n| `steam_get_inventory` | **A user's inventory** — game items or Steam Community items (cards, emoticons…), with tradable/marketable flags | yes† |\n| `steam_get_market_price` | **Community Market price** for an item (lowest/median/24h volume) + type/rarity + CS2 condition | no |\n| `steam_get_player_badges` | Badges + the XP breakdown behind a Steam level | yes |\n| `steam_get_package_details` | Package/bundle price + included games | no |\n| `steam_compare_players` | Shared games between two users, with playtime | yes |\n| `steam_get_current_players` | Live concurrent player count | no |\n| `steam_get_app_news` | Recent news / patch notes | no |\n\nEvery tool supports `response_format: \"markdown\"` (default) or `\"json\"`, and all are\nannotated `readOnlyHint: true`. Prefer the composite tools (`steam_should_i_buy`,\n`steam_recommend`, `steam_discover`, `steam_plan_coop_night`) over chaining several\ncalls, and ask for `json` only when you need to parse fields. Tools that read\nlocalized text accept a `language` parameter — a Steam language name like `french` or\n`schinese` (default `english`).\n\n> \\* `steam_discover`, `steam_should_i_buy`, and `steam_recommend` need no key for\n> the store data; their **personalization** (passing a `steamid` to use a user's\n> library/taste) requires a key and a public profile.\n>\n> † `steam_get_inventory` reads a keyless endpoint, but it still has to know *whose*\n> inventory — and turning a vanity name (or `STEAM_USER`) into a SteamID64 is itself a\n> keyed call. Pass a raw 17-digit SteamID64 and it works with no key.\n\n### Prompts & resources\n\nBeyond tools, the server ships **prompts** (guided one-click flows that orchestrate\nthe tools) and **resources** (reference Steam entities by URI):\n\n- Prompts: `what_should_i_play`, `is_it_worth_buying`, `plan_game_night`,\n  `steam_deals`, `game_overview`.\n- Resources: `steam://app/{appid}` (store details) and `steam://user/{steamid}`\n  (profile + live status).\n\n> **Recent reviews:** Steam's API only exposes a *lifetime* review summary — there\n> is no \"last 30 days\" field. So `steam_get_app_reviews` with\n> `review_filter='recent'` computes that score itself by paginating the newest\n> reviews within `day_range` days (default 30). For games with a very high volume\n> of recent reviews it counts up to ~600 and marks the result `sampled: true`.\n\n> **Market prices:** `steam_get_market_price` uses Steam's Community Market\n> endpoints, which are undocumented and tightly rate-limited. Results are cached\n> briefly; an item with no current listings reports its price as unavailable.\n\n---\n\n## Setup\n\n### 1. Get a free Steam Web API key *(optional)*\n\nSkip this if you only want the 15 keyless tools — the server runs fine without a\nkey and the account tools simply advertise themselves as unavailable.\n\nTo unlock the account tools, visit <https://steamcommunity.com/dev/apikey>, sign in,\nregister a domain (any domain you control works; `localhost` is commonly used for\npersonal keys), and copy the key. Usage is governed by the\n[Steam Web API Terms of Use](https://steamcommunity.com/dev/apiterms).\n\n### 2. Install\n\nThe published package needs no checkout (Python 3.10+):\n\n```bash\nuvx steam-mcp          # zero-install via uv (recommended)\n# or\npip install steam-mcp  # run as: python -m steam_mcp.server\n```\n\nBoth MCP Python SDK majors work (`mcp>=1.28`). On the v2 SDK the server speaks\nspec revision 2026-07-28 — stateless, no `initialize` handshake — advertises\ncache hints on its tool/prompt/resource listings, and can ask you which Steam\naccount is yours when `STEAM_USER` isn't set (once per session, and only if your\nclient supports elicitation). On the v1.x line it serves the `initialize`\nhandshake that modern clients fall back to anyway. Nothing to configure either\nway.\n\n> **TLS note:** the HTTP client is `httpx2`, which verifies certificates against\n> your **operating system's** trust store rather than a bundled CA list. If you\n> run this somewhere minimal (a slim container with no system CA store, or behind\n> a private CA), point `SSL_CERT_FILE` or `SSL_CERT_DIR` at a CA bundle.\n\n### 3. Add it to your MCP client\n\nBoth settings are optional. `STEAM_API_KEY` unlocks the account tools; `STEAM_USER`\n(your Steam vanity name, SteamID64, or profile URL) makes those tools default to *you*\nwhenever you don't name a user, so you never paste a SteamID. It's a public profile\nname, not a secret, and you can still pass a `steamid` to any call to override it.\n\nConfigure neither and you get the keyless server; configure both and you get everything.\n\n**Claude Code**\n\n```bash\nclaude mcp add steam --env STEAM_API_KEY=YOUR_KEY --env STEAM_USER=your_steam_name -- uvx steam-mcp\n```\n\n> `STEAM_USER` is optional — drop the second `--env` if you'd rather give a\n> SteamID to each call.\n\n**Claude Desktop** — install `steam-mcp.mcpb` from the\n[latest release](https://github.com/Sarg338/steam-mcp/releases/latest) via\nSettings → Extensions and paste your key (and, optionally, your Steam name).\n\n**Everything else** (Claude Desktop config, Cursor, Cline, Windsurf, VS Code, …) —\ndrop this block into the client's MCP config file:\n\n```json\n{\n  \"mcpServers\": {\n    \"steam\": {\n      \"command\": \"uvx\",\n      \"args\": [\"steam-mcp\"],\n      \"env\": {\n        \"STEAM_API_KEY\": \"YOUR_KEY_HERE\",\n        \"STEAM_USER\": \"your_steam_name\"\n      }\n    }\n  }\n}\n```\n\nConfig locations: Claude Desktop `claude_desktop_config.json` (`%APPDATA%\\Claude\\`\non Windows, `~/Library/Application Support/Claude/` on macOS); Cursor\n`.cursor/mcp.json`; Cline `cline_mcp_settings.json`. Restart the client and the\nSteam tools appear. Running from a source checkout instead? Use\n`\"command\": \"python\", \"args\": [\"-m\", \"steam_mcp.server\"]`.\n\n---\n\n## Security\n\nRead-only, official-Steam-only, and bring-your-own-key. In short:\n\n- **Read-only** — never writes, trades, posts, launches games, or buys anything.\n- **Your key stays yours** — read from `STEAM_API_KEY`; never written to disk,\n  logged, cached, or put in output (and redacted from error messages).\n- **Official hosts only** — the request layer refuses any host that isn't\n  `api.steampowered.com` / `store.steampowered.com` / `steamcommunity.com` (SSRF\n  guard), with per-host rate limiting and retry/backoff.\n- **Typed, validated inputs** (`extra=\"forbid\"`); no data kept between requests\n  beyond a small TTL cache of non-user store data.\n\nFull details and how to report issues are in [SECURITY.md](SECURITY.md).\n\n---\n\n## Versioning & stability\n\n`steam-mcp` follows [Semantic Versioning](https://semver.org). As of **1.0**, the\nfollowing are the **stable public surface** — they won't change without a major\n(2.0) release:\n\n- **Tool names** and their **input parameters** (names, types, whether required,\n  defaults)\n- **JSON output fields** (`response_format: \"json\"`) — names, types, and structure\n- **Prompt** names/arguments and **resource** URI templates\n  (`steam://app/{appid}`, `steam://user/{steamid}`)\n- Core semantics: read-only, bring-your-own-key, prices in cents / playtime in\n  minutes, and errors returned as strings\n\nWithin a major version, **minor** releases may *add* tools, prompts, resources,\noptional parameters, and JSON fields; **patch** releases are bug fixes only. The\n**Markdown** output wording, internal implementation, caching behavior, and which\nSteam endpoints back a given tool may change at any time and are **not** part of\nthe contract.\n\n---\n\n## License\n\nMIT. Not affiliated with Valve. \"Steam\" is a trademark of Valve Corporation.\n",
  "bytes": 15013,
  "sha": "64ed98019d3682493f5960763938d278d5aeafb4b4662fef836f8756854cd23d",
  "repo_slug": "sarg338/steam-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sarg338_steam_mcp_716157d3/readme"
}