Metadata-Version: 2.5
Name: steamworks-mcp
Version: 0.3.1
Summary: Release assistant for Steam games, as an MCP server for Claude and ChatGPT: store page, achievements, checks against Valve's rules, market data, and Steamworks only after you approve.
Project-URL: Homepage, https://burakkaan.dev/steamworks-mcp
Project-URL: Repository, https://github.com/wazzapsenk/steamworks-mcp
Project-URL: Documentation, https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md
Project-URL: Issues, https://github.com/wazzapsenk/steamworks-mcp/issues
Author: Burak Kaan Sahin
License-Expression: MIT
License-File: LICENSE
Keywords: chatgpt,claude,gamedev,localization,mcp,mcp-server,model-context-protocol,release,steam,steamworks
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Games/Entertainment
Classifier: Topic :: Software Development :: Build Tools
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27
Requires-Dist: mcp<3,>=2.1
Requires-Dist: pillow>=10.4
Requires-Dist: pydantic>=2.8
Requires-Dist: ruamel-yaml>=0.18.6
Provides-Extra: browser
Requires-Dist: playwright>=1.48; extra == 'browser'
Description-Content-Type: text/markdown

# steamworks-mcp

**Put your game on Steam with your AI assistant.** It reads your game project, asks you what it cannot find, writes
your store page with you, checks everything against Valve's rules, and fills in Steamworks only after you say yes.
It never publishes anything: you press Publish.

Works with **Claude** (Desktop, Code and claude.ai) and **ChatGPT**. Free and open source ([MIT](https://github.com/wazzapsenk/steamworks-mcp/blob/main/LICENSE)).

**37 tools · 36 skills · 24 code rules · 124 release checks · 114 store-text rules · Unity, Godot and Unreal**

<!-- mcp-name: io.github.wazzapsenk/steamworks-mcp -->

> Not affiliated with or endorsed by Valve. "Steam" and "Steamworks" are trademarks of Valve Corporation.

**Contents:** [How it works](#how-it-works) · [Install](#install) · [Your first conversation](#your-first-conversation) ·
[Words you will see](#words-you-will-see) · [What it can do](#what-it-can-do) · [Skills](#skills) ·
[Code rules](#code-rules) · [Safety](#safety-what-it-never-does) · [Known limits](#known-limits) ·
[Advanced setup](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md)

## How it works

```mermaid
flowchart LR
    A["Your game folder"] --> B["Scan: what the project<br/>already says"]
    B --> C["Questions for<br/>what is missing"]
    C --> D["Drafts: store text, achievements,<br/>images, settings, SDK code"]
    D --> E{"You approve?"}
    E -- "change it" --> D
    E -- "yes" --> F["Checks against<br/>Valve's rules"]
    F --> G["Files + a checklist<br/>for Steamworks"]
    F --> H["Fills Steamworks<br/>after a dry run and your OK"]
    G --> I["You press Publish<br/>in Steamworks"]
    H --> I
```

Your game goes through four **release steps**, the same ones Valve reviews. The tool shows how far each one is:

```mermaid
flowchart LR
    S0["Step 0 · Prerequisites<br/>account, bank, tax, app fee"] --> S1["Step 1 · Store page<br/>texts, images, tags, languages"]
    S1 --> S2["Step 2 · Build review<br/>the game, Steam features"]
    S2 --> S3["Step 3 · Release<br/>date, price, Release button"]
```

Everything about your game's Steam release lives in one readable file in your game folder, `steamworks.yaml`. Every
value in it has a status: **missing**, **draft** (found or written, not yet checked by you), **approved** (you said
it is right), or **done in Steamworks**.

## Install

You need [uv](https://docs.astral.sh/uv/getting-started/installation/), a small tool that runs Python programs (one
command to install), and Claude or ChatGPT. You do **not** need Steam keys or a Steam login to start.

The server speaks both MCP transports:

| Transport | For | Started by |
|---|---|---|
| **stdio** (the default) | Apps that start the server on your computer: Claude Desktop, Claude Code, Codex, Cursor | the app itself (`steamworks-mcp`); `setup` and the plugin configure it |
| **Streamable HTTP** | Apps that connect over the internet: ChatGPT, claude.ai | `steamworks-mcp remote` (with a secure address), or `steamworks-mcp --http` (local only, [details](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md#remote-clients-chatgpt-claudeai)) |

Over HTTP every request needs sign-in (OAuth, or a bearer token); over stdio only the app that started the server
can talk to it.

### Claude Desktop

In a terminal:

```bash
uvx steamworks-mcp setup
```

It asks where your games are and connects Claude Desktop (and Claude Code, if you have it). Restart Claude Desktop.
To use the [skills](#skills) there too, add the folders in [`skills/`](https://github.com/wazzapsenk/steamworks-mcp/blob/main/skills/) as skills in Claude's settings.

### Claude Code: the plugin (server and skills in one step)

In Claude Code, type:

```
/plugin marketplace add https://github.com/wazzapsenk/steamworks-mcp
/plugin install steamworks@steamworks-mcp
```

It asks for your games folder. That's it.

### ChatGPT and claude.ai

These apps reach the server over the internet, through a secure address on your computer. Install
[cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) once (free,
from Cloudflare; on Windows `winget install --id Cloudflare.cloudflared`, on a Mac `brew install cloudflared`), then:

```bash
uvx steamworks-mcp remote
```

It asks where your games are (the first time), opens the address and prints what to paste:

- **ChatGPT**: Settings > Apps & Connectors > Advanced settings > Developer mode, then create a connector (in the
  desktop app: Settings > Plugins > MCPs > Add). Custom connectors need developer mode; check that your plan has it.
- **claude.ai**: Settings > Connectors > Add custom connector.

Paste the address, choose OAuth, and type the access code it shows when a steamworks-mcp page asks for it. Keep the
window open while you work. The address changes every time you start it (update the connector then);
[a fixed address](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md#remote-clients-chatgpt-claudeai) needs a little more setup.

### Check the installation

```bash
uvx steamworks-mcp doctor
```

Other apps (Codex, Cursor and anything else that supports MCP) and connecting by hand:
[docs/ADVANCED.md](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md).

## Your first conversation

Just talk to your assistant. Some things you can say:

| You want to… | Say |
|---|---|
| Start | "Where are my games on Steam?" · "Help me get my game in `MyGame/` onto Steam." |
| See what's left | "What's still missing before my store page can go live?" |
| Store page | "Write my store page." · "Make my short description better." |
| Know the market | "What do the closest popular games do on their store pages?" · "Compare my game with games like it." |
| Price | "What should my game cost, and in each country?" |
| Achievements | "Design achievements for my game." · "Add the Steam code for them." |
| Check the code | "Check my game's Steam integration." |
| Images | "Make all my store images from my key art and logo." |
| Translations | "Translate my store page into German, French and Japanese." |
| Fill Steamworks | "Show me what would change in Steamworks, then apply it." |
| After launch | "How is my launch going?" · "What are players complaining about?" |

Every answer starts with one plain sentence and, where it helps, a table. The assistant shows you each draft; only
you approve.

## Words you will see

| Word | Means |
|---|---|
| **MCP server** | A helper program your AI app talks to. This project is one. |
| **Tool** | One thing the server can do, like "check my code" or "make my images". Your assistant picks the tools. |
| **Skill** | A ready-made recipe for your assistant, like "write the store page" (several tools in the right order). |
| **Prompt** | The same as a skill, for apps that show prompts instead of skills. |
| **Code rule** | A check of your game's code against Steamworks requirements, with the fix. |
| **steamworks.yaml** | The file in your game folder with every Steam setting of your game. Readable and editable. |
| **Draft / approved / done** | A value found or written for you / a value you confirmed / a value Steamworks has. |
| **Release step** | Step 0-3 above (in the code: "gate"). |
| **Dry run** | Showing what would change in Steamworks without changing anything. Every write starts with one. |
| **BROWSER mode** | Optional: the tool fills Steamworks pages in a browser window you signed in to yourself. |
| **Publisher key** | Optional: a Steamworks key for builds, branches and leaderboards. Never share it. |

## What it can do

**Start and see where you are**

| What | Tools |
|---|---|
| Find your games and show how far each one is, with the one next step | `status` |
| Start tracking a game and read what the project already says (Unity, Godot, Unreal) | `init_project`, `scan_project` |
| Game already in Steamworks? Fill the empty fields from what Steam has; never overwrites | `import_from_steamworks` |
| What is missing before each release step, with Valve's source for every rule | `gap_report` |
| Short batches of questions (a form when your app supports it), saving and approving answers | `start_interview`, `set_field`, `approve_fields`, `mark_applied` |
| What is turned on (keys, modes), reference data | `server_info`, `get_spec_info` |

**Store page, images and translations**

| What | Tools |
|---|---|
| Briefs for the store text, achievements and settings; your assistant writes, the server checks | `generate`, `save_draft` |
| Check everything against Valve's rules, a store-text rubric and an anti-copy check | `validate` |
| Preview the store text with the first screen marked | `preview_store` |
| Every store, library and icon image from one key art and one logo | `prepare_images` |
| Translate every text into every target language (your assistant translates, the server checks) | `localization_status`, `localization_pending`, `localization_set` |
| Measure a successful game's page (numbers only) | `fetch_reference` |

**Market (live data from Steam's public store)**

| What | Tools |
|---|---|
| Look any game up: price, reviews, players right now, features | `store_lookup` |
| Study the closest popular games' store pages, compare them side by side | `study_market`, `save_market_study`, `compare_games` |
| What close games charge in the US and in each country | `price_brief` |
| Rough sales from review counts and from your wishlists (rules of thumb, never a forecast) | `estimate_sales` |
| What players praise and criticize, in close games or your own | `study_reviews`, `save_review_study` |
| After launch: reviews, players and price against the last check | `launch_watch` |

**Your game's code**

| What | Tools |
|---|---|
| Check the code, engine settings and build scripts against [24 Steamworks rules](#code-rules) | `check_code` |
| Steam SDK code with your exact app id and achievement, stat and leaderboard names (Unity, Godot, Unreal, C++) | `integration_code` |

**Steamworks**

| What | Tools |
|---|---|
| Every file plus a checklist that says which Steamworks page and field it goes to | `export_package` |
| Apply approved values (dry run first): Steam Cloud, installation, achievements, store text and page, images, depots, tags, leaderboards, builds | `apply` |
| See what Steamworks has now; set a build live on a beta branch | `steamworks_inspect`, `set_build_live` |
| BROWSER mode: open Steamworks, undo a write | `steamworks_open`, `restore_snapshot` |

How each area gets done in Steamworks (Web API, BROWSER mode, a file to upload, or a manual step) and how well it is
verified: [docs/CAPABILITIES.md](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/CAPABILITIES.md).

## Skills

36 recipes for your assistant. In Claude Code with the plugin they show as `/steamworks:<name>`.

| Area | Skills |
|---|---|
| Start | `steamworks-getting-started` (first steps, in plain words) · `steamworks-release` (the whole road) · `steamworks-review-gate` (everything open before one release step) |
| Store page | `steamworks-store-page` · `steamworks-store-assets` (images, screenshots, trailers) · `steamworks-content-survey` (mature content, AI disclosure) · `steamworks-localize` |
| Market | `steamworks-market-research` · `steamworks-store-lookup` · `steamworks-compare-games` · `steamworks-pricing` · `steamworks-sales-estimate` · `steamworks-review-analysis` · `steamworks-sales-calendar` (release date, Next Fest, sales) |
| Game code | `steamworks-sdk-integration` · `steamworks-code-check` · `steamworks-achievements` · `steamworks-cloud-saves` · `steamworks-leaderboards` · `steamworks-input` (controllers, Steam Input) · `steamworks-multiplayer` · `steamworks-social` (Rich Presence, overlay) · `steamworks-inventory` (items, in-game purchases) · `steamworks-workshop` · `steamworks-anticheat` · `steamworks-api-reference` |
| Builds and setup | `steamworks-app-config` (depots, launch options) · `steamworks-build-upload` (SteamPipe, branches, CI) · `steamworks-testing-sandbox` · `steamworks-steam-deck` · `steamworks-playtest-demo` · `steamworks-dlc` · `steamworks-migration` (from Epic, GOG, itch.io) |
| After launch | `steamworks-launch-week` · `steamworks-community` (announcements, keys) · `steamworks-bug-reports` |

Each skill uses the server's tools where one fits and links Valve's documentation. A test checks that every tool,
`steamworks.yaml` field and skill a skill names really exists.

## Code rules

`check_code` reads your game's own code (plugins and the SDK wrappers are skipped) and reports each problem with the
file, the line, why it matters and the fix. A key or password it finds is never shown.

| Group | What it catches |
|---|---|
| `steamworks-app-id` | 480 (Valve's test app) left in; app ids that differ from your game's |
| `steamworks-sdk-lifecycle` | Init result not checked; no RestartAppIfNecessary; callbacks never run; no Shutdown |
| `steamworks-stats-achievements` | Set without StoreStats; names Steamworks does not know; achievements nothing unlocks |
| `steamworks-secrets` | Web API keys, steamcmd passwords, Steam login files in the project |
| `steamworks-build-scripts` | `setlive` default; missing content roots, depot scripts or files; steam_appid.txt in builds |
| `steamworks-steam-deck` | Forced resolution; no gamepad input; anti-cheat that needs Proton support |
| `steamworks-saves-cloud` | Progress in PlayerPrefs; hard-coded Windows paths; BinaryFormatter |
| `steamworks-networking` | The old ISteamNetworking P2P API; auth tickets nothing verifies |

The full list with Valve's sources: [`src/steamworks_mcp/data/code_rules.yaml`](https://github.com/wazzapsenk/steamworks-mcp/blob/main/src/steamworks_mcp/data/code_rules.yaml).

## Safety: what it never does

- Publish, prepare to publish, revert, submit for review or release anything. You do that in Steamworks. (Store
  tags go live as soon as they are saved; the tool saves them only with your separate `goes_live_now=true`.)
- Write anything to Steamworks without a dry run first and your OK, or write values you have not approved.
- Edit packages (they change what customers own at once) or set a build live on the default branch.
- Delete anything in Steam unless you explicitly ask for it.
- Type, store or ask for passwords or Steam Guard codes, or read cookie values.
- Write into your game project. The scanners only read; generated code goes to `.steam-mcp/exports/` for you to copy.
- Generate artwork. Images are cut from your own art; missing art is reported.
- Send your texts to a translation or AI service. Your own assistant writes and translates; the server checks.

Every write saves a snapshot of what Steam had, reads Steam again afterwards and is logged. Details:
[Writing to Steam](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md#writing-to-steam-the-protocol) and
[BROWSER mode](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md#browser-mode-read-this-first).

## Known limits

- **Scans** read Unity, Godot and Unreal projects. Other engines answer the questions instead; everything after the
  scan works the same.
- **Still manual in Steamworks:** pricing, the content survey and ratings, the Controller and Accessibility surveys,
  the release date, stat definitions, screenshots and trailers, creating depots, packages and DLC, and setting a
  build live on the default branch. The checklist from `export_package` tells you exactly where.
- **Not verified live:** writing store tags, setting a beta branch live, the app and shortcut icons, and the
  Auto-Cloud overrides suggested for macOS and Linux saves.
- **Images:** the tool fills empty image slots only; it never replaces or removes an image in Steamworks.
- **The BROWSER mode follows the Steamworks site as it was on 2026-10-03.** When a page changes, the tool stops
  before writing.
- **Market numbers** come from Steam's public store; Steam publishes no sales, so sales estimates are rules of thumb.

## More

- [docs/ADVANCED.md](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/ADVANCED.md): configuration, keys and accounts, connecting each app by hand, remote clients,
  how writes work, the BROWSER mode, files, development.
- [docs/CAPABILITIES.md](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/CAPABILITIES.md): what is automated in each Steamworks area, and how well it is verified.
- [docs/SCHEMA.md](https://github.com/wazzapsenk/steamworks-mcp/blob/main/docs/SCHEMA.md): every field of `steamworks.yaml`.
- [examples/example-game/steamworks.yaml](https://github.com/wazzapsenk/steamworks-mcp/blob/main/examples/example-game/steamworks.yaml): a complete example.

## License

[MIT](https://github.com/wazzapsenk/steamworks-mcp/blob/main/LICENSE)
