You can monitor most game servers without installing anything on them: dedicated servers already answer a public query, the one server browsers use to list them. Steam games answer A2S on their query port, Minecraft Java answers Server List Ping on 25565, and FiveM serves JSON over HTTP. Poll that query every minute and you get player count, map, version and an exact uptime record, from outside, with no plugin and no new port.
That is what ServerStats basic mode does. This guide explains the protocols, the ports each game uses, what you can and cannot learn this way, and how to check a server yourself.
How the Steam query (A2S) works
A2S is Valve's server query protocol, used by Source games and by most dedicated servers built on Steamworks (Rust, Valheim, Palworld, DayZ, Squad and many more). It is plain UDP, request and reply:
- A2S_INFO (request byte
0x54, the stringSource Engine Query). The reply carries the server name, map, game folder, player count, max players, bot count, OS, whether a password is set, VAC, and the version string. Newer servers often add tags ("keywords") that games use for extra data. - A2S_PLAYER (request byte
0x55). The reply lists each connected player with a name, a score and how long they have been connected. - A2S_RULES (request byte
0x56). Server cvars or rules, where the game exposes them.
Every packet starts with FF FF FF FF. Since late 2020 many servers answer the first A2S_INFO with a challenge (0x41 plus four bytes); the client repeats the request with those bytes appended. Replies too large for one packet arrive split (header FF FF FF FE) and have to be reassembled. A query that "times out" in a naive script is often a challenge the script did not answer.
Two limits of A2S matter for monitoring. The player count is a single byte, so it caps at 255 (Rust works around this by putting exact counts in its tags). And A2S says nothing about performance: no tick rate, no frame time, no lag.
Game port vs query port
The game port carries player traffic. The query port answers the browser. Some games use one port for both; others put the query on a separate port you must also open in your firewall. These are the defaults ServerStats tries (an address you enter yourself always wins):
| Game | Protocol | Default game port | Default query port |
|---|---|---|---|
| CS2, CS:Source, TF2, L4D2, Garry's Mod | A2S | 27015 | 27015 (same) |
| Rust | A2S | 28015 | server.queryport; if unset, 1 + the higher of server.port and rcon.port (28017 with defaults) |
| Valheim | A2S | 2456 | 2457 (needs -public 1) |
| Palworld | A2S | 8211 | 27015 (-queryport) |
| DayZ | A2S | 2302 | 27016 (steamQueryPort) |
| 7 Days to Die | A2S | 26900 | 26901 or 26900 |
| Arma Reforger | A2S | 2001 | 17777 (needs the a2s block in config.json) |
| Squad | A2S | 7787 | 27165 |
| V Rising | A2S | 9876 | 9877 |
| Path of Titans | A2S | 7777 | 7781 (needs [SourceQuery] bEnabled=true in Game.ini) |
| Minecraft Java | Server List Ping (TCP) | 25565 | 25565 (same) |
| Minecraft Bedrock | RakNet ping (UDP) | 19132 | 19132 (same) |
| FiveM, RedM | HTTP /info.json, /dynamic.json | 30120 | 30120 (same) |
Hosts change ports all the time, so check your panel or start-up line before trusting a default. For Rust, read the Facepunch wiki note: server.port and server.queryport can never be the same port.
Other protocols basic mode speaks
Not every game uses A2S. Basic mode also reads:
- Minecraft Java: Server List Ping. A TCP handshake and status request on 25565 returns version, online and max players and the MOTD.
_minecraft._tcpSRV records are followed. (This is not the older GameSpy4 query enabled withenable-query; you do not need that.) - Minecraft Bedrock: RakNet unconnected ping. A UDP ping to 19132 returns a pong string with the MOTD, version and player counts.
- FiveM and RedM: Cfx.re HTTP endpoints.
/dynamic.jsongives the counts;/info.jsongives version and server vars./players.jsonis used only as a fallback, and only its length. - open.mp and SA-MP: the SA-MP query packets (
iandr) on UDP 7777. - BeamMP: the information packet on TCP 30814.
- Assetto Corsa: acServer's HTTP
/INFO(the driver list is never requested). - Satisfactory 1.0+: the Lightweight Query API, which gives state, name and changelist but no player count.
- Terraria: only through TShock's REST status endpoint, which is off by default.
- RAGE:MP and Vintage Story: read from the public master list, so the server must be listed, and there is no response time.
ARK: Survival Ascended and The Isle: Evrima have no public query (they use Epic Online Services matchmaking only), and neither does vanilla Hytale, so basic mode cannot read them. ARK: SA has a log-based sidecar beta instead.
Check a server yourself
You can test a query from any machine outside your network. For Steam games, a few lines of Python with the open-source python-a2s package do it:
pip install python-a2s
python3 -c "import a2s; i = a2s.info(('203.0.113.10', 27015)); print(i.server_name, i.map_name, i.player_count, '/', i.max_players)"Replace the address with your server's public IP and query port. If it times out, work through this list:
- Is the query port open for UDP in the host firewall and any provider firewall?
- Did you use the query port, not the game port or RCON port?
- Is the game's query switched on (Valheim
-public 1, Reforgera2s, Path of TitansSourceQuery)? - Does it answer from outside? A query from the server itself proves little.
For a quick check without a terminal, the free server status checker at /tools/server-status.html runs the same kind of query from our side.
What basic mode records
ServerStats polls each basic-mode server every 60 seconds and stores:
| Data | Detail |
|---|---|
| Players online and max players | Every answered poll, when the protocol reports them |
| Response time | Our query round trip to your server, not player ping |
| Uptime | One sample per answered poll; while offline, a zero for every minute, so uptime stays exact |
| Map and version changes | Recorded as events with the old and new value |
| Offline and online events | Offline after 3 failed polls in a row; online again with the downtime length |
Uptime is shown for 24 hours, 7 days and 30 days, clamped to your plan's history (24 hours on Free, 90 days on Operator, 2 years on Network). When a server stops answering, polling backs off to 2, 4 and 8 minutes, then every 10 minutes.


Player names are never stored. A2S_PLAYER returns names, and Minecraft's status reply can include a player sample; basic mode reads the counts and skips the names without decoding them. No player identifiers or IP addresses are kept.
Limits of basic mode
A public query tells you whether a server is up and how full it is. It cannot tell you:
- Why it lagged. There is no TPS, tick time or lag-spike attribution to a plugin or resource.
- Who played. No sessions, retention, churn or player profiles, because there are no player identities.
- Anything the game does not publish: Satisfactory has no public player count, and master-list games have no response time.
For that you need the agent (a plugin, mod or sidecar). Most supported games have one; see the games list. When you enrol the agent on a basic-mode server, it keeps its id and history and polling stops.
Five games are basic mode only today, with a full agent coming soon: Arma Reforger, RAGE:MP, open.mp, Assetto Corsa and BeamMP. Path of Titans also has a read-only sidecar. Any other Steam-query game (Enshrouded, Soulmask, Icarus and others) also works in basic mode.
Ownership and the address guard
Because basic mode sends packets to addresses people type in, two rules apply.
Public addresses only. Every address is checked before anything is sent, and checked again after DNS resolution on every poll, so a hostname cannot be re-pointed somewhere else later. Private ranges (10/8, 172.16/12, 192.168/16), loopback, link-local, CGNAT, multicast, reserved and documentation ranges and their IPv6 equivalents are all refused. A server on your home LAN has to be reachable on a public IP to be tracked.
A short trial, then proof of ownership. A new server is polled for 24 hours. To keep it, put the token the dashboard gives you (it looks like ss-k7q2mx) anywhere in the server name, hostname or MOTD once. The next poll that sees it verifies the server, and you can remove it afterwards. Enrolling the agent also verifies it.
Alerts from basic mode
A basic-mode server can drive a server offline alert (the message says the public query port stopped answering), a map or version change alert, and threshold alerts on players online, delivered to email or Discord. Lag-spike and join-drop alerts need an agent. The Discord alerts guide walks through setup.
Summary
- The public query is free monitoring you already have: A2S for Steam games, Server List Ping for Minecraft, HTTP for FiveM.
- Find the right query port first; most "server not responding" reports are a closed or wrong port.
- Basic mode gives you players, uptime, response time and version history with nothing installed, and no player names.
- For lag causes and player analytics, add the agent; the server keeps its history.
Counter-Strike 2
Valheim
Palworld
Arma Reforger
Path of Titans
Assetto Corsa
BeamMP
Minecraft