mcpField
S
Steam MCP Server (Node.js/TypeScript)

Steam MCP Server (Node.js/TypeScript)

ローカル
github.com/algorhythmicゲーム・エンタメ82 週間前に更新

Steam MCP Server (Node.js/TypeScript) について

AI アシスタントから Steam Web API に接続する、読み取り専用の MCP サーバーです。ゲーム統計、ストア情報、ニュース、実績を取得でき、入力検証とバッチ処理の一部失敗の報告に対応します。

主な機能

  1. 01現在のプレイヤー数とアプリ一覧の取得
  2. 02ゲーム詳細、ニュース、実績の取得
  3. 03プレイヤー統計と全体統計の取得
  4. 04入力検証と一部失敗の報告

活用シーン

  1. 01ゲームの現在のプレイヤー数の確認
  2. 02プレイヤーの実績や統計の参照
  3. 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

セットアップとインストール

  1. 前提条件:

    • Node.js(v24 LTS 以降)。
    • npm(通常は Node.js に同梱されています)。
  2. リポジトリをクローンします(まだクローンしていない場合):

    git clone https://github.com/algorhythmic/steam-mcp.git
    cd steam-mcp
    
  3. 依存関係をインストールします:

    npm ci
    
  4. 環境変数を設定します: 下のセクションを参照してください。

  5. ソースを変更した後に再ビルドします: 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 が含まれます。明示的な上流エラーと不正な成功レスポンスは、クライアント側のスキーマエラーを引き起こすのではなく、ツールエラーとして返されます。

ライセンス

Apache License 2.0。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。