Skip to main content
Glama

Steam Reviews MCP Server

npm Version License: MIT PayPal

Give your AI assistant access to Steam reviews, game details, patch notes, and community discussions. This MCP server reads public Steam data. No API key or Steam login is needed.

Once connected, try asking:

  • "What are players saying about Cyberpunk 2077's performance in the last month?"

  • "Compare Elden Ring and Baldur's Gate 3 for Steam Deck. Include prices in Germany."

  • "What changed in the latest Baldur's Gate 3 patch?"

  • "Search Portal 2 discussions for co-op connection problems and read a few threads."

Setup

Run with npx

Use a current Node.js LTS release. Node.js 24 or newer is recommended. Your MCP client can start the server with npx, so there is no separate install step.

For Claude Desktop, add this entry to claude_desktop_config.json:

{
  "mcpServers": {
    "steam-reviews": {
      "command": "npx",
      "args": ["-y", "@jhomen368/steam-reviews-mcp"]
    }
  }
}

The config file is at:

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

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

Restart Claude Desktop after saving. For other MCP clients, use the same command and arguments with the stdio transport in that client's configuration format.

Run with Docker

The container starts in HTTP mode:

docker run -d \
  --name steam-reviews-mcp \
  -p 8086:8086 \
  ghcr.io/jhomen368/steam-reviews-mcp:latest

Connect an SSE-capable MCP client to http://localhost:8086/mcp. Choose SSE as the transport, rather than Streamable HTTP.

For Docker Compose:

services:
  steam-reviews-mcp:
    image: ghcr.io/jhomen368/steam-reviews-mcp:latest
    container_name: steam-reviews-mcp
    ports:
      - "8086:8086"
    restart: unless-stopped

Check that the server is running with curl http://localhost:8086/health.

Related MCP server: Steam Review and Forum MCP

Available tools

Your assistant handles the tool arguments. Ask for a country, language, date range, or topic in your question.

Tool

What it does

search_steam_games

Find games by name.

get_game_info

Get regional prices, review scores, Steam Deck ratings, requirements, and Store details.

fetch_reviews

Read player reviews with filters for date, language, and recommendation.

analyze_reviews

Summarize a review sample, with themes and linked quotes.

fetch_app_announcements

Read official app announcements, patch notes, and hotfixes.

search_app_discussions

Search a game's public community discussions.

fetch_discussion_thread

Read a discussion thread and its replies.

Review summaries cover a sample, and discussion threads are read one page at a time. Community posts reflect player claims, not official announcements. The discussion tools and Steam Deck review filter are experimental and may not always return results.

Configuration

These environment variables are optional. Set them in your MCP client's server environment or pass them to Docker with -e.

Variable

Default

Purpose

CACHE_ENABLED

true

Cache Steam responses.

CACHE_MAX_SIZE

1000

Maximum cached entries.

RATE_LIMIT_ENABLED

true

Limit outgoing Steam requests.

MAX_REQUESTS_PER_MINUTE

30

Request limit.

HTTP_MODE

false

Use HTTP/SSE instead of stdio. The Docker image sets this to true.

PORT

8086

HTTP listening port.

Troubleshooting

If your client cannot start the server, check node --version and confirm it can find npx. The stdio server writes logs to stderr and reserves stdout for MCP messages. You do not need to set DOTENV_CONFIG_QUIET.

For Docker, check docker logs steam-reviews-mcp and the /health endpoint. If health succeeds but the MCP client cannot connect, check that it supports SSE and uses /mcp.

Steam timeouts and HTTP 429 responses can mean requests are being rate-limited. Keep caching enabled and reduce MAX_REQUESTS_PER_MINUTE if these persist.

Development

git clone https://github.com/jhomen368/steam-reviews-mcp.git
cd steam-reviews-mcp
npm ci
npm test
npm run lint

npm test builds the server and runs offline tests. To run the built server over stdio, use node build/index.js. See CONTRIBUTING.md for contribution guidelines and CHANGELOG.md for release history.

Licensed under MIT. You can support the project via PayPal.

Available Tools

7 tools
analyze_reviewsA

Fetch and analyze Steam game reviews to extract sentiment, common themes, and key insights. Supports optional topic drill-down, time-bounded analysis, and pre-fetched reviews.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesSteam AppID of the game to analyze
topicNoOptional: Drill down into specific theme (e.g., "performance", "multiplayer")
dayRangeNoOnly analyze reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time.
languageNoFilter reviews by language (e.g., "english", "schinese")
reviewTypeNoFilter by review sentiment (default: all)
sampleSizeNoNumber of reviews to analyze (default: 100, max: 200)
steamDeckOnlyNoOnly analyze Steam Deck reviews (experimental)
preFetchedReviewsNoOptional: Non-empty array of pre-fetched reviews to analyze instead of fetching new ones. Useful to avoid duplicate API calls. When non-empty, sampleSize, language, reviewType, dayRange, and filtering parameters are ignored.
filterOfftopicActivityNoFilter out review bombing (default: false to show all reviews including controversies)

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 burden of behavioral disclosure. It does disclose that pre-fetched reviews cause other filtering parameters to be ignored, and that filterOfftopicActivity defaults to false to show all reviews including controversies. However, it doesn't mention rate limits, API call behavior, or what happens when fetching fails. The description adds some behavioral context but not comprehensive.

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, focused sentence that front-loads the core purpose and then lists key capabilities. It's concise and every phrase adds value. It could be slightly more structured (e.g., separating the core function from optional features), but it's efficient and readable.

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?

Given the tool's complexity (9 parameters, no output schema), the description covers the main capabilities and important behavioral notes (pre-fetched reviews, filtering behavior). It doesn't explain return value structure, but since there's no output schema, that's a gap. However, the description is reasonably complete for an agent to understand what the tool does and when to use it.

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 100%, so the schema already documents all 9 parameters. The description adds context about the pre-fetched reviews parameter ('Useful to avoid duplicate API calls') and clarifies that filtering parameters are ignored when pre-fetched reviews are provided. However, most parameter semantics are already in the schema, so the description adds marginal value beyond it.

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: 'Fetch and analyze Steam game reviews to extract sentiment, common themes, and key insights.' It uses a specific verb ('analyze') and resource ('Steam game reviews'), and distinguishes itself from sibling tools like fetch_reviews by combining fetching with analysis. The mention of optional topic drill-down, time-bounded analysis, and pre-fetched reviews further clarifies its scope.

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 implies when to use this tool: when you need sentiment, themes, and insights from reviews, rather than just raw reviews (fetch_reviews). It also mentions the pre-fetched reviews option to avoid duplicate API calls, which is a clear usage hint. However, it doesn't explicitly state when NOT to use it or name alternatives like fetch_reviews for raw data needs.

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

fetch_app_announcementsA

Fetch official Steam Community announcements for one app, including patch notes and hotfixes. Bodies retain Steam's raw markup and report whether full content was requested, appears truncated, or is malformed. Displayed author labels do not imply a verified employer or publisher role.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesSteam AppID whose official app announcements should be retrieved
limitNoMaximum number of announcements to return (default: 20, max: 100)
cursorNoOpaque backward pagination cursor from the previous response. Omit for the latest announcements.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it delivers useful behavioral context: bodies retain Steam's raw markup, truncation/malformed states are reported, and author labels do not imply verified roles. It does not cover auth, rate limits, or pagination behavior, but the disclosed output caveats are genuinely informative.

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?

Three tightly scoped sentences, each with a distinct purpose: the operation, the output/truncation behavior, and an important interpretation caveat. The main action is front-loaded and there is no filler.

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?

Given there is no output schema, the description adequately explains the return characteristics (raw markup, truncation/malformed flags) and the scope of the announcements. Minor gaps remain around pagination behavior and sorting, but the core information needed to call and interpret the tool is present.

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 100%, so the schema already explains appId, limit, and cursor. The description reinforces the app-scoped behavior and the notion that content length can be truncated, but it does not add meaningful parameter-level meaning beyond what the input schema provides.

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 names a specific verb and resource: 'Fetch official Steam Community announcements for one app' and adds concrete content ('patch notes and hotfixes'). This clearly distinguishes it from siblings like fetch_reviews or search_app_discussions, even without naming them explicitly.

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 instead of sibling tools, such as search_app_discussions or fetch_discussion_thread. It implies the use case (needing official announcements for one app) but gives no alternatives, exclusions, or conditions.

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

fetch_discussion_threadA
Read-onlyIdempotent

Experimental, read-only retrieval of one public Steam Community discussion page by app, forum, and thread IDs, not an arbitrary URL. Returns the identifier, title, opener and up to 50 replies, with text capped at 20,000 characters per post, links, displayed Steam markers, timestamps, deleted status and truncation flags. Steam markers do not establish an employer, publisher, or job title. Community user claims and repetition are not verification. Check status, reason and pagination for blocked, unavailable or partial evidence. Defaults to page 1; a search-match fragment does not select the reply page. Paginate manually; a page is not an exhaustive thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoOne thread page to fetch; defaults to 1 regardless of search-match fragments
appIdYesSteam AppID from the discussion identifier
forumIdYesForum ID from the discussion identifier, kept as a decimal string
threadIdYesThread ID from the discussion identifier, kept as a decimal string

TDQS

A4.6/5.0
Behavior5/5

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

It discloses experimental status, a 50-reply cap, a 20,000-character post cap, truncation flags, and the fact that Steam markers are not proof of employment. It also warns that status/reason/pagination should be checked for blocked or partial evidence—far beyond what the annotations already state.

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 purpose is front-loaded and the sentences are information-dense. It is longer than minimal because of important caveats about markers, verification, and pagination, but each sentence earns its place; a few could be tightened.

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?

With no output schema, the description carries the burden of explaining return fields, and it does: identifier, title, opener, up to 50 replies, text caps, links, markers, timestamps, deleted status, and truncation flags. Pagination semantics and failure/partial-evidence checks are also covered, making the tool safely invocable.

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%, so the baseline is 3. The description adds meaning by explaining that the page parameter defaults to 1 and that a search-match fragment does not select the reply page, plus noting that IDs come from the discussion identifier.

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 names a specific verb ('retrieval') and resource ('one public Steam Community discussion page') and explicitly identifies the required IDs (app, forum, thread). It also draws a boundary against 'an arbitrary URL', which helps distinguish it from search_app_discussions even without naming the sibling.

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 clear context: the tool requires app/forum/thread IDs, defaults to page 1, and requires manual pagination. It does not explicitly name sibling tools or state when to avoid this tool, so it stops short of a 5.

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

fetch_reviewsA

Fetch actual user reviews for a Steam game with advanced filtering and pagination support. Returns review text, author info, timestamps, and voting data. Supports time-bounded queries and review bomb filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesSteam AppID of the game
limitNoNumber of reviews to fetch (default: 20, max: 100)
cursorNoPagination cursor from previous response. Omit or use an empty string for the first page.
filterNoReview filter (default: all)
dayRangeNoOnly include reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time.
languageNoLanguage code (e.g., "english", "schinese", Steam format)
reviewTypeNoFilter by review sentiment (default: all)
purchaseTypeNoFilter by purchase type (default: all)
steamDeckOnlyNoOnly include Steam Deck reviews (experimental, may not work reliably)
filterOfftopicActivityNoFilter out review bombing and off-topic activity (default: false to show all reviews)

TDQS

A3.6/5.0
Behavior3/5

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

With no supplied annotations, the description carries the behavioral burden. It does describe return contents (review text, author info, timestamps, voting data) and mentions time-bounded queries and review-bomb filtering, which is useful. It does not disclose rendering error behavior, rate limiting, or that the operation is strictly read-only beyond the word 'fetch'.

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 compact and front-loaded, with each sentence adding a distinct piece of value: what is fetched, what is returned, and which special capabilities are supported. Some wording such as 'actual' and 'advanced' is slightly vague but harmless.

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 10-parameter tool with no annotations and no output schema, the description covers the core purpose and return contents but leaves details like cursor-based pagination flow and response shape to be inferred. The schema's high coverage softens this gap, but the description alone is not fully self-sufficient.

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 100%, so the schema already documents all 10 parameters. The description adds high-level categories like filtering and pagination but does not add meaning to individual parameters beyond what the schema states.

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 names a specific verb and resource ('Fetch actual user reviews for a Steam game') and differentiates this tool from siblings like search_steam_games, get_game_info, analyze_reviews, and discussion tools by emphasizing raw review data, review text, pagination, and review-bomb filtering.

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 intended use is implied clearly: use this when you need raw user reviews with filtering and pagination. However, it never explicitly names alternatives or explains when to use analyze_reviews or get_game_info instead, so the routing guidance is 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_game_infoA

Get detailed information about one or more Steam games by AppID for an optional Steam store country and language. Returns Steam's regional quote, request context, raw third-party account and DRM or launcher notices, supported languages, declared Store categories, review statistics, and Valve's Steam Deck compatibility report. Missing notices do not prove that a requirement is absent, and the server does not infer launcher identity, online-only behavior, activation limits, anti-cheat, or absence of DRM. Store categories are declarations, not independently tested behavior. Optional enrichment failures produce per-game warnings without removing base information. System requirements and DLC are optional. Supports filtering by review quality criteria.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdsYesArray of Steam AppIDs to fetch information for (supports batch queries)
countryNoTwo-letter ISO 3166-1 Steam store country code (default: us)us
criteriaNoOptional filter criteria. Omit when no filtering is needed; zero and false values do not filter results.
languageNoSteam language code for localized Store content (default: english; use values such as german or schinese, not ISO codes such as de or zh)english
includeDlcNoInclude list of available DLC
includeStatsNoInclude review statistics (default: true)
includeRequirementsNoInclude system requirements (PC minimum/recommended specs)
includeCurrentPlayersNoInclude current player count (default: false)

TDQS

A3.9/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure, and it does so extensively. It explicitly warns that missing notices do not prove absence of requirements, the server does not infer launcher or DRM behavior, store categories are unverified declarations, and enrichment failures produce warnings without losing base data. It also notes optional fields like system requirements and DLC. This is exceptional transparency for a read tool.

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 long but every sentence carries meaningful information. It is front-loaded with the primary purpose, follows with a structured list of output categories, then detailed caveats. The text is not redundant and avoids filler; the length is justified by the tool's complexity. One minor drop from 5 because the caveats section is somewhat verbose but necessary.

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?

Given 8 parameters and no output schema, the description thoroughly explains what information will be returned and clarifies optionality and failure modes. It covers the main output categories and acknowledges the risk of enrichment errors. It could be more specific about the exact response structure or rate limitations, but for a data-retrieval tool it is quite complete.

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 description coverage is 100%, so every parameter (appIds, country, criteria, language, includeDlc, includeStats, includeRequirements, includeCurrentPlayers) already has a clear description. The tool description adds minimal parameter-specific detail beyond restating that filtering is supported and that some fields are optional. No extra meaning is provided beyond the schema, so the baseline score of 3 stands.

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 ('Get detailed information about one or more Steam games by AppID') and specifies the optional country/language parameters. It enumerates the exact categories of returned data (regional quote, DRM notices, review stats, Steam Deck compatibility, etc.), making it distinct from siblings like search_steam_games (which searches) and fetch_reviews (which focuses on review content). This is a specific and unambiguous purpose.

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 (e.g., search_steam_games, fetch_reviews). It does not mention alternatives, use cases that would favor a different tool, or exclusions. While it states what data it returns, an agent must infer when this is the right choice without explicit direction.

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

search_app_discussionsA
Read-onlyIdempotent

Experimental, read-only search of public Steam Community discussions for one app. Fetches one page with at most 50 matching posts, grouped by thread. matchingPostsObserved counts only the fetched sample; author and date describe each match, not thread creation. Community user claims and repetition are not verification. Returns provenance, availability status and reason, and bounded pagination. Pass a returned identifier to fetch_discussion_thread, which starts at page 1 even when a match links to a later reply. Paginate manually; results are not exhaustive.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoOne search page to fetch; use pagination.nextPage to request another page
sortNoSteam search order; defaults to relevancerelevance
appIdYesSteam AppID whose public discussions should be searched
queryYesNon-blank search query; maximum 256 input characters including surrounding whitespace. Trimmed before searching.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: results are grouped by thread, matchingPostsObserved counts only the fetched sample, author/date describe each match rather than thread creation, community claims are not verification, and pagination is bounded. This is rich, non-obvious behavior that an agent needs to interpret results correctly.

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 dense but every sentence earns its place: scope, result shape, counting semantics, verification caveat, return fields, pagination behavior, and sibling routing. It is front-loaded with the most important scoping and read-only facts. It could be slightly more compact, but the density is justified given the number of non-obvious behaviors.

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 search tool with no output schema, the description covers the key things an agent needs: what is searched, what the results mean, what is not verified, and how pagination works. It also names the sibling for fetching a thread. The only minor gap is that it doesn't describe the exact shape of the returned provenance/availability fields, but it explicitly names them, which is enough for an agent to proceed.

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 100%, so the schema already documents all four parameters, including defaults, constraints, and the pagination.nextPage hint. The description adds some context by explaining that author/date describe each match and that results are grouped by thread, which helps interpret query results, but it doesn't add much parameter-level meaning beyond the schema. 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 states a specific verb ('search'), a specific resource ('public Steam Community discussions for one app'), and immediately distinguishes it from a general Steam search by scoping it to one app. It also names the sibling fetch_discussion_thread and explains the relationship, so an agent can tell this tool apart without opening schemas.

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 this is experimental, read-only, and not exhaustive, and tells the agent to paginate manually. It also names the alternative fetch_discussion_thread and explains that it starts at page 1 even when a match links to a later reply, which is exactly the kind of when-to-use vs alternative guidance that helps an agent avoid mistakes.

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

search_steam_gamesA

Search for Steam games by name or keywords. Provide query for a single search or a non-empty queries array for batch searches. Returns basic game information including AppID, name, price, and preview image.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results PER QUERY (default: 10, max: 25)
queryNoNon-blank single search query (game name or keywords)
queriesNoMultiple search queries for batch searching. May be empty when query is provided.

TDQS

A4/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 burden of behavioral disclosure. It states the tool returns basic game information and supports batch searches, but does not disclose rate limits, pagination behavior, or what happens with invalid queries. The description is honest but lacks depth on edge cases and operational constraints.

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 no fluff. It front-loads the core purpose, then explains the single vs batch usage, and ends with the return fields. Every sentence earns its place.

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 search tool with no output schema and no annotations, the description covers the main usage and return values. It lacks details on error handling, rate limits, or result ordering, but for a simple search tool, the essential information is present. The batch search constraint (max 5 queries) is in the schema, not the description, but the description mentions the non-empty array requirement.

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 100%, so the schema already documents all parameters. The description adds context by explaining the batch search option and the return fields, but it does not add significant meaning beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

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 searches for Steam games by name or keywords and returns basic game information (AppID, name, price, preview image). It distinguishes itself from siblings like get_game_info and fetch_reviews by focusing on search and listing basic game data.

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 explains how to use the tool: provide a single query or a non-empty queries array for batch searches. It implies when to use it (searching for games) but does not explicitly state when not to use it or mention alternatives like get_game_info for detailed info. The batch search guidance is clear and useful.

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. 7 tool updatesv1.1.1
    • Changedanalyze_reviews3 fields changed
      • changedInput schema / properties / dayRange / description
        Previous value: -"Only analyze reviews from last N days (e.g., 30, 90, 365)"New value: +"Only analyze reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time."
      • changedInput schema / properties / dayRange / minimum
        Previous value: -1New value: +0
      • changedInput schema / properties / preFetchedReviews / description
        Previous value: -"Optional: Pre-fetched reviews to analyze instead of fetching new ones. Useful to avoid duplicate API calls. If provided, sampleSize, language, reviewType, dayRange, and filtering parameters are ignored."New value: +"Optional: Non-empty array of pre-fetched reviews to analyze instead of fetching new ones. Useful to avoid duplicate API calls. When non-empty, sampleSize, language, reviewType, dayRange, and filtering parameters are ignored."
    • Addedfetch_app_announcements
    • Addedfetch_discussion_thread
    • Changedfetch_reviews3 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Pagination cursor from previous response"New value: +"Pagination cursor from previous response. Omit or use an empty string for the first page."
      • changedInput schema / properties / dayRange / description
        Previous value: -"Only include reviews from last N days (e.g., 30, 90, 365)"New value: +"Only include reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time."
      • changedInput schema / properties / dayRange / minimum
        Previous value: -1New value: +0
    • Changedget_game_info4 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "us",
        +  "description": "Two-letter ISO 3166-1 Steam store country code (default: us)",
        +  "enum": [
        +    "ad",
        +    "ae",
        +    "af",
        +    "ag",
        +    "ai",
        +    "al",
        +    "am",
        +    "ao",
        +    "aq",
        +    "ar",
        +    "as",
        +    "at",
        +    "au",
        +    "aw",
        +    "ax",
        +    "az",
        +    "ba",
        +    "bb",
        +    "bd",
        +    "be",
        +    "bf",
        +    "bg",
        +    "bh",
        +    "bi",
        +    "bj",
        +    "bl",
        +    "bm",
        +    "bn",
        +    "bo",
        +    "bq",
        +    "br",
        +    "bs",
        +    "bt",
        +    "bv",
        +    "bw",
        +    "by",
        +    "bz",
        +    "ca",
        +    "cc",
        +    "cd",
        +    "cf",
        +    "cg",
        +    "ch",
        +    "ci",
        +    "ck",
        +    "cl",
        +    "cm",
        +    "cn",
        +    "co",
        +    "cr",
        +    "cu",
        +    "cv",
        +    "cw",
        +    "cx",
        +    "cy",
        +    "cz",
        +    "de",
        +    "dj",
        +    "dk",
        +    "dm",
        +    "do",
        +    "dz",
        +    "ec",
        +    "ee",
        +    "eg",
        +    "eh",
        +    "er",
        +    "es",
        +    "et",
        +    "fi",
        +    "fj",
        +    "fk",
        +    "fm",
        +    "fo",
        +    "fr",
        +    "ga",
        +    "gb",
        +    "gd",
        +    "ge",
        +    "gf",
        +    "gg",
        +    "gh",
        +    "gi",
        +    "gl",
        +    "gm",
        +    "gn",
        +    "gp",
        +    "gq",
        +    "gr",
        +    "gs",
        +    "gt",
        +    "gu",
        +    "gw",
        +    "gy",
        +    "hk",
        +    "hm",
        +    "hn",
        +    "hr",
        +    "ht",
        +    "hu",
        +    "id",
        +    "ie",
        +    "il",
        +    "im",
        +    "in",
        +    "io",
        +    "iq",
        +    "ir",
        +    "is",
        +    "it",
        +    "je",
        +    "jm",
        +    "jo",
        +    "jp",
        +    "ke",
        +    "kg",
        +    "kh",
        +    "ki",
        +    "km",
        +    "kn",
        +    "kp",
        +    "kr",
        +    "kw",
        +    "ky",
        +    "kz",
        +    "la",
        +    "lb",
        +    "lc",
        +    "li",
        +    "lk",
        +    "lr",
        +    "ls",
        +    "lt",
        +    "lu",
        +    "lv",
        +    "ly",
        +    "ma",
        +    "mc",
        +    "md",
        +    "me",
        +    "mf",
        +    "mg",
        +    "mh",
        +    "mk",
        +    "ml",
        +    "mm",
        +    "mn",
        +    "mo",
        +    "mp",
        +    "mq",
        +    "mr",
        +    "ms",
        +    "mt",
        +    "mu",
        +    "mv",
        +    "mw",
        +    "mx",
        +    "my",
        +    "mz",
        +    "na",
        +    "nc",
        +    "ne",
        +    "nf",
        +    "ng",
        +    "ni",
        +    "nl",
        +    "no",
        +    "np",
        +    "nr",
        +    "nu",
        +    "nz",
        +    "om",
        +    "pa",
        +    "pe",
        +    "pf",
        +    "pg",
        +    "ph",
        +    "pk",
        +    "pl",
        +    "pm",
        +    "pn",
        +    "pr",
        +    "ps",
        +    "pt",
        +    "pw",
        +    "py",
        +    "qa",
        +    "re",
        +    "ro",
        +    "rs",
        +    "ru",
        +    "rw",
        +    "sa",
        +    "sb",
        +    "sc",
        +    "sd",
        +    "se",
        +    "sg",
        +    "sh",
        +    "si",
        +    "sj",
        +    "sk",
        +    "sl",
        +    "sm",
        +    "sn",
        +    "so",
        +    "sr",
        +    "ss",
        +    "st",
        +    "sv",
        +    "sx",
        +    "sy",
        +    "sz",
        +    "tc",
        +    "td",
        +    "tf",
        +    "tg",
        +    "th",
        +    "tj",
        +    "tk",
        +    "tl",
        +    "tm",
        +    "tn",
        +    "to",
        +    "tr",
        +    "tt",
        +    "tv",
        +    "tw",
        +    "tz",
        +    "ua",
        +    "ug",
        +    "um",
        +    "us",
        +    "uy",
        +    "uz",
        +    "va",
        +    "vc",
        +    "ve",
        +    "vg",
        +    "vi",
        +    "vn",
        +    "vu",
        +    "wf",
        +    "ws",
        +    "ye",
        +    "yt",
        +    "za",
        +    "zm",
        +    "zw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / criteria / description
        Previous value: -"Optional filter criteria - only games matching ALL criteria will be returned"New value: +"Optional filter criteria. Omit when no filtering is needed; zero and false values do not filter results."
      • changedInput schema / properties / criteria / properties / maxPrice / description
        Previous value: -"Maximum price in cents (e.g., 1999 for $19.99)"New value: +"Maximum price in cents (e.g., 1999 for $19.99). Use 0 or omit for no maximum."
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "english",
        +  "description": "Steam language code for localized Store content (default: english; use values such as german or schinese, not ISO codes such as de or zh)",
        +  "enum": [
        +    "arabic",
        +    "brazilian",
        +    "bulgarian",
        +    "czech",
        +    "danish",
        +    "dutch",
        +    "english",
        +    "finnish",
        +    "french",
        +    "german",
        +    "greek",
        +    "hungarian",
        +    "indonesian",
        +    "italian",
        +    "japanese",
        +    "koreana",
        +    "latam",
        +    "malay",
        +    "norwegian",
        +    "polish",
        +    "portuguese",
        +    "romanian",
        +    "russian",
        +    "schinese",
        +    "spanish",
        +    "swedish",
        +    "tchinese",
        +    "thai",
        +    "turkish",
        +    "ukrainian",
        +    "vietnamese"
        +  ],
        +  "type": "string"
        +}
    • Addedsearch_app_discussions
    • Changedsearch_steam_games8 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "query"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "queries": {
        +        "minItems": 1
        +      }
        +    },
        +    "required": [
        +      "queries"
        +    ]
        +  }
        +]
      • changedInput schema / properties / queries / description
        Previous value: -"Multiple search queries for batch searching"New value: +"Multiple search queries for batch searching. May be empty when query is provided."
      • addedInput schema / properties / queries / items / minLength
        Added value: +1
      • addedInput schema / properties / queries / items / pattern
        Added value: +"\\S"
      • removedInput schema / properties / queries / minItems
        Removed value: -1
      • changedInput schema / properties / query / description
        Previous value: -"Single search query (game name or keywords)"New value: +"Non-blank single search query (game name or keywords)"
      • addedInput schema / properties / query / minLength
        Added value: +1
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
  2. 4 tool updatesv1.0.0
    • First observedanalyze_reviews
    • First observedfetch_reviews
    • First observedget_game_info
    • First observedsearch_steam_games

TDQS

A4/5.0

Scored across 7 tools

Disambiguation4/5

Each tool targets a distinct Steam resource/action, and the descriptions clearly separate search, retrieval, fetching, and analysis. The only mild ambiguity is between fetch_reviews and analyze_reviews, since both operate on reviews, but the raw-data vs. insight-extraction distinction is clearly explained.

Naming Consistency4/5

All tools follow a snake_case verb_noun pattern, which is readable and predictable. Minor inconsistency exists in resource naming, such as search_app_discussions vs. fetch_discussion_thread and the mixed use of get/fetch/search, but the overall convention is consistent.

Tool Count5/5

Seven tools is a well-scoped size for a Steam community data server. Each tool covers a distinct need: game search, game details, reviews, review analysis, announcements, discussion search, and thread retrieval, with no obvious redundancy.

Completeness5/5

The tool set provides solid read coverage across the apparent domain: discovering games, retrieving game metadata, fetching and analyzing reviews, reading announcements, and browsing community discussions. Pagination support and cross-linking between discussion search and thread fetching avoid dead ends.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers