Skip to main content
Glama

Get owned games

get_owned_games
Read-only

List a player's owned Steam games with playtime hours, sorted most- or least-played first, and check ownership of specific appids against the full library.

Instructions

List the games a player owns with playtime (hours), ordered by playtime — most-played first by default, least-played first with sort='playtime_asc' (the games list is capped to 50 entries by default, so the far end of that ordering may not appear there; raise limit to widen the cap, or flip sort to keep the never-played end instead, which is what a 'what have I never got round to playing' question needs). To reliably check whether the player owns one or more SPECIFIC appids regardless of that cap — 'do I own game X' — pass check_appids; the owns field then checks the FULL, uncapped library, with each result's own playtime_hours (null if not owned). For the last two weeks of play instead of the all-time library, use get_recently_played. For checking a FRIEND's ownership instead of the player's own, use find_friends_who_own. Requires STEAM_API_KEY and a public profile + game-details visibility; a private profile, or a SteamID64 with no account behind it, returns found:false. Get the SteamID64 from resolve_vanity_url.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "get_owned_games"
  }
}

Input Schema

NameRequiredDescriptionDefault
sortNoWhich end of the library the cap keeps: 'playtime_desc' (default) the most-played, 'playtime_asc' the least-played and never-played first.
limitNoHow many games to return (1-300, default 50). Raise it only when a wider slice of the library is genuinely needed — the ceiling is a response-size budget, so even a 4000-game account never comes back whole. To check specific appids past the cap, use check_appids rather than a bigger limit.
steamidNo17-digit SteamID64. Omit to use the STEAM_ID configured on the server. Convert a vanity/custom URL name with resolve_vanity_url first.
check_appidsNoSteam appids to check ownership of (1-50), regardless of the 50-entry cap on `games` (or of whichever end `sort` keeps). Prefer this over raising `limit`: it reads the FULL library, and its own cost is bounded by this list's length. Adds an `owns` field: [{appid, owned, playtime_hours}]. One upstream gap to know about: Steam omits free-to-play titles the player owns but has NEVER launched, so those report owned:false — as does an appid that doesn't exist, so this field can't tell 'no such game' from 'doesn't own it'. A private profile reports no `owns` at all (ownership unknown) rather than a false owned:false.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.14.0
    • changedInput schema / properties / check_appids / description
      Previous value: -"Steam appids to check ownership of (1-50), regardless of the top-50-by-playtime cap on `games`. Adds an `owns` field: [{appid, owned, playtime_hours}]. One upstream gap to know about: Steam omits free-to-play titles the player owns but has NEVER launched, so those report owned:false. A private profile reports no `owns` at all (ownership unknown) rather than a false owned:false."New value: +"Steam appids to check ownership of (1-50), regardless of the 50-entry cap on `games` (or of whichever end `sort` keeps). Prefer this over raising `limit`: it reads the FULL library, and its own cost is bounded by this list's length. Adds an `owns` field: [{appid, owned, playtime_hours}]. One upstream gap to know about: Steam omits free-to-play titles the player owns but has NEVER launched, so those report owned:false — as does an appid that doesn't exist, so this field can't tell 'no such game' from 'doesn't own it'. A private profile reports no `owns` at all (ownership unknown) rather than a false owned:false."
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "How many games to return (1-300, default 50). Raise it only when a wider slice of the library is genuinely needed — the ceiling is a response-size budget, so even a 4000-game account never comes back whole. To check specific appids past the cap, use check_appids rather than a bigger limit.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 300,
      +  "type": "integer"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "Which end of the library the cap keeps: 'playtime_desc' (default) the most-played, 'playtime_asc' the least-played and never-played first.",
      +  "enum": [
      +    "playtime_desc",
      +    "playtime_asc"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "null"
      -      },
      -      "games": {
      -        "items": {
      -          "not": {}
      -        },
      -        "type": "array"
      -      },
      -      "reason": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "reason",
      -      "game_count",
      -      "games"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "number"
      -      },
      -      "games": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "name": {
      -              "anyOf": [
      -                {
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_2weeks_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "playtime_hours",
      -            "playtime_2weeks_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "owns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "owned": {
      -              "type": "boolean"
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "appid",
      -            "owned",
      -            "playtime_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "returned": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "game_count",
      -      "returned",
      -      "games"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": false,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "null"
      +      },
      +      "games": {
      +        "items": {
      +          "not": {}
      +        },
      +        "type": "array"
      +      },
      +      "reason": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "reason",
      +      "game_count",
      +      "games"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "number"
      +      },
      +      "games": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "playtime_2weeks_hours": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "playtime_hours": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "playtime_hours",
      +            "playtime_2weeks_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "owns": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "owned": {
      +              "type": "boolean"
      +            },
      +            "playtime_hours": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "appid",
      +            "owned",
      +            "playtime_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "returned": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "game_count",
      +      "returned",
      +      "games"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changedv0.13.1
    • changedInput schema / properties / check_appids / description
      Previous value: -"Steam appids to reliably check ownership of (1-50), regardless of the top-50-by-playtime cap on `games`. Adds an `owns` field: [{appid, owned, playtime_hours}]."New value: +"Steam appids to check ownership of (1-50), regardless of the top-50-by-playtime cap on `games`. Adds an `owns` field: [{appid, owned, playtime_hours}]. One upstream gap to know about: Steam omits free-to-play titles the player owns but has NEVER launched, so those report owned:false. A private profile reports no `owns` at all (ownership unknown) rather than a false owned:false."
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "null"
      -      },
      -      "games": {
      -        "items": {
      -          "not": {}
      -        },
      -        "type": "array"
      -      },
      -      "owns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "owned": {
      -              "const": false,
      -              "type": "boolean"
      -            }
      -          },
      -          "required": [
      -            "appid",
      -            "owned"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "reason": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "reason",
      -      "game_count",
      -      "games"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "number"
      -      },
      -      "games": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "name": {
      -              "anyOf": [
      -                {
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_2weeks_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "playtime_hours",
      -            "playtime_2weeks_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "owns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "owned": {
      -              "type": "boolean"
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "appid",
      -            "owned",
      -            "playtime_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "returned": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "game_count",
      -      "returned",
      -      "games"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": false,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "null"
      +      },
      +      "games": {
      +        "items": {
      +          "not": {}
      +        },
      +        "type": "array"
      +      },
      +      "reason": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "reason",
      +      "game_count",
      +      "games"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "number"
      +      },
      +      "games": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "name": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "playtime_2weeks_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "playtime_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "playtime_hours",
      +            "playtime_2weeks_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "owns": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "owned": {
      +              "type": "boolean"
      +            },
      +            "playtime_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "appid",
      +            "owned",
      +            "playtime_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "returned": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "game_count",
      +      "returned",
      +      "games"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed3 schema fields changedv0.12.1
    • addedInput schema / additionalProperties
      Added value: +false
    • removedOutput schema / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "null"
      -      },
      -      "games": {
      -        "items": {
      -          "not": {}
      -        },
      -        "type": "array"
      -      },
      -      "owns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "owned": {
      -              "const": false,
      -              "type": "boolean"
      -            }
      -          },
      -          "required": [
      -            "appid",
      -            "owned"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "reason": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "reason",
      -      "game_count",
      -      "games"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "found": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "game_count": {
      -        "type": "number"
      -      },
      -      "games": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "name": {
      -              "anyOf": [
      -                {
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_2weeks_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "playtime_hours",
      -            "playtime_2weeks_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "owns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "appid": {
      -              "type": "number"
      -            },
      -            "owned": {
      -              "type": "boolean"
      -            },
      -            "playtime_hours": {
      -              "anyOf": [
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            }
      -          },
      -          "required": [
      -            "appid",
      -            "owned",
      -            "playtime_hours"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "returned": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "found",
      -      "game_count",
      -      "returned",
      -      "games"
      -    ],
      -    "type": "object"
      -  }
      -]
    • addedOutput schema / oneOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": false,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "null"
      +      },
      +      "games": {
      +        "items": {
      +          "not": {}
      +        },
      +        "type": "array"
      +      },
      +      "owns": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "owned": {
      +              "const": false,
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "appid",
      +            "owned"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "reason": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "reason",
      +      "game_count",
      +      "games"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "found": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "game_count": {
      +        "type": "number"
      +      },
      +      "games": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "name": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "playtime_2weeks_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "playtime_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "playtime_hours",
      +            "playtime_2weeks_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "owns": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "appid": {
      +              "type": "number"
      +            },
      +            "owned": {
      +              "type": "boolean"
      +            },
      +            "playtime_hours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "appid",
      +            "owned",
      +            "playtime_hours"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "returned": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "game_count",
      +      "returned",
      +      "games"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Addedv0.10.5
  5. Removedv0.10.4
  6. Addedv0.10.4
  7. Removedv0.8.0
  8. Changed2 schema fields changedv0.3.0
    • changedInput schema / properties / steamid / description
      Previous value: -"17-digit SteamID64. Convert a vanity/custom URL name with resolve_vanity_url first."New value: +"17-digit SteamID64. Omit to use the STEAM_ID configured on the server. Convert a vanity/custom URL name with resolve_vanity_url first."
    • removedInput schema / required
      Removed value: -[
      -  "steamid"
      -]
  9. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

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

Beyond readOnlyHint/openWorldHint it discloses the 50-entry cap, the auth prerequisites (STEAM_API_KEY, public profile with game-details visibility), the found:false outcome for private or nonexistent accounts, and two non-obvious data gaps (F2P never-launched titles report owned:false; private profiles return no `owns` at all rather than false). That is substantial behavioral context annotations cannot carry. It stops short of describing cost/latency or ordering ties, keeping it just below top marks.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is a single sprawling sentence built from stacked parentheticals that a reader must re-parse to extract the sort/limit/check_appids decision. The content mostly earns its place, but the structure could be broken into short bullets or separate sentences without losing information.

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?

For a read-only listing tool with four optional parameters, an output schema, and full annotation coverage, the description supplies everything an agent needs: auth requirements, capping behavior, the ownership-check path, failure modes, and sibling routing. No decision-relevant gap remains.

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

Parameters4/5

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

Schema coverage is 100% and the schema descriptions already cover sort, limit and check_appids in detail, so baseline would be 3. The description still adds value by framing the parameters as competing strategies (widen limit vs. flip sort vs. pass check_appids) and by spelling out the `owns` result shape with null playtime for unowned appids.

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

Purpose5/5

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

The opening clause names a specific verb, resource and returned data ('List the games a player owns with playtime (hours), ordered by playtime'), and the description explicitly separates this from get_recently_played (last two weeks) and find_friends_who_own (a friend's library). An agent can tell what this tool returns and what it does not without opening the schema.

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?

It names alternatives and the exact condition that selects each: get_recently_played for two-week play, find_friends_who_own for a friend, check_appids for specific appids, resolve_vanity_url to obtain a SteamID64. It also explains the sort/limit tradeoff in query terms ('what have I never got round to playing'), which is guidance rather than restatement.

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