steam-mcp
Enables personalized Steam game discovery by ranking the store against a player's playtime history and stated preferences, with tools to search games, inspect details and reviews, and explore taste profiles.
README
steam-mcp
An MCP server for deciding which Steam games suit a particular person. It ranks the store against what the player actually logs hours in, blended with whatever they say they are in the mood for right now.
Ten tools. recommend_games is the front door; the rest exist so a ranking can
be interrogated rather than taken on faith.
| Tool | Needs key | What it does |
|---|---|---|
recommend_games |
no (better with) | Rank the store for a stated preference, personalised by library |
get_taste_profile |
yes | Tag affinities weighted by playtime, top genres, signature games |
search_games |
no | Structured catalog search: tags, price, platform, release date, sale |
get_game_details |
no | Description, tags, price, reviews, Metacritic, Deck compatibility |
find_similar_games |
no | "More like Hades": search on seed games' pooled tags |
get_game_reviews |
no | Score breakdown plus the most helpful review text |
list_tags |
no | Steam's tag vocabulary, for getting names exactly right |
get_my_library |
yes | Owned games with hours, most-played first |
get_wishlist |
no (public profile) | Wishlist with current price and discount |
get_recently_played |
yes | Last two weeks of play |
Running it
npm install && npm run build
claude mcp add -s user steam-mcp -e STEAM_ID=<your SteamID64> -- node /path/to/steam-mcp/dist/index.js
Environment:
STEAM_ID(optional): default player, as a SteamID64. Tools also accept a vanity name or profile URL per call.STEAM_API_KEY(optional): from https://steamcommunity.com/dev/apikey. Only the library, recent-play and vanity-resolution paths need it. Everything else, including the wishlist on a public profile, is keyless, so the server is useful with no credential at all. It just cannot personalise.
A disk cache lives at $XDG_CACHE_HOME/steam-mcp (default ~/.cache). The
store's appdetails endpoint is throttled to roughly 200 per five minutes per
IP; the client paces that endpoint at 1.5s, the others far faster, and caches
aggressively (details six hours, tags and Deck data a week) so a second
recommendation in the same sitting is mostly free. Every tool that enriches a
list works under a deadline and reports how many games it skipped, so a long
request returns a partial answer rather than timing out at a proxy.
How the ranking works
src/taste.ts holds the whole model.
Profile. Each played game's hours are attributed to its community tags in proportion to their vote share, so a milsim's hours go mostly to Military and Tactical and only a sliver to Multiplayer. Three corrections sit on top:
- Tags are weighted by rarity, derived from the popularity order of Steam's own tag dictionary (no extra requests). Without this every profile starts Action, Open World, Simulation, whoever the player is.
- Games from one studio are pooled before compression. Three Arma entries are three measurements of one taste, not three times the evidence.
- Hours are square-rooted. One outlier still leads, but does not write the whole profile.
Two-week play, when a key is available, counts a second time on top of lifetime hours: once as history, once as what the player is into now.
Score. Two signals on the same 0..1 scale, blended equally: fit, the cosine
between the candidate's tag vector and the profile, relative to the best any
game could do; and want, how much of the candidate's tag mass is what the
player asked for. Reception then penalises below Steam's "Mostly Positive" line
(70%) and never rewards above it, because candidates already arrive sorted by
reviews and rewarding them again would count popularity twice. Every reported
matchedOn entry is in score points and says whether the library or the request
earned it.
Order. The final list is re-ranked greedily for variety: a candidate loses up to 40% of its score for resembling something already chosen. Scores are reported untouched; only the order changes, and the tool description says so.
Tests
npm test
Both suites run against the live API, deliberately. test/smoke.mjs drives the
built server over real MCP stdio, which is the only place a silently dropped
schema or a changed store endpoint shows up. test/taste.ts runs the model over
test/fixtures/library.json, a real 45-game library, and asserts ranking
behaviour rather than exact numbers, since tag votes drift. Set STEAM_API_KEY
to also exercise the keyed tools.
Deploying with a key
A long-lived stdio server cannot get its key from a request-scoped secret
broker, so the keyed deployment belongs wherever an environment variable can be
injected at process start: a supervisord environment= line, a Nomad variable,
a systemd EnvironmentFile. The server reads STEAM_API_KEY once at startup and
never writes it anywhere.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。