Skip to main content
Glama

steam-mcp

An MCP server that exposes the Steam Web API to any AI harness — Claude Desktop, Claude Code, Cursor, Cline, Windsurf, or anything that speaks the Model Context Protocol.

Ask your assistant things like "How many hours have I put into Team Fortress 2?", "What are the most-played games my friend owns?", or "Summarize the reviews for Baldur's Gate 3" — and it fetches the answer live from Steam.

CI License: MIT Python 3.10+


Why

The Steam Web API is powerful but sprawling: dozens of interfaces, inconsistent shapes, 64-bit SteamIDs, an undocumented store API, and a mandatory key for anything player-related. steam-mcp wraps the useful parts behind a small, well-documented set of workflow-oriented MCP tools that return LLM-friendly, token-efficient responses.

Related MCP server: mcp-server-steam

Quickstart

You need a Steam Web API key for player/profile tools. Get one (free) at https://steamcommunity.com/dev/apikey. Store tools (app details, reviews, search) work without a key.

Run it straight from GitHub with no install using uv (works today — PyPI release pending):

STEAM_API_KEY=xxxxxxxx uvx --from git+https://github.com/rachittshah/steam-mcp steam-mcp

Or install it from source:

uv pip install git+https://github.com/rachittshah/steam-mcp
# once published to PyPI: uv pip install steam-mcp

Claude Desktop / Claude Code

Add to your MCP config (claude_desktop_config.json, or .mcp.json for Claude Code):

{
  "mcpServers": {
    "steam": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/rachittshah/steam-mcp", "steam-mcp"],
      "env": { "STEAM_API_KEY": "your-key-here" }
    }
  }
}

(After a PyPI release the args simplify to ["steam-mcp"].)

Cursor / Cline / Windsurf

Point the MCP server command at the same uvx --from git+... steam-mcp invocation and set STEAM_API_KEY in the environment. See docs/clients.md for per-client instructions.

Configuration

Variable

Required

Default

Description

STEAM_API_KEY

for player tools

—

Steam Web API key.

STEAM_MCP_TIMEOUT

no

20

HTTP request timeout (seconds).

STEAM_MCP_LANGUAGE

no

english

Language for localized store responses.

STEAM_MCP_COUNTRY

no

US

ISO country code for store pricing.

Tools

The full, generated tool reference lives in docs/tools.md. Highlights:

  • Identity — resolve_vanity_url, get_player_summary, get_player_bans, get_steam_level

  • Library — get_owned_games, get_recently_played_games, get_friend_list

  • Achievements & stats — get_player_achievements, get_game_schema, get_global_achievement_percentages, get_current_player_count

  • Store — get_app_details, get_app_reviews, search_store

  • News — get_news_for_app

Example prompts

Once connected, try asking your assistant:

  • "How many people are playing Counter-Strike 2 right now?" → search_store → get_current_player_count

  • "What's the rarest achievement in Team Fortress 2?" → get_global_achievement_percentages

  • "Summarize the recent reviews for Elden Ring." → search_store → get_app_reviews

  • "Whose profile is steamcommunity.com/id/gabelogannewell, and what are they playing?" → get_player_summary

  • "What are my 5 most-played games?" (needs your SteamID) → get_owned_games

  • "Any recent patch notes for Dota 2?" → get_news_for_app

Development

git clone https://github.com/rachittshah/steam-mcp
cd steam-mcp
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
ruff check . && mypy src && pytest

Contributing

Contributions welcome — see CONTRIBUTING.md.

License

MIT © Rachitt Shah. Not affiliated with or endorsed by Valve Corporation. Steam and the Steam logo are trademarks of Valve Corporation.

Available Tools

15 tools
get_app_detailsA
Read-onlyIdempotent

Get full store details for a game/app by appid.

Returns type, description, developers/publishers, release date, price, genres, platforms, Metacritic score, and review recommendation count. No API key required. Use search_store first if you only have a name.

Inputs: appid (required). Returns: result

get_app_reviewsA
Read-onlyIdempotent

Summarize store reviews for a game and show a sample of recent ones.

Returns the overall review label (e.g. "Very Positive"), positive/total counts, and a sample of recent reviews with their up/down vote and the reviewer's playtime. No API key required.

Inputs: appid (required), limit, review_type. Returns: result

get_current_player_countA
Read-onlyIdempotent

Get the number of players currently in a game, right now.

Returns the live concurrent player count for an app. Great for "how many people are playing X right now?". No API key required. Use search_store to find the appid from a game name.

Inputs: appid (required). Returns: result

get_friend_listA
Read-onlyIdempotent

List a player's friends, newest-friended first, with names.

The friend list must be public. Names are resolved in one batch call. Requires an API key.

Inputs: steam_id (required), limit. Returns: result

get_game_schemaA
Read-onlyIdempotent

Get a game's achievement and stat definitions (its schema).

Returns the game's display name, the count and names of its achievements, and any tracked stats. Use this to learn what achievements exist before checking a player's progress. Requires an API key.

Inputs: appid (required). Returns: result

get_global_achievement_percentagesA
Read-onlyIdempotent

Show how rare each achievement is across all players of a game.

Returns achievements sorted from rarest to most common (global unlock percentage). Great for "what's the rarest achievement in X?". No API key required.

Inputs: appid (required). Returns: result

get_news_for_appA
Read-onlyIdempotent

Get the latest news / patch notes for a game.

Returns recent announcements with title, source feed, date, a short excerpt, and a link. No API key required. Use search_store to find the appid from a game name.

Inputs: appid (required), count. Returns: result

get_owned_gamesA
Read-onlyIdempotent

List the games a player owns, with total playtime per game.

Returns a ranked table plus library-wide totals (game count and summed hours). The profile's game details must be public. Requires an API key.

Use sort='recent' to answer "what have they been playing lately?" and limit to control response size.

Inputs: steam_id (required), sort, limit. Returns: result

get_player_achievementsA
Read-onlyIdempotent

Show a player's achievement progress in one game.

Returns overall completion (unlocked / total) and a list of unlocked achievements with dates. The profile must be public and must own the game. Requires an API key.

Inputs: appid (required), steam_id (required). Returns: result

get_player_bansA
Read-onlyIdempotent

Check a player's VAC, game, economy, and community ban status.

Useful for trust/reputation questions. Requires an API key.

Inputs: steam_id (required). Returns: result

get_player_summaryA
Read-onlyIdempotent

Fetch a player's public profile summary.

Returns persona name, online state, profile visibility, account creation date, country, and the game they're currently playing (if public). Private profiles return limited fields. Requires an API key.

Inputs: steam_id (required). Returns: result

get_recently_played_gamesA
Read-onlyIdempotent

List games a player has played in the last two weeks.

Returns each game with its 2-week and lifetime playtime. The profile must be public. Requires an API key.

Inputs: steam_id (required), count. Returns: result

get_steam_levelA
Read-onlyIdempotent

Get a player's Steam community level. Requires an API key.

Inputs: steam_id (required). Returns: result

resolve_vanity_urlA
Read-onlyIdempotent

Resolve a Steam custom (vanity) URL name to its SteamID64.

Use this when you only have a person's custom URL name and need the numeric id that other tools consume. Requires an API key.

Returns the SteamID64 in all common formats, or a not-found message.

Inputs: vanity (required). Returns: result

search_storeA
Read-onlyIdempotent

Search the Steam store by name and return matching apps with appids.

This is the entry point for most store workflows: turn a game name the user mentioned into the appid that get_app_details, get_app_reviews, and the stats tools require. No API key required.

Inputs: term (required), limit. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: player basics, friend lists, owned games, achievements, store search, reviews, and news. The only potential overlap is between owned games and recent playtime, but the descriptions make the timeframe distinction clear.

    Naming Consistency5/5

    All tool names follow the same verb_noun snake_case pattern (get_, search_, resolve_). Even the two non-get verbs are still consistent with the pattern, resulting in a very predictable and uniform API surface.

    Tool Count5/5

    15 tools is at the upper end of the ideal range, but every tool covers a meaningful feature: player info, game stats, store details, and reviews. No tool feels redundant, and the count aligns well with Steam's broad domain.

    Completeness4/5

    The set covers the major workflows: resolving users, fetching profiles/bans/friends, listing owned and recent games, checking achievements, and getting store details/reviews/news. Minor gaps exist (e.g., no wishlist access or player review listing), but these are not dead ends for standard queries.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers