Skip to main content
Glama

steam-mcp

An MCP (Model Context Protocol) server that connects AI assistants to the Steam Web API and storefront services. Enables game library analysis, backlog recommendations based on mood, wishlist evaluation, and storefront searches. Works alongside itad-mcp and opencritic-mcp.

npm version

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.

Related MCP server: steam-mcp

Tools

Tool

Parameters

Description

Requires API Key?

get_library

steam_id (string, optional)sort ("playtime" | "recent" | "name")filter ("all" | "unplayed" | "played")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)sort ("priority" | "date_added" | "name")limit (number, default 50)

Retrieve the user's Steam wishlist to find interesting games.

Yes

get_app_details

appid (number)country_code (string, default 'us')

Full Steam Store metadata for a specific game (description, genres, categories, price, metacritic).

No

get_app_reviews

appid (number)filter ("all" | "recent" | "positive" | "negative")

Steam user review sentiment for a game.

No

search_games

query (string)limit (number, default 10)

Resolve a game title to a Steam AppID.

No

recommend_from_library

steam_id (string, optional)tags (string[])unplayed_only (boolean, default true)limit (number, default 10)

Find games in the user's library that match specified tags/mood.

Yes

discover_games

tags (string[])steam_id (string, optional)max_results (number, default 20)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):

{
  "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

git clone https://github.com/brandikun/steam-mcp
cd steam-mcp
npm install
npm run build

Then add this to your MCP config:

{
  "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:

{
  "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

Available Tools

8 tools
discover_gamesA

Find well-reviewed games on Steam matching specific tags that the user does NOT own. Returns AppIDs — pass them to itad-mcp for pricing and deal data. Use when looking for new purchases.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYes
steam_idNo
max_resultsNo
country_codeNo

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It discloses that it returns AppIDs and filters by ownership, which is useful. But it does not mention auth requirements, rate limits, or whether it's strictly read-only. The behavior is largely implied by 'Find' and 'Returns', but gaps remain around what happens with missing steam_id or how ownership is determined.

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 sentences, directly front-loaded with the core action. No filler or redundant phrasing. Every word earns its place.

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

Completeness2/5

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

No output schema exists, so the description must detail return values and edge cases. It mentions AppIDs but does not explain pagination, default max_results, the meaning of country_code, or the definition of 'well-reviewed'. With 4 parameters and no schema descriptions, this is incomplete for a reliable agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It only implicitly covers 'tags' (matching specific tags). The other parameters (steam_id, max_results, country_code) are left entirely unexplained, and the schema provides no descriptions. This is insufficient for correct invocation.

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 action: 'Find well-reviewed games on Steam matching specific tags that the user does NOT own.' It specifies the resource (Steam games), the criteria (tags, not owned, well-reviewed), and the output (AppIDs). This distinguishes it from siblings like search_games (which likely searches without ownership filtering) and recommend_from_library.

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?

The description gives an explicit use case: 'Use when looking for new purchases.' It also directs the user to pass AppIDs to itad-mcp for pricing/deals. However, it does not explicitly mention alternatives or when not to use it, so it's clear but lacks exclusion guidance.

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

get_app_detailsA

Full Steam Store metadata for a specific game: description, genres, categories, price, platforms, Metacritic score. Use when evaluating a specific candidate. Pair with get_app_reviews for Steam sentiment and opencritic-mcp for critic scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
appidYes
country_codeNo

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full transparency burden. It implies a read operation by naming 'get' and listing metadata fields, but it does not mention authentication requirements, error behavior for invalid appid, or effects of the country_code parameter. It adds some context but not comprehensive behavioral disclosure.

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 two concise sentences with no fluff. It front-loads the core purpose and data fields, then adds practical usage guidance. Every sentence earns its place.

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

Completeness2/5

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

The tool has no output schema, no annotations, and only a bare input schema. The description provides the key return fields and use case, but omits an explanation of country_code and any behavioral details like error responses or whether authentication is needed. For a tool with this limited schema context, the description is not complete enough.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any parameters. 'appid' is only implied by 'specific game,' and 'country_code' is completely unmentioned, leaving the agent to guess its purpose (likely regional pricing). The description fails to compensate for the schema's lack of parameter descriptions.

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 tool returns full Steam Store metadata for a specific game, listing concrete fields like description, genres, price, and Metacritic score. It implies a distinct resource and differentiates from siblings like get_app_reviews and search_games by focusing on raw metadata rather than reviews or search results.

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?

It instructs the agent to use this tool when evaluating a specific candidate, providing a clear use case. It also suggests pairing with get_app_reviews for sentiment and opencritic-mcp for critic scores, which gives context for complementary tools. It lacks an explicit 'when not to use' clause, but the guidance is sufficient.

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

get_app_reviewsB

Steam user review sentiment for a game: overall verdict, positive %, and total review count. Use alongside opencritic-mcp critic scores for a complete quality picture.

ParametersJSON Schema
NameRequiredDescriptionDefault
appidYes
filterNo

TDQS

B3.2/5.0
Behavior3/5

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

Without annotations, the description carries the burden of disclosing behavior. It reveals the output content (verdict, positive %, count), but does not state side effects (though a getter is likely read-only), default behavior for the 'filter' parameter, or any rate limits/errors. This is partially transparent but lacks depth.

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 two sentences, front-loaded with the core purpose, and the second sentence adds a practical usage tip. Every word earns its place with no redundancy or filler.

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

Completeness2/5

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

The tool has no output schema, no annotations, and a zero-coverage input schema. The description provides the primary output metrics but fails to explain the filter parameter, default settings, or how results vary by filter value. This leaves the tool incomplete for an agent to predict behavior across all parameter combinations.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It does not explain the 'filter' parameter or its enum values, leaving ambiguity about what 'positive' or 'recent' mean in context. The parameter names are self-explanatory to some degree, but the description adds no value beyond the 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's purpose: 'Steam user review sentiment for a game' and lists the specific metrics returned (overall verdict, positive %, total review count). It distinguishes itself from siblings by focusing on reviews, though it lacks an explicit verb like 'Get' or 'Retrieve'.

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 gives a usage context: 'Use alongside opencritic-mcp critic scores for a complete quality picture,' suggesting when the tool is useful. However, it does not mention alternatives or when not to use this tool, leaving the guidance implied rather than explicit.

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

get_libraryA

Retrieve the user's owned Steam game library with playtime statistics. Use to understand what the user owns, identify backlog (unplayed), or check playtime for specific games. Sort by 'recent' to see current obsessions. Filter 'unplayed' for backlog candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
filterNo
steam_idNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It mentions the output includes playtime statistics and suggests behavioral capabilities (sorting, filtering), but it does not disclose default behavior, authentication requirements, pagination, or whether the operation is read-only. The description is not misleading but lacks deeper context.

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 three sentences, front-loaded with the primary purpose, followed by concise usage examples. No fluff or repetition; every sentence earns its place.

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 provides a functional understanding but lacks details about default sort order, response format, and edge cases. For a tool with 4 optional parameters and no output schema, more clarity on defaults and return structure would improve completeness. It is adequate for basic use but not comprehensive.

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 description coverage is 0%, so the description must compensate. It adds meaning for two parameters: sort ('recent' as current obsessions) and filter ('unplayed' as backlog). However, it does not explain limit, steam_id, or the remaining enum values (playtime, name, all, played), leaving significant gaps for the agent.

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 tool retrieves the user's owned Steam library with playtime statistics, using a specific verb and resource. It distinguishes itself from siblings like get_recently_played and get_wishlist by focusing on owned games and playtime, covering both inventory and backlog use cases.

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?

It explicitly states when to use the tool: to understand ownership, identify backlog, and check playtime. It also provides specific sorting/filtering guidance ('Sort by recent', 'Filter unplayed'). However, it does not explicitly name alternative tools or state when not to use it, though the use cases imply a clear context.

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

get_recently_playedA

Games played in the last 2 weeks — the strongest signal for the user's current mood and taste. Call this before recommend_from_library to understand recent preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
steam_idNo

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior itself. It adds the temporal window ('last 2 weeks') and interpretive context ('strongest signal for mood and taste'), but it does not explicitly state that this is a read-only operation, nor does it mention return format or any side effects. The read-only nature is implied but not stated.

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 two sentences with zero filler. The first sentence front-loads the core function, and the second provides actionable usage guidance. Every word adds value.

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 single-parameter read tool, the description covers purpose and usage context effectively. It lacks an explicit read-only declaration and output format details, but these are less critical given the tool's simplicity and the presence of usage guidance.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not mention the steam_id parameter at all. While the parameter name is self-explanatory, the description fails to compensate for the lack of schema documentation, leaving semantics like requiredness and intended owner unclear.

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 tool returns 'Games played in the last 2 weeks', which is a specific verb+resource combination. It distinguishes itself from siblings like get_library and get_wishlist by focusing on recent activity as a mood/taste signal.

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

Usage Guidelines5/5

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

The description explicitly says 'Call this before recommend_from_library to understand recent preferences', providing unambiguous sequencing and a named alternative tool. This gives clear when-to-use guidance.

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

get_wishlistA

Retrieve the user's Steam wishlist. Use this to find games the user has already flagged as interesting, then pass the AppIDs to itad-mcp's get_game_prices or get_historical_low to check for deals. This is the most targeted buy-signal workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
steam_idNo

TDQS

A3.7/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It implies a read-only operation with 'Retrieve' but does not disclose potential side effects, authorization requirements, rate limits, or behavior when the wishlist is empty. The description adds context about the wishlist being 'already flagged as interesting,' which is helpful, but it does not go beyond a basic getter description.

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 two sentences and front-loaded with the primary purpose. The first sentence is a clear verb+resource statement, and the second adds workflow context without unnecessary detail. Every sentence earns its place, making it concise and well-structured.

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

Completeness2/5

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

For a tool with 3 optional parameters and no output schema, the description is incomplete. It explains the overall workflow and implies the return includes AppIDs, but it does not describe the output structure, parameter effects, or edge cases. The absence of parameter semantics and output details leaves significant gaps in the agent's understanding.

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

Parameters1/5

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

The input schema has 3 parameters with 0% coverage in the description. The description does not mention 'sort', 'limit', or 'steam_id', leaving the agent to infer their meanings from the schema only. Since the schema provides enumerations and types but no semantic explanation, the description fails to compensate for this gap.

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 tool retrieves the user's Steam wishlist, using the specific verb 'Retrieve' and a well-defined resource. It distinguishes itself from sibling tools by focusing on the wishlist and explicitly mentioning the deal-checking workflow, which is unique among the listed siblings.

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

Usage Guidelines5/5

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

The description provides clear when-to-use guidance: 'Use this to find games the user has already flagged as interesting' and explicitly names alternative/subsequent tools (get_game_prices, get_historical_low). It also frames the tool as part of 'the most targeted buy-signal workflow,' giving context on its preferred position in a sequence.

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

recommend_from_libraryA

Find games in the user's library that match specified tags/mood. Ideal for backlog recommendations. The LLM should derive tags from the user's mood or preferences (e.g., 'relaxing' -> ['Casual', 'Puzzle', 'Atmospheric']). Returns ranked matches with tag overlap scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYes
limitNo
steam_idNo
unplayed_onlyNo

TDQS

A3.8/5.0
Behavior3/5

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

The description adds useful behavioral details by stating 'Returns ranked matches with tag overlap scores' and providing an example of tag derivation. However, with no annotations available, it does not disclose other behavioral aspects such as authentication, rate limits, or error handling, leaving some transparency gaps.

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 concise, front-loaded with the primary purpose, and contains no unnecessary words. The four sentences each add value: purpose, use case, LLM guidance with example, and output behavior.

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 provides essential information: purpose, usage guidance, a derivation example, and output format. However, it lacks explanation for three of the four input parameters and does not detail how the ranking score is computed, making it incomplete for a tool with no annotations or output schema.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only implicitly references the 'tags' parameter via 'specified tags/mood'. It does not explain the meaning of 'limit', 'steam_id', or 'unplayed_only', leaving these parameters underspecified.

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 tool's function: 'Find games in the user's library that match specified tags/mood.' This is a specific verb+resource statement that distinguishes it from siblings like get_library, which simply lists, and search_games, which searches external content.

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?

The description provides clear context by stating 'Ideal for backlog recommendations' and gives concrete guidance for the LLM on how to derive tags from user mood. It does not explicitly outline when not to use the tool or name alternatives, but the use case is well implied.

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

search_gamesA

Resolve a game title to a Steam AppID. Use when you know a game's name but need its AppID for other tools. Returns multiple matches ranked by relevance.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds context by stating 'Returns multiple matches ranked by relevance,' which goes beyond the schema. However, it omits details like failure modes, whether the search covers all Steam games or only the user's library, and any rate limit or authentication considerations. The disclosure is adequate but not rich.

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 two sentences, front-loaded with the core purpose, and contains no filler. Every word earns its place. It is appropriately sized for a simple search tool.

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 tool is simple, but with no annotations and no output schema, the description must cover more ground. It explains the purpose and the return behavior (multiple matches ranked), but does not detail the shape of 'matches' (e.g., whether they include the name plus AppID) or the 'limit' parameter's effect. Core functionality is clear, but coverage has gaps.

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

Parameters2/5

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

The input schema has no parameter descriptions (coverage 0%). The description implicitly explains 'query' as a game title, but 'limit' is entirely unaddressed. Since the description does not compensate for the schema gap on half the parameters, the agent is left guessing what 'limit' controls. This is a significant gap.

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 tool's function: 'Resolve a game title to a Steam AppID.' This is a specific verb-plus-resource statement that distinguishes it from sibling tools like get_app_details or get_library. The phrase 'for other tools' further clarifies its role as a helper utility.

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?

It provides explicit usage context: 'Use when you know a game's name but need its AppID for other tools.' This tells the agent when to invoke this tool, though it does not explicitly name alternatives or provide when-not-to-use scenarios. The context is clear and actionable.

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. 8 tool updatesv1.0.3
    • First observeddiscover_games
    • First observedget_app_details
    • First observedget_app_reviews
    • First observedget_library
    • First observedget_recently_played
    • First observedget_wishlist
    • First observedrecommend_from_library
    • First observedsearch_games

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that exposes your Steam, Epic Games Store, and IGDB game data as tools, enabling game library queries, install status checks, and metadata enrichment.
    12
    2
    MIT