Skip to main content
Glama

Get Steam charts

get_charts
Read-only

Retrieve ranked Steam charts for top sellers, most-played games, Steam Deck rankings, or live concurrent players to identify what's popular right now.

Instructions

Get what is popular on Steam right now as a ranked list. chart picks one: top_sellers (weekly best-sellers, with weeks on chart), most_played (top 100 by peak players on the last full day, with the rank a week earlier), most_played_deck (top 100 played on Steam Deck in the past week, with the previous week's rank) or concurrent_players (top 100 by players in game right now, live). Use for 'what's hot / top selling / most played on Steam (Deck)'; for one known game's live count use get_current_players, for the store front page's curated sections (also hardware and bundles) use get_featured, to FILTER the catalog by discount, tags or compat use discover_games. Returns only rank, appid, name, store_url and chart metrics (no price/reviews/Deck status) — pass the appids to get_items for those. last_week_rank null means a new entry; concurrent_players has none. Results are cached for a few minutes. top_sellers is global by default; give country for that country's own best-sellers and week for a past week. The other three are global rankings of the current period only. No API key required.

Input Schema

NameRequiredDescriptionDefault
weekNotop_sellers only: any date (YYYY-MM-DD) inside the week to show; Steam's weeks start Tuesday 00:00 UTC and go back 10+ years. Omit for the latest published week (`as_of` says which week that is).
chartYestop_sellers = weekly best-sellers; most_played = yesterday's peak players; most_played_deck = most played on Steam Deck this past week; concurrent_players = live players now.
limitNoHow many top entries to return (1-100). Default 20.
countryNotop_sellers only: two-letter country code for that country's best-sellers, e.g. DE. Omit for the global chart. Must be a real Steam store region — the two-letter shape is all that's checked here, and Steam answers an unrecognized code with US prices rather than an error, so a typo returns plausible numbers for the wrong country.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.17.0
    • changedInput schema / properties / chart / description
      Previous value: -"top_sellers = weekly best-sellers; most_played = yesterday's peak players; concurrent_players = live players now."New value: +"top_sellers = weekly best-sellers; most_played = yesterday's peak players; most_played_deck = most played on Steam Deck this past week; concurrent_players = live players now."
    • changedInput schema / properties / chart / enum
      Previous value: -[
      -  "top_sellers",
      -  "most_played",
      -  "concurrent_players"
      -]New value: +[
      +  "top_sellers",
      +  "most_played",
      +  "most_played_deck",
      +  "concurrent_players"
      +]
    • addedInput schema / properties / country
      Added value: +{
      +  "description": "top_sellers only: two-letter country code for that country's best-sellers, e.g. DE. Omit for the global chart. Must be a real Steam store region — the two-letter shape is all that's checked here, and Steam answers an unrecognized code with US prices rather than an error, so a typo returns plausible numbers for the wrong country.",
      +  "pattern": "^[A-Za-z]{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / week
      Added value: +{
      +  "description": "top_sellers only: any date (YYYY-MM-DD) inside the week to show; Steam's weeks start Tuesday 00:00 UTC and go back 10+ years. Omit for the latest published week (`as_of` says which week that is).",
      +  "format": "date",
      +  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +  "type": "string"
      +}
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "as_of": {
      -        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players).",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "chart": {
      -        "const": "top_sellers",
      -        "type": "string"
      -      },
      -      "count": {
      -        "description": "Entries returned (at most the requested `limit`).",
      -        "type": "number"
      -      },
      -      "entries": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "consecutive_weeks": {
      -              "description": "Consecutive weeks on the weekly top-sellers chart, counting this one.",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "last_week_rank": {
      -              "description": "Rank one week earlier; null means the game was not on this chart then (new entry).",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "name": {
      -              "description": "Game name; null when Steam did not resolve one (best-effort for the player charts).",
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "rank": {
      -              "type": "number"
      -            },
      -            "store_url": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "rank",
      -            "appid",
      -            "name",
      -            "store_url",
      -            "last_week_rank",
      -            "consecutive_weeks"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "chart",
      -      "as_of",
      -      "count",
      -      "entries"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "as_of": {
      -        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players).",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "chart": {
      -        "const": "most_played",
      -        "type": "string"
      -      },
      -      "count": {
      -        "description": "Entries returned (at most the requested `limit`).",
      -        "type": "number"
      -      },
      -      "entries": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "last_week_rank": {
      -              "description": "Rank one week earlier; null means the game was not on this chart then (new entry).",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "name": {
      -              "description": "Game name; null when Steam did not resolve one (best-effort for the player charts).",
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "peak_in_game": {
      -              "description": "Peak concurrent players on the day in `as_of`.",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "rank": {
      -              "type": "number"
      -            },
      -            "store_url": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "rank",
      -            "appid",
      -            "name",
      -            "store_url",
      -            "last_week_rank",
      -            "peak_in_game"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "chart",
      -      "as_of",
      -      "count",
      -      "entries"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "as_of": {
      -        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players).",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "chart": {
      -        "const": "concurrent_players",
      -        "type": "string"
      -      },
      -      "count": {
      -        "description": "Entries returned (at most the requested `limit`).",
      -        "type": "number"
      -      },
      -      "entries": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "concurrent_in_game": {
      -              "description": "Players in game right now.",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "name": {
      -              "description": "Game name; null when Steam did not resolve one (best-effort for the player charts).",
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "peak_in_game": {
      -              "description": "Steam's most recent daily peak of concurrent players.",
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "rank": {
      -              "type": "number"
      -            },
      -            "store_url": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "rank",
      -            "appid",
      -            "name",
      -            "store_url",
      -            "concurrent_in_game",
      -            "peak_in_game"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "chart",
      -      "as_of",
      -      "count",
      -      "entries"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "as_of": {
      +        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players); null for most_played_deck, which Steam sends undated.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "chart": {
      +        "const": "top_sellers",
      +        "type": "string"
      +      },
      +      "count": {
      +        "description": "Entries returned (at most the requested `limit`).",
      +        "type": "number"
      +      },
      +      "entries": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "consecutive_weeks": {
      +              "description": "Consecutive weeks on the weekly top-sellers chart, counting this one.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "last_week_rank": {
      +              "description": "Rank one week earlier; null means the game was not on this chart then (new entry).",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "description": "Game name; null when Steam sends none for the entry.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "rank": {
      +              "type": "number"
      +            },
      +            "store_url": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "rank",
      +            "appid",
      +            "name",
      +            "store_url",
      +            "last_week_rank",
      +            "consecutive_weeks"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "chart",
      +      "as_of",
      +      "count",
      +      "entries"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "as_of": {
      +        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players); null for most_played_deck, which Steam sends undated.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "chart": {
      +        "const": "most_played",
      +        "type": "string"
      +      },
      +      "count": {
      +        "description": "Entries returned (at most the requested `limit`).",
      +        "type": "number"
      +      },
      +      "entries": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "last_week_rank": {
      +              "description": "Rank one week earlier; null means the game was not on this chart then (new entry).",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "description": "Game name; null when Steam sends none for the entry.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "peak_in_game": {
      +              "description": "Peak concurrent players on the day in `as_of`.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "rank": {
      +              "type": "number"
      +            },
      +            "store_url": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "rank",
      +            "appid",
      +            "name",
      +            "store_url",
      +            "last_week_rank",
      +            "peak_in_game"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "chart",
      +      "as_of",
      +      "count",
      +      "entries"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "as_of": {
      +        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players); null for most_played_deck, which Steam sends undated.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "chart": {
      +        "const": "most_played_deck",
      +        "type": "string"
      +      },
      +      "count": {
      +        "description": "Entries returned (at most the requested `limit`).",
      +        "type": "number"
      +      },
      +      "entries": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "last_week_rank": {
      +              "description": "Rank one week earlier; null means the game was not on this chart then (new entry).",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "description": "Game name; null when Steam sends none for the entry.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "rank": {
      +              "type": "number"
      +            },
      +            "store_url": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "rank",
      +            "appid",
      +            "name",
      +            "store_url",
      +            "last_week_rank"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "chart",
      +      "as_of",
      +      "count",
      +      "entries"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "as_of": {
      +        "description": "ISO 8601 UTC time of the chart: start of the week (top_sellers), start of the day the peak was measured (most_played) or last live update (concurrent_players); null for most_played_deck, which Steam sends undated.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "chart": {
      +        "const": "concurrent_players",
      +        "type": "string"
      +      },
      +      "count": {
      +        "description": "Entries returned (at most the requested `limit`).",
      +        "type": "number"
      +      },
      +      "entries": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "concurrent_in_game": {
      +              "description": "Players in game right now.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "description": "Game name; null when Steam sends none for the entry.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "peak_in_game": {
      +              "description": "Steam's most recent daily peak of concurrent players.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "rank": {
      +              "type": "number"
      +            },
      +            "store_url": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "rank",
      +            "appid",
      +            "name",
      +            "store_url",
      +            "concurrent_in_game",
      +            "peak_in_game"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "chart",
      +      "as_of",
      +      "count",
      +      "entries"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Addedv0.15.0

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description adds real behavioral context: results are cached for a few minutes, no API key is required, the return set omits price/reviews/Deck status, and `last_week_rank` null means a new entry. The gaps are modest — no pagination behaviour, no error behaviour beyond the country caveat, no note on how large the underlying chart is before `limit` truncates it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The ranked-list purpose and the chart enumeration are front-loaded, and the routing-to-siblings sentence follows immediately. It is dense but one long block, with some overlap against schema text (the chart enum is restated almost verbatim), which costs a point.

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

Completeness5/5

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

With an output schema present, the description does not need to explain return values, yet it still flags the useful subset (rank, appid, name, store_url, chart metrics) and the null semantics of last_week_rank. Combined with the caching and no-key notes, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions already carry the week window, the enum meanings, the limit range and the country-typo warning. The description's added value is the cross-parameter constraint ('top_sellers is global by default; give country... The other three are global rankings of the current period only'), which is genuinely useful, but most other parameter meaning is repeated from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get what is popular on Steam right now as a ranked list') and then enumerates all four chart modes with their period and metric, so an agent knows exactly what each variant yields. It explicitly distinguishes itself from get_current_players, get_featured and discover_games.

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

Usage Guidelines5/5

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

Gives a positive use case ('what's hot / top selling / most played on Steam (Deck)') plus three explicit alternatives with the condition that selects each: get_current_players for one known game's live count, get_featured for the store front page, discover_games to filter the catalog. Also states scope limits — only top_sellers accepts country/week.

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