diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 650e03e..8a4e32d 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "steam-cursor-plugin", "displayName": "Steam Developer Tools", "version": "1.3.6", - "description": "Integrates Steam and Steamworks APIs for game developers, modders, and power users. 30 skills covering store data, multiplayer, cloud saves, leaderboards, input, inventory, social, profiles, Workshop/UGC, comparisons, reviews, pricing, market research, wishlists, CI/CD, release checklists, steamcmd, community, store pages, pricing strategy, DLC, playtesting, bug reporting, anti-cheat, testing sandbox, and platform migration - plus 9 rules. Companion Steam MCP server provides 25 MCP tools.", + "description": "Integrates Steam and Steamworks APIs for game developers, modders, and power users. 30 skills covering store data, multiplayer, cloud saves, leaderboards, input, inventory, social, profiles, Workshop/UGC, comparisons, reviews, pricing, market research, wishlists, CI/CD, release checklists, steamcmd, community, store pages, pricing strategy, DLC, playtesting, bug reporting, anti-cheat, testing sandbox, and platform migration - plus 9 rules. Companion Steam MCP server provides 26 MCP tools.", "author": { "name": "TMHSDigital", "url": "https://github.com/TMHSDigital" diff --git a/.gitignore b/.gitignore index 143eb2a..e08bcd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,43 @@ # Environment and secrets .env .env.* +.env.local +.env.partner !.env.example *.ssfn +ssfn* # Steam credentials config.vdf +loginusers.vdf +local.vdf + +# Cookie jars and Playwright auth +cookies.txt +cookies.json +*.cookies +*cookie-jar* +storageState.json +**/playwright/.auth/ + +# Chromium / Playwright profiles (never store these in-repo) +**/*user-data-dir*/ +**/chromium-profile/ +**/partner-profile/ +**/.pw-profile/ +playwright-report/ +blob-report/ +*.har + +# Generic secrets +secrets.json +*.pem +*.key +*.p12 + +# Partner-admin dry-run dumps +partner-dry-run*.json +admin-save-payload*.json # Node node_modules/ @@ -35,4 +67,3 @@ __pycache__/ # Phase 2c: release-doc-sync verification trigger (DTD#5) # DTD#27: release-doc-sync v1 migration verification - diff --git a/AGENTS.md b/AGENTS.md index ae41a59..c3f72c8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ Guidance for AI coding agents working on the Steam Cursor Plugin repository. ## Repository overview -A Cursor IDE plugin for Steam and Steamworks integration. 30 skills and 9 rules covering store data, achievements, Workshop, multiplayer, cloud saves, and game development workflows. 25 MCP tools via companion server. +A Cursor IDE plugin for Steam and Steamworks integration. 30 skills and 9 rules covering store data, achievements, Workshop, multiplayer, cloud saves, and game development workflows. 26 MCP tools via companion server. **Docs site:** https://tmhsdigital.github.io/Steam-Cursor-Plugin/ @@ -17,7 +17,7 @@ Steam-Cursor-Plugin/ .cursor-plugin/plugin.json # Plugin manifest (name, version, description) skills/ # 30 skill directories, each with SKILL.md rules/ # 9 rule files (.mdc) - mcp-tools.json # MCP tool catalog (25 tools, manually maintained) + mcp-tools.json # MCP tool catalog (26 tools, manually maintained) site.json # GitHub Pages branding/config docs/ # Generated GitHub Pages site (do not edit manually) assets/ # Logo and images diff --git a/CLAUDE.md b/CLAUDE.md index b1f3f4e..be8adac 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,9 +8,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **Steam Developer Tools** is a Cursor IDE plugin that integrates Steam and Steamworks APIs for game developers, modders, and power users. It provides AI-assisted workflows for querying Steam store data, managing Steamworks configurations, building multiplayer networking, implementing cloud saves, leaderboards, input, inventory/economy, social features, looking up API docs, fetching player statistics, integrating Workshop UGC, designing achievements, looking up player profiles, comparing games, analyzing reviews, researching pricing, evaluating market fit, estimating wishlists, automating builds, validating release readiness, scripting steamcmd, managing communities, optimizing store pages, planning pricing strategy, configuring DLC, setting up playtests, creating bug report workflows, integrating anti-cheat, providing a testing sandbox, and guiding platform migration. -This plugin uses Markdown skill files and MDC rule files for AI guidance, paired with the companion [Steam MCP Server](https://github.com/TMHSDigital/steam-mcp) (separate repo) which provides 25 API tools (18 read-only + 7 write/guidance) for live data access. No build system, no npm, no compiled code in this repo. +This plugin uses Markdown skill files and MDC rule files for AI guidance, paired with the companion [Steam MCP Server](https://github.com/TMHSDigital/steam-mcp) (separate repo) which provides 26 API tools (19 read-only + 7 write/guidance) for live data access. No build system, no npm, no compiled code in this repo. -The project shipped v1.0.0 "Stable" as the production milestone (see `ROADMAP.md`). 30 skills, 9 rules, 25 MCP tools. +The project shipped v1.0.0 "Stable" as the production milestone (see `ROADMAP.md`). 30 skills, 9 rules, 26 MCP tools. **Version:** 1.3.6 **License:** CC-BY-NC-ND-4.0 @@ -77,7 +77,7 @@ Each `SKILL.md` uses YAML frontmatter followed by markdown sections: **Trigger** ### Companion MCP Server -The [Steam MCP Server](https://github.com/TMHSDigital/steam-mcp) provides 25 tools (17 read-only + 8 write/guidance). Skills reference these tools in their `## MCP Usage` sections. When the MCP server is configured in Cursor, skills prefer MCP tool calls over shell `curl` commands. +The [Steam MCP Server](https://github.com/TMHSDigital/steam-mcp) provides 26 tools (19 read-only + 7 write/guidance). Skills reference these tools in their `## MCP Usage` sections. When the MCP server is configured in Cursor, skills prefer MCP tool calls over shell `curl` commands. | MCP Tool | Auth | Maps to | |----------|------|---------| diff --git a/README.md b/README.md index 8472e1e..16b0db1 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ---
- 30 skills • 9 rules • 25 MCP tools + 30 skills • 9 rules • 26 MCP tools
Query Steam store data, manage Steamworks app configurations, build multiplayer networking, implement cloud saves, design achievements, manage Workshop mods, compare games, and look up player profiles — all from within Cursor's AI chat. Covers the full Steam & Steamworks ecosystem with live data via the companion [Steam MCP Server](https://github.com/TMHSDigital/steam-mcp). @@ -44,7 +44,7 @@ Query Steam store data, manage Steamworks app configurations, build multiplayer | **CLAUDE.md** context | Yes | Yes | Yes | - | | **30 Skills** (SKILL.md) | Yes | Yes | Yes | - | | **9 Rules** (.mdc) | Yes | Via CLAUDE.md | Yes | - | -| **25 MCP tools** | Yes | Yes | Yes | Yes | +| **26 MCP tools** | Yes | Yes | Yes | Yes | > The MCP server lives in a separate repo: [steam-mcp](https://github.com/TMHSDigital/steam-mcp). It works with any client that supports the MCP stdio transport. @@ -75,7 +75,7 @@ That's it. No configuration needed for basic usage. flowchart LR A["You ask Cursor\na Steam question"] --> B["Cursor loads\na Skill"] B --> C{"MCP server\navailable?"} - C -- Yes --> D["Steam MCP Server\n(25 tools)"] + C -- Yes --> D["Steam MCP Server\n(26 tools)"] C -- No --> E["curl to\nSteam Web API"] D --> F["Steam API"] E --> F diff --git a/ROADMAP.md b/ROADMAP.md index 3c9c61e..4eac7d3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,9 +2,9 @@ Themed release plan toward v1.0.0. -**Current:** v1.3.6 - 30 skills, 9 rules, companion [Steam MCP server](https://github.com/TMHSDigital/steam-mcp) with 25 tools (18 read-only + 7 write/guidance). +**Current:** v1.3.6 - 30 skills, 9 rules, companion [Steam MCP server](https://github.com/TMHSDigital/steam-mcp) with 26 tools (19 read-only + 7 write/guidance). -**Status:** v1.0.0 "Stable" released. 30 skills, 9 rules, 25 MCP tools. +**Status:** v1.0.0 "Stable" released. 30 skills, 9 rules, 26 MCP tools. | Version | Theme | New Skills | New Rules | MCP Tools | Total Skills | Total Rules | |---------|-------|-----------|-----------|-----------|-------------|-------------| diff --git a/mcp-tools.json b/mcp-tools.json index df90066..04784cd 100644 --- a/mcp-tools.json +++ b/mcp-tools.json @@ -9,6 +9,7 @@ {"name": "steam_getAppReviewSummary", "description": "Review score, totals, and positive percentage", "category": "Read-Only (No Auth)"}, {"name": "steam_getRegionalPricing", "description": "Pricing breakdown across multiple countries", "category": "Read-Only (No Auth)"}, {"name": "steam_getNewsForApp", "description": "Recent news and announcements for a game", "category": "Read-Only (No Auth)"}, + {"name": "steam_validateStoreAsset", "description": "Validate a local store or library image against Valve pixel sizes and library-hero heuristics.", "category": "Read-Only (No Auth)"}, {"name": "steam_getPlayerSummary", "description": "Player profile - name, avatar, status", "category": "Read-Only (API Key)"}, {"name": "steam_getOwnedGames", "description": "Game library with playtime", "category": "Read-Only (API Key)"}, {"name": "steam_queryWorkshop", "description": "Search and browse Workshop items", "category": "Read-Only (API Key)"}, diff --git a/rules/steamworks-secrets.mdc b/rules/steamworks-secrets.mdc index 5109a95..d776202 100644 --- a/rules/steamworks-secrets.mdc +++ b/rules/steamworks-secrets.mdc @@ -17,11 +17,14 @@ When reviewing, creating, or editing files, watch for these sensitive patterns a 2. **Steamworks Partner credentials:** - Publisher API keys (used for sales/financial data) - `STEAMWORKS_PARTNER_KEY`, `publisher_key`, `partner_api_key` + - `STEAM_PARTNER_COOKIES` (path to a cookie jar; treat the file as a password) + - `STEAM_PARTNER_PROFILE_DIR` (Chromium user-data dir with live Partner session) 3. **Authentication tokens:** - `ssfn*` files (Steam Guard machine auth tokens) - Login tokens in `steamcmd` scripts with `+login username password` - - Session tokens or `steamLoginSecure` cookie values + - Session cookies: `steamLoginSecure`, `sessionid` + - Playwright `storageState.json` dumps and Chromium user-data directories 4. **Build signing credentials:** - DRM wrapping keys @@ -36,12 +39,14 @@ When any of these patterns are detected: - Use environment variables: `$env:STEAM_API_KEY` or `process.env.STEAM_API_KEY` - Use a `.env` file (which should be in `.gitignore`) - For CI/CD: use repository secrets or a secret manager -- **Check `.gitignore`**: verify that `.env`, `*.ssfn`, and credential files are listed in `.gitignore`. If not, suggest adding them. +- **Check `.gitignore`**: verify that `.env`, `*.ssfn`, cookie jars, Chromium profiles, and credential files are listed in `.gitignore`. If not, suggest adding them. ## Files to Never Commit These files should always be in `.gitignore`: -- `.env`, `.env.*` -- `*.ssfn` -- `config.vdf` (contains login tokens) -- Any file matching `*secret*`, `*credential*`, `*password*` in a Steam context +- `.env`, `.env.*`, `.env.local`, `.env.partner` +- `*.ssfn`, `ssfn*`, `config.vdf`, `loginusers.vdf`, `local.vdf` +- `cookies.txt`, `cookies.json`, `*.cookies`, `storageState.json` +- Chromium / Playwright profiles (`*user-data-dir*`, `chromium-profile/`, `partner-profile/`) +- `secrets.json`, `*.pem`, `*.key`, `*.p12` +- `partner-dry-run*.json`, `admin-save-payload*.json` diff --git a/site.json b/site.json index 391b307..6ff2389 100644 --- a/site.json +++ b/site.json @@ -10,7 +10,7 @@ "Install the companion MCP server:npm install -g @tmhs/steam-mcp",
"Get a Steam API key (free) at steamcommunity.com/dev/apikey.",
"Add to Cursor MCP config (.cursor/mcp.json):{\"mcpServers\":{\"steam\":{\"command\":\"npx\",\"args\":[\"-y\",\"@tmhs/steam-mcp\"],\"env\":{\"STEAM_API_KEY\":\"YOUR_KEY_HERE\"}}}}",
- "Restart Cursor. The 30 skills, 9 rules, and 25 MCP tools are now available. The API key is optional for store lookups but required for player-specific tools."
+ "Restart Cursor. The 30 skills, 9 rules, and 26 MCP tools are now available. The API key is optional for store lookups but required for player-specific tools."
],
"links": {
"npm": "https://www.npmjs.com/package/@tmhs/steam-mcp",
diff --git a/skills/steam-api-reference/SKILL.md b/skills/steam-api-reference/SKILL.md
index 8e4266a..58b0bde 100644
--- a/skills/steam-api-reference/SKILL.md
+++ b/skills/steam-api-reference/SKILL.md
@@ -102,7 +102,7 @@ Users should store their API key in an environment variable (`STEAM_API_KEY`) an
## MCP Usage
-The [Steam MCP server](https://github.com/TMHSDigital/steam-mcp) provides 25 tools that call Steam APIs directly, eliminating the need for manual `curl` commands for common operations.
+The [Steam MCP server](https://github.com/TMHSDigital/steam-mcp) provides 26 tools that call Steam APIs directly, eliminating the need for manual `curl` commands for common operations.
### Available MCP Tools (25)
diff --git a/skills/steam-release-checklist/SKILL.md b/skills/steam-release-checklist/SKILL.md
index a18090f..b4a3a62 100644
--- a/skills/steam-release-checklist/SKILL.md
+++ b/skills/steam-release-checklist/SKILL.md
@@ -37,12 +37,15 @@ Walk through each section with the user. Mark items as done, flagged, or not app
- [ ] **App name** finalized and matches marketing materials
- [ ] **Short description** (< 300 characters) written and compelling
- [ ] **Detailed description** with formatting, features list, and call to action
-- [ ] **Header capsule** (460×215) uploaded
-- [ ] **Small capsule** (231×87) uploaded
-- [ ] **Main capsule** (616×353) uploaded
-- [ ] **Hero capsule** (3840×1240) uploaded
-- [ ] **Logo** (1280×720, transparent background) uploaded
-- [ ] **Screenshots** - minimum 5, recommended 10+, showing actual gameplay
+- [ ] **Header capsule** (920×430) uploaded
+- [ ] **Small capsule** (462×174) uploaded
+- [ ] **Main capsule** (1232×706) uploaded
+- [ ] **Vertical capsule** (748×896) uploaded
+- [ ] **Library capsule** (600×900) uploaded
+- [ ] **Library hero** (3840×1240 PNG, no text) uploaded
+- [ ] **Library logo** (1280 wide and/or 720 tall, PNG alpha) uploaded
+- [ ] **Library header** (920×430) uploaded
+- [ ] **Screenshots** - minimum 5 at 1920×1080 16:9 or larger, actual gameplay
- [ ] **Trailer** uploaded (MP4, recommended 1080p/4K)
- [ ] **Tags** configured (at least 5-10 relevant tags)
- [ ] **Genre** selected correctly
@@ -161,6 +164,7 @@ Walk through each section with the user. Mark items as done, flagged, or not app
| Step | MCP Tool | Auth | Purpose |
|------|----------|------|---------|
+| Validate local art | `steam_validateStoreAsset({ path, slot })` | None | Catch wrong sizes, half-size heroes, PROTOTYPE ribbons before upload |
| Check store page | `steam_getAppDetails({ appid })` | None | Verify description, screenshots, tags, price, platforms |
| Check achievements | `steam_getAchievementStats({ appid })` | None | Verify achievements are uploaded and visible |
| Check player stats | `steam_getPlayerCount({ appid })` | None | Confirm game is accessible (returns data = app is public) |
diff --git a/skills/steam-store-page-optimizer/SKILL.md b/skills/steam-store-page-optimizer/SKILL.md
index d12c5cb..e06d3f7 100644
--- a/skills/steam-store-page-optimizer/SKILL.md
+++ b/skills/steam-store-page-optimizer/SKILL.md
@@ -33,14 +33,16 @@ All images are required before the store page can go live.
| Asset | Size | Format | Usage |
|-------|------|--------|-------|
-| **Header Capsule** | 460×215 | JPG/PNG | Library, search results, featured lists |
-| **Small Capsule** | 231×87 | JPG/PNG | Wishlists, search, smaller displays |
-| **Main Capsule** | 616×353 | JPG/PNG | Store page header, browse pages |
-| **Hero Capsule** | 3840×1240 | JPG/PNG | Top of store page (with logo overlay) |
-| **Page Background** | 1438×810 | JPG/PNG | Store page background (faded edges) |
-| **Library Capsule** | 600×900 | JPG/PNG | Steam Library grid view |
-| **Library Hero** | 3840×1240 | JPG/PNG | Steam Library detail view |
-| **Library Logo** | 1280×720 | PNG (transparent) | Overlaid on Library Hero |
+| **Header Capsule** | 920×430 | JPG/PNG | Search, featured lists, library fallback |
+| **Small Capsule** | 462×174 | JPG/PNG | Wishlists, search, smaller displays |
+| **Main Capsule** | 1232×706 | JPG/PNG | Store page header, browse pages |
+| **Vertical Capsule** | 748×896 | JPG/PNG | Store vertical/hero capsule slot |
+| **Page Background** | 1438×810 | JPG/PNG | Store page background (subtle, not too bright) |
+| **Library Capsule** | 600×900 | JPG/PNG | Steam Library grid view (logo on art) |
+| **Library Hero** | 3840×1240 | PNG | Library details artwork only. No text. Reject 1920×620 half-size |
+| **Library Logo** | 1280 wide and/or 720 tall | PNG (alpha) | Overlaid on Library Hero |
+| **Library Header** | 920×430 | JPG/PNG | Recent Games and other library chrome |
+| **Screenshots** | min 1920×1080, 16:9 | JPG/PNG | Store media; larger 16:9 is OK |
| **Community Icon** | 32×32 | JPG | Community Hub, activity feed |
**Image guidelines:**
@@ -48,8 +50,8 @@ All images are required before the store page can go live.
- No review quotes, awards, or "Game of the Year" text
- No "Coming Soon", "Available Now", or date text
- Consistent branding across all capsule sizes
-- Hero capsule: place logo in lower-left third; leave upper area for background art
-- High contrast — images are shown on both light and dark backgrounds
+- Library hero: artwork only, no wordmark. Put the title on Library Logo. Keep critical art in the center 860×380 safe area
+- High contrast. Images are shown on both light and dark backgrounds
### 2. Store Description
@@ -196,13 +198,14 @@ For a full audit, verify:
| Step | MCP Tool | Auth | Purpose |
|------|----------|------|---------|
+| Validate local art | `steam_validateStoreAsset({ path, slot })` | None | Exact Valve sizes, format, library-hero ribbon/seam/wordmark heuristics |
| Current page state | `steam_getAppDetails({ appid })` | None | Check existing description, tags, screenshots, price |
| Competitor research | `steam_searchApps({ query })` | None | Find competing games in the genre |
| Competitor details | `steam_getAppDetails({ appid })` | None | Inspect competitor tags, descriptions, pricing |
## Common Pitfalls
-1. **Using the wrong capsule image dimensions** — Steam has strict size requirements for each capsule type (header, small, main, hero, library). Wrong sizes get rejected or look blurry.
+1. **Using the wrong capsule image dimensions** - Steam has strict size requirements for each capsule type (header 920x430, small 462x174, main 1232x706, vertical 748x896, library hero 3840x1240). Wrong sizes get rejected or look blurry. Run `steam_validateStoreAsset` before upload.
2. **Burying the game's hook in the description** — the first ~300 characters of your description show in search results. Lead with your unique selling point, not generic genre descriptions.
3. **Over-tagging your game** — applying too many tags (15+) dilutes each tag's weight. Focus on 5-8 highly relevant tags that accurately describe your game.
4. **Not having a trailer in the first media slot** — the first media item is auto-played on the store page. A screenshot in slot 1 means players miss your trailer unless they scroll.