
Steam Game Server MCP
from jumoooo
Model Context Protocol (MCP) server that inquires, diagnoses, and manages steam profiles, game libraries, concurrent users, and game server status.
Steam & Game Server MCP
Steam νλ‘ν, κ²μ λΌμ΄λΈλ¬λ¦¬, λμ μ μμ, κ²μ μλ² μνλ₯Ό μ‘°νΒ·μ§λ¨Β·κ΄λ¦¬νλ MCP(Model Context Protocol) μλ²μ
λλ€.
Cursor, Claude Desktop, VS Code, Windsurf λ± MCP ν΄λΌμ΄μΈνΈμμ μ¬μ©ν©λλ€.
1. μκ°
| κ΅¬λΆ | λ΄μ© |
|---|---|
| μν | Steam Web API + κ²μ μλ²(Query/RCON/λ‘κ·Έ) ν΅ν© |
| Steam | νλ‘ν, κ²μ λΌμ΄λΈλ¬λ¦¬, λμ μ μμ, μ± λ΄μ€ μ‘°ν |
| Game Server | gamedig κΈ°λ° μλ² μν μ‘°ν, RCON(kick/ban/restart), λ‘κ·Έ νμ± |
2. μꡬμ¬ν
- Node.js 18+
- MCP ν΄λΌμ΄μΈνΈ (Cursor, Claude Desktop, VS Code, Windsurf λ±)
STEAM_API_KEYβ Steam API ν€ λ°κΈ
MCP μ€μ μ
envμ νκ²½λ³μλ₯Ό λ£λ κ²μ κΈ°μ€μΌλ‘ ν©λλ€..envλ λ‘컬 κ°λ° μμλ§ μ¬μ©ν©λλ€.
3. MCP μ€μ
3.1 νμ€ μ€μ (npx)
# μ¬μ μ€μΉ μμ΄ npxλ‘ μ΅μ λ²μ μ€ν (μ΅μ΄ 1ν μ€ν μ ν¨ν€μ§λ₯Ό λ΄λ €λ°μ΅λλ€)
npx steam-game-server-mcp@latest --help{
"mcpServers": {
"steam-game-server": {
"command": "npx",
"args": ["steam-game-server-mcp@latest"],
"env": {
"STEAM_API_KEY": "your_key",
"STEAM_ID": "your_steam_id",
"STEAM_MCP_SERVERS_PATH": "C:/path/to/servers.json"
}
}
}
}STEAM_MCP_SERVERS_PATH: λ―Έμ€μ μ./servers.jsonμ¬μ©. λ λ€ μμΌλ©΄ Steam λκ΅¬λ§ λμ
3.2 Cursor
SettingsβMCPβAdd new MCP Server- μ JSON μ
λ ₯ (λλ
commandλ₯Όnode,argsλ₯Ό["/path/to/dist/index.js"]λ‘ λ‘컬 λΉλ κ²½λ‘ μ§μ )
3.3 env ν€λ³ μμ½
| env ν€ | νμ | μ©λ |
|---|---|---|
STEAM_API_KEY | O | Steam API μΈμ¦. Steam λꡬ μ¬μ© μ νμ |
STEAM_ID | X | κΈ°λ³Έ Steam ID. μμΌλ©΄ λꡬ νΈμΆ μ steamId μΈμ νμ |
STEAM_MCP_SERVERS_PATH | X | servers.json κ²½λ‘. Game Server λꡬ μ¬μ© μ νμ |
SERVER_RCON_PASSWORD λ± | X | RCON λΉλ°λ²νΈ. Admin λꡬ μ¬μ© μ, servers.jsonμ passwordEnvμ μΌμΉνλ μ΄λ¦μΌλ‘ μ€μ |
STEAM_MCP_ADMIN_TOKEN | X | add_server, remove_server νΈμΆ μ νμ. env + adminToken νλΌλ―Έν° λ λ€ μΌμΉν΄μΌ μ€ν |
3.4 μ¬μ© μλ리μ€λ³ env μΈνΈ
| μλλ¦¬μ€ | env | νμΌ |
|---|---|---|
| Steam μ‘°νλ§ | STEAM_API_KEY, STEAM_ID(μ ν) | - |
| Game Server μ‘°ν | STEAM_API_KEY, STEAM_MCP_SERVERS_PATH | servers.json |
| Game Server + RCON Admin | μ + SERVER_RCON_PASSWORD | servers.json (rcon μ€μ ν¬ν¨) |
| add_server, remove_server | μ + STEAM_MCP_ADMIN_TOKEN | servers.json |
4. MCP λꡬ (26κ°)
Steam (7κ°)
| λꡬ | μ€λͺ |
|---|---|
steam_resolve_vanity_url | 컀μ€ν URL β SteamID λ³ν |
steam_get_player_summary | νλ‘ν μμ½ |
steam_get_owned_games | 보μ κ²μ λͺ©λ‘ |
steam_get_recently_played | μ΅κ·Ό νλ μ΄ κ²μ |
steam_get_current_players | μ±λ³ λμ μ μμ μ |
steam_get_servers_at_address | IPλ‘ κ²μ μλ² μ‘°ν |
steam_get_app_news | μ± λ΄μ€/ν¨μΉ λ ΈνΈ |
Game Server (3κ°)
| λꡬ | μ€λͺ |
|---|---|
game_server_query | μλ² μν (μ΄λ¦, λ§΅, μΈμ, ping) |
game_server_players | νλ μ΄μ΄ λͺ©λ‘ |
game_server_rules | μλ² κ·μΉ(cvars) |
Monitoring (6κ°)
| λꡬ | μ€λͺ |
|---|---|
server_overview | λͺ¨λ μλ² μν μ‘°ν |
server_health | λ¨μΌ μλ² μ§λ¨ |
server_diagnose | AIμ© μ§λ¨ |
server_compare | μλ² λΉκ΅ + μΆμ² |
server_alert | λ¬Έμ μλ² νν°λ§ |
server_trend | νλ μ΄μ΄ μ μΆμ΄ |
Admin (4κ°) β RCON νμ
| λꡬ | μ€λͺ |
|---|---|
server_admin_kick_player | νλ μ΄μ΄ μΆλ°© |
server_admin_ban_player | νλ μ΄μ΄ λ°΄ |
server_admin_restart_server | μλ² μ¬μμ |
server_admin_rcon_command | whitelist RCON λͺ λ Ή |
Inventory (4κ°)
| λꡬ | μ€λͺ |
|---|---|
add_server | servers.jsonμ μλ² μΆκ° |
remove_server | servers.jsonμμ μλ² μμ |
list_servers | λ±λ‘ μλ² λͺ©λ‘ |
auto_discover_servers | Steam Master Serverλ‘ ν보 νμ |
Discovery (1κ°)
| λꡬ | μ€λͺ |
|---|---|
steam_discover_servers | Steam Master Server Queryλ‘ κ²μ μλ² κ²μ |
Log (1κ°)
| λꡬ | μ€λͺ |
|---|---|
log_recent_events | servers.jsonμ logPath(λ‘컬 νμΌ κ²½λ‘)μμ player_join/leave, error μΆμΆ |
5. ν μ€νΈ
μλ ν μ€νΈ (Vitest)
npm test- config/servers, server-tools, inventory-tools, admin-tools, discovery-tools, log-tools, steam-tools, rcon/client β μ΄ 76κ°
μλ ν μ€νΈ
- Game Server μ‘°ν: κ³΅κ° Minecraft μλ²(Hypixel λ±)λ₯Ό servers.jsonμ λ±λ‘ ν
game_server_query,server_overviewνΈμΆ - RCON:
npm run rcon:serverλ‘ mock μλ² μ€ν βSTEAM_MCP_SERVERS_PATH=./test/rcon/servers.rcon-test.json SERVER_RCON_PASSWORD=test123 npm run rcon:test -- my-rust status
6. μ£Όμμ¬ν λ° κ΅¬ν μ μ½
μλ¬ μ‘°κ±΄
- gamedig type:
typeμ GAMES_LISTμ μΌμΉν΄μΌ ν¨ - RCON:
rcon.enabled: trueμΈλ°passwordEnvμ ν΄λΉνλ envκ° μμΌλ©΄"RCON not configured for this server."λ°ν - STEAM_API_KEY: λ―Έμ€μ μ Steam λꡬ μ λΆ
"STEAM_API_KEY νκ²½ λ³μλ₯Ό νμΈνμΈμ."λ°ν
ꡬν μ μ½
| νλͺ© | μ μ½ |
|---|---|
log_recent_events | logPathλ MCP νλ‘μΈμ€κ° μ κ·Ό κ°λ₯ν λ‘컬 νμΌ κ²½λ‘λ§ μ§μ. μ격 URL/SSH λΆκ°. μ§μ κ²μ: rust, counterstrike2/csgo/tf2 λ± Source μμ§, minecraft |
server_trend | game_server_query νΈμΆ μ μνμ΄ λμ λ¨. trendλ§ λ¨λ
νΈμΆνλ©΄ λ°μ΄ν° μμ μ μμ |
add_server, remove_server | adminToken νλΌλ―Έν°μ STEAM_MCP_ADMIN_TOKEN envμ λμΌν κ°μ λ£μ΄μΌ μ€νλ¨ |
7. κ°λ° μ μ
npm install
npm run build
npm run dev # λλ npm startλ‘컬 μ€ν μ .envμ STEAM_API_KEY, STEAM_ID, RCON λΉλ°λ²νΈ λ±μ μ€μ ν©λλ€.
# μ¬μ μ€μΉ μμ΄ npxλ‘ μ΅μ λ²μ μ€ν (μ΅μ΄ 1ν μ€ν μ ν¨ν€μ§λ₯Ό λ΄λ €λ°μ΅λλ€)
npx steam-game-server-mcp@latest --helpBefore it works, you'll need: STEAM_API_KEYSTEAM_IDSTEAM_MCP_SERVERS_PATH
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.