steam-mcp

CodeKeanu/steam-mcp

3.2

If you are the rightful owner of steam-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

A modular Model Context Protocol (MCP) server for integrating Steam API with AI agents like Claude.

Tools
5
Resources
0
Prompts
0

Steam MCP Server

CI Python 3.12+ License: MIT GitHub release

A Model Context Protocol (MCP) server that lets AI assistants like Claude talk to the Steam API. Ask about your games, achievements, playtime, and more.

What Can It Do?

Once set up, you can ask Claude things like:

  • "What games do I own?"
  • "Show my achievements for Counter-Strike 2"
  • "What are the rarest achievements in Elden Ring?"
  • "How many hours have I played this week?"
  • "What's the latest news for Team Fortress 2?"
  • "Show my pending trade offers"
  • "What's the current price for an AK-47 Redline?"

The server includes 36 tools covering player profiles, game libraries, achievements, stats, reviews, wishlists, news, community guides, trading/market data, family sharing, and Steam Workshop.


Quick Start (Non-Developers)

Just want to get it running? Here's the fastest path using Docker.

What You'll Need

  1. Docker - Get Docker Desktop
  2. Steam API Key - Grab one here (it's free)
  3. Your SteamID64 - Find it at steamid.io by pasting your profile URL

Setup

  1. Create a file called .env somewhere you'll remember (like your Documents folder):
STEAM_API_KEY=your_api_key_here
STEAM_USER_ID=your_steamid64_here
  1. Add this to your Claude Desktop config:

Config location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "steam": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--env-file", "/full/path/to/your/.env",
        "ghcr.io/codekeanu/steam-mcp:latest"
      ]
    }
  }
}

Heads up: Replace /full/path/to/your/.env with the actual path to your .env file. On Windows, use forward slashes like C:/Users/YourName/Documents/.env.

  1. Restart Claude Desktop and you're good to go!

Developer Setup

Want to build from source, contribute, or hack on the code? This section's for you.

Prerequisites

Installation

# Clone it
git clone https://github.com/CodeKeanu/steam-mcp.git
cd steam-mcp

# Set up a virtual environment
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# Install in dev mode
pip install -e ".[dev]"

# Configure your keys
cp .env.example .env
# Edit .env with your STEAM_API_KEY and STEAM_USER_ID

Running Locally

For development, point Claude Desktop directly at your local install:

{
  "mcpServers": {
    "steam": {
      "command": "/path/to/steam-mcp/.venv/bin/steam-mcp",
      "env": {
        "STEAM_API_KEY": "your_api_key_here",
        "STEAM_USER_ID": "your_steamid64_here"
      }
    }
  }
}

Development Commands

# Run tests
source .venv/bin/activate
pytest

# Run tests with coverage
pytest --cov=src/steam_mcp --cov-report=term-missing

Docker (Local Builds)

# Build from source
docker compose --profile local build steam-mcp-local

# Run your local build
docker compose --profile local up steam-mcp-local

# Dev mode with volume mount (reflects code changes on restart)
docker compose --profile dev up steam-mcp-dev

Adding New Endpoints

Create a new file in src/steam_mcp/endpoints/ - it gets auto-discovered:

from steam_mcp.endpoints import BaseEndpoint, endpoint
from steam_mcp.utils import normalize_steam_id

class INewInterface(BaseEndpoint):
    """Your new Steam API interface."""

    @endpoint(
        name="my_new_tool",
        description="What this tool does",
        params={
            "steam_id": {
                "type": "string",
                "description": "Steam ID in any format",
                "required": True,
            },
        },
    )
    async def my_new_tool(self, steam_id: str) -> str:
        normalized_id = await normalize_steam_id(steam_id, self.client)
        result = await self.client.get("INewInterface", "Method", version=1, params={...})
        return "Formatted result"

No registration needed - just drop in the file and restart.

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/cool-thing)
  3. Make your changes
  4. Run tests and linting
  5. Push and open a PR

Available Tools (36 total)

Player Profiles (ISteamUser) - 6 tools

ToolWhat it does
get_my_steam_idVerify your Steam ID is configured correctly
get_player_summaryGet profile info (name, avatar, status)
get_player_summariesBatch lookup for multiple players
resolve_vanity_urlConvert a vanity URL to SteamID64
get_friend_listGet someone's friend list
get_player_bansCheck VAC/game ban status

Game Library (IPlayerService) - 4 tools

ToolWhat it does
get_owned_gamesYour game library with playtime stats
get_recently_played_gamesWhat you've played in the last 2 weeks
get_steam_levelYour Steam level
find_unplayed_games_with_friendsFind games you all own but none have played

Achievements & Stats (ISteamUserStats) - 6 tools

ToolWhat it does
get_player_achievementsYour achievement progress for a game
get_game_schemaAll achievements available in a game
get_global_achievement_percentagesHow rare each achievement is
get_user_stats_for_gameDetailed game stats (kills, deaths, etc.)
get_current_playersHow many players are online right now
get_global_stats_for_gameAggregated stats across all players

Game Info (ISteamApps) - 6 tools

ToolWhat it does
get_app_listSearch for games by name
get_app_detailsGame details (price, description, etc.)
get_full_game_detailsComprehensive game info (details, reviews, players, achievements, news) in one call
get_similar_gamesFind games similar to ones you like
get_game_reviewsUser reviews with Steam ratings and sample text
check_app_up_to_dateCheck if a game version is current

Game News (ISteamNews) - 1 tool

ToolWhat it does
get_news_for_appLatest news and patch notes

Wishlist & Pricing (ISteamWishlist) - 3 tools

ToolWhat it does
get_wishlistGet a user's wishlist with current pricing
check_wishlist_salesFind discounted games on your wishlist
compare_pricesCompare prices across multiple games

Community Guides (ISteamGuides) - 2 tools

ToolWhat it does
search_game_guidesSearch Steam Community guides for a game
get_guide_contentGet guide summary and metadata (full content requires visiting Steam)

Trading & Market (IEconService) - 4 tools

ToolWhat it does
get_trade_offersGet incoming/outgoing trade offers with item details
get_trade_historyView completed trade history
get_market_listingsCheck current market prices for items
check_market_eligibilityCheck if a user can use the Steam Market

Family Sharing (IFamilyGroupsService) - 2 tools

ToolWhat it does
get_family_groupGet family group membership, members, and roles
get_shared_library_appsGet games available through family sharing

Steam Workshop (IPublishedFileService) - 4 tools

ToolWhat it does
search_workshop_itemsSearch Workshop mods by game, with text/tag filters and sorting
search_workshop_collectionsSearch Workshop collections (curated item lists) by game with sorting
get_workshop_item_detailsGet full details on a Workshop item (description, subscribers, dependencies)
get_workshop_collectionGet items from a Workshop collection

Configuration Reference

VariableRequiredDescription
STEAM_API_KEYYesYour Steam Web API key
STEAM_USER_IDNoYour SteamID64 for "my profile" queries
STEAM_RATE_LIMITNoRequests per second (default: 10)
STEAM_TIMEOUTNoRequest timeout in seconds (default: 30)
STEAM_MAX_RETRIESNoMax retry attempts (default: 3)

Steam ID Formats

The server understands all these formats:

  • 76561198000000000 (SteamID64)
  • STEAM_0:0:19867136 (SteamID)
  • [U:1:39734272] (SteamID3)
  • https://steamcommunity.com/id/username (Vanity URL)
  • https://steamcommunity.com/profiles/76561198000000000 (Profile URL)
  • username (Just the vanity name)

License

MIT - do whatever you want with it.