关于 Steam MCP Server (Node.js/TypeScript)
Steam MCP 服务通过只读工具连接 Steam Web API,为 AI 助手提供游戏统计、商店详情、新闻和成就数据。它验证输入并报告批量查询中的失败,同时保留成功结果。
主要功能
- 01查询当前玩家数与应用列表
- 02读取游戏详情、新闻和成就
- 03获取玩家及全球统计
- 04验证参数并处理部分失败
适用场景
- 01查看游戏当前在线人数
- 02查询玩家的游戏成就与统计
- 03批量获取 Steam 商店详情
MCP 相关
通过 stdio 接受 MCP 客户端的工具调用,并将请求转发至 Steam Web API。提供 10 个只读工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Steam MCP 服务
一个 MCP 服务,为 AI 助手提供对 Steam 游戏统计数据、商店详情、新闻和成就的只读访问权限。
无效参数和部分 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,并在 MCP 客户端中注册 node /absolute/path/to/steam-mcp/build/index.js。请参阅配置(环境变量)。
状态与限制
工具只读取 Steam 数据。玩家数据取决于个人资料的可见性。启动时需要非空 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 开发者网站获取。没有此密钥,服务器将无法运行。
在 MCP 客户端的环境或 shell 中设置 STEAM_API_KEY。你也可以将项目根目录中的 .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筛选条件。页面会缓存五分钟;默认仅包含游戏。getGameSchema:获取指定 AppID 的游戏架构(统计数据、成就)。getAppDetails:获取一个或多个 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,并且必须以字符串形式传入,保留所有数字。
开发与故障排查
- 运行
npm test以执行 TypeScript 构建和模拟的 MCP 集成测试;测试无需 API 密钥。 - 运行
npm start启动已构建的 stdio 服务,或运行npm run inspector启动交互式 MCP 检查器。 - 如果客户端找不到 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 MiB。
工具输入会在联系 Steam 前进行验证。AppID 必须是正的 32 位整数;SteamID64 值必须是 17 位字符串。新闻条数为 1–100,maxlength 为 0–10,000。全局统计请求接受 1–100 个非空名称和以秒为单位的 Unix 时间戳,且 end_date 必须大于或等于 start_date。国家/地区代码使用两个字母,并会规范为大写。意外的参数名称会导致返回针对相应字段的错误。
批次结果
getAppDetails 会保留以 AppID 为键的条目,并包含一份汇总,其中列出请求的不同 ID 数量、成功数和失败数:
{
"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,以及每个应用的失败原因和汇总。明确的上游失败和格式错误的成功响应会作为工具错误返回,而不会导致客户端架构错误。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。