steam-library-mcp
This server provides a read-only MCP interface for comprehensive Steam library intelligence, with optional action tools protected by confirmation safeguards.
Library & Profile
Retrieve profile summary, resolve vanity URLs to SteamID64, list owned games with playtime, search library by name, get detailed game info, and view recently played games.
Achievements
View achievement progress and locked objectives (including hidden ones with opt-in), with global rarity info and per-game schema.
Local Installation
List locally installed Steam games, audit disk usage, find large games, plan non-destructive storage cleanup, and read local update schedules.
Wishlist & Store
Fetch your wishlist, monitor for new releases, demos, price drops, date changes, and playtest/beta news via snapshot comparison. Build concise store briefs (price, reviews, DLC, platforms, features) and discover current discounts on wishlisted or featured items.
Recommendations & Discovery
Get taste-based game recommendations from your library based on mood, available time, and play history; discover new games matching your taste profile.
Social & Co-op Planning
Find games shared with selected friends, incorporating online status and co-op/multiplayer Store metadata.
Reports & Cache
Generate a Markdown weekly brief covering wishlist changes, forgotten owned games, and new discovery picks. Manually refresh cached Steam API data selectively.
Optional Actions (require STEAM_ENABLE_ACTIONS=true + user confirmation)
Launch games, open store/community/achievement pages, initiate install flows, uninstall games (requires additional
STEAM_ALLOW_UNINSTALL=trueflag and multiple confirmations), prepare game night invites (opens chat windows, never sends), open the download manager, and manage local notes, backlog status, and mood tags.
Security & Privacy: Read-only by default, no credentials stored, no purchases or trades, logs to stderr only, no telemetry.
Provides tools for interacting with the Steam platform, enabling AI agents to manage Steam library, wishlist, achievements, discover games, and more.
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-library-mcpDo I own Outriders?"
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-library-mcp
A TypeScript MCP server for Steam library intelligence: ownership, store/review/DLC briefs, deals, taste-based discovery, wishlist releases, co-op planning, achievement objectives, storage, updates, and confirmed local actions.
It is model-agnostic: any MCP client/host that supports local stdio servers can run it, not just Codex. See docs/mcp-client-setup.md for Claude Desktop/Code, Codex, and generic MCP client setup patterns.
The server is read-only toward your Steam account by default. It does not buy, trade, gift, automatically send chat messages, modify your account, scrape Steam login pages, read cookies, store sessions, or handle Steam credentials.
Optional action tools can be enabled, but only with STEAM_ENABLE_ACTIONS=true. Launch/install/browser/chat-window/download-window tools require confirmation and default to dry-run previews where applicable. The friend-invite helper only opens existing friends' chats and never presses Send. Uninstall additionally requires STEAM_ALLOW_UNINSTALL=true, verifies the game is locally installed, asks through MCP user elicitation when supported (or requires exact confirmation text), and only opens Steam's own native confirmation flow.
What It Can Answer
Do I own Outriders?
What games have I bought but barely played?
What have I played recently?
What Steam games are installed locally?
Recommend something from my Steam library for a 1-hour session.
Show my achievement progress for this game.
What changed on my Steam wishlist this week?
Did any wishlisted games release or announce a playtest, beta, or demo?
Steam owned-game API data does not include reliable genres or tags. Recommendations are based on available playtime, recent activity, installed status, name/query matches, and optional local MCP tags.
Related MCP server: Videogame Encyclopedia MCP Server
Security Model
Read-only mode is the default.
Action and local-write tools are not registered unless
STEAM_ENABLE_ACTIONS=true.No Steam password, cookie, Steam Guard, browser data, or login session handling.
No purchases, trades, gifts, automated chat sends, profile changes, account changes, silent installs, or silent uninstalls.
API keys are read from environment variables only.
API keys are redacted from thrown errors.
Logs go to stderr, not stdout, so MCP stdio is not polluted.
No telemetry and no third-party analytics.
Cache/state files may contain owned games, wishlist items, release metadata, playtime, achievement progress, profile summary data, local notes, local tags, backlog status, and action history. Treat STEAM_CACHE_DIR, STEAM_WISHLIST_STATE_PATH, STEAM_LOCAL_DB_PATH, and STEAM_ACTION_LOG_PATH as private.
Wishlist retrieval uses Steam's first-party but undocumented IWishlistService/GetWishlist/v1 endpoint because Steam has no documented consumer wishlist API. Names, release status, and demo availability come from the first-party but undocumented Store appdetails endpoint. Either may change, and access can depend on Steam privacy settings. Playtest/beta monitoring uses best-effort keyword matching against Steam's documented public news API; matches are signals, not guaranteed availability.
Requirements
Node.js 20+
A Steam Web API key
Your SteamID64
Public-enough Steam profile/game details for the data you want Steam to return
Get a Steam Web API key at:
https://steamcommunity.com/dev/apikeyFind your SteamID64 from your profile URL, a Steam ID lookup site, or by setting STEAM_VANITY_NAME and using the steam_resolve_vanity_url tool after setup.
Setup
cd /ABSOLUTE/PATH/TO/steam-library-mcp
npm install
cp .env.example .envEdit .env:
STEAM_API_KEY=your_steam_web_api_key_here
STEAM_ID_64=your_17_digit_steamid64_hereThe server loads .env from its current working directory for direct local runs. Environment variables passed by Codex or your shell take precedence.
If you want Codex to guide the setup for you, use the playbook in docs/setup-with-codex.md. It covers the same safe flow used to set this up locally: discover SteamID64 from Steam account metadata, open the official API key page, handle the Steam Guard Mobile Authenticator requirement, and verify the key without printing it.
Helpful setup scripts:
npm run setup:accounts
npm run setup:verifyBuild and test:
npm run check
npm run test
npm run buildWith a private .env and a built server, an exhaustive live-but-safe pass is available:
npm run qa:fullIt calls all 34 tools, uses temporary cache/state paths, and keeps every external action in dry-run mode.
Start directly:
npm run startEnvironment Variables
Required:
Variable | Purpose |
| Steam Web API key. Never commit this. |
| Default SteamID64 to query. |
Read-only options:
Variable | Default | Purpose |
| unset | Optional vanity profile name. |
|
| Include played free games in owned-game results. |
|
| Cache TTL for Steam API responses. |
| OS user cache dir | Cache location. |
| auto-detect | Override local Steam library path or |
|
| Steam API request timeout. |
| cache dir JSON | Persistent local wishlist comparison state. |
|
| Maximum wishlist apps enriched with Store release/demo metadata per check. |
|
| Country used for Store metadata. |
|
| Language used for Store metadata. |
|
| Include local taste-based new-game recommendations in weekly briefs. |
|
| Most-played owned games sampled for the local taste profile. |
|
| Featured Store candidates enriched and scored per discovery run. |
| cache dir Markdown | Suggested destination used by the weekly Python companion. |
Action/local options:
Variable | Default | Purpose |
|
| Registers the optional action/local-write tools. Leave unset/false for a 21-tool read-only surface. |
|
| Requires exact confirmation text for browser and local write actions. Launch/install always require exact confirmation. |
|
| Allows tools that open Steam web pages in your browser when actions are enabled. |
|
| Allows validated Steam protocol opens when actions are enabled. Uninstall still needs its separate flag. |
|
| Separately enables opening Steam's native uninstall confirmation flow. |
|
| Reserved safety flag. The tools do not expose arbitrary launch args by default. |
|
| Allows writes to the MCP local database only. |
| cache dir JSONL | Local action audit log path. |
|
| Rotates the active action log before it exceeds this size. |
|
| Number of rotated action-log files retained. |
| cache dir JSON | MCP-owned local notes/backlog/tags DB path. |
|
| Maximum serialized local notes database size. |
|
| Maximum notes retained per game. |
|
| Maximum characters in one note. |
To omit all action and local-write tools from MCP discovery, keep:
STEAM_ENABLE_ACTIONS=falseYou can also deny-list action tools in Codex config.
Tools
Steam-account-read-only tools (some update local cache/state files):
steam_get_profilesteam_resolve_vanity_urlsteam_get_owned_gamessteam_search_librarysteam_get_gamesteam_get_recently_playedsteam_get_achievementssteam_get_installed_gamessteam_library_statssteam_recommend_from_librarysteam_get_wishliststeam_check_wishlist_updatessteam_game_briefsteam_find_dealssteam_discover_gamessteam_storage_commandersteam_update_centersteam_achievement_objectivessteam_plan_game_nightsteam_weekly_briefsteam_refresh_cache
Optional action/local tools:
steam_launch_gamesteam_open_store_pagesteam_open_community_hubsteam_open_achievements_pagesteam_open_install_flowsteam_uninstall_gamesteam_prepare_game_night_invitessteam_open_download_managersteam_add_local_game_notesteam_set_local_backlog_statussteam_set_local_mood_tagssteam_get_local_game_notessteam_action_history
Confirmation Text
When actions are enabled, these tools require exact confirmation text:
Tool | Confirmation |
|
|
|
|
| Built-in MCP user confirmation when supported, or exact |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Launch and install-flow tools default to dryRun=true. They only open Steam when dryRun=false and confirmation is correct. Install flow only opens Steam's own steam://install/<appid> flow; Steam may prompt you and the MCP does not silently install anything.
Browser-opening tools only open HTTPS URLs on Steam-owned domains. Steam protocol tools only allow validated run/install/uninstall app IDs, the Downloads page, and message windows for 17-digit friend IDs.
The uninstall tool never deletes manifests or game directories. A dry run returns the required confirmation without changing anything. A real call requires action mode, the separate uninstall flag, a locally installed app, user confirmation, and then Steam's own native confirmation dialog.
Local notes, backlog status, and mood tags are stored only in the MCP local database. They never modify Steam files.
Wishlist Monitoring And Automations
steam_get_wishlist reads a wishlist without using cookies or a browser session. steam_check_wishlist_updates compares it with local state and reports newly released games, newly available demos, same-currency price drops, release-date changes, additions/removals, and recent Steam news posts that mention playtests, betas, demos, alphas, technical tests, or free weekends.
steam_weekly_brief also returns Markdown containing owned-game rediscovery picks and optional taste-based new-game recommendations. The MCP does not schedule itself. A Codex automation can call the tool directly; the included scripts/steam-weekly-watch.py can call it over stdio and atomically write the Markdown for Task Scheduler or another host. The first run creates a baseline without reporting every existing item as new.
See docs/wishlist-monitoring.md for automation and privacy details, docs/feature-guide.md for every new feature and caveat, docs/publishing.md for packaging/version behavior, and docs/audit.md for the safety audit.
Codex MCP Registration
This section is Codex-specific. For Claude Desktop, Claude Code, Gemini/Grok-capable MCP hosts, IDE agents, or generic MCP clients, see docs/mcp-client-setup.md.
macOS/Linux:
npm install
npm run build
codex mcp add steam-library \
--env STEAM_API_KEY="$STEAM_API_KEY" \
--env STEAM_ID_64="$STEAM_ID_64" \
-- node /ABSOLUTE/PATH/TO/steam-library-mcp/dist/index.js
codex mcp listWindows PowerShell:
npm install
npm run build
codex mcp add steam-library `
--env STEAM_API_KEY="$env:STEAM_API_KEY" `
--env STEAM_ID_64="$env:STEAM_ID_64" `
-- node C:\ABSOLUTE\PATH\TO\steam-library-mcp\dist\index.js
codex mcp listAction mode example:
codex mcp add steam-library \
--env STEAM_API_KEY="$STEAM_API_KEY" \
--env STEAM_ID_64="$STEAM_ID_64" \
--env STEAM_ENABLE_ACTIONS=true \
--env STEAM_REQUIRE_CONFIRMATION=true \
--env STEAM_ALLOW_UNINSTALL=false \
-- node /ABSOLUTE/PATH/TO/steam-library-mcp/dist/index.jsCodex config.toml example with approval prompts:
[mcp_servers.steam-library]
command = "node"
args = ["/ABSOLUTE/PATH/TO/steam-library-mcp/dist/index.js"]
startup_timeout_sec = 10
tool_timeout_sec = 60
default_tools_approval_mode = "prompt"
enabled = true
[mcp_servers.steam-library.env]
STEAM_API_KEY = "your_steam_web_api_key_here"
STEAM_ID_64 = "your_17_digit_steamid64_here"
STEAM_ENABLE_ACTIONS = "false"
[mcp_servers.steam-library.tools.steam_get_owned_games]
approval_mode = "auto"
[mcp_servers.steam-library.tools.steam_search_library]
approval_mode = "auto"
[mcp_servers.steam-library.tools.steam_launch_game]
approval_mode = "prompt"
[mcp_servers.steam-library.tools.steam_open_install_flow]
approval_mode = "prompt"Read-only-only Codex config:
[mcp_servers.steam-library]
command = "node"
args = ["/ABSOLUTE/PATH/TO/steam-library-mcp/dist/index.js"]
default_tools_approval_mode = "prompt"
disabled_tools = [
"steam_launch_game",
"steam_open_store_page",
"steam_open_community_hub",
"steam_open_achievements_page",
"steam_open_install_flow",
"steam_uninstall_game",
"steam_prepare_game_night_invites",
"steam_open_download_manager",
"steam_add_local_game_note",
"steam_set_local_backlog_status",
"steam_set_local_mood_tags",
"steam_get_local_game_notes",
"steam_action_history"
]
[mcp_servers.steam-library.env]
STEAM_API_KEY = "your_steam_web_api_key_here"
STEAM_ID_64 = "your_17_digit_steamid64_here"
STEAM_ENABLE_ACTIONS = "false"Codex reads MCP server instructions during initialization. This server instructs agents to search before ownership answers, respect Steam visibility caveats, and avoid write actions unless explicitly enabled and confirmed.
Example Prompts
Do I own Outriders?Search my Steam library for worldslayer.What have I played recently?What games have I bought but barely played?List locally installed Steam games.Recommend something installed for a 1-hour session.Show my achievement progress for a game without hidden-achievement spoilers.Reveal the hidden achievement objectives for this game and tell me which official descriptions are unavailable.Build my weekly Steam brief with wishlist price drops and new-game discovery.Find co-op games I share with these friends.Audit my installed games and make a plan to free 100 GB without touching favorites.Dry-run launching OUTRIDERS and tell me the exact confirmation text.Dry-run uninstalling an installed game and tell me what confirmations would be required.Check my wishlist for releases or new playtest, beta, and demo news.
Local Steam Detection
The MCP reads:
libraryfolders.vdfappmanifest_*.acf
Common paths checked:
Windows:
C:\Program Files (x86)\Steam\steamapps\libraryfolders.vdfWindows:
C:\Program Files\Steam\steamapps\libraryfolders.vdfmacOS:
~/Library/Application Support/Steam/steamapps/libraryfolders.vdfLinux:
~/.steam/steam/steamapps/libraryfolders.vdfLinux:
~/.local/share/Steam/steamapps/libraryfolders.vdf
Set STEAM_LOCAL_LIBRARY_PATH if your Steam library is elsewhere.
Credits
Steam Library MCP was conceived and directed by @Dark-Hunt3r1, who defined its requirements, safety boundaries, and product decisions and remains its maintainer.
OpenAI Codex was used as an AI development tool for substantial implementation, test creation and execution, documentation, security review, sanitization, and release preparation.
This is an independent project and is not affiliated with or endorsed by Valve or OpenAI.
Troubleshooting
STEAM_API_KEY is required
Set STEAM_API_KEY in the MCP environment. Do not put it in source code.
STEAM_ID_64 is required
Set STEAM_ID_64 to your 17-digit SteamID64. If you know only a vanity name, use steam_resolve_vanity_url after setup or resolve it externally.
Empty owned library response
Check Steam profile and game-details privacy settings. Steam may omit hidden/private games, family-shared games, free games without playtime, or metadata it cannot expose through the Web API.
Achievement errors
Some games do not expose achievements through Steam Web API. Profile privacy or game privacy can also block achievement access.
HTTP 401/403
Check the API key, SteamID64, privacy settings, and whether the key is valid for the requested endpoint.
HTTP 429
Steam rate-limited the request. Wait and retry, or avoid forceRefresh.
Local installed games missing
Set STEAM_LOCAL_LIBRARY_PATH to a Steam root folder, a steamapps folder, or a specific libraryfolders.vdf. The MCP only reads local manifest files and never treats local install status as proof of ownership.
Action tool is missing
Set STEAM_ENABLE_ACTIONS=true and restart/reload the MCP server. Tool registration is decided at startup. Keep default_tools_approval_mode = "prompt" in Codex if you want Codex to ask before calling action tools.
Wrong confirmation
Use the exact confirmation string for the resolved appid, for example LAUNCH 680420.
Wishlist unavailable
Steam does not provide a documented consumer wishlist API. The MCP uses first-party but undocumented wishlist and Store metadata endpoints without cookies or login scraping. Availability can depend on Steam privacy settings; if Valve changes either endpoint, the tool returns an explicit error or marks missing metadata unavailable instead of guessing.
Uninstall tool is missing or says disabled
Set both STEAM_ENABLE_ACTIONS=true and STEAM_ALLOW_UNINSTALL=true, then restart the MCP. Keep host-level approval prompts enabled. The tool still requires MCP user elicitation or exact UNINSTALL <appid> confirmation, verifies the app is installed, and Steam displays another native confirmation.
Available Tools
21 toolssteam_achievement_objectivesSteam Achievement ObjectivesARead-onlyIdempotent
List locked achievement objectives and global rarity, with explicit opt-in before revealing hidden titles/descriptions exposed by Steam's schema.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| appid | No | ||
| forceRefresh | No | ||
| revealHiddenTitles | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds value by disclosing the need for explicit opt-in to reveal hidden titles/descriptions, enhancing transparency beyond annotations.
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 sentence that is concise and front-loaded with the main action. No unnecessary words, earning 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?
With 4 parameters and 0% schema coverage, the description lacks explanation of parameter roles and behavior. While output schema may cover return values, the description is insufficient for full understanding.
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 0% with no parameter descriptions. The description only hints at the 'revealHiddenTitles' parameter but does not explain 'name', 'appid', or 'forceRefresh'. Fails to compensate for missing schema 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?
Clearly states 'List locked achievement objectives and global rarity' with a specific verb and resource, and mentions opt-in behavior for hidden titles. Distinguishes from sibling tools like steam_get_achievements which likely list all achievements.
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 usage for locked achievements and rarity, but does not explicitly state when to use versus siblings like steam_get_achievements. No direct usage exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_check_wishlist_updatesCheck Steam Wishlist UpdatesC
Compare the current wishlist with a local snapshot for releases, demos, date changes, additions, removals, and playtest/beta/demo news signals.
| Name | Required | Description | Default |
|---|---|---|---|
| steamid | No | ||
| sinceDays | No | ||
| maxNewsApps | No | ||
| saveSnapshot | No | ||
| maxMetadataApps | No | ||
| includeNewsSignals | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
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 of disclosing behavioral traits. It mentions comparison with a 'local snapshot', implying stateful behavior and potential side effects (e.g., saving snapshots), but does not explain whether the tool itself saves snapshots, how it interacts with local storage, or any rate limits/permissions needed. The description is insufficient to understand the tool's side effects.
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 sentence that front-loads the core purpose ('Compare the current wishlist with a local snapshot') and lists the detected items. It is relatively concise but slightly long. It could be improved by breaking into two sentences or adding structure, but overall it is efficient.
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 has 6 parameters, no annotations, and an output schema (but not shown), the description is incomplete. It lacks parameter explanations, usage context, and behavioral details. For a tool that involves snapshots and comparisons, the minimal description leaves significant gaps for an AI agent to use it 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?
The input schema has 6 parameters with 0% description coverage, meaning no properties have descriptions in the schema. The tool description completely fails to explain any of these parameters (steamid, sinceDays, maxNewsApps, saveSnapshot, maxMetadataApps, includeNewsSignals). An AI agent would have no way to understand what each parameter does or how to use them correctly.
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 that the tool compares the current Steam wishlist with a local snapshot to detect various types of updates (releases, demos, date changes, additions, removals, news signals). It uses a specific verb ('Compare') and resource ('wishlist with a local snapshot'), and the listed update types distinguish it from sibling tools like steam_get_wishlist which only retrieves the wishlist without comparison.
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 explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (like taking a snapshot), nor does it contrast with related tools such as steam_get_wishlist or steam_update_center. The usage context is only implied through the description of what the tool does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_discover_gamesDiscover Steam GamesBRead-onlyIdempotent
Analyze the most-played part of the library into a transparent taste profile, then recommend new featured games and forgotten owned games.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| includeNewGames | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and read-only behavior. The description adds the two-step process (analyze then recommend) but does not mention any additional behavioral traits beyond what annotations provide.
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, moderately concise sentence that conveys the core functionality without unnecessary detail. It is front-loaded with the analysis part but could be split for clarity.
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?
Despite having an output schema, the description omits parameter details and usage context. For a tool with only two parameters, this is a notable gap that reduces completeness.
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 0%, so the description must compensate, but it does not mention the two parameters (limit, includeNewGames). The agent must rely solely on the schema, which lacks 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?
The description clearly states that the tool analyzes the most-played library into a taste profile and recommends new featured games and forgotten owned games. It uses a specific verb-resource pair, distinguishing it from general library tools, though it could differentiate further from the sibling steam_recommend_from_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for personalized game discovery based on play history but does not provide explicit guidance on when to use it versus alternatives like steam_recommend_from_library. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_find_dealsFind Steam DealsARead-onlyIdempotent
Find current wishlist and featured Store discounts, prioritizing the wishlist and excluding already-owned featured games.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| maxMetadataApps | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the agent knows this is safe and idempotent. The description adds useful behavioral context (prioritization, exclusion) but does not disclose any other traits like authentication or rate limits.
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 efficient sentence that conveys the core purpose, priorities, and exclusion rule without any fluff or redundancy.
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?
The description covers the main functionality (finding deals from wishlist and featured, with prioritization and exclusion) but omits explanation of the two input parameters, leaving a notable gap in completeness.
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 input schema has 2 parameters (limit, maxMetadataApps) with 0% description coverage. The description does not explain these parameters at all, requiring the agent to guess their meaning.
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 uses a specific verb 'Find' and identifies the resources 'current wishlist and featured Store discounts', clearly distinguishing the tool from siblings like steam_get_wishlist (which merely retrieves the wishlist) or steam_discover_games.
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: to find deals with wishlist prioritization and exclusion of owned games. However, it does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_game_briefSteam Game BriefBRead-onlyIdempotent
Build one useful Store brief with price, release state, review summary, DLC, demos, platforms, controller/co-op features, and ownership/install status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| appid | No | ||
| dlcLimit | No | ||
| forceRefresh | No | ||
| includeDlcDetails | No | ||
| includeReviewSamples | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent. Description adds the brief's content components, providing moderate behavioral context. Does not mention pagination, rate limits, or data freshness.
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 sentence front-loads the tool's purpose. Could be slightly more structured (e.g., bullet points) but remains efficient.
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 6 unannotated parameters and no schema descriptions, the description fails to provide necessary context. Leaves agent guessing how to use optional parameters like forceRefresh or includeReviewSamples.
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 0% and description provides no explanation of the 6 parameters (name, appid, dlcLimit, etc.). Agent cannot determine how to specify the game or configure optional features.
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?
Clearly states the tool builds a store brief with a specific list of components (price, release state, review summary, etc.). Distinct from siblings like steam_get_game by focusing on a curated summary.
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 guidance on when to use this vs. alternatives like steam_get_game or steam_weekly_brief. The agent must infer from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_achievementsGet Steam AchievementsC
Get achievement progress for a specific appid or game name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| appid | No | ||
| forceRefresh | No | ||
| includeSchema | No | ||
| revealHiddenTitles | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description lacks any behavioral details such as caching, rate limits, or side effects. Only states the action without disclosing how it behaves (e.g., data freshness, required authentication).
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 sentence of 8 words is concise but omits critical parameter information. Structure is minimal but not bloated.
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?
Despite having an output schema, description provides no context about return values. With 5 parameters and no annotations, the description is inadequate for an AI agent to use the tool effectively.
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 0%, yet description only mentions 'appid or game name', ignoring three parameters (forceRefresh, includeSchema, revealHiddenTitles). Does not explain purpose of these parameters or relationships.
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?
Description clearly states the tool gets achievement progress and specifies two identifiers (appid or game name). It distinguishes from sibling 'steam_achievement_objectives' by focusing on progress rather than objectives.
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 guidance on when to use this tool versus alternatives like steam_achievement_objectives or when to prefer appid over game name. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_gameGet Steam GameC
Get details for one game in my library by appid or name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| appid | No | ||
| forceRefresh | No | ||
| includeAchievements | No | ||
| includeInstalledStatus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only says 'get details' without disclosing side effects, caching, or permissions needed. Minimal behavioral info.
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 sentence is concise but overly terse; lacks needed detail about optional parameters and return value.
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?
Tool has 5 parameters, no annotations, and output schema; description fails to mention parameters or output format, leaving agents underinformed.
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 0%; description only mentions appid/name but ignores forceRefresh, includeAchievements, includeInstalledStatus. No parameter explanations.
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?
Description explicitly states it gets details for one game by appid or name, clearly distinguishing from siblings like steam_get_achievements or steam_game_brief.
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 guidance on when to use this tool versus alternatives; lacks context for when appid vs name is preferred or when other parameters are appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_installed_gamesGet Installed Steam GamesC
List Steam games installed locally on this computer.
| Name | Required | Description | Default |
|---|---|---|---|
| libraryPath | No | ||
| includeOwnedMetadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description indicates local installation access but does not clarify whether Steam client must be running, data source, or potential side effects.
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 sentence is concise but under-specified; could be expanded with essential details without becoming verbose.
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 0% schema coverage and presence of output schema, description fails to provide context for parameters. Agent cannot infer correct usage without additional documentation.
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 has 0% description coverage. Description does not explain libraryPath or includeOwnedMetadata, leaving agent without guidance on parameter purpose or usage.
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?
Description clearly states verb (List) and resource (installed Steam games), and the local scope distinguishes it from siblings like steam_get_owned_games.
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 guidance on when to use this tool vs alternatives like steam_get_owned_games or steam_search_library. Lacks context about prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_owned_gamesGet Owned Steam GamesD
Get my owned Steam games.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sortBy | No | ||
| forceRefresh | No | ||
| sortDirection | No | ||
| includeAppInfo | No | ||
| includeFreePlayed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Get my owned Steam games' only states the action but does not reveal whether it requires authentication, the nature of the operation (read-only), any side effects, or performance implications.
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?
While the description is concise at one sentence, it is too sparse to be useful. It sacrifices essential context for brevity, resulting in under-specification rather than efficient communication.
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 6 parameters with zero documentation and no output schema description, the description is grossly incomplete. The agent lacks information on how to customize the query or interpret the results.
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 description does not mention any of the 6 input parameters (limit, sortBy, forceRefresh, sortDirection, includeAppInfo, includeFreePlayed). With 0% schema description coverage, the agent receives no guidance on how to use these parameters or what they control.
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 'Get my owned Steam games' is nearly identical to the title and tool name, making it a tautology that adds no new information. It fails to specify the scope or distinguish from siblings like steam_get_installed_games or steam_get_recently_played.
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 guidance is provided on when to use this tool versus alternatives such as steam_search_library or steam_get_wishlist. There are no hints about prerequisites, when-not to use, or which sibling tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_profileGet Steam ProfileC
Get my Steam profile summary from Steam ID or vanity name.
| Name | Required | Description | Default |
|---|---|---|---|
| steamid | No | ||
| vanityName | No | ||
| forceRefresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only implies a read operation ('Get'), but omits details on auth requirements, rate limits, side effects, or output structure. The existence of an output schema is not mentioned.
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 sentence, 11 words, no redundancy. All words are essential to the purpose.
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?
Despite having an output schema and three parameters with no schema descriptions, the description provides minimal detail. It lacks information on return values, parameter constraints, and usage examples. The tool complexity warrants a more descriptive text.
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 description adds meaning for two of three parameters by mentioning 'Steam ID or vanity name' (steamid and vanityName), but does not explain the third parameter 'forceRefresh'. With 0% schema description coverage, partial compensation is provided.
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 verb 'Get' and resource 'Steam profile summary', and specifies input options (Steam ID or vanity name). It is implicitly distinct from sibling tools which focus on other aspects (achievements, wishlist, etc.), but does not explicitly differentiate itself.
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 guidance is provided on when to use this tool versus alternatives, such as steam_resolve_vanity_url or other profile-related tools. The description only states what it does without any context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_recently_playedGet Recently Played Steam GamesC
Get my recently played Steam games.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| forceRefresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It only states the basic function without disclosing authentication requirements, caching behavior, rate limits, or the meaning of 'recently' (e.g., time range). The presence of an output schema does not compensate for missing safety or side-effect information.
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 sentence with no wasted words, achieving maximum conciseness. However, it is too brief to convey necessary details, and the structure does not front-load critical information like parameters or usage notes. It balances brevity and informativeness poorly.
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 has two parameters, no annotations, but an output schema, the description is incomplete. It does not explain parameter semantics, usage context, or behavioral notes like caching. For a tool with many siblings, more contextual detail is needed to enable correct 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?
The input schema has 0% description coverage for its two parameters (count, forceRefresh). The description does not mention or explain these parameters, failing to add meaning beyond the raw schema. An agent cannot determine the effect of each parameter without external knowledge.
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 verb 'Get' and the resource 'recently played Steam games', indicating the tool retrieves a user's recently played games. However, it lacks differentiation from sibling tools like steam_get_owned_games or steam_get_installed_games, which could cause confusion for an AI agent choosing between them.
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 alternatives. There are no usage restrictions, prerequisites, or examples of appropriate contexts, leaving the agent without decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_get_wishlistGet Steam WishlistC
Get a Steam wishlist through Steam's first-party but undocumented wishlist service and Store metadata endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| steamid | No | ||
| unreleasedOnly | No | ||
| maxMetadataApps | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions reliance on an undocumented service and Store metadata endpoints, implying potential instability. However, with no annotations, it does not fully disclose side effects, authentication needs, or rate limits.
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 sentence is concise, but it omits essential details. It earns its place but could benefit from additional context without becoming verbose.
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 4 undocumented parameters, no annotations, and an output schema, the description is insufficient. It lacks parameter details, usage context, and behavioral transparency.
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 0%, and the description provides no explanation of parameters (limit, steamid, unreleasedOnly, maxMetadataApps). This fails to add meaning beyond the raw schema.
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 retrieves a Steam wishlist and specifies the use of an undocumented wishlist service. It distinguishes from siblings like 'steam_check_wishlist_updates' but could define 'get' more precisely.
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 guidance on when to use this tool versus alternatives such as 'steam_check_wishlist_updates' or 'steam_get_owned_games'. The description lacks context for optimal usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_library_statsSteam Library StatsC
Summarize my Steam library.
| Name | Required | Description | Default |
|---|---|---|---|
| forceRefresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. 'Summarize' suggests a read operation, but no details are given about what data is included, performance, or side effects. The output schema exists but is not referenced.
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 extremely short (one phrase), which is concise but at the expense of essential information. It does not earn its place by providing enough detail for correct usage.
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 has 1 parameter and an output schema, the description is incomplete. It does not explain what kind of summary is produced, what the output contains, or how 'forceRefresh' affects behavior. The agent lacks critical 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 0%, yet the description does not mention the 'forceRefresh' parameter at all. The Boolean parameter remains unexplained, adding no value beyond the raw schema.
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 'Summarize my Steam library' conveys a general purpose but lacks specificity. It does not differentiate from siblings like 'steam_get_owned_games' or 'steam_get_recently_played', which also involve library information. The verb 'summarize' is vague and could mean different things.
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 usage guidelines are provided. The description does not indicate when to use this tool versus alternatives, nor does it mention any context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_plan_game_nightPlan Steam Game NightARead-onlyIdempotent
Find games shared with selected or currently visible friends, with online status and co-op/multiplayer Store metadata when available.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| maxFriends | No | ||
| friendNames | No | ||
| friendSteamIds | No | ||
| minFriendsOwning | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by specifying that it retrieves online status and co-op/multiplayer metadata. Annotations already indicate read-only and idempotent, so the description complements them without contradiction.
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, well-structured sentence that efficiently conveys the tool's purpose and output. No unnecessary words.
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?
Despite having an output schema and no required parameters, the description lacks details on how to use the five parameters effectively. It does not explain constraints like 'selected or currently visible friends' or how 'limit' and 'maxFriends' interact. Incomplete for a tool with 0% parameter documentation.
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 0%, so the description must explain parameters, but it does not. It does not clarify how parameters like 'friendNames', 'friendSteamIds', or 'minFriendsOwning' affect results. The description is too vague to compensate for missing schema 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?
The description clearly states the tool finds games shared with friends, including online status and co-op/multiplayer metadata. The verb 'find' and resource 'games shared with friends' are specific, and the tool is distinct from siblings like steam_discover_games or steam_search_library.
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 use for planning a game night but does not explicitly state when to use this tool over alternatives or exclude other cases. No 'when-not-to-use' or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_recommend_from_libraryRecommend From Steam LibraryC
Recommend games from my Steam library based on mood, available time, and discovery preference.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | ||
| limit | No | ||
| queryTerms | No | ||
| excludeTerms | No | ||
| preferUnplayed | No | ||
| preferInstalled | No | ||
| availableMinutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose whether the tool is read-only, how recommendations are generated, or any side effects. The presence of an output schema helps but the description itself lacks behavioral detail.
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 sentence with no wasted words, but for a tool with 7 parameters it lacks structural breakdown or explanation of inputs.
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?
Despite having an output schema, the description omits many key parameters and does not set expectations for the return value or behavior, leaving the agent underinformed for a recommendation tool.
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 0%, so the description must explain parameters. It only hints at 'mood', 'available time', and 'discovery preference', ignoring 'limit', 'queryTerms', 'excludeTerms', and does not clarify how parameters interact.
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 recommends games from the user's Steam library based on mood, available time, and discovery preference, distinguishing it from listing or search tools.
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 (personalized recommendations) but does not explicitly mention when not to use or suggest alternatives like steam_search_library for filtering or steam_get_owned_games for listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_refresh_cacheRefresh Steam CacheC
Refresh cached Steam API data.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden of behavioral disclosure. It does not disclose whether the refresh is safe, destructive, requires authentication, or makes network calls. The agent has no insight into side effects.
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 extremely concise (5 words), which is efficient, but it is under-specified for the tool's complexity. It could be expanded with key details without losing conciseness.
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 existence of an output schema and the tool's single parameter, the description provides minimal context. It does not explain return values or when refreshing is appropriate, leaving the agent to infer behavior from the schema alone.
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 0% and the description does not mention the 'target' parameter at all. Although the enum values are somewhat self-explanatory, the agent receives no context on how to choose a value or what each target refreshes.
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 verb 'Refresh' and the resource 'cached Steam API data', making the basic purpose evident. It distinguishes itself from siblings as the only cache-related tool. However, it lacks specificity about what 'refresh' entails (e.g., re-fetch, clear) and the scope of the refresh.
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 guidance on when to use this tool versus alternatives or context for its operation. The description fails to mention prerequisites, typical use cases (e.g., stale data), or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_resolve_vanity_urlResolve Steam Vanity URLB
Resolve a Steam vanity URL name to SteamID64.
| Name | Required | Description | Default |
|---|---|---|---|
| vanityName | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It only states what the tool does, not how it behaves. For instance, it does not disclose that this is a potentially read-only operation, whether authentication is required, or if there are rate limits. The description is too terse to convey behavioral traits.
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 sentence with no fluff, achieving conciseness. However, it could be slightly expanded to improve completeness without losing conciseness.
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 is simple (one parameter, output schema exists), the minimal description is borderline sufficient. It explains the core transformation from vanity name to SteamID64, which is the primary purpose. However, it does not explain the output format or any edge cases, making it slightly incomplete.
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?
With 0% schema description coverage, the description should add context for the parameter. It does not elaborate on what a 'vanity URL name' is (e.g., custom URL, not full URL). The parameter name is self-explanatory, but the description adds no extra meaning beyond the schema.
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 core function: resolving a Steam vanity URL to a SteamID64. The verb 'resolve' and the resource 'Steam vanity URL name' are specific, and it is distinct from sibling tools like 'steam_get_profile' or 'steam_search_library'.
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 guidance on when to use this tool versus alternatives. There is no mention of prerequisites, typical scenarios, or when not to use it. For example, it does not explain that this is a prerequisite for getting a user's profile or other user-specific data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_search_librarySearch Steam LibraryC
Search my owned Steam games by fuzzy name/query.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| forceRefresh | No | ||
| includeInstalledStatus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention whether the tool returns game IDs, names, or full details, nor does it discuss caching, performance, or any side effects. The single sentence is insufficient.
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?
While the description is short, it omits essential information such as parameter semantics and response format. True conciseness preserves clarity without losing necessary details; this version is under-specified.
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 complexity of 4 parameters and the existence of an output schema, the description is severely incomplete. It does not explain what the output contains, how fuzzy matching works, or any constraints like rate limits or prerequisites.
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 has 0% description coverage and the description adds no meaning for the four parameters (limit, query, forceRefresh, includeInstalledStatus). The agent is left to guess their semantics (e.g., what does forceRefresh do?; how does includeInstalledStatus affect results?).
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 explicitly states the verb 'search', the resource 'my owned Steam games', and the method 'by fuzzy name/query'. This clearly distinguishes it from sibling tools like steam_get_owned_games (which lists all owned games) or steam_get_game (which fetches details for a specific game).
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 guidance is provided on when to use this tool versus alternatives such as steam_get_owned_games for exact retrieval or steam_find_deals for deals. The description lacks context for appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_storage_commanderSteam Storage CommanderARead-onlyIdempotent
Audit installed-game storage, find large games, or build a non-destructive make-room/uninstall plan using size, playtime, recency, backlog, and protected local tags.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| limit | No | ||
| protectedTags | No | ||
| neededGigabytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, so the safety profile is clear. The description adds behavioral context by mentioning 'non-destructive' and criteria (size, playtime, recency, backlog, protected tags), but does not disclose detailed behavior beyond that.
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 concise sentence front-loads the main actions and criteria. Every word contributes meaning with no redundancy.
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 complexity (4 parameters, zero required, one enum, output schema exists), the description covers the overall goal but does not detail parameter behavior or output expectations. It is adequate but leaves gaps about how modes use other parameters.
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 0%, so the description must compensate. The description names some criteria but does not explain the parameters (mode, limit, protectedTags, neededGigabytes) or their relationship to the modes. The enum values for mode (audit, find_large, make_room, uninstall_plan) are only listed in the schema, not described in text.
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 specific actions: 'Audit installed-game storage, find large games, or build a non-destructive make-room/uninstall plan'. It uses strong verbs and resource (storage), and distinguishes from sibling tools by focusing on storage management and planning rather than general library listing or stats.
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 usage context (storage management) but does not explicitly state when to use this tool versus alternatives like steam_get_installed_games or steam_library_stats. No direct guidance on when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_update_centerSteam Update CenterARead-onlyIdempotent
Read local appmanifest update and schedule evidence without modifying Steam's private queue or configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds specific behavioral context by stating it reads from local appmanifest and does not modify Steam's private queue or configuration. This goes beyond the annotations by specifying the data source and 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 a single sentence of 15 words, front-loading the action 'Read' and the resource. Every word earns its place, and there is no redundancy or unnecessary detail.
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 zero parameters and an existing output schema, the description adequately explains the tool's purpose and behavior. It specifies what it reads (appmanifest update and schedule evidence) and what it does not do (modify queue/configuration), which is complete for its simplicity.
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 has zero parameters, and the schema coverage is 100% (no parameters to describe). Per guidelines, a baseline of 4 is appropriate since there are no parameters that need explanation. The description adds no parameter info because none is needed.
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 it reads local appmanifest update and schedule evidence, and explicitly distinguishes itself from other tools by noting it does not modify Steam's queue or configuration. The verb 'Read' is specific and the resource is well-defined.
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 usage for reading update/schedule evidence, but does not explicitly state when to use it versus alternatives or when not to use it. No usage context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steam_weekly_briefSteam Weekly BriefARead-only
Create a Markdown-ready weekly brief with wishlist releases, demos, price drops, beta/playtest news, forgotten owned games, and optional new-game discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| maxNewsApps | No | ||
| saveSnapshot | No | ||
| maxMetadataApps | No | ||
| includeDiscovery | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool is safe. The description adds value by specifying that it generates a Markdown document and includes multiple data sources, but does not contradict annotations.
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 efficiently states purpose and scope. No superfluous words or 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?
The description adequately covers the tool's purpose and main features given the presence of annotations and an output schema. However, it lacks parameter explanations and usage context, which slightly reduces completeness.
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 0% (no descriptions), and the description only hints at 'includeDiscovery' via 'optional new-game discovery'. The other three parameters (maxNewsApps, saveSnapshot, maxMetadataApps) are left completely unexplained, leaving the agent to guess their purpose.
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 verb 'Create', the output format 'Markdown-ready weekly brief', and the specific content categories (wishlist releases, demos, price drops, etc.). It distinguishes itself from siblings like steam_game_brief (per-game) and steam_discover_games (discovery only) by enumerating its comprehensive 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 usage via listing included features but does not explicitly state when to use this tool versus alternatives like steam_find_deals or steam_check_wishlist_updates. No prerequisites or exclusions are mentioned.
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.
21 tool updates
v0.3.0- First observed
steam_achievement_objectives - First observed
steam_check_wishlist_updates - First observed
steam_discover_games - First observed
steam_find_deals - First observed
steam_game_brief - First observed
steam_get_achievements - First observed
steam_get_game - First observed
steam_get_installed_games - First observed
steam_get_owned_games - First observed
steam_get_profile - First observed
steam_get_recently_played - First observed
steam_get_wishlist - First observed
steam_library_stats - First observed
steam_plan_game_night - First observed
steam_recommend_from_library - First observed
steam_refresh_cache - First observed
steam_resolve_vanity_url - First observed
steam_search_library - First observed
steam_storage_commander - First observed
steam_update_center - First observed
steam_weekly_brief
TDQS
Scored across 21 tools
Each tool targets a unique aspect of Steam library management, from listing games and achievements to managing storage and creating weekly briefs. Despite several get_-prefixed tools, they clearly differ by the specific data retrieved (e.g., achievements vs. owned games). No two tools appear to have overlapping functionality.
All tool names follow a consistent pattern: the steam_ prefix followed by descriptive, snake_case phrases. Verbs like get_, find_, and check_ are used predictably, and even compound names like steam_achievement_objectives or steam_plan_game_night are clearly readable. No mixing of conventions occurs.
With 21 tools, the server covers a broad range of library-related operations without being overwhelming. Each tool addresses a distinct need, and the count feels proportional to the complexity of Steam's library feature set.
The tools provide comprehensive coverage of library operations: retrieval, search, statistics, achievements, wishlist, storage, updates, recommendations, and social planning. While write operations like removing games are absent, the server's scope aligns with a library-focused assistant, leaving few obvious gaps.
Maintenance
Related MCP Connectors
Steam Web API: profiles, owned games, achievements, app news, player counts.
Live Steam market data for AI agents: top sellers, deals, player counts. Paid per call via x402.
Live Steam Market API docs, schemas, products, games, markets and endpoint search.
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
Related MCP Servers
- AlicenseAqualityCmaintenanceIntegrates with Steam Web API to enable querying user profiles, game libraries, store data, and community features like reviews and workshop items.16MIT
- AlicenseAqualityCmaintenanceProvides comprehensive video game metadata and assets from Steam, SteamGridDB, and ScreenScraper, enabling game search, details, DLCs, reviews, player counts, and visual assets.1624 npm3MIT
- FlicenseNot gradedqualityCmaintenanceProvides access to your Steam game library data through Claude Desktop, enabling game search, filtering, details, recommendations, and statistics.7-
- 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