steam-mcp 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,18 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ build/
5
+ dist/
6
+ .venv/
7
+ venv/
8
+ .env
9
+ .pytest_cache/
10
+ .mypy_cache/
11
+
12
+ # Packaging outputs (build them on release; don't commit)
13
+ *.mcpb
14
+ _build_out.txt
15
+ PUBLISHING.md
16
+ _*.bat
17
+ /_*.py
18
+ /_*.txt
@@ -0,0 +1,102 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. Versions follow
4
+ [Semantic Versioning](https://semver.org/).
5
+
6
+ ## [0.8.0]
7
+
8
+ ### Added
9
+ - `steam_find_friends_who_own` — which of a user's friends own (or are right now
10
+ playing) a given game, with each owner's playtime and live status. Answers
11
+ "who can I play X with". Checks friends concurrently; friends with private
12
+ libraries are reported separately rather than guessed.
13
+ - `steam_get_rarest_unlocks` — a player's rarest unlocked achievements in a game,
14
+ joining their unlocks with global unlock rarity to surface their best "flexes".
15
+ - `steam_get_app_tags` — a game's top community tags (Souls-like, Roguelike,
16
+ Cozy, …) by player weight — the sub-genre/vibe signal Steam's official genres
17
+ miss. Built from the storefront item API plus its public tag dictionary; no key.
18
+
19
+ ## [0.7.0]
20
+
21
+ ### Added
22
+ - `steam_get_dlc` — list a game's DLC (add-ons) with live prices and an
23
+ on-sale filter, resolving the bare DLC appids that `steam_get_app_details`
24
+ exposes into names + prices. Enrichment runs concurrently.
25
+ - `steam_get_user_game_stats` — a user's in-game stats (kills, wins, distance,
26
+ etc.) for a specific game, via `ISteamUserStats/GetUserStatsForGame`. The
27
+ numeric counterpart to per-game achievements.
28
+
29
+ ### Changed
30
+ - **Performance:** all HTTP now goes through one shared, pooled `httpx`
31
+ AsyncClient (keep-alive instead of a new connection per request), and the
32
+ fan-out tools (wishlist enrichment, DLC, player comparison) issue their
33
+ lookups concurrently with bounded parallelism instead of serially.
34
+
35
+ ### Fixed
36
+ - **International pricing:** `steam_search_apps`, `steam_get_featured_specials`,
37
+ `steam_get_store_highlights`, and `steam_get_package_details` now format
38
+ prices in the requested country's currency (e.g. `£`, `€`) instead of always
39
+ prefixing `$`.
40
+ - **Reviews tool registration:** the `@mcp.tool` decorator for
41
+ `steam_get_app_reviews` was attached to an internal helper, so the exposed
42
+ tool was mis-wired. It is now bound to the correct function.
43
+
44
+ ## [0.6.0]
45
+
46
+ ### Added
47
+ - **In-memory TTL cache** for static storefront/API responses (app details,
48
+ package details, store highlights, game schemas, global achievement
49
+ percentages). Speeds up tools that fan out many lookups (wishlist enrichment,
50
+ comparisons) and eases the Steam rate limit. Live/user data is never cached.
51
+ - **Test suite** (`tests/`, `pytest`): pure-helper unit tests, TTL-cache tests,
52
+ and tool-logic tests with mocked HTTP (no network or API key needed).
53
+
54
+ ### Changed
55
+ - `.mcpbignore` and the sdist file list tidied so bundles/sdists stay lean.
56
+
57
+ ## [0.5.0]
58
+
59
+ ### Added
60
+ - `steam_analyze_library` — whole-library analysis: backlog (never-played),
61
+ playtime histogram, most-played with last-played dates, recently active, and
62
+ "abandoned" games (played but untouched for a configurable window).
63
+
64
+ ### Changed
65
+ - `steam_get_app_details` is now comprehensive: play modes (single-player /
66
+ co-op / online & local co-op), controller support, platforms, developers &
67
+ publishers, DLC, supported languages (with full-audio flags), Metacritic,
68
+ review and achievement counts, mature-content flags, optional PC requirements,
69
+ and a `features` boolean object for easy filtering.
70
+
71
+ ## [0.4.0]
72
+
73
+ ### Added
74
+ - `steam_get_player_badges` — badges and the XP breakdown behind a Steam level.
75
+ - `steam_get_package_details` — price and included games for a package/bundle.
76
+ - `steam_compare_players` — shared games between two users, with playtime.
77
+
78
+ ## [0.3.0]
79
+
80
+ ### Added
81
+ - `steam_get_store_highlights` — top sellers, new releases, and coming soon.
82
+ - `steam_get_wishlist` — a user's wishlist, optionally enriched with live prices
83
+ and an on-sale filter.
84
+
85
+ ### Changed
86
+ - `steam_get_app_reviews` gained `review_filter='recent'`, computing the
87
+ last-N-days score by paginating the newest reviews (Steam exposes no native
88
+ recent-summary field).
89
+
90
+ ## [0.2.0]
91
+
92
+ - Initial public release: 16 read-only tools across profiles, friends, games,
93
+ playtime, achievements, store details, reviews, sales, live player counts, and
94
+ news. Bring-your-own-key; packaged as a `.mcpb` desktop extension and for PyPI.
95
+
96
+ [0.8.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.8.0
97
+ [0.7.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.7.0
98
+ [0.6.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.6.0
99
+ [0.5.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.5.0
100
+ [0.4.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.4.0
101
+ [0.3.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.3.0
102
+ [0.2.0]: https://github.com/Sarg338/steam-mcp/releases/tag/v0.2.0
@@ -0,0 +1,26 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 steam-mcp contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ This project is not affiliated with, endorsed by, or sponsored by Valve
24
+ Corporation. "Steam" is a trademark of Valve Corporation. Use of the Steam Web
25
+ API is subject to the Steam Web API Terms of Use
26
+ (https://steamcommunity.com/dev/apiterms).
@@ -0,0 +1,187 @@
1
+ Metadata-Version: 2.4
2
+ Name: steam-mcp
3
+ Version: 0.8.0
4
+ Summary: Read-only Steam MCP server (bring-your-own-key) for friends, games, playtime, achievements, sales, reviews, and live player counts.
5
+ Project-URL: Homepage, https://github.com/Sarg338/steam-mcp
6
+ Project-URL: Repository, https://github.com/Sarg338/steam-mcp
7
+ Project-URL: Issues, https://github.com/Sarg338/steam-mcp/issues
8
+ Project-URL: Documentation, https://github.com/Sarg338/steam-mcp#readme
9
+ Author: Sarg
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: gaming,llm,mcp,model-context-protocol,steam,valve
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Games/Entertainment
24
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
+ Requires-Python: >=3.10
26
+ Requires-Dist: httpx>=0.27.0
27
+ Requires-Dist: mcp>=1.2.0
28
+ Requires-Dist: pydantic>=2.6.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=7.0; extra == 'dev'
31
+ Description-Content-Type: text/markdown
32
+
33
+ <!-- mcp-name: io.github.Sarg338/steam-mcp -->
34
+
35
+ # Steam MCP
36
+
37
+ A read-only [Model Context Protocol](https://modelcontextprotocol.io) server for
38
+ the public Steam Web API and storefront. It lets any MCP-compatible AI client
39
+ (Claude Desktop, Claude Code, etc.) answer questions about Steam — your friends,
40
+ games, playtime and achievements, plus account-independent things like sales,
41
+ reviews, ratings, live player counts, and patch notes.
42
+
43
+ **Bring your own key (BYOK):** each user supplies their own free Steam Web API
44
+ key via an environment variable. Nobody logs in, and no credentials pass through
45
+ this server beyond the key you set yourself.
46
+
47
+ ---
48
+
49
+ ## What it can answer
50
+
51
+ Account / profile (needs a public profile):
52
+ - "Who's on my Steam friends list, and who's online right now?"
53
+ - "Which of my friends own *Helldivers 2* — and who's playing it right now?"
54
+ - "What's my most-played game, and how many hours?"
55
+ - "Which achievements am I still missing in Hollow Knight?"
56
+ - "What are my career stats in *Team Fortress 2*?"
57
+ - "What are my rarest achievements in *Hollow Knight*?"
58
+ - "What's my Steam level?" / "Does this account have any VAC bans?"
59
+ - "What's on my wishlist, and is any of it on sale right now?"
60
+ - "Analyze my library — what's my backlog and what have I abandoned?"
61
+
62
+ Account-independent (works for any game, no SteamID needed):
63
+ - "Is *Baldur's Gate 3* any good? What's its review score?"
64
+ - "What's on sale on Steam right now?" / "What are the current top sellers and new releases?"
65
+ - "How many people are playing *Counter-Strike 2* this minute?"
66
+ - "What was in the latest *Dota 2* update?"
67
+ - "How much does *Hades II* cost and what genres is it?"
68
+ - "What DLC does *Cities: Skylines* have, and is any of it on sale?"
69
+ - "Is *Elden Ring* a soulslike? What are its community tags?"
70
+
71
+ ---
72
+
73
+ ## Tools
74
+
75
+ | Tool | What it returns | Needs key? |
76
+ |------|-----------------|-----------|
77
+ | `steam_resolve_vanity_url` | Vanity name / profile URL → SteamID64 | yes |
78
+ | `steam_get_player_summary` | Status (Online/Away/In-Game…), current game, for 1–100 users | yes |
79
+ | `steam_get_friend_list` | Friends enriched with name + live status | yes |
80
+ | `steam_find_friends_who_own` | **Which friends own (or are playing) a game** — "who can I play X with" | yes |
81
+ | `steam_get_owned_games` | Owned games with total/recent hours (sortable) | yes |
82
+ | `steam_analyze_library` | **Backlog, playtime distribution, abandoned games** across a whole library | yes |
83
+ | `steam_get_recently_played_games` | Last-2-weeks playtime | yes |
84
+ | `steam_get_steam_level` | Steam community level | yes |
85
+ | `steam_get_player_bans` | VAC / game / community / economy bans | yes |
86
+ | `steam_get_player_achievements` | Per-game unlocked vs locked achievements | yes |
87
+ | `steam_get_game_schema` | A game's full achievement/stat definitions | yes |
88
+ | `steam_get_global_achievement_percentages` | Achievement rarity (global %) | no |
89
+ | `steam_get_user_game_stats` | **A user's in-game stats** (kills, wins, distance…) for a game | yes |
90
+ | `steam_get_rarest_unlocks` | **A player's rarest achievement unlocks** in a game (by global rarity) | yes |
91
+ | `steam_search_apps` | Game title → appid (+ price) | no |
92
+ | `steam_get_app_details` | **Full store details** — play modes/co-op, controller, DLC, languages, requirements, Metacritic | no |
93
+ | `steam_get_dlc` | **A game's DLC**, with live prices and what's on sale | no |
94
+ | `steam_get_app_tags` | **A game's top community tags** (Souls-like, Roguelike, Cozy…) | no |
95
+ | `steam_get_app_reviews` | Lifetime verdict, +/- counts, sample reviews; optional **recent (last-N-days) score** via `review_filter='recent'` | no |
96
+ | `steam_get_featured_specials` | Games currently on sale (regional) | no |
97
+ | `steam_get_store_highlights` | **Top sellers, new releases, or coming soon** | no |
98
+ | `steam_get_wishlist` | **A user's wishlist, with live prices + what's on sale** | yes |
99
+ | `steam_get_player_badges` | Badges + the XP breakdown behind a Steam level | yes |
100
+ | `steam_get_package_details` | Package/bundle price + included games | no |
101
+ | `steam_compare_players` | Shared games between two users, with playtime | yes |
102
+ | `steam_get_current_players` | Live concurrent player count | no |
103
+ | `steam_get_app_news` | Recent news / patch notes | no |
104
+
105
+ Every tool supports `response_format: "markdown"` (default, human-readable) or
106
+ `"json"` (structured), and all are annotated `readOnlyHint: true`.
107
+
108
+ > **Recent reviews:** Steam's API only exposes a *lifetime* review summary — there
109
+ > is no "last 30 days" field. So `steam_get_app_reviews` with
110
+ > `review_filter='recent'` computes that score itself by paginating the newest
111
+ > reviews within `day_range` days (default 30). For games with a very high volume
112
+ > of recent reviews it counts up to ~600 and marks the result `sampled: true`.
113
+
114
+ ---
115
+
116
+ ## Setup
117
+
118
+ ### 1. Get a free Steam Web API key
119
+
120
+ Visit <https://steamcommunity.com/dev/apikey>, sign in, register a domain (any
121
+ domain you control works; `localhost` is commonly used for personal keys), and
122
+ copy the key. Usage is governed by the
123
+ [Steam Web API Terms of Use](https://steamcommunity.com/dev/apiterms).
124
+
125
+ ### 2. Install
126
+
127
+ ```bash
128
+ git clone https://github.com/Sarg338/steam-mcp.git
129
+ cd steam-mcp
130
+ pip install -e . # or: pip install -r requirements.txt
131
+ ```
132
+
133
+ Requires Python 3.10+.
134
+
135
+ ### 3. Add it to your MCP client
136
+
137
+ The server reads the key from the `STEAM_API_KEY` environment variable.
138
+
139
+ **Claude Desktop** — edit `claude_desktop_config.json`
140
+ (`%APPDATA%\Claude\` on Windows, `~/Library/Application Support/Claude/` on macOS):
141
+
142
+ ```json
143
+ {
144
+ "mcpServers": {
145
+ "steam": {
146
+ "command": "python",
147
+ "args": ["-m", "steam_mcp.server"],
148
+ "env": { "STEAM_API_KEY": "YOUR_KEY_HERE" }
149
+ }
150
+ }
151
+ }
152
+ ```
153
+
154
+ **Claude Code** (CLI):
155
+
156
+ ```bash
157
+ claude mcp add steam --env STEAM_API_KEY=YOUR_KEY_HERE -- python -m steam_mcp.server
158
+ ```
159
+
160
+ If you installed with `pip install -e .`, you can use the `steam-mcp` console
161
+ script as the command instead of `python -m steam_mcp.server`.
162
+
163
+ Restart your client and the Steam tools appear.
164
+
165
+ ---
166
+
167
+ ## Development
168
+
169
+ ```bash
170
+ pip install -e ".[dev]"
171
+ pytest -q # run the test suite (no network needed)
172
+ python -m py_compile steam_mcp/server.py # syntax check
173
+ npx @modelcontextprotocol/inspector python -m steam_mcp.server # interactive test
174
+ ```
175
+
176
+ Static storefront/API responses (app & package details, store highlights, game
177
+ schemas, global achievement percentages) are cached in-memory with a short TTL
178
+ to ease the rate limit and speed up tools that fan out many lookups. Live data
179
+ (player status, current players, wishlists, friends) is never cached. All
180
+ requests share one pooled HTTP client, and the fan-out tools (wishlist, DLC)
181
+ enrich entries concurrently with bounded parallelism, so they resolve quickly.
182
+ Prices are shown in the requested country's currency. See
183
+ [CHANGELOG.md](CHANGELOG.md) for release history.
184
+
185
+ ## License
186
+
187
+ MIT. Not affiliated with Valve. "Steam" is a trademark of Valve Corporation.
@@ -0,0 +1,50 @@
1
+ # Privacy Policy — Steam MCP
2
+
3
+ _Last updated: 2026-06-01_
4
+
5
+ Steam MCP is a read-only, locally-run Model Context Protocol server. It is not a
6
+ hosted service. This document explains what it does and does not do with data.
7
+
8
+ ## What it accesses
9
+
10
+ When you (or your AI client) invoke a tool, the server makes read-only HTTPS
11
+ requests to Valve's official endpoints:
12
+
13
+ - `https://api.steampowered.com` (Steam Web API)
14
+ - `https://store.steampowered.com` (Steam storefront/reviews)
15
+
16
+ Requests may include:
17
+
18
+ - **Your Steam Web API key**, read from the key you supply at install time (or a
19
+ local `.env` / environment variable). The key is sent only to Valve, only as
20
+ required to authenticate API calls. It is never transmitted anywhere else.
21
+ - **SteamIDs / vanity names / app IDs** you ask about, passed as request
22
+ parameters to Valve.
23
+
24
+ ## What it does NOT do
25
+
26
+ - It does **not** collect, store, log, or transmit your data to the author or any
27
+ third party. There is no analytics, no telemetry, and no server operated by the
28
+ project — everything runs on your machine.
29
+ - It is **read-only**: it cannot send messages, change your status, modify your
30
+ account, launch games, or make purchases.
31
+ - It does **not** write your API key to any file it ships. The key stays in your
32
+ local configuration.
33
+
34
+ ## Data visibility
35
+
36
+ The server can only read data that Valve exposes. Friends lists, owned games, and
37
+ achievements are returned only when the target Steam profile's privacy settings
38
+ make them **Public**. The server cannot access private profile data.
39
+
40
+ ## Your responsibilities
41
+
42
+ - Keep your Steam Web API key secret. Treat it like a password.
43
+ - Your use of the Steam Web API is governed by Valve's
44
+ [Steam Web API Terms of Use](https://steamcommunity.com/dev/apiterms).
45
+
46
+ ## Contact
47
+
48
+ Issues and questions: https://github.com/Sarg338/steam-mcp/issues
49
+
50
+ _This project is not affiliated with or endorsed by Valve Corporation._
@@ -0,0 +1,155 @@
1
+ <!-- mcp-name: io.github.Sarg338/steam-mcp -->
2
+
3
+ # Steam MCP
4
+
5
+ A read-only [Model Context Protocol](https://modelcontextprotocol.io) server for
6
+ the public Steam Web API and storefront. It lets any MCP-compatible AI client
7
+ (Claude Desktop, Claude Code, etc.) answer questions about Steam — your friends,
8
+ games, playtime and achievements, plus account-independent things like sales,
9
+ reviews, ratings, live player counts, and patch notes.
10
+
11
+ **Bring your own key (BYOK):** each user supplies their own free Steam Web API
12
+ key via an environment variable. Nobody logs in, and no credentials pass through
13
+ this server beyond the key you set yourself.
14
+
15
+ ---
16
+
17
+ ## What it can answer
18
+
19
+ Account / profile (needs a public profile):
20
+ - "Who's on my Steam friends list, and who's online right now?"
21
+ - "Which of my friends own *Helldivers 2* — and who's playing it right now?"
22
+ - "What's my most-played game, and how many hours?"
23
+ - "Which achievements am I still missing in Hollow Knight?"
24
+ - "What are my career stats in *Team Fortress 2*?"
25
+ - "What are my rarest achievements in *Hollow Knight*?"
26
+ - "What's my Steam level?" / "Does this account have any VAC bans?"
27
+ - "What's on my wishlist, and is any of it on sale right now?"
28
+ - "Analyze my library — what's my backlog and what have I abandoned?"
29
+
30
+ Account-independent (works for any game, no SteamID needed):
31
+ - "Is *Baldur's Gate 3* any good? What's its review score?"
32
+ - "What's on sale on Steam right now?" / "What are the current top sellers and new releases?"
33
+ - "How many people are playing *Counter-Strike 2* this minute?"
34
+ - "What was in the latest *Dota 2* update?"
35
+ - "How much does *Hades II* cost and what genres is it?"
36
+ - "What DLC does *Cities: Skylines* have, and is any of it on sale?"
37
+ - "Is *Elden Ring* a soulslike? What are its community tags?"
38
+
39
+ ---
40
+
41
+ ## Tools
42
+
43
+ | Tool | What it returns | Needs key? |
44
+ |------|-----------------|-----------|
45
+ | `steam_resolve_vanity_url` | Vanity name / profile URL → SteamID64 | yes |
46
+ | `steam_get_player_summary` | Status (Online/Away/In-Game…), current game, for 1–100 users | yes |
47
+ | `steam_get_friend_list` | Friends enriched with name + live status | yes |
48
+ | `steam_find_friends_who_own` | **Which friends own (or are playing) a game** — "who can I play X with" | yes |
49
+ | `steam_get_owned_games` | Owned games with total/recent hours (sortable) | yes |
50
+ | `steam_analyze_library` | **Backlog, playtime distribution, abandoned games** across a whole library | yes |
51
+ | `steam_get_recently_played_games` | Last-2-weeks playtime | yes |
52
+ | `steam_get_steam_level` | Steam community level | yes |
53
+ | `steam_get_player_bans` | VAC / game / community / economy bans | yes |
54
+ | `steam_get_player_achievements` | Per-game unlocked vs locked achievements | yes |
55
+ | `steam_get_game_schema` | A game's full achievement/stat definitions | yes |
56
+ | `steam_get_global_achievement_percentages` | Achievement rarity (global %) | no |
57
+ | `steam_get_user_game_stats` | **A user's in-game stats** (kills, wins, distance…) for a game | yes |
58
+ | `steam_get_rarest_unlocks` | **A player's rarest achievement unlocks** in a game (by global rarity) | yes |
59
+ | `steam_search_apps` | Game title → appid (+ price) | no |
60
+ | `steam_get_app_details` | **Full store details** — play modes/co-op, controller, DLC, languages, requirements, Metacritic | no |
61
+ | `steam_get_dlc` | **A game's DLC**, with live prices and what's on sale | no |
62
+ | `steam_get_app_tags` | **A game's top community tags** (Souls-like, Roguelike, Cozy…) | no |
63
+ | `steam_get_app_reviews` | Lifetime verdict, +/- counts, sample reviews; optional **recent (last-N-days) score** via `review_filter='recent'` | no |
64
+ | `steam_get_featured_specials` | Games currently on sale (regional) | no |
65
+ | `steam_get_store_highlights` | **Top sellers, new releases, or coming soon** | no |
66
+ | `steam_get_wishlist` | **A user's wishlist, with live prices + what's on sale** | yes |
67
+ | `steam_get_player_badges` | Badges + the XP breakdown behind a Steam level | yes |
68
+ | `steam_get_package_details` | Package/bundle price + included games | no |
69
+ | `steam_compare_players` | Shared games between two users, with playtime | yes |
70
+ | `steam_get_current_players` | Live concurrent player count | no |
71
+ | `steam_get_app_news` | Recent news / patch notes | no |
72
+
73
+ Every tool supports `response_format: "markdown"` (default, human-readable) or
74
+ `"json"` (structured), and all are annotated `readOnlyHint: true`.
75
+
76
+ > **Recent reviews:** Steam's API only exposes a *lifetime* review summary — there
77
+ > is no "last 30 days" field. So `steam_get_app_reviews` with
78
+ > `review_filter='recent'` computes that score itself by paginating the newest
79
+ > reviews within `day_range` days (default 30). For games with a very high volume
80
+ > of recent reviews it counts up to ~600 and marks the result `sampled: true`.
81
+
82
+ ---
83
+
84
+ ## Setup
85
+
86
+ ### 1. Get a free Steam Web API key
87
+
88
+ Visit <https://steamcommunity.com/dev/apikey>, sign in, register a domain (any
89
+ domain you control works; `localhost` is commonly used for personal keys), and
90
+ copy the key. Usage is governed by the
91
+ [Steam Web API Terms of Use](https://steamcommunity.com/dev/apiterms).
92
+
93
+ ### 2. Install
94
+
95
+ ```bash
96
+ git clone https://github.com/Sarg338/steam-mcp.git
97
+ cd steam-mcp
98
+ pip install -e . # or: pip install -r requirements.txt
99
+ ```
100
+
101
+ Requires Python 3.10+.
102
+
103
+ ### 3. Add it to your MCP client
104
+
105
+ The server reads the key from the `STEAM_API_KEY` environment variable.
106
+
107
+ **Claude Desktop** — edit `claude_desktop_config.json`
108
+ (`%APPDATA%\Claude\` on Windows, `~/Library/Application Support/Claude/` on macOS):
109
+
110
+ ```json
111
+ {
112
+ "mcpServers": {
113
+ "steam": {
114
+ "command": "python",
115
+ "args": ["-m", "steam_mcp.server"],
116
+ "env": { "STEAM_API_KEY": "YOUR_KEY_HERE" }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ **Claude Code** (CLI):
123
+
124
+ ```bash
125
+ claude mcp add steam --env STEAM_API_KEY=YOUR_KEY_HERE -- python -m steam_mcp.server
126
+ ```
127
+
128
+ If you installed with `pip install -e .`, you can use the `steam-mcp` console
129
+ script as the command instead of `python -m steam_mcp.server`.
130
+
131
+ Restart your client and the Steam tools appear.
132
+
133
+ ---
134
+
135
+ ## Development
136
+
137
+ ```bash
138
+ pip install -e ".[dev]"
139
+ pytest -q # run the test suite (no network needed)
140
+ python -m py_compile steam_mcp/server.py # syntax check
141
+ npx @modelcontextprotocol/inspector python -m steam_mcp.server # interactive test
142
+ ```
143
+
144
+ Static storefront/API responses (app & package details, store highlights, game
145
+ schemas, global achievement percentages) are cached in-memory with a short TTL
146
+ to ease the rate limit and speed up tools that fan out many lookups. Live data
147
+ (player status, current players, wishlists, friends) is never cached. All
148
+ requests share one pooled HTTP client, and the fan-out tools (wishlist, DLC)
149
+ enrich entries concurrently with bounded parallelism, so they resolve quickly.
150
+ Prices are shown in the requested country's currency. See
151
+ [CHANGELOG.md](CHANGELOG.md) for release history.
152
+
153
+ ## License
154
+
155
+ MIT. Not affiliated with Valve. "Steam" is a trademark of Valve Corporation.
@@ -0,0 +1,58 @@
1
+ [project]
2
+ name = "steam-mcp"
3
+ version = "0.8.0"
4
+ description = "Read-only Steam MCP server (bring-your-own-key) for friends, games, playtime, achievements, sales, reviews, and live player counts."
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ license = { text = "MIT" }
8
+ authors = [{ name = "Sarg" }]
9
+ keywords = ["mcp", "steam", "model-context-protocol", "llm", "valve", "gaming"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Intended Audience :: Developers",
13
+ "Intended Audience :: End Users/Desktop",
14
+ "License :: OSI Approved :: MIT License",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.10",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ "Operating System :: OS Independent",
21
+ "Topic :: Games/Entertainment",
22
+ "Topic :: Software Development :: Libraries :: Python Modules",
23
+ ]
24
+ dependencies = [
25
+ "mcp>=1.2.0",
26
+ "httpx>=0.27.0",
27
+ "pydantic>=2.6.0",
28
+ ]
29
+
30
+ [project.optional-dependencies]
31
+ dev = ["pytest>=7.0"]
32
+
33
+ [project.scripts]
34
+ steam-mcp = "steam_mcp.server:main"
35
+
36
+ [project.urls]
37
+ Homepage = "https://github.com/Sarg338/steam-mcp"
38
+ Repository = "https://github.com/Sarg338/steam-mcp"
39
+ Issues = "https://github.com/Sarg338/steam-mcp/issues"
40
+ Documentation = "https://github.com/Sarg338/steam-mcp#readme"
41
+
42
+ [build-system]
43
+ requires = ["hatchling"]
44
+ build-backend = "hatchling.build"
45
+
46
+ [tool.hatch.build.targets.wheel]
47
+ packages = ["steam_mcp"]
48
+
49
+ [tool.hatch.build.targets.sdist]
50
+ include = [
51
+ "/steam_mcp",
52
+ "/tests",
53
+ "/README.md",
54
+ "/CHANGELOG.md",
55
+ "/LICENSE",
56
+ "/PRIVACY.md",
57
+ "/pyproject.toml",
58
+ ]
@@ -0,0 +1,3 @@
1
+ """Steam MCP server package (read-only, bring-your-own-key)."""
2
+
3
+ __version__ = "0.8.0"