Steam MCP Server (Node.js/TypeScript) について
AI アシスタントから Steam Web API に接続する、読み取り専用の MCP サーバーです。ゲーム統計、ストア情報、ニュース、実績を取得でき、入力検証とバッチ処理の一部失敗の報告に対応します。
主な機能
- 01現在のプレイヤー数とアプリ一覧の取得
- 02ゲーム詳細、ニュース、実績の取得
- 03プレイヤー統計と全体統計の取得
- 04入力検証と一部失敗の報告
活用シーン
- 01ゲームの現在のプレイヤー数の確認
- 02プレイヤーの実績や統計の参照
- 03Steam ストア情報の一括取得
MCP 対応
stdio 経由で MCP クライアントからツール呼び出しを受け、Steam Web API にリクエストを転送します。読み取り専用ツールを 10 個提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Steam MCP Server
AI アシスタントに、Steam のゲーム統計、ストア情報、ニュース、実績への読み取り専用アクセスを提供する MCP サーバーです。
無効な引数や API の部分的な失敗が、成功した結果のように見えることがあります。このサーバーは Steam に接続する前に引数を検証し、期限と再試行回数を設定してリクエストを制限するとともに、成功した結果を保持しながら失敗した検索を報告します。
Node.js 24 以降が必要です。
検証結果: 読み取り専用のツール 10 件 · モックテスト 35 件が 2026 年 10 月 14 日に合格しました。バッチ処理の失敗と不正なレスポンスも含まれます。
対応状況: Claude Code 2.1.296 に接続し、10 件すべてのツールが検出されました。プレースホルダーキーを使って起動と検出を検証しましたが、Claude Code 経由の Steam へのライブリクエストはテストしていません。クライアントの設定。
クイックスタート
git clone https://github.com/algorhythmic/steam-mcp.git
cd steam-mcp
npm ci # installs dependencies and builds the server
npm test # mocked MCP tests; no API key needed
ライブリクエストを行うには、STEAM_API_KEY を設定し、node /absolute/path/to/steam-mcp/build/index.js を MCP クライアントに登録してください。設定を参照してください。
ステータスと制限
ツールは Steam のデータを読み取るだけです。プレイヤーデータを取得できるかどうかは、プロフィールの公開設定によって異なります。起動時には空でない API キーが必要です。テストでは上流 API のレスポンスをモックしています。リクエストには、バッチサイズ、同時実行数、再試行回数、レスポンスサイズの上限があります。リクエストの制限を参照してください。ローカルテストは Node 26.8.1 で合格しました。CI ワークフローは Node 24 を対象としていますが、現在の結果は確認していません。
Claude Code での使用
2026 年 10 月 14 日に、Linux 上の Claude Code 2.1.296 でテストしました。ここでは steam-mcp.json とした設定ファイルには、標準の mcpServers 形式を使用しました。
{"mcpServers": {"steam": {"command": "node",
"args": ["/absolute/path/to/steam-mcp/build/index.js"],
"env": {"STEAM_API_KEY": "YOUR_STEAM_API_KEY_HERE"}}}}
そのサーバーだけを読み込み、組み込みツールを無効にし、ツールを呼び出さずに検出を要求します。
printf '%s' "Do not call any tool. Reply with only the word ok." |
claude -p --strict-mcp-config --mcp-config steam-mcp.json --tools "" \
--setting-sources "" --no-session-persistence --output-format stream-json --verbose
system/init イベントに、サーバーのステータスと mcp__steam__* ツールが一覧表示されます。
対話形式で使用する場合は、claude --mcp-config steam-mcp.json を起動します。この対話形式はテスト対象に含まれていません。
確認できた内容:steam サーバーが起動して stdio 経由で接続し、Claude Code が 10 件すべてのツールを検出しました。この確認ではプレースホルダーキーを使用し、ツール呼び出しは行っていません。Claude Code 経由で Steam へのライブリクエストができることは検証していません。これには実際の STEAM_API_KEY が必要です。実際のキーを含むファイルは、バージョン管理の対象から除外してください。
概要
このプロジェクトは、Node.js、TypeScript、@modelcontextprotocol/sdk を使用して Steam MCP(Model Context Protocol)サーバーを実装しています。このサーバーは、MCP クライアント(Claude Code など)と Steam Web API の間を仲介し、さまざまな Steam ゲームの統計やユーザー情報への構造化されたアクセスを提供します。
@modelcontextprotocol/sdk の StdioServerTransport を使用し、標準入出力(stdio)経由で MCP クライアントと通信します。tools/call リクエストを受け取り、検証したうえで、Axios を使って Steam Web API とやり取りし、整形した結果または適切なエラーメッセージを返します。
技術スタック
- 言語: TypeScript
- ランタイム: Node.js(v24 LTS 以降)
- HTTP クライアント: Axios
- 環境変数: Dotenv
- MCP SDK:
@modelcontextprotocol/sdk - パッケージ管理: npm
セットアップとインストール
-
前提条件:
- Node.js(v24 LTS 以降)。
- npm(通常は Node.js に同梱されています)。
-
リポジトリをクローンします(まだクローンしていない場合):
git clone https://github.com/algorhythmic/steam-mcp.git cd steam-mcp -
依存関係をインストールします:
npm ci -
環境変数を設定します: 下のセクションを参照してください。
-
ソースを変更した後に再ビルドします:
npm ciでプロジェクトはすでにビルドされています。後で再ビルドするには:npm run buildこれにより、TypeScript コードが
buildディレクトリにコンパイルされます。
設定(環境変数)
サーバーを使用するには、次の環境変数を設定する必要があります。
STEAM_API_KEY(必須): Steam Web API キーです。Steam Developer のウェブサイトで取得してください。このキーがないと、サーバーは動作しません。
STEAM_API_KEY は、MCP クライアントの環境変数またはシェルで設定してください。または、プロジェクトのルートにある .env.example を .env にコピーし、そこでキーを設定することもできます。.env ファイルは任意です。環境変数がすでに設定されている場合は、そちらが優先されます。
STEAM_API_KEY=YOUR_API_KEY_HERE
YOUR_API_KEY_HERE を実際の Steam Web API キーに置き換えてください。
サーバーの実行(スタンドアロン)
プロジェクトをビルド(npm run build)し、.env ファイルを設定したら、Node を使用してサーバーを直接実行できます。
node build/index.js
サーバーが起動し、標準入出力で MCP メッセージを待ち受けます。
利用可能な MCP コマンド
このサーバーは、Steam Web API に基づいて次のツールを提供します。
getCurrentPlayers:指定した AppID の現在のプレイヤー数を取得します。getAppList:Steam ストアアプリの一覧をページ単位で取得します(デフォルトは 20 件、最大 100 件)。続きから取得するには、next_cursorをcursorとして渡します。include_games、include_dlc、include_software、include_videos、include_hardware、if_modified_sinceの各フィルターに対応しています。ページは 5 分間キャッシュされます。デフォルトではゲームのみが含まれます。getGameSchema:指定した AppID のゲームスキーマ(統計、実績)を取得します。getAppDetails:1 つ以上の AppID のストアページ詳細を取得します。getGameNews:指定した AppID の最新ニュース項目を取得します。getPlayerAchievements:特定のゲームにおけるプレイヤーの実績状況を取得します。getUserStatsForGame:特定のゲームにおけるユーザーの詳細な統計を取得します。getGlobalStatsForGame:特定のゲームの集計済みグローバル統計を取得します。getSupportedApiList:対応している Steam Web API のインターフェースとメソッドの一覧を取得します。getGlobalAchievementPercentages:ゲームのグローバル実績達成率を取得します。
Roo Code への接続
この設定は、この README の改訂時に再テストされていません。プロジェクトの .roo/mcp.json にある mcpServers の下に名前付きエントリを追加するか、Roo のグローバル MCP 設定を使用してください。Roo の設定リファレンスを参照してください。
Linux/macOS の例(絶対パスと API キーを置き換えてください):
{
"mcpServers": {
"steam": {
"command": "node",
"args": ["/absolute/path/to/steam-mcp/build/index.js"],
"env": {
"STEAM_API_KEY": "YOUR_STEAM_API_KEY_HERE"
},
"disabled": false
}
}
}
Windows の例:
{
"mcpServers": {
"steam": {
"command": "node",
"args": ["C:\\Users\\YourName\\Projects\\steam-mcp\\build\\index.js"],
"env": {
"STEAM_API_KEY": "YOUR_STEAM_API_KEY_HERE"
},
"disabled": false
}
}
}
プロジェクトの .env ファイルを使用する場合は、env オブジェクトを省略してください。サーバーはインストール先を基準に .env を検索するため、cwd の設定は不要です。実際のキーを含む設定は、バージョン管理の対象にしないでください。他の MCP クライアントでは異なる設定形式が使われることがあります。その場合は、同じコマンド、絶対スクリプトパス、環境変数を使用して、ドキュメントに記載された stdio の設定を行ってください。
最初の呼び出し
接続したら、「Dota 2 をプレイしている人は何人ですか?」と試してみてください。対応するツール呼び出しは次のとおりです。
{"name":"getCurrentPlayers","arguments":{"appid":570}}
ストア情報を取得するには、次のようにします。
{"name":"getAppDetails","arguments":{"appids":[570,730],"country":"US"}}
AppID は、Steam ストア URL の /app/ に続く数字です。プレイヤーツールには、すべての桁を保持した文字列として指定する SteamID64 が必要です。
開発とトラブルシューティング
- TypeScript のビルドとモック MCP 統合テストを実行するには、
npm testを実行します。テストに API キーは不要です。 - ビルド済みの stdio サーバーを起動するには
npm startを、対話型の MCP インスペクターを起動するにはnpm run inspectorを実行します。 - クライアントが Node を見つけられない場合は、
commandに Node 実行ファイルの絶対パスを設定します。 build/index.jsが存在しない場合は、リポジトリのルートからnpm ciを実行します。STEAM_API_KEYが設定されていない場合は、クライアント設定または任意の.envファイルに設定し、サーバーを再起動します。- Steam にアクセスを拒否された場合は、キーと対象プロフィールのゲーム詳細の公開設定を確認します。一部のゲームでは、統計や実績が公開されません。
- ターミナルでサーバーが何も表示せず待機しているのは正常です。stdio は MCP クライアントを想定しています。診断メッセージは stderr に出力され、stdout はプロトコルメッセージ専用です。
リクエスト制限
ストア詳細の一括リクエストでは、最大 20 個の ID を指定でき、重複する ID は一度だけ取得します。各 Steam ホストで共有される同時リクエスト数の上限は 4 です。HTTP 操作の期限は、キュー待ちと再試行を含めて 10 秒です。各ツール呼び出しの全体の期限は 15 秒で、クライアントによるキャンセルに従います。一時的なネットワークエラー、HTTP 429、および指定された 5xx レスポンスは、Retry-After を尊重したうえで最大 2 回再試行されます。レスポンスの上限は 2 MiB です。
Steam への接続前にツールの入力を検証します。AppID は正の 32 ビット整数、SteamID64 は 17 桁の文字列である必要があります。ニュース件数は 1~100、maxlength は 0~10,000 です。グローバル統計のリクエストでは、空でない名前を 1~100 個指定し、Unix タイムスタンプを秒単位で指定する必要があります。また、end_date は start_date 以降である必要があります。国コードは 2 文字で、大文字に正規化されます。想定されていない引数名は、該当フィールドを示すエラーとともに拒否されます。
一括取得の結果
getAppDetails は AppID をキーとする項目を保持し、重複のないリクエスト ID、成功数、失敗数の summary を含みます。
{
"570": {"success": true, "data": {"name": "Dota 2"}},
"730": {"success": false, "error": "No store details are available for this app in the selected country."},
"summary": {"requested": 2, "succeeded": 1, "failed": 1}
}
一部の取得が成功した一括リクエストでは、成功した項目が保持されます。すべての取得が失敗した場合、MCP レスポンスの isError: true となり、アプリごとの理由と summary が含まれます。明示的な上流エラーと不正な成功レスポンスは、クライアント側のスキーマエラーを引き起こすのではなく、ツールエラーとして返されます。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。