Steam Reviews MCP
This server lets AI assistants search Steam games, fetch and filter user reviews, and perform sentiment analysis on reviews via the Model Context Protocol.
Search games: Single or batch queries (up to 5) with per-query limits, returning AppID, name, price, and preview image.
Get game details: Fetch comprehensive info by AppID, including description, developers, platforms, Metacritic, price, review stats, and optionally system requirements, DLC, and current player counts.
Filter games by criteria: Return only games matching conditions like minimum review score, minimum reviews, price cap, free-only, or Metacritic presence.
Fetch reviews: Retrieve user reviews with filters for sentiment (positive/negative), language, purchase type, time range (last N days), Steam Deck, and review-bomb/off-topic filtering.
Paginate reviews: Use cursors to page through large review sets (up to 100 per request).
Analyze sentiment: Automatically analyze review sentiment, identify common themes, drill into specific topics like performance, and get example quotes with Steam community links.
Work with pre-fetched reviews: Pass existing reviews into analysis to avoid duplicate API calls.
Reduce API load: Built-in caching and rate limiting help minimize Steam API usage.
Allows filtering of game information and search results based on Metacritic review scores and availability.
Provides comprehensive tools to search for Steam games, retrieve detailed game information including system requirements and DLC, and fetch user reviews with advanced filtering options.
Enables specialized filtering of game reviews to focus on Steam Deck compatibility and performance feedback.
Steam Reviews MCP Server
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.jsonWindows:
%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:latestConnect 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-stoppedCheck 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 |
| Find games by name. |
| Get regional prices, review scores, Steam Deck ratings, requirements, and Store details. |
| Read player reviews with filters for date, language, and recommendation. |
| Summarize a review sample, with themes and linked quotes. |
| Read official app announcements, patch notes, and hotfixes. |
| Search a game's public community discussions. |
| 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 Steam responses. |
|
| Maximum cached entries. |
|
| Limit outgoing Steam requests. |
|
| Request limit. |
|
| Use HTTP/SSE instead of stdio. The Docker image sets this to |
|
| 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 lintnpm 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 toolsanalyze_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.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | Steam AppID of the game to analyze | |
| topic | No | Optional: Drill down into specific theme (e.g., "performance", "multiplayer") | |
| dayRange | No | Only analyze reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time. | |
| language | No | Filter reviews by language (e.g., "english", "schinese") | |
| reviewType | No | Filter by review sentiment (default: all) | |
| sampleSize | No | Number of reviews to analyze (default: 100, max: 200) | |
| steamDeckOnly | No | Only analyze Steam Deck reviews (experimental) | |
| preFetchedReviews | No | 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. | |
| filterOfftopicActivity | No | Filter out review bombing (default: false to show all reviews including controversies) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | Steam AppID whose official app announcements should be retrieved | |
| limit | No | Maximum number of announcements to return (default: 20, max: 100) | |
| cursor | No | Opaque backward pagination cursor from the previous response. Omit for the latest announcements. |
TDQS
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.
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.
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.
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.
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.
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_threadARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One thread page to fetch; defaults to 1 regardless of search-match fragments | |
| appId | Yes | Steam AppID from the discussion identifier | |
| forumId | Yes | Forum ID from the discussion identifier, kept as a decimal string | |
| threadId | Yes | Thread ID from the discussion identifier, kept as a decimal string |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | Steam AppID of the game | |
| limit | No | Number of reviews to fetch (default: 20, max: 100) | |
| cursor | No | Pagination cursor from previous response. Omit or use an empty string for the first page. | |
| filter | No | Review filter (default: all) | |
| dayRange | No | Only include reviews from the last N days (e.g., 30, 90, 365). Omit or use 0 for all time. | |
| language | No | Language code (e.g., "english", "schinese", Steam format) | |
| reviewType | No | Filter by review sentiment (default: all) | |
| purchaseType | No | Filter by purchase type (default: all) | |
| steamDeckOnly | No | Only include Steam Deck reviews (experimental, may not work reliably) | |
| filterOfftopicActivity | No | Filter out review bombing and off-topic activity (default: false to show all reviews) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| appIds | Yes | Array of Steam AppIDs to fetch information for (supports batch queries) | |
| country | No | Two-letter ISO 3166-1 Steam store country code (default: us) | us |
| criteria | No | Optional filter criteria. Omit when no filtering is needed; zero and false values do not filter results. | |
| language | No | Steam language code for localized Store content (default: english; use values such as german or schinese, not ISO codes such as de or zh) | english |
| includeDlc | No | Include list of available DLC | |
| includeStats | No | Include review statistics (default: true) | |
| includeRequirements | No | Include system requirements (PC minimum/recommended specs) | |
| includeCurrentPlayers | No | Include current player count (default: false) |
TDQS
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.
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.
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.
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.
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.
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_discussionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One search page to fetch; use pagination.nextPage to request another page | |
| sort | No | Steam search order; defaults to relevance | relevance |
| appId | Yes | Steam AppID whose public discussions should be searched | |
| query | Yes | Non-blank search query; maximum 256 input characters including surrounding whitespace. Trimmed before searching. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results PER QUERY (default: 10, max: 25) | |
| query | No | Non-blank single search query (game name or keywords) | |
| queries | No | Multiple search queries for batch searching. May be empty when query is provided. |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.1.1- Changed
analyze_reviews3 fields changed- changed
Input schema / properties / dayRange / descriptionPrevious 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." - changed
Input schema / properties / dayRange / minimumPrevious value: -1New value: +0 - changed
Input schema / properties / preFetchedReviews / descriptionPrevious 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."
- Added
fetch_app_announcements - Added
fetch_discussion_thread - Changed
fetch_reviews3 fields changed- changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor from previous response"New value: +"Pagination cursor from previous response. Omit or use an empty string for the first page." - changed
Input schema / properties / dayRange / descriptionPrevious 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." - changed
Input schema / properties / dayRange / minimumPrevious value: -1New value: +0
- Changed
get_game_info4 fields changed- added
Input schema / properties / countryAdded 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" +} - changed
Input schema / properties / criteria / descriptionPrevious 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." - changed
Input schema / properties / criteria / properties / maxPrice / descriptionPrevious 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." - added
Input schema / properties / languageAdded 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" +}
- Added
search_app_discussions - Changed
search_steam_games8 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "query" + ] + }, + { + "properties": { + "queries": { + "minItems": 1 + } + }, + "required": [ + "queries" + ] + } +] - changed
Input schema / properties / queries / descriptionPrevious value: -"Multiple search queries for batch searching"New value: +"Multiple search queries for batch searching. May be empty when query is provided." - added
Input schema / properties / queries / items / minLengthAdded value: +1 - added
Input schema / properties / queries / items / patternAdded value: +"\\S" - removed
Input schema / properties / queries / minItemsRemoved value: -1 - changed
Input schema / properties / query / descriptionPrevious value: -"Single search query (game name or keywords)"New value: +"Non-blank single search query (game name or keywords)" - added
Input schema / properties / query / minLengthAdded value: +1 - added
Input schema / properties / query / patternAdded value: +"\\S"
4 tool updates
v1.0.0- First observed
analyze_reviews - First observed
fetch_reviews - First observed
get_game_info - First observed
search_steam_games
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Analyze customer feedback at scale — reviews, surveys, calls. AI-powered themes and sentiment.
G2, Trustpilot, Yelp reviews with sentiment and theme extraction across sources.
ReviewOracle - 8 review intel tools: sentiment, themes, competitors, response drafts.
Web scraping, code review, content gen, sentiment. Zero Core Tools.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables LLMs to retrieve and analyze Steam game reviews, providing access to review statistics, game information, and helping summarize pros and cons of games.114 npm7MIT
- AlicenseAqualityDmaintenanceEnables exploring Steam store reviews and community discussion threads with server-side filtering, temporal analysis, and metadata context for understanding player sentiment and feedback beyond store page noise.1314 npm1BSD 3-Clause
- AlicenseAqualityAmaintenanceEnables interaction with Steam: search games, get store details, reviews, prices, discounts, news, and player profiles, libraries, and achievements via the Steam Web API.25128 npm4MIT
- AlicenseAqualityCmaintenanceEnables personalized Steam game discovery by ranking the store against a player's playtime history and stated preferences, with tools to search games, inspect details and reviews, and explore taste profiles.1010 npmMIT