Skip to main content
Glama
megabaka404

steam-personal-mcp

by megabaka404

Steam Personal + Store MCP

A locally running Steam MCP Server. By default it exposes 12 composite tools organized by domain.

What it can do

Personal data

player queries Profile, current game, and visibility; library queries game library, playtime, recently played, backlog, abandoned, and return candidates; achievements queries achievement details, completion rate, and recent unlocks; friends queries friends and public common games.

Store, discounts, and wishlist

store searches details, compares games, and views DLC; deals queries special offers, deep discounts, and sales; wishlist views wishlist, price history, price drops, release changes, and evidence-based buy / wait / skip suggestions.

Recommendations and unified game profile

recommendations recalls store candidates, similar games, new releases, backlog, and library duplication analysis. The candidate's candidate_score only indicates retrieval priority, not final fit or purchase confidence; the final judgment is left to the AI calling it.

game_intel(action="snapshot") summarizes a game's:

  • Personal ownership status, total playtime, recent playtime, last played, and achievements.

  • Current price, original price, discount, and price history observed by the MCP.

  • Overall rating, recent rating, rating count, and available 7/30/90-day trends.

  • Steam Deck status, Workshop support, current player count, and explainable popularity metrics.

  • Release date, update/build info, DLC, owned DLC, and missing DLC.

  • Local install path, SizeOnDisk, actual directory size, and shadercache; compatdata on Windows is explicitly marked as not_applicable.

Local Steam and safe cleanup

local_steam reads Windows libraryfolders.vdf, appmanifest files, installed games, and disk usage. storage_cleanup is split into three steps: scan, preview, clean. scan never deletes; clean must explicitly specify appids, targets, and pass confirm=true. shadercache is low risk, compatdata is high risk by default and not applicable in the first Windows version.

Related MCP server: gamelibs-mcp

Composite tools / actions

player: profile | currently_playing | visibility
library: search | stats | most_played | recent | abandoned | never_played | low_playtime | backlog | return_to | game
achievements: details | summary | recent | almost_completed | completion_candidates
friends: list | playing | activity | shared
store: search | details | compare | dlc
deals: specials | deep_discounts | search_sales | summary
wishlist: list | sales | best_deals | price_history | price_drops | release_watch | buy_advice | purchase_candidates
recommendations: store | similar | new_releases | library | backlog | return_to | next | overlap | pick
activity: record | sessions | recent_sessions | year_review | game_change_history
game_intel: snapshot | update_impact
local_steam: scan | installed | disk_usage
storage_cleanup: scan | preview | clean

The project itself does not call external LLMs. It is responsible for reading, filtering, aggregating, recording observations, and returning structured evidence; the final recommendation judgment is made by the upper-layer model.

Quick start

The following commands apply to Windows PowerShell.

Step 1: Enter the project directory

Download from GitHub:

git clone https://github.com/megabaka404/steam-personal-mcp.git
Set-Location steam-personal-mcp

If the project is already local:

Set-Location -LiteralPath '你的项目目录\steam-personal-mcp'

Step 2: Create an environment and install dependencies

The project requires Python 3.10 or higher.

py -3 -m venv .venv
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt

Step 3: Configure Steam

Copy the config file and edit it:

Copy-Item .env.example .env
notepad .env

At minimum, fill in:

STEAM_API_KEY=你的Steam_Web_API_Key
STEAM_ID=你的SteamID64

Get an API Key:

https://steamcommunity.com/dev/apikey

Notes:

  • STEAM_ID must be a SteamID64.

  • Steam Profile and Game Details must be publicly visible, otherwise personal data may not be readable.

  • The China store is used by default; store prices depend on STEAM_STORE_COUNTRY and STEAM_STORE_LANGUAGE.

Optional configuration:

STEAM_MCP_HOST=127.0.0.1
STEAM_MCP_PORT=8789
STEAM_MCP_COMPACT_TOOLS=true
STEAM_MCP_LEGACY_TOOLS=false
STEAM_STORE_COUNTRY=cn
STEAM_STORE_LANGUAGE=english
STEAM_HISTORY_DB=data/steam_history.sqlite3

12 composite tools are enabled by default. If you must keep using the old fine-grained tools, you can set:

STEAM_MCP_COMPACT_TOOLS=false
STEAM_MCP_LEGACY_TOOLS=true

Switching the Steam store region

The store region uses Steam's two-letter country/region code, modified via STEAM_STORE_COUNTRY in .env. The MCP service must be restarted after the change for it to take effect. China is the default.

China:

STEAM_STORE_COUNTRY=cn
STEAM_STORE_LANGUAGE=schinese

United States:

STEAM_STORE_COUNTRY=us
STEAM_STORE_LANGUAGE=english

Japan:

STEAM_STORE_COUNTRY=jp
STEAM_STORE_LANGUAGE=japanese

Other common codes include gb (United Kingdom), de (Germany), fr (France). The project does not automatically convert currencies; after switching regions, prices, currency, discounts, and some Store search results may all change.

Step 4: Check the service in Mock mode first

Start the Mock service:

python server.py --mock

Open another PowerShell window to check:

Invoke-WebRequest http://127.0.0.1:8789/health | Select-Object -ExpandProperty Content
Invoke-WebRequest http://127.0.0.1:8789/debug/status | Select-Object -ExpandProperty Content

Once you can see the health check succeed, start the real Steam mode.

Step 5: Start the real service

HTTP mode:

python server.py

MCP address:

http://127.0.0.1:8789/mcp

stdio mode:

python server.py --stdio

When Mock data is needed:

python server.py --stdio --mock

Note: China is the default region. To change the region, enter the following in the terminal before starting the MCP: $env:STEAM_STORE_COUNTRY="cn" $env:STEAM_STORE_LANGUAGE="schinese" For other countries or regions, modify the code the same way.

MCP client configuration

If the client supports Streamable HTTP, add:

{
  "mcpServers": {
    "steam-personal": {
      "url": "http://127.0.0.1:8789/mcp"
    }
  }
}

Do not treat /health as the MCP address; it is only a health check endpoint.

For stdio clients, configure a command that launches python server.py --stdio, using the Python from the project's virtual environment.

After connecting successfully, you can ask directly:

我的游戏库里有哪些几乎没玩过的游戏?
Darkest Dungeon 现在值得买吗?
把我的愿望单按当前折扣列出来。
根据我最近玩过的游戏召回 15 个候选,但只给证据,不要直接替我下结论。

Data sources and limitations

  • Personal data mainly comes from the Steam Web API; store data comes from the Steam Store interface.

  • Steam profile, game details, or statistics privacy settings may cause missing data.

  • Some games do not support achievements, player statistics, or public reviews; the relevant fields will be empty.

  • The store interface is not a complete, stable full Steam catalog; search results may be affected by region, language, and interface limitations.

  • Prices, currency, and discounts are returned according to the configured store region.

  • Review data is only populated when the Steam interface reliably provides it; no guessing is done for completeness.

  • When achievement reads fail, they are not faked as "all locked."

  • Price history, play sessions, and yearly review are local observations from this MCP, not official complete Steam history.

Project structure

server.py          服务入口
config.py          环境变量和启动参数
runtime.py         HTTP/stdio 运行时
clients/           Steam API 和 Store 客户端
services/          业务逻辑、推荐、历史记录
tools/             MCP 工具实现
models/            Pydantic 数据模型
tests/             自动化测试
data/              本地历史数据库目录

License

Refer to the license file in the repository. Steam data belongs to Steam/Valve's service content; this project only reads public interfaces and organizes and analyzes them locally.


Why are Store search results incomplete?

The public Store search / featured endpoint is not a full database of Steam products.

Therefore, the following tools return a bounded candidate set:

search_store
search_sales
new_releases_for_me
recommend_store_for_me

If you need to query a specific game, prefer using the AppID.

Price region is wrong

Confirm the region and language in .env, for example:

STEAM_STORE_COUNTRY=cn
STEAM_STORE_LANGUAGE=schinese

You can also change it to:

us
jp
...

Restart the service after modifying. The project does not automatically convert currencies.

Security

  • Do not commit .env

  • Do not commit the Steam API Key

  • Do not save Steam passwords

  • Do not save Steam Guard

  • No Steam Cookie required

  • API Key is not printed to logs

  • debug endpoint does not return secrets

  • Does not bypass Steam privacy settings

  • Does not automatically purchase, trade, or modify Steam accounts

  • Binds to 127.0.0.1 by default

If deploying to the public internet, additional configuration is required:

  • HTTPS

  • Bearer / OAuth / reverse proxy authentication

  • Reasonable request rate limiting

  • Log redaction


Testing

Tests should use mock clients or httpx.MockTransport to avoid depending on real Steam state.

Run:

pytest

Mock MCP smoke test:

python server.py --mock

Invoke-WebRequest http://127.0.0.1:8789/health
Invoke-WebRequest http://127.0.0.1:8789/debug/status

This project was completed with the assistance of ChatGPT and Codex.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that exposes your Steam, Epic Games Store, and IGDB game data as tools, enabling game library queries, install status checks, and metadata enrichment.
    12
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that connects AI assistants to the Steam Web API and storefront, enabling game library analysis, mood-based backlog recommendations, wishlist evaluation, and storefront searches.
    8
    20
    MIT