steam-mcp
# steam-mcp
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI assistants to the [Steam Web API](https://partner.steamgames.com/doc/webapi) and storefront services. Enables game library analysis, backlog recommendations based on mood, wishlist evaluation, and storefront searches. Works alongside `itad-mcp` and `opencritic-mcp`.
[](https://npmjs.org/package/steam-mcp)
## What this does
This server acts as the foundational layer of a 3-server gaming stack:
- **`steam-mcp`** (this one) — understands your Steam library, playtime, backlog, wishlist, and tastes. It surfaces game AppIDs.
- **`opencritic-mcp`** — takes game names/AppIDs and provides detailed critic scores and reviews.
- **`itad-mcp`** — takes game names/AppIDs and finds the best deals across legitimate storefronts and historical lows.
**Example workflow:**
User: "I want something atmospheric and chill to play tonight."
1. `steam-mcp` (`recommend_from_library`) finds unplayed "Atmospheric" + "Relaxing" games in your backlog.
2. `opencritic-mcp` validates which of those games have great critic scores.
3. User: "These look great, any of them on sale?"
4. `itad-mcp` takes the AppIDs and checks if any are on sale right now.
**Wishlist deal check:** `get_wishlist` → take AppIDs → `itad-mcp get_historical_low` → surface any games at or near their historical low price.
## Tools
| Tool | Parameters | Description | Requires API Key? |
|---|---|---|---|
| `get_library` | `steam_id` (string, optional)<br>`sort` ("playtime" \| "recent" \| "name")<br>`filter` ("all" \| "unplayed" \| "played")<br>`limit` (number, default 50) | Retrieve the user's owned Steam game library with playtime statistics. | Yes |
| `get_recently_played` | `steam_id` (string, optional) | Games played in the last 2 weeks. | Yes |
| `get_wishlist` | `steam_id` (string, optional)<br>`sort` ("priority" \| "date_added" \| "name")<br>`limit` (number, default 50) | Retrieve the user's Steam wishlist to find interesting games. | Yes |
| `get_app_details` | `appid` (number)<br>`country_code` (string, default 'us') | Full Steam Store metadata for a specific game (description, genres, categories, price, metacritic). | No |
| `get_app_reviews` | `appid` (number)<br>`filter` ("all" \| "recent" \| "positive" \| "negative") | Steam user review sentiment for a game. | No |
| `search_games` | `query` (string)<br>`limit` (number, default 10) | Resolve a game title to a Steam AppID. | No |
| `recommend_from_library` | `steam_id` (string, optional)<br>`tags` (string[])<br>`unplayed_only` (boolean, default true)<br>`limit` (number, default 10) | Find games in the user's library that match specified tags/mood. | Yes |
| `discover_games` | `tags` (string[])<br>`steam_id` (string, optional)<br>`max_results` (number, default 20)<br>`country_code` (string, default 'us') | Find well-reviewed games on Steam matching specific tags that the user does NOT own. | Optional |
## Prerequisites
- Node 18+
- Steam account with a public library
- Steam Web API key
## Getting a Steam API Key
1. Go to https://steamcommunity.com/dev/apikey
2. Log in with your Steam account.
3. Enter any domain name (e.g. `localhost`).
4. Click "Register" and copy the generated 32-character API key.
## Finding your Steam ID
You can use either your vanity name or your 17-digit SteamID64.
- If your profile URL is `https://steamcommunity.com/id/your_vanity_name/`, your Steam ID is `your_vanity_name`.
- If your profile URL is `https://steamcommunity.com/profiles/76561198012345678/`, your Steam ID is `76561198012345678`.
## Make your profile public
For the API to read your library and playtime, your Game Details privacy setting must be Public.
1. Go to your Steam Profile -> Edit Profile -> Privacy Settings.
2. Set "My Profile" to Public.
3. Set "Game details" to Public.
4. Set "Inventory" to Public if you want wishlist access.
## Installation
### Option A: Using `npx` (Recommended)
Add this to your MCP configuration JSON (`mcp_config.json`):
```json
{
"mcpServers": {
"steam": {
"command": "npx",
"args": ["-y", "steam-user-mcp"],
"env": {
"STEAM_API_KEY": "your_api_key_here",
"STEAM_ID": "your_vanity_name"
}
}
}
}
```
### Option B: Clone & Build
```bash
git clone https://github.com/brandikun/steam-mcp
cd steam-mcp
npm install
npm run build
```
Then add this to your MCP config:
```json
{
"mcpServers": {
"steam": {
"command": "node",
"args": ["/path/to/steam-mcp/dist/index.js"],
"env": {
"STEAM_API_KEY": "your_api_key_here",
"STEAM_ID": "your_vanity_name"
}
}
}
}
```
## MCP Configuration variables
- `STEAM_API_KEY` (Required): Your 32-character Steam Web API key.
- `STEAM_ID` (Optional): The default user to query for library and playtime tools. If not provided, it must be passed per tool call.
## Usage with itad-mcp and opencritic-mcp
For the ultimate gaming assistant, combine all three:
```json
{
"mcpServers": {
"steam": {
"command": "npx",
"args": ["-y", "steam-user-mcp"],
"env": { "STEAM_API_KEY": "your_api_key", "STEAM_ID": "your_id" }
},
"itad": {
"command": "npx",
"args": ["-y", "itad-mcp"],
"env": { "ITAD_API_KEY": "your_itad_key" }
},
"opencritic": {
"command": "npx",
"args": ["-y", "opencritic-mcp"],
"env": { "RAPIDAPI_KEY": "your_rapidapi_key" }
}
}
}
```
## Troubleshooting
- **"No Steam ID provided"**: You must set `STEAM_ID` in your environment or provide it in the tool call.
- **"Steam API key is required"**: The `STEAM_API_KEY` environment variable is missing.
- **"Vanity URL not found"**: The Steam ID provided couldn't be resolved. Ensure it's your exact vanity name or a valid SteamID64.
- **Library returns empty**: Your profile is private. See the "Make your profile public" section above.
- **Tags not matching**: Steam tags are very specific. The server does its best with fuzzy matching, but if a tag isn't found, try a broader synonym (e.g., "RPG" instead of "Role-playing").
## Privacy
Credentials are only read from environment variables. No data is logged or sent anywhere except Steam's own APIs.
## License
MIT
TDQS
Scored across 8 tools
Each tool targets a distinct resource and action: recently played, library, wishlist, app details, reviews, title search, library recommendations, and new discoveries. No two tools overlap in purpose, making selection unambiguous.
All tools follow a clear verb_noun or verb_preposition_noun pattern (get_recently_played, get_library, search_games, recommend_from_library, discover_games). The naming style is consistent throughout.
8 tools is well-scoped for a Steam discovery server. Each tool addresses a core need (library, wishlist, metadata, reviews, search, recommendations) without redundancy or bloat.
The tool set covers the primary discovery and recommendation workflows: assessing user preferences, evaluating specific games, and finding new titles. Minor gaps exist (e.g., no direct wishlist management or similar-game lookup), but these are not critical dead ends.