Skip to main content
Glama

Find friends who own a game

find_friends_who_own
Read-only

Check which Steam friends own specific games by app ID, including playtime hours. Scans each friend's full library to catch even unplayed copies, handling private or unavailable friends individually.

Instructions

Check which of a player's Steam friends own one or more games by appid, with each owner's playtime_hours — 'which of my friends have Portal 2 and how long have they played'. Checks each friend's FULL library, unlike get_owned_games which caps its own list at the top 50 games by playtime — so a friend's rarely-played or unplayed copy is never missed (its playtime_hours may still be low or 0). For the PLAYER'S OWN ownership instead of a friend's, use get_owned_games's check_appids. Requires STEAM_API_KEY and the player's OWN friends list to be public — otherwise the whole call returns found:false. A friend's individually private library is a different, per-friend case: that friend is listed in private_friends (can't be checked) rather than silently counted as a non-owner. Likewise, a friend whose own library lookup failed (e.g. rate-limited) lands in unavailable_friends with a reason instead of failing the whole call — every other friend's result still comes through. Each of owners, private_friends and unavailable_friends is capped at 100 entries (a sibling _total field appears only when it was actually truncated). On a big account only the first 200 friends are looked up at all (one Steam call per friend would otherwise run past an MCP client's request timeout) — compare friends_checked against total_friends, and treat a friend missing from all three lists as unchecked, not as a non-owner. Get appids from search_games.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appidsYesSteam appids to check (1-10).
steamidNo17-digit SteamID64. Omit to use the STEAM_ID configured on the server. Convert a vanity/custom URL name with resolve_vanity_url first.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Install Server

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint and openWorldHint annotations. It discloses dependencies (STEAM_API_KEY, public friends list), failure modes (found:false, per-friend private_library, rate-limited lookups), caps (100 entries per list, 200-friend lookup limit), and the timeout rationale. This is rich, behavior-critical context.

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

Conciseness5/5

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

Though lengthy, the description is tightly packed and front-loaded with the core purpose. Each subsequent sentence addresses a distinct edge case or behavioral caveat, so every sentence earns its place. The structure uses clear separators and comparative language to keep it readable.

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?

Even with an output schema present, the description explains the meaning of key output fields (owners, private_friends, unavailable_friends, friends_checked, total_friends) and truncation behavior. It also covers operational context like timeouts and limits, making it fully complete for agent decision-making.

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?

The input schema already provides 100% coverage for both parameters (appids and steamid), including descriptions. The tool description does not add new parameter-level semantics beyond referencing appids and mentioning source via search_games; it focuses on tool behavior rather than parameter syntax.

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 description opens with a specific verb and resource: 'Check which of a player's Steam friends own one or more games by appid, with each owner's playtime_hours'. It immediately distinguishes itself from get_owned_games and other sibling tools by clarifying scope ('a player's friends' vs 'own ownership').

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?

Explicit guidance is given: 'For the PLAYER'S OWN ownership instead of a friend's, use get_owned_games's check_appids' and 'Get appids from search_games.' It also explains when the tool should not be used or how to interpret missing friends ('treat a friend missing from all three lists as unchecked, not as a non-owner').

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

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Grinv/steam-games-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server