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. Profile | GET /profile/{id}.md - Steam summary only, cheapest (~200 tokens, .ai ~80) |
|---|---|
| 2. Competitive | GET /summary/{id}.md?preset=competitive - FACEIT + bans, no friends (~350 tokens) |
| 3. Bans | GET /bans/{id}.md - VAC / game / community / economy (~100 tokens) |
| 4. Friends | GET /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. Compare | GET /compare/{id1}/{id2}.md - two players + shared friends |
| 6. Batch | GET /batch/{id1,...,id100}.md - up to 100 profiles in ONE request; always batch instead of per-player calls |
| 7. Everything | GET /summary/{id}.md - all blocks; trim with ?include= or ?preset= (~0.5-1.5k tokens) |
| 8. Convert | GET /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 / OpenAI | Custom 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 |
| Friends | detail=short - bare steamid64 list |
| Many players | one /batch call (up to 100), never a loop of /profile |
| Rate | soft 120 req/min per IP; responses cached, repeats cheap |
More: full guide | llms.txt | OpenAPI | TypeScript types | MCP endpoint