Agent tip: fetch the .md version of this page - same data, fewer tokens. Checking many players? Batch up to 100 ids: /batch/{id1,...,id100}.md

SteamGPT for AI Agents

Structured Steam identity and gaming context API. No key, no signup, no cookies, no tracking. Every endpoint returns .md, .json or .ai - a deterministic flat-text serializer (labeled lines, no tables or braces; not an LLM summary), the cheapest for models to read.

9 API endpoints · 9 MCP tools · 8 recommended agent workflows below.

8 common agent calls

1. ProfileGET /profile/{id}.md - Steam summary only, cheapest (~200 tokens, .ai ~80)
2. CompetitiveGET /summary/{id}.md?preset=competitive - FACEIT + bans, no friends (~350 tokens)
3. BansGET /bans/{id}.md - VAC / game / community / economy (~100 tokens)
4. FriendsGET /friends/{id}.md?detail=short - use short unless you need friend metadata (short = bare id array, ~5 tokens/friend; medium = id + nickname; full = id + raw Steam object)
5. CompareGET /compare/{id1}/{id2}.md - two players + shared friends
6. BatchGET /batch/{id1,...,id100}.md - up to 100 profiles in ONE request; always batch instead of per-player calls
7. EverythingGET /summary/{id}.md - all blocks; trim with ?include= or ?preset= (~0.5-1.5k tokens)
8. ConvertGET /converter/{id}.md - SteamID converter, all formats at once (dec + hex, STEAM_1, legacy STEAM_0, [U:1:x], account id, steam:hex)

{id} accepts any SteamID form, a steamcommunity.com link or a vanity name.

Trust the data

JSON carries provenance per source: retrieved_at, age_seconds, fresh (age within TTL). /summary carries sources (ok | empty | unavailable | excluded) and partial - branch on them, not on nulls: empty = no account, unavailable = upstream down, excluded = you did not ask.

MCP - 9 read-only tools

Claude Code (project)claude mcp add --transport http steamgpt https://steamgpt.net/mcp
Claude Code (ALL projects)claude mcp add --scope user --transport http steamgpt https://steamgpt.net/mcp
Cursor.cursor/mcp.json in a project or ~/.cursor/mcp.json globally: {"mcpServers": {"steamgpt": {"url": "https://steamgpt.net/mcp"}}}
VS Code (Copilot)Command Palette → "MCP: Open User Configuration": {"servers": {"steamgpt": {"type": "http", "url": "https://steamgpt.net/mcp"}}}
ChatGPT / OpenAICustom GPT → Action → import https://steamgpt.net/openapi.json (no auth)
Stdio-only clients{"mcpServers": {"steamgpt": {"command": "npx", "args": ["-y", "steamgpt-mcp"]}}} - npm proxy to this server

Listed in the official MCP Registry as net.steamgpt/steamgpt and verified on Glama (connector · server). Context7 users: pull the docs as /steamgptnet/steamgpt-js (SDK) or /steamgptnet/steamgpt-mcp.

Plain HTTP from code

# Python
import requests
r = requests.get("https://steamgpt.net/summary/76561197960287930.json", params={"preset": "competitive"})
data = r.json()["data"]  # data["steam_bans"], data["faceit"], data["provenance"]

// Node.js
const r = await fetch("https://steamgpt.net/summary/76561197960287930.json?preset=competitive")
const { data } = await r.json()

# LangChain tool
from langchain_core.tools import tool
import requests

@tool
def steam_player(query: str) -> str:
    """Steam profile, bans and FACEIT for any SteamID, link or vanity name."""
    return requests.get(f"https://steamgpt.net/summary/{query}.ai").text

Token economy

Cheapest format.ai flat text; .md most readable; .json most structured
Trim /summary?preset=identity|competitive or ?include=faceit,bans
Friendsdetail=short - bare steamid64 list
Many playersone /batch call (up to 100), never a loop of /profile
Ratesoft 120 req/min per IP; responses cached, repeats cheap

More: full guide | llms.txt | OpenAPI | TypeScript types | MCP endpoint