Steam Review and Forum MCP
Summary: Explore Steam reviews, discussions, and announcements with server-side filtering, aggregation, and saved datasets for player sentiment analysis.
Get Steam game metadata, including release date, developers, publishers, genres, and price.
Fetch Steam reviews with pagination and filters for language, date range, sentiment, purchase type, playtime, and metadata.
Create server-side review corpora for large background fetches and check their progress.
Query saved review corpora by date, sentiment, language, playtime, text, sorting, and field selection.
Aggregate saved reviews into counts, positive/negative breakdowns, day/week/month trends, playtime averages, and language breakdowns.
List Steam forum sections and topics, including Discussions, Events & Announcements, and Trading surfaces.
Fetch forum topics and replies with pagination, original post timestamps, and full-page fetching.
Create and read server-side forum topic corpora for long multi-page threads.
Store review and forum datasets locally with configurable export directories and TTL (default 24 hours).
Report the running MCP server name and version.
Provides tools for fetching and analyzing Steam store reviews, community forums, and game metadata, enabling querying, filtering, aggregation, and temporal analysis of player feedback.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Steam Review and Forum MCPsummarize major complaints in recent negative reviews for Elden Ring"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Steam Review and Forum MCP
Languages: English | 简体中文
MCP server for exploring Steam user reviews and community discussion threads, built for the question behind most Steam research:
What do players actually think about this game once you get past the store page noise?
It can answer questions like:
"Summarize the biggest complaints in recent negative reviews for Steam game XXX."
"Query reviews that talks about performance, and tell me whether the issue sounds widespread."
"Compare launch-period negative reviews with recent positive reviews. What changed?"
"Show month-by-month sentiment since release."
"List recent Events & Announcements threads, and summarize both the patch notes and player reaction."
"How many negative reviews come from players with at least 10 hours at review time?"
"What do long-playtime negative reviewers complain about?"
"Compare English reviews with all-language reviews and tell me what differs."
"Read recent forum threads and tell me whether controller support is broken."
"Based on the reviews from the DLC pages, which DLCs of this game are worth buying?"
Key Features
Server-side filtering and aggregation
Instead of pulling thousands of reviews into the model at once, you can create a saved review dataset once and let the server do the heavy lifting. Query only the reviews that mention
"performance"or"crash", filter by sentiment, date range, language, or playtime, and keep chat context focused on the signal.Temporal precision
This MCP is good at time-based analysis. You can isolate launch-period noise, compare it against a later period, and see how player priorities shift over time. Monthly and weekly trend buckets make that easy to quantify. This is especially effective when the real question is not just "what are people saying?" but "what changed, when did it change, and which players are saying it?"
Metadata context in addition to raw review text
With metadata like
timestamp_created,voted_up,author.playtime_at_review,author.playtime_forever, it's possible to separate quick bounce-offs from long-term players and identify which complaints were genuinely influential.Reviews, forums, and official announcements in one workflow
The same server can inspect Steam reviews, public discussion sections, multi-page threads, and Events & Announcements.
Related MCP server: Steam Reviews MCP
Quick Start
Requirements
Node.js
22.19+npm
Use from npm
npx -y steam-review-and-forum-mcpThat command starts the MCP server over stdio. Most MCP clients will run it for you from their config, so you usually do not need to launch it manually.
Storage
The server writes saved review and forum datasets to local disk. If STEAM_REVIEW_EXPORT_DIR and STEAM_FORUM_EXPORT_DIR are not set, the defaults are package-relative:
.steam-review-exports/.steam-forum-exports/
When using npx, that means the npm/npx-installed package copy. When running from a source checkout, that means the checkout root. The package-relative default works, but for durable storage you should set explicit absolute paths in your MCP client config.
For JSON-based MCP configs, add env:
{
"mcpServers": {
"steam-review-and-forum": {
"command": "npx",
"args": ["-y", "steam-review-and-forum-mcp"],
"env": {
"STEAM_REVIEW_EXPORT_DIR": "<absolute-path-to-review-exports>",
"STEAM_FORUM_EXPORT_DIR": "<absolute-path-to-forum-exports>"
}
}
}
}For Codex config.toml, add an environment table:
[mcp_servers.steam-review-and-forum]
command = "npx"
args = ["-y", "steam-review-and-forum-mcp"]
[mcp_servers.steam-review-and-forum.env]
STEAM_REVIEW_EXPORT_DIR = "<absolute-path-to-review-exports>"
STEAM_FORUM_EXPORT_DIR = "<absolute-path-to-forum-exports>"Claude Desktop
Open Claude Desktop Settings > Developer > Edit Config, add this server to claude_desktop_config.json, then restart Claude Desktop:
{
"mcpServers": {
"steam-review-and-forum": {
"command": "npx",
"args": ["-y", "steam-review-and-forum-mcp"]
}
}
}Codex CLI
codex mcp add steam-review-and-forum -- npx -y steam-review-and-forum-mcpCodex App
In the Codex app, open Settings > Integrations & MCP and add a custom server, or edit ~/.codex/config.toml:
[mcp_servers.steam-review-and-forum]
command = "npx"
args = ["-y", "steam-review-and-forum-mcp"]Claude Code
claude mcp add steam-review-and-forum -- npx -y steam-review-and-forum-mcpCursor
Create or update .cursor/mcp.json:
{
"mcpServers": {
"steam-review-and-forum": {
"type": "stdio",
"command": "npx",
"args": ["-y", "steam-review-and-forum-mcp"]
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"steam-review-and-forum": {
"command": "npx",
"args": ["-y", "steam-review-and-forum-mcp"]
}
}
}Other Stdio-Compatible MCP Clients
Most local MCP clients accept a config shaped like this:
{
"mcpServers": {
"steam-review-and-forum": {
"command": "npx",
"args": ["-y", "steam-review-and-forum-mcp"]
}
}
}MCP Inspector
npx -y @modelcontextprotocol/inspector -- npx -y steam-review-and-forum-mcpRun the Server Manually
npx -y steam-review-and-forum-mcpMost MCP clients will start the server for you, so manual launch is mainly useful for debugging.
Development from Source
If you want to run a local checkout instead of the published npm package:
npm install
npm run build
node build/server.jsTools at a Glance
Note that the mcp server should already work out of the box, and you don't need to know the technical details below to use it.
For the exact MCP tool schemas and forum output semantics, see docs/TOOL_SCHEMAS.md.
Server Metadata
get_server_info: report the name and package version of the running MCP server process
Reviews
get_steam_game_info: cleaned Steam store metadata in Englishget_steam_review: interactive review fetch for one page or a small bounded batchcreate_steam_review_corpus: background fetch for a large review dataset you want to save on the serverget_steam_review_corpus_status: progress and metadata for a saved review datasetquery_steam_review_corpus: filtered review retrieval from a saved review dataset by date, sentiment, language, playtime, text, and sort orderaggregate_steam_review_corpus: server-side counts, trends, playtime averages, and language breakdowns from a saved review dataset
Forums
list_steam_forum_sections: discover available discussion forum sectionslist_steam_forum_topics: list topics in a section;last_activity_timestampandlast_activity_displaymean latest reply or listing activity, not original publicationget_steam_forum_topic: fetch a topic and its replies; usetopic.original_post_timestampfor the original topic or announcement publication timecreate_steam_forum_topic_corpus: background fetch for a long multi-page thread you want to save on the serverget_steam_forum_topic_corpus_status: progress and metadata for a saved forum thread datasetread_steam_forum_topic_corpus_chunk: read one stored reply chunk from a saved long thread
Operational Notes
Saved review datasets are stored in
STEAM_REVIEW_EXPORT_DIRwhen set; otherwise they are stored in.steam-review-exports/next to the installed package.Saved forum thread datasets are stored in
STEAM_FORUM_EXPORT_DIRwhen set; otherwise they are stored in.steam-forum-exports/next to the installed package.Stored exports are cleaned up automatically after
24hours by default.Review and forum fetches retry transient failures and
429responses with backoff.If the process restarts mid-fetch, later status or chunk reads can restart resumable jobs automatically.
Environment Variables
Use these only if you need to tune storage or fetch behavior:
STEAM_REVIEW_EXPORT_DIRSTEAM_FORUM_EXPORT_DIRSTEAM_REVIEW_EXPORT_TTL_HOURSSTEAM_FORUM_EXPORT_TTL_HOURS
License
This project is licensed under the BSD 3-Clause License. See LICENSE.
Available Tools
13 toolsaggregate_steam_review_corpusA
Aggregates committed schema 2 review chunks using text, language, date, sentiment and playtime filters. Returns review counts, positive/negative counts and ratios, average playtimes in minutes, language breakdowns and optional UTC day/week/month buckets (weeks start Monday). Requires metadata. Refund status does not exclude, group or reweight records. Results cover saved data, which can be partial or capped. Completed corpora are read locally without refresh; create a new corpus for updated data. Interrupted jobs may resume while respecting cooldown. Unsupported formats return UNSUPPORTED_CORPUS_VERSION.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | Inclusive end date filter. Use ISO 8601 or YYYY-MM-DD. | |
| group_by | No | Aggregation grain for the returned trend buckets. | month |
| voted_up | No | Optional sentiment filter. true for positive reviews, false for negative reviews. | |
| corpus_id | Yes | Opaque identifier returned by the review corpus tools. | |
| date_from | No | Inclusive start date filter. Use ISO 8601 or YYYY-MM-DD. | |
| languages | No | Optional language filter. Omit or include 'all' to aggregate across all languages. | |
| date_field | No | Which timestamp field to use for date filtering and bucketing. | timestamp_created |
| text_contains | No | Optional case-insensitive substring match against cleaned review text. | |
| max_playtime_forever | No | Optional maximum author.playtime_forever filter, in minutes. | |
| min_playtime_forever | No | Optional minimum author.playtime_forever filter, in minutes. | |
| max_playtime_at_review | No | Optional maximum author.playtime_at_review filter, in minutes. | |
| min_playtime_at_review | No | Optional minimum author.playtime_at_review filter, in minutes. |
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 discloses a lot: refund status neither excludes nor reweights records, results cover only saved data that may be partial/capped, completed corpora are served locally without refresh, interrupted jobs resume under cooldown, and unsupported formats return UNSUPPORTED_CORPUS_VERSION. It still omits auth/permission needs and concurrency behavior, so it falls short of exhaustive.
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?
Purpose and return summary are front-loaded, then caveats follow in dense but single-purpose sentences. It is long, but for a 12-parameter aggregation tool with no annotations nearly every sentence carries distinct information.
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 complex 12-param tool with no output schema and no annotations, the description covers return contents, data-completeness caveats, refresh semantics, resume behavior and an error code, which is close to sufficient. Auth requirements and the exact distinction from query_steam_review_corpus remain uncovered.
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 12 parameters, making 3 the baseline. The description adds only marginal semantics beyond the schema, notably that buckets are UTC and that weeks start Monday.
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?
States a specific verb (Aggregates) and resource (committed schema 2 review chunks) plus the filter dimensions used, so the operation is unambiguous. However, it never distinguishes itself from the sibling query_steam_review_corpus, leaving the agent to guess which one to pick.
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?
It offers a useful routing hint ('Completed corpora are read locally without refresh; create a new corpus for updated data') that points toward create_steam_review_corpus, and notes 'Requires metadata'. But there is no explicit when-to-use vs query_steam_review_corpus, and no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_steam_forum_topic_corpusA
Starts a server-side background fetch for a public Steam Community topic, stores replies in server-managed chunks, and returns an opaque identifier immediately for later status checks and chunk reads. Supports discussion topics and compatible app hub forum surfaces. When an Events & Announcements thread only contains a stub that links to the real announcement article, the server follows that link and stores the announcement body as the topic content when possible. Data stays on the server and is not exported to the caller as files.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_url | Yes | Absolute Steam Community topic URL from a game's discussions board or compatible forum-like app hub surface such as Events & Announcements. | |
| max_comments | No | Optional cap for the background fetch. Use null to retrieve the full thread. | |
| chunk_size_comments | No | How many forum replies to store per persisted chunk. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden but does well: it discloses async behavior, server-side persistence, chunking, opaque token return, follow-link behavior for stub announcements, and that data is not exported as files. It doesn't cover error conditions or auth requirements.
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 sentences, front-loaded with the core action and return value. The Events & Announcements edge case is useful but slightly detailed; overall efficient with minimal waste.
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 an async tool with no annotations and no output schema, the description covers initiation, return value, follow-up usage, storage semantics, and a special-case handling path. Auth and error behavior are absent but not critical for initial invocation.
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 three parameters including defaults and null semantics. The description adds no extra parameter meaning beyond what the schema provides, so baseline 3 applies.
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?
States a specific verb (starts a server-side background fetch), resource (Steam Community topic), and output (opaque identifier). Clearly distinguishes itself from synchronous siblings like get_steam_forum_topic by emphasizing background fetch and chunked storage.
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?
Implies use when a caller needs fire-and-forget fetching followed by status/chunk reads, and names the follow-up tools' purpose implicitly. However, it does not explicitly say when NOT to use this versus get_steam_forum_topic for small threads, leaving some inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_steam_review_corpusA
Creates a public Steam review corpus in the background and immediately returns a new corpus_id for status checks, local queries and aggregates. Each call creates a separate corpus. Defaults to every language, all purchase sources and both sentiments, including off-topic activity and metadata. Metadata includes timestamps, playtime, numeric helpfulness and refunded; refund status does not exclude reviews. Recent/updated traversal has no implicit date window. Fetches share one request lane and 429 cooldown. Saved data is a snapshot; create a new corpus to refresh it. Data stays on the server in schema 2 storage.
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | Steam application ID as a numeric string | |
| languages | No | Review language list, e.g. ['english', 'schinese']. Default ['all']; including 'all' retrieves every language. | |
| page_size | No | Steam page size per fetch. Steam allows up to 100. | |
| max_reviews | No | Optional cap for the background fetch. Use null to retrieve the full corpus. | |
| review_type | No | Review polarity to retrieve. Defaults to all reviews. | all |
| purchase_type | No | Purchase source to retrieve. Defaults to all purchase types. | all |
| traversal_mode | No | Exhaustive traversal uses recent (creation time, default) or updated (modification time), without an implicit date window. | recent |
| chunk_size_reviews | No | How many reviews to store per persisted chunk. | |
| include_review_metadata | No | When true, server-stored review chunks keep per-review metadata such as timestamp_created, timestamp_updated, timestamp_dev_responded, and author playtime fields like playtime_at_review and last_played, instead of only review text. | |
| include_offtopic_activity | No | When true, include off-topic/review-bomb activity in the corpus fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: background execution, immediate corpus_id return, separate corpus per call, snapshot semantics, no implicit date window, shared request lane with 429 cooldown, and server-side schema 2 storage. It also clarifies metadata and refund behavior, giving the agent substantial operational context.
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 front-loaded with the core action and return value, then proceeds through defaults, metadata, traversal, rate limits, and storage. Every sentence carries actionable information, with 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?
For a complex asynchronous corpus-creation tool with ten parameters, no annotations, and no output schema, the description is complete: it explains the return value, background nature, default scope, rate-limit behavior, snapshot semantics, and storage location. Nothing essential for correct invocation or downstream tool selection is missing.
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 ten parameters, setting the baseline at 3. The description still adds meaning beyond the schema by clarifying that refund status does not exclude reviews and that recent/updated traversal has no implicit date window.
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 first sentence states a specific verb and resource: creates a public Steam review corpus in the background and returns a corpus_id. It distinguishes this from read/status/query/aggregate siblings by making clear that this is the corpus-creation step, not a retrieval or analysis step.
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?
It says the returned corpus_id is for status checks, local queries and aggregates, and that a new corpus is needed to refresh a snapshot. This gives clear usage context, but it does not explicitly name when to choose this over get_steam_review or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoARead-onlyIdempotent
Returns the name and package version of the running MCP server process.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds that the return payload is a name and a package version, which is useful but thin. It says nothing about when the values are captured or any error behavior.
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?
A single, front-loaded sentence with zero padding. It communicates the complete contract for a no-argument tool.
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?
An output schema is present, so the description does not need to enumerate return fields. For a trivial read-only diagnostic tool, the description is essentially sufficient; a brief note on when an agent should call it would be the only improvement.
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 tool takes zero parameters, so per the baseline there is no parameter semantics to explain. Descriing param behavior would be superfluous here.
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?
States a specific verb and resource ('Returns the name and package version of the running MCP server process') rather than restating the name. No sibling ambiguity exists — every other tool is Steam-content-oriented, so an agent can instantly route here for server metadata.
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?
No explicit when-to-use guidance or mention of alternatives. The diagnostic/health-check use case is only inferable from the tool's semantics, not stated. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steam_forum_topicA
Fetches a public Steam Community topic, including the original post and replies. The returned topic.original_post_timestamp is the original topic or hydrated announcement publication time; reply items keep their own timestamp fields. Use this field, not listing activity, for publication-date claims. Supports General Discussions topics and compatible app hub forum surfaces such as Events & Announcements, with reply pagination via ?ctp=N. When an Events & Announcements thread only contains a stub that links to the real announcement article, the server follows that link and returns the announcement body and publication time when possible.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Reply page number for the topic. Steam uses ?ctp=N for multi-page topic replies. | |
| topic_url | Yes | Absolute Steam Community topic URL from a game's discussions board or compatible forum-like app hub surface such as Events & Announcements. | |
| fetch_all_pages | No | When true, fetch all reply pages for the topic instead of only the requested page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains timestamp semantics for original posts vs replies, the ?ctp=N pagination mechanism, and the special behavior where a stub linking to an announcement article is followed to return the full body. It does not discuss rate limits, auth, or error handling, but the behavioral disclosures given are specific and non-obvious.
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 three compact sentences that front-load the core purpose. Each sentence adds distinct information (timestamp guidance, supported surfaces, stub-following). It is slightly dense with subordinate clauses but no sentence is wasted.
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 fetch tool with no output schema and no annotations, the description covers purpose, timestamp semantics, pagination, supported surfaces, and a special fallback behavior. Nothing critical for correct invocation or interpretation appears missing.
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 all three parameters are documented in the schema, and the description only reinforces the pagination syntax with '?ctp=N'. It adds the note about following stub links which is more behavioral than parameter-specific, and does not elaborate on fetch_all_pages beyond the schema. Baseline 3 is appropriate when the schema already provides full parameter documentation.
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 ('Fetches') and resource ('a public Steam Community topic') and immediately scopes what is returned ('original post and replies'). It is distinguishable from siblings like list_steam_forum_topics (which lists) and get_steam_review (different resource).
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?
It clearly states what this tool is for and includes a crucial decision rule: use topic.original_post_timestamp rather than listing activity for publication-date claims. It enumerates compatible surfaces (General Discussions, Events & Announcements), giving context on applicability, but does not explicitly name which sibling to use instead for other tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steam_forum_topic_corpus_statusB
Returns the persisted manifest and progress summary for a server-side Steam Community topic fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_id | Yes | Opaque identifier returned by the forum topic corpus tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the shape of the returned data (manifest plus progress summary) and implies a read-only, non-destructive status check, but says nothing about permissions, rate limits, or what 'progress' values look like.
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?
A single economical sentence with the verb and resource front-loaded and no filler. It is appropriately sized for a simple status read, though it is not maximally informative.
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 and no annotations, the description should do more work: it names the returned artifacts but not their structure or the meaning of progress states. It is adequate for identifying the tool but leaves the agent guessing about the response contract.
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?
There is one parameter and schema description coverage is 100%, so the schema already documents corpus_id as an opaque identifier from the corpus tools. The description adds no syntax or format detail beyond that, which matches the baseline for a fully documented single parameter.
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?
States a specific verb ('Returns') and a concrete resource ('persisted manifest and progress summary') scoped to a server-side Steam Community topic fetch, which separates it from the review-corpus sibling. It is clear and specific, though it never names the sibling tools it complements or contrasts with.
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?
There is no guidance on when to poll this tool, whether it must follow create_steam_forum_topic_corpus, or when the corpus is considered ready versus still fetching. The agent must infer the workflow entirely from the 'status' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steam_game_infoB
Retrieves English game metadata for a specific app, including release date, developers, publishers, genres, and price overview. The detailed description is cleaned into plain text for LLM consumption.
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | Steam application ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that metadata is English-only and that the detailed description is cleaned into plain text for LLM consumption, which is genuine behavioral context. It omits failure modes (invalid appid, missing games) and any rate-limit or auth notes.
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?
Two tight sentences with the resource and returned fields front-loaded; nothing is wasted. The trailing sentence about plain-text cleaning is mildly ancillary but earns its place as behavioral context.
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 single-parameter read tool with no output schema, the description names the returned fields and notes the text-cleaning behavior, so an agent knows what to expect. It is adequate, though it could say more about scope limits or errors.
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 appid parameter is already documented. The description only restates it as 'a specific app' and adds no format or value guidance, which is the expected baseline when 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?
States a specific verb and resource (retrieves game metadata for a Steam app) and enumerates the returned fields (release date, developers, publishers, genres, price), which makes the scope concrete. It does not, however, distinguish itself from siblings like get_steam_review, leaving the agent to infer the boundary.
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?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as get_steam_review even though reviews differ from metadata. Usage is only implied by the tool name and field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steam_reviewA
Reads a page of public Steam reviews directly from Steam. Defaults to helpful ranking, every language, all purchase sources and both sentiments, including off-topic activity. Use recent for new feedback, updated for modifications, and a background corpus for large analyses. fetch_all automatically uses recent for helpful requests. Optional review_details contains timestamps, playtime, numeric helpfulness and refunded metadata; refunds are not filtered. All review fetches share request spacing and 429 cooldown. Anonymous responses may be cached by Steam for up to 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | Steam application ID as a numeric string | |
| cursor | No | Cursor for paging. Pass "*" for the first page, then pass the returned next cursor for the next request. | * |
| filter | No | helpful: Steam helpfulness ranking, with its default initial 30-day lookback and quality ranking; recent: newest creation time; updated: latest modification time. Default helpful. Full traversal automatically uses recent for helpful requests. | helpful |
| fetch_all | No | When true, follow cursors through the complete matching set, subject to max_reviews. Helpful requests automatically use recent for exhaustive traversal. Prefer a background corpus for large sets. | |
| languages | No | Review language list, e.g. ['english', 'schinese']. Default ['all']; including 'all' retrieves every language. | |
| max_reviews | No | Optional cap when fetch_all is true. Useful to avoid pulling very large review sets into the model context. | |
| review_type | No | all: all reviews, positive: only positive reviews, negative: only negative reviews | all |
| num_per_page | No | Number of reviews per page. Steam allows up to 100. | |
| purchase_type | No | all: all reviews, non_steam_purchase: users who did not pay on Steam, steam: paid on Steam | all |
| include_review_metadata | No | When true, return review_details in addition to the cleaned review text. review_details includes per-review metadata such as timestamp_created, timestamp_updated, timestamp_dev_responded, and author playtime fields like playtime_at_review and last_played. | |
| filter_offtopic_activity | No | false includes off-topic/review-bomb activity (default); true excludes it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose real context: shared request spacing, a 429 cooldown, and up-to-10-minute Steam-side caching of anonymous responses, plus that refunds are not filtered. It stops short of stating read-only nature explicitly or any permission/auth requirements, so it adds strong but not exhaustive context.
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?
Front-loaded with purpose and dense with useful facts, but it spends a full sentence restating defaults that the schema already encodes (ranking, languages, purchase sources, sentiments) and repeats the fetch_all/recent behavior twice.
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 an 11-parameter tool with no output schema, the description covers cross-tool routing, default behavior, rate limits, and caching well. It leaves some gaps around return-shape and pagination mechanics, though cursor semantics are handled in the schema.
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 11 parameters in detail. The description largely echoes the defaults (helpful, all languages, all purchase sources, both sentiments, off-topic included) and adds only marginal meaning, e.g. clarifying refunds are not filtered and what review_details contains.
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?
States a specific verb and resource: 'Reads a page of public Steam reviews directly from Steam.' It distinguishes itself from the sibling corpus tools by pointing large analyses to 'a background corpus,' so an agent can tell it apart from create_steam_review_corpus/query_steam_review_corpus.
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?
Explicitly routes the agent: 'Use recent for new feedback, updated for modifications, and a background corpus for large analyses.' It names the alternative (corpus) and the condition that selects it, plus notes fetch_all's automatic behavior for helpful requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steam_review_corpus_statusA
Returns saved review corpus progress, chunks, stop reason and errors. running means fetching or queued; waiting means rate-limit cooldown with next_retry_at as a UTC ISO timestamp. Polling does not bypass cooldown. total_reviews_expected is Steam's reported matching count, not proof of completeness. Resumes interrupted schema 2 jobs; completed corpora stay local and are not refreshed. Unsupported storage returns UNSUPPORTED_CORPUS_VERSION; recreate the corpus. Expired or missing IDs return not_found.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_id | Yes | Opaque identifier returned by the review corpus tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it defines the running/waiting states, explains next_retry_at as a UTC ISO timestamp, warns that polling cannot bypass rate-limit cooldown, and cautions that total_reviews_expected is not proof of completeness. It also documents resume behavior and error outcomes (UNSUPPORTED_CORPUS_VERSION, not_found).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but tight: every sentence conveys a distinct behavioral fact, and the primary return scope leads the description. No filler or repetition.
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 fills the gap by describing returned fields (progress, chunks, stop reason, errors) and status semantics. An agent has enough to interpret results and poll correctly.
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 corpus_id parameter is already documented as an opaque identifier. The description adds value beyond the schema by explaining that expired or missing IDs return not_found, clarifying failure semantics.
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?
States a specific verb+resource: it returns saved review corpus progress, chunks, stop reason and errors. The name and wording make it clearly the status/progress reader for review corpora, distinguishable from query/aggregate/create siblings.
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?
Gives clear operational context: polling does not bypass cooldown, it resumes interrupted schema 2 jobs, and completed corpora stay local and are not refreshed. This tells the agent when a call is useful versus futile, though it doesn't explicitly name an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_steam_forum_sectionsB
Lists the available public Steam Community discussion sections and forum-like app hub surfaces for a game's hub, including each section's numeric id when applicable and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | Steam application ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the returned payload shape (section id and URL), which is useful since no output schema exists. However, it says nothing about whether this is a read-only/public call, whether authentication is needed, or how results are ordered or bounded.
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?
A single, front-loaded sentence that leads with the action and resource and adds no padding. Slightly dense but every clause (public sections, hub surfaces, ids, URLs) carries information.
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 one-parameter listing tool with no output schema and no annotations, the description adequately conveys what is returned (sections, ids, URLs) and the scope (a game's hub). Minor gaps remain around ordering, pagination, and auth, but nothing essential to invoking it correctly is missing.
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?
Only one parameter exists and schema description coverage is 100% ('appid' documented as Steam application ID). The description adds no meaning beyond the schema, so the baseline of 3 applies.
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?
States a specific verb ('Lists') and a precise resource ('public Steam Community discussion sections and forum-like app hub surfaces for a game's hub'), scoped to one appid. It is distinguishable from list_steam_forum_topics (sections vs. topics within a section), though it does not explicitly name that sibling to reinforce the distinction.
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?
There is no statement of when to use this tool versus alternatives such as list_steam_forum_topics. The mention of 'numeric id when applicable' hints that ids feed downstream calls, but no prerequisite, sequencing, or exclusion is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_steam_forum_topicsA
Lists topics from a game's public Steam Community discussion section or compatible app hub forum surface. Supports section selection for discussions and listing pagination via ?fp=N. Each topic's last_activity_timestamp and last_activity_display describe its latest reply or listing activity, never its original publication time. Call get_steam_forum_topic and use topic.original_post_timestamp before making publication-date claims. On some app hub surfaces such as Events & Announcements, Steam omits row-level author and preview markup, so those fields may be null in listing results.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Forum listing page number. Steam uses ?fp=N for forum listing pages. | |
| appid | Yes | Steam application ID | |
| forum_key | No | Forum surface to inspect. Use discussions for the normal boards, eventcomments for Events & Announcements, or tradingforum for Trading. | discussions |
| section_id | No | Forum section id. Only used when forum_key is discussions. 0 maps to the main /discussions/0/ board; other sections use the numeric id from the section URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does meaningful work: last_activity_timestamp/last_activity_display are explicitly 'never original publication time,' and some surfaces (Events & Announcements) omit row-level author and preview markup, so those fields may be null. It still omits auth/permission requirements and rate-limit or pagination-termination behavior.
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?
Five tight sentences, front-loaded with the core purpose, then pagination mechanics, then the timestamp caveat, then the null-field caveat. No filler, though the pagination sentence overlaps with schema text and could be trimmed.
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 usefully names the returned fields (last_activity_timestamp, last_activity_display, author, preview) and their caveats, which compensates for the missing output contract. It is near-complete for a listing tool, missing only auth/permission context and pagination end conditions.
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 page, appid, forum_key and section_id are already documented in the schema, including the ?fp=N convention. The description's mention of '?fp=N' and section selection largely restates what the schema already says, adding little beyond the baseline.
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?
Specific verb (Lists) + resource (topics) + scope (a game's public Steam Community discussion section or compatible app hub forum surface). It clearly distinguishes itself from list_steam_forum_sections (lists sections, not topics) and get_steam_forum_topic (retrieves one topic), so an agent can route 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?
It gives a clear when-not and an explicit alternative: 'Call get_steam_forum_topic and use topic.original_post_timestamp before making publication-date claims.' It also frames section selection as a usage condition. It stops short of stating when to prefer this over list_steam_forum_sections or how pagination terminates, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_steam_review_corpusA
Queries persisted schema 2 review chunks by text, language, date, sentiment and playtime, with pagination, field selection and optional timestamp ordering. Playtime thresholds are minutes. Timestamp, sentiment, playtime filtering and sorting require metadata; unavailable values are null. Fields include numeric weighted_vote_score and refunded; refund status does not filter results. Counts cover committed chunks, which may be partial or capped; inspect corpus status and stop reason. Completed corpora are read locally without refresh; create a new corpus for updated data. Interrupted jobs may resume while respecting cooldown. Unsupported formats return UNSUPPORTED_CORPUS_VERSION.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching reviews to return. | |
| fields | No | Optional field selection for returned reviews. Omit to return the full stored review records. | |
| offset | No | Zero-based offset within the filtered result set. | |
| date_to | No | Inclusive end date filter. Use ISO 8601 or YYYY-MM-DD. | |
| sort_by | No | Optional sort field for the filtered reviews. | |
| voted_up | No | Optional sentiment filter. true for positive reviews, false for negative reviews. | |
| corpus_id | Yes | Opaque identifier returned by the review corpus tools. | |
| date_from | No | Inclusive start date filter. Use ISO 8601 or YYYY-MM-DD. | |
| languages | No | Optional language filter. Omit or include 'all' to search across all languages. | |
| date_field | No | Which timestamp field to use for date filtering. | timestamp_created |
| text_contains | No | Optional case-insensitive substring match against cleaned review text. | |
| sort_direction | No | Sort direction when sort_by is provided. | desc |
| max_playtime_forever | No | Optional maximum author.playtime_forever filter, in minutes. | |
| min_playtime_forever | No | Optional minimum author.playtime_forever filter, in minutes. | |
| max_playtime_at_review | No | Optional maximum author.playtime_at_review filter, in minutes. | |
| min_playtime_at_review | No | Optional minimum author.playtime_at_review filter, in minutes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: playtime thresholds in minutes, metadata required for timestamp/sentiment/playtime filtering and sorting with null for unavailable values, refunded does not filter, counts cover committed chunks that may be partial or capped, completed corpora read locally, interrupted jobs resume under cooldown, and UNSUPPORTED_CORPUS_VERSION on unsupported formats. It omits explicit read-only framing and response shape, but discloses substantial behavior beyond the schema.
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?
Purpose and core capability are front-loaded in the first sentence, then a dense but relevant run of behavioral caveats. It is a single long paragraph with several clauses packed together, which costs a little readability, but nearly every sentence carries operational information.
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 16-parameter read tool with no annotations and no output schema, the definition covers filtering prerequisites, query semantics, data freshness, partial-count caveats, and an error code. What remains thin is result-shape and pagination interaction with the capped counts, but the critical calling constraints are 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 coverage is 100%, so the baseline is 3, and the description adds meaning beyond the schema: metadata prerequisite for several filters, null semantics for unavailable metadata, and the clarification that refund status does not filter results despite being a selectable field. This goes beyond restating the per-parameter descriptions.
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?
States a specific verb and resource with scope: queries persisted schema 2 review chunks by text, language, date, sentiment and playtime, with pagination, field selection and ordering. An agent can distinguish it from create_steam_review_corpus and aggregate_steam_review_corpus by the 'queries persisted chunks' framing, but no sibling is named 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?
Gives concrete routing context: read completed corpora locally without refresh, create a new corpus for updated data, and inspect corpus status and stop reason for partial/capped counts. It doesn't state explicit exclusions (e.g. versus get_steam_review for a single review), but the when-to-use conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_steam_forum_topic_corpus_chunkC
Reads one stored reply chunk from a previously created server-side Steam Community topic fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_id | Yes | Opaque identifier returned by the forum topic corpus tools. | |
| chunk_index | Yes | Zero-based chunk index to read from the persisted server-side forum corpus. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals that data is server-side and persisted, which is useful context beyond the schema, but it omits key behavioral details: whether chunks are immutable once created, what happens if chunk_index is out of range, whether corpus_id expiration matters, and what the return format looks like.
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?
Single efficient sentence that front-loads the verb and resource. No waste, though it could be structured to separate the action from the prerequisite.
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 tool with no annotations, no output schema, and a dependent workflow (requires a previously created corpus), the description is too thin. It doesn't explain how chunk_index relates to total chunks, whether there's a limit, what the response contains, or error behavior for invalid/expired corpus_id. The agent lacks critical operational context.
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 both parameters are already documented in the schema (corpus_id as opaque identifier from corpus tools, chunk_index as zero-based). The description adds no parameter-level detail beyond what the schema provides, so 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?
States a specific verb (reads) and resource (stored reply chunk from server-side Steam Community topic fetch). It clearly distinguishes itself from siblings like get_steam_forum_topic (live fetch) and the corpus creation/status tools. However, it doesn't explicitly name the sibling it depends on (create_steam_forum_topic_corpus), relying on the phrase 'previously created' to imply the workflow.
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 says it reads from a 'previously created' corpus, implying the corpus must exist, but gives no explicit when-to-use guidance, no mention of pagination strategy, no bounds on valid chunk_index, and no alternative tools to consider. An agent must infer the entire usage pattern.
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.
3 tool updates
v1.1.1- Changed
create_steam_review_corpus5 fields changed- changed
Input schema / properties / appid / descriptionPrevious value: -"Steam application ID"New value: +"Steam application ID as a numeric string" - added
Input schema / properties / appid / patternAdded value: +"^\\d+$" - removed
Input schema / properties / languageRemoved value: -{ - "default": "all", - "description": "Language filter for the corpus fetch. Defaults to all languages.", - "enum": [ - "all", - "arabic", - "bulgarian", - "schinese", - "tchinese", - "czech", - "danish", - "dutch", - "english", - "finnish", - "french", - "german", - "greek", - "hungarian", - "indonesian", - "italian", - "japanese", - "koreana", - "norwegian", - "polish", - "portuguese", - "brazilian", - "romanian", - "russian", - "spanish", - "latam", - "swedish", - "thai", - "turkish", - "ukrainian", - "vietnamese" - ], - "type": "string" -} - added
Input schema / properties / languagesAdded value: +{ + "default": [ + "all" + ], + "description": "Review language list, e.g. ['english', 'schinese']. Default ['all']; including 'all' retrieves every language.", + "items": { + "enum": [ + "all", + "arabic", + "bulgarian", + "schinese", + "tchinese", + "czech", + "danish", + "dutch", + "english", + "finnish", + "french", + "german", + "greek", + "hungarian", + "indonesian", + "italian", + "japanese", + "koreana", + "norwegian", + "polish", + "portuguese", + "brazilian", + "romanian", + "russian", + "spanish", + "latam", + "swedish", + "thai", + "turkish", + "ukrainian", + "vietnamese" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / traversal_mode / descriptionPrevious value: -"Cursor traversal mode for exhaustive corpus retrieval. Use \"recent\" or \"updated\"; Steam's \"all\" helpfulness mode does not terminate reliably for full traversal."New value: +"Exhaustive traversal uses recent (creation time, default) or updated (modification time), without an implicit date window."
- Changed
get_steam_review16 fields changed- changed
Input schema / properties / appid / descriptionPrevious value: -"Steam application ID"New value: +"Steam application ID as a numeric string" - added
Input schema / properties / appid / patternAdded value: +"^\\d+$" - removed
Input schema / properties / day_rangeRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "minLength": 1, - "type": "string" - } - ], - "default": 365, - "description": "Range from now to n days ago to look for helpful reviews. Only applicable for the \"all\" filter." -} - changed
Input schema / properties / fetch_all / descriptionPrevious value: -"When true, automatically follow cursors until all matching reviews are collected. If filter=\"all\", the server automatically switches to filter=\"recent\" because Steam's \"all\" filter does not terminate when paging."New value: +"When true, follow cursors through the complete matching set, subject to max_reviews. Helpful requests automatically use recent for exhaustive traversal. Prefer a background corpus for large sets." - changed
Input schema / properties / filter / defaultPrevious value: -"all"New value: +"helpful" - changed
Input schema / properties / filter / descriptionPrevious value: -"recent: sorted by creation time, updated: sorted by last updated time, all: sorted by helpfulness. Note that Steam's \"all\" filter does not naturally terminate when paging."New value: +"helpful: Steam helpfulness ranking, with its default initial 30-day lookback and quality ranking; recent: newest creation time; updated: latest modification time. Default helpful. Full traversal automatically uses recent for helpful requests." - changed
Input schema / properties / filter / enumPrevious value: -[ - "recent", - "updated", - "all" -]New value: +[ + "helpful", + "recent", + "updated" +] - removed
Input schema / properties / filter_offtopic_activity / $refRemoved value: -"#/properties/day_range" - changed
Input schema / properties / filter_offtopic_activity / defaultPrevious value: -0New value: +false - changed
Input schema / properties / filter_offtopic_activity / descriptionPrevious value: -"Off-topic review activity is included by default. This parameter is set to 0 unless explicitly overridden in future versions."New value: +"false includes off-topic/review-bomb activity (default); true excludes it." - added
Input schema / properties / filter_offtopic_activity / typeAdded value: +"boolean" - removed
Input schema / properties / languageRemoved value: -{ - "default": "all", - "description": "Language filter (e.g. english, french, schinese). Default is all languages.", - "enum": [ - "all", - "arabic", - "bulgarian", - "schinese", - "tchinese", - "czech", - "danish", - "dutch", - "english", - "finnish", - "french", - "german", - "greek", - "hungarian", - "indonesian", - "italian", - "japanese", - "koreana", - "norwegian", - "polish", - "portuguese", - "brazilian", - "romanian", - "russian", - "spanish", - "latam", - "swedish", - "thai", - "turkish", - "ukrainian", - "vietnamese" - ], - "type": "string" -} - added
Input schema / properties / languagesAdded value: +{ + "default": [ + "all" + ], + "description": "Review language list, e.g. ['english', 'schinese']. Default ['all']; including 'all' retrieves every language.", + "items": { + "enum": [ + "all", + "arabic", + "bulgarian", + "schinese", + "tchinese", + "czech", + "danish", + "dutch", + "english", + "finnish", + "french", + "german", + "greek", + "hungarian", + "indonesian", + "italian", + "japanese", + "koreana", + "norwegian", + "polish", + "portuguese", + "brazilian", + "romanian", + "russian", + "spanish", + "latam", + "swedish", + "thai", + "turkish", + "ukrainian", + "vietnamese" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / max_reviews / $refPrevious value: -"#/properties/day_range"New value: +"#/properties/num_per_page" - removed
Input schema / properties / num_per_page / $refRemoved value: -"#/properties/day_range" - added
Input schema / properties / num_per_page / anyOfAdded value: +[ + { + "type": "number" + }, + { + "minLength": 1, + "type": "string" + } +]
- Changed
query_steam_review_corpus1 field changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "recommendationid", - "language", - "review", - "timestamp_created", - "timestamp_updated", - "voted_up", - "votes_up", - "votes_funny", - "weighted_vote_score", - "comment_count", - "steam_purchase", - "received_for_free", - "written_during_early_access", - "developer_response", - "timestamp_dev_responded", - "primarily_steam_deck", - "author", - "author.steamid", - "author.num_games_owned", - "author.num_reviews", - "author.playtime_forever", - "author.playtime_last_two_weeks", - "author.playtime_at_review", - "author.deck_playtime_at_review", - "author.last_played" -]New value: +[ + "recommendationid", + "language", + "review", + "timestamp_created", + "timestamp_updated", + "voted_up", + "votes_up", + "votes_funny", + "weighted_vote_score", + "comment_count", + "steam_purchase", + "received_for_free", + "written_during_early_access", + "developer_response", + "timestamp_dev_responded", + "primarily_steam_deck", + "refunded", + "author", + "author.steamid", + "author.num_reviews", + "author.playtime_forever", + "author.playtime_last_two_weeks", + "author.playtime_at_review", + "author.deck_playtime_at_review", + "author.last_played" +]
13 tool updates
v1.0.5- First observed
aggregate_steam_review_corpus - First observed
create_steam_forum_topic_corpus - First observed
create_steam_review_corpus - First observed
get_server_info - First observed
get_steam_forum_topic - First observed
get_steam_forum_topic_corpus_status - First observed
get_steam_game_info - First observed
get_steam_review - First observed
get_steam_review_corpus_status - First observed
list_steam_forum_sections - First observed
list_steam_forum_topics - First observed
query_steam_review_corpus - First observed
read_steam_forum_topic_corpus_chunk
TDQS
Scored across 13 tools
The tools largely target distinct resources and actions, with clear separation between direct review/forum fetches and background corpus lifecycle operations. However, the multiple corpus-related tools for reviews and forums could be confused at a glance, and get_server_info is an unrelated utility that slightly dilutes focus.
Most names follow a predictable snake_case verb_noun pattern with the 'steam' domain inserted after the verb, such as get_steam_review and create_steam_review_corpus. The main deviation is get_server_info, which lacks the steam prefix, and read_steam_forum_topic_corpus_chunk uses 'read' while similar retrieval tools use 'get'.
With 13 tools, the set is well-scoped for a dual-domain server covering Steam reviews and forums. Each tool appears to serve a distinct lifecycle role, from direct fetches to background corpus creation, status polling, querying, and aggregation.
The surface covers core read-only workflows for Steam reviews and forums, including direct access, corpus creation, status checks, querying, aggregation, and forum listing/reading. Minor gaps include no tool to list or delete existing corpora and no forum search beyond section/topic listing, but agents can work around these limitations.
Maintenance
Related MCP Connectors
Steam backlog, account value, buy-or-skip verdicts and Steam Machine checks. Hosted, keyless.
Live Steam market data for AI agents: top sellers, deals, player counts. Paid per call via x402.
G2, Trustpilot, Yelp reviews with sentiment and theme extraction across sources.
Steam concurrent player trends for any game over time. Free key at trendsapi.ai
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.140 npm7MIT
- AlicenseAqualityAmaintenanceAbout Search Steam games, fetch user reviews, and analyze sentiment with topic drill-down to make informed purchasing decisions.723 npm3MIT
- AlicenseAqualityCmaintenanceIntegrates with Steam Web API to enable querying user profiles, game libraries, store data, and community features like reviews and workshop items.16MIT
- 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.1015 npmMIT