Skip to main content
Glama

steam-mcp

steam-mcp MCP server

A local Model Context Protocol (MCP) server that connects Claude to your Steam library. Ask natural-language questions about your games without ever touching the API yourself.

steam-mcp MCP server

"What have I been playing lately?"
"Suggest something from my backlog I haven't touched yet."
"How many hours have I put into RPGs?"
"Tell me about Elden Ring."

Tools

Tool

What it does

get_library

Your full game library — title, playtime, last played

get_recently_played

Games played in the last 2 weeks

search_library

Filter by name, playtime range, or unplayed status

get_game_details

Store metadata — genres, tags, Metacritic score, price

refresh_library

Clear the cache to fetch fresh data from Steam


Related MCP server: steam-mcp

Requirements

  • Node.js 18+

  • A Steam account with a public profile and library

  • A Steam Web API key (free, takes 30 seconds to get)


Setup

1. Get a Steam API key

Go to steamcommunity.com/dev/apikey, log in, and register a key. The domain field can be anything (e.g., localhost).

2. Find your Steam ID

You need either:

  • Your vanity URL username — the custom part of your profile URL: steamcommunity.com/id/YOUR_USERNAME

  • Your 64-bit Steam ID — find it at steamid.io if you don't have a vanity URL

3. Make your profile public

In Steam: your profile → Edit ProfilePrivacy Settings → set My Profile and Game details to Public.

4. Run setup

npx steam-mcp setup

This validates your credentials and writes the Claude Desktop config automatically. Restart Claude Desktop when it's done.

Find your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add to the mcpServers section:

{
  "mcpServers": {
    "steam-mcp": {
      "command": "npx",
      "args": ["-y", "steam-mcp"],
      "env": {
        "STEAM_API_KEY": "your_api_key_here",
        "STEAM_ID": "your_vanity_url_or_64bit_id"
      }
    }
  }
}

Local development

git clone https://github.com/jkiley129/steam-mcp.git
cd steam-mcp
npm install
cp .env.example .env
# Edit .env with your API key and Steam ID
npm run build

To use the local build with Claude Desktop, point the config at the built file:

{
  "mcpServers": {
    "steam": {
      "command": "node",
      "args": ["/absolute/path/to/steam-mcp/dist/index.js"],
      "env": {
        "STEAM_API_KEY": "your_api_key_here",
        "STEAM_ID": "your_vanity_url_or_64bit_id"
      }
    }
  }
}

Configuration

Environment variable

Required

Description

STEAM_API_KEY

Yes

Your Steam Web API key

STEAM_ID

Yes

Your 64-bit Steam ID or vanity URL username

STEAM_MCP_CACHE_DIR

No

Override cache directory (default: ~/.steam-mcp/cache/)


Caching

Steam data is cached locally to keep responses fast and avoid hitting rate limits:

Data

Cache TTL

Library

1 hour

Recently played

30 minutes

Game details

24 hours

Use the refresh_library tool to clear the cache immediately (e.g., after buying new games).


Troubleshooting

"Steam returned no library data" Your Steam profile or game library is set to private. Go to Steam → your profile → Edit Profile → Privacy Settings and set both to Public.

"Could not resolve Steam vanity URL" Check that STEAM_ID matches the username in your Steam profile URL (steamcommunity.com/id/YOUR_USERNAME). Alternatively, use your numeric 64-bit Steam ID.

"Could not validate Steam API key" Verify your API key at steamcommunity.com/dev/apikey. Keys are tied to your Steam account login.

Tools not showing in Claude Restart Claude Desktop fully (quit from the system tray, not just close the window) after editing the config file. Check that Node.js 18+ is installed by running node --version in a terminal.


License

MIT

Available Tools

5 tools
get_game_detailsA

Get store details for a game — description, genres, tags, release date, Metacritic score, and price. Accepts game name or appid.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoGame name (case-insensitive substring match against your library)
appidNoSteam app ID

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. It describes a read operation ('Get store details') but does not disclose any behavioral traits such as authentication needs, rate limits, error handling, or what happens if the game is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that efficiently convey the tool's purpose and accepted parameters. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description lists the fields returned (description, genres, tags, release date, Metacritic score, price), providing completeness for a simple lookup tool. It does not mention error behavior or handling multiple matches, but overall it is sufficient for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described. The description adds value for the 'name' parameter by specifying 'case-insensitive substring match against your library', which is not in the schema. For 'appid', no extra information is added beyond schema, but overall it augments parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool gets store details for a game, listing specific fields (description, genres, tags, release date, Metacritic score, price) and notes it accepts game name or appid. This distinguishes it from sibling tools like get_library or search_library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for retrieving store details of a specific game but does not explicitly state when to use this tool vs siblings or any exclusions. The sibling tool names provide context, but the description itself lacks guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_libraryA

Get your full Steam game library with playtime and last-played date for each game.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_unplayedNoInclude games with 0 playtime (default: true)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool returns playtime and last-played date for each game, which is helpful. However, with no annotations provided, it lacks details on authentication requirements, rate limits, or whether the tool requires user authorization. The behavior is partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 13 words, front-loaded with the main action and resource. Every word is informative with no redundancy or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description adequately covers what the tool returns. It could mention authentication needs, but overall it is sufficiently complete given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a description for the lone parameter (include_unplayed) with 100% coverage. The tool description does not add additional meaning about the parameter beyond what the schema offers, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'full Steam game library', and specifies the returned data (playtime and last-played date). It effectively distinguishes from siblings like get_game_details (specific game) and get_recently_played (subset).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the full library is needed, but it does not explicitly state when to use this tool versus alternatives, such as get_recently_played for recently played games or search_library for filtered queries. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recently_playedB

Get games played in the last 2 weeks, with hours played this period and total.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of games to return (default: 10, max: 100)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral disclosure. It does not mention authentication, rate limits, side effects, or confirm read-only nature. The description only states what is returned, not operational characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no extraneous words. It is front-loaded with the core purpose and efficiently conveys key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple list tool with one parameter and no output schema. It mentions returned fields (hours this period and total) but lacks full structure or format details. For a tool with no output schema, more completeness would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'count', which already has a description. The tool description adds no extra value beyond the schema; it mentions returned data but not how the parameter affects results. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'games played in the last 2 weeks', specifying the time window and the data returned (hours this period and total). It effectively distinguishes from siblings like get_game_details or search_library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of context, exclusions, or explicit comparisons to siblings, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_libraryA

Clear the local cache so the next query fetches fresh data from Steam. Use after buying new games.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description discloses that the tool clears a cache and affects subsequent queries, which is important behavioral info. However, with no annotations, it could further detail side effects (e.g., rate limits, auth requirements) or confirm idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the purpose and usage. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description fully covers what the tool does and when to use it. No missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Description adds no parameter information, but this is acceptable per the baseline of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (clear local cache) and the resource (cache for Steam queries). It distinguishes from sibling tools like get_library and search_library by focusing on cache refresh rather than data retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use after buying new games.' This provides clear context, though it does not mention when not to use or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_libraryC

Search and filter your Steam library by name, playtime range, or unplayed status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default: 20)
queryNoCase-insensitive name search
max_hoursNoMaximum playtime in hours
min_hoursNoMinimum playtime in hours
unplayed_onlyNoOnly return games with 0 playtime

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It indicates a read-like operation (search/filter) but does not mention side effects, authentication needs, rate limits, or behavior when no matches are found. The description is too brief to be transparent about operational characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that covers the tool's purpose and filter dimensions. It is appropriately concise with no wasted words. However, it lacks any structural elements (e.g., separate lines for behavior or examples) that could improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 optional parameters and no output schema, the description only covers what the tool does, not what it returns or critical edge cases (e.g., conflicting filters, pagination default limit). While adequate for simple use, it leaves gaps that could confuse an agent, especially given the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter has a description in the input schema. The description rephrases the filter criteria (name, playtime range, unplayed status) but adds no new semantic constraints or contextual guidance beyond the schema. It meets the baseline for a high-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches and filters the Steam library by name, playtime range, or unplayed status. It specifies the verb ('Search and filter') and resource ('your Steam library'), and the filter criteria distinguish it from sibling tools like 'get_library' which likely returns all items. However, it could be more explicit about the action (e.g., 'returns a list of matching games') to avoid ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus its siblings (get_game_details, get_library, get_recently_played, refresh_library). It does not explain when filtering is beneficial, nor does it mention prerequisites or alternatives, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 5 tool updates
    • Addedget_game_details
    • Addedget_library
    • Addedget_recently_played
    • Addedrefresh_library
    • Addedsearch_library

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: store details, full library, recent games, cache refresh, and library search. No overlap between tools.

Naming Consistency5/5

All tools follow a verb_noun pattern using snake_case (get_, refresh_, search_). Verbs are descriptive and consistent across the set.

Tool Count5/5

5 tools is well-scoped for a Steam library server, covering browsing, searching, details, and cache management without unnecessary bloat.

Completeness4/5

Core library operations (view, search, details, cache) are covered. Minor gaps like achievements or wishlist management, but these are reasonable omissions for the scope.

Maintenance

ActivityInactive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers