Server Query Protocol (SQP)
Last updated: May 29, 2026
The Server Query Protocol (SQP) allows clients to retrieve information about a running game server using UDP/IP packets.
A client initiates queries by sending a ChallengeRequest to the server. In response, the server sends a ChallengeResponse that includes a ChallengeId. After the client receives the ChallengeResponse, it can continue to query the server for information.
Supported information
Game server state information that SQP supports includes:
Server name: The name of the game server
Build ID: The identifier of the game image the game server is running
Current players: The current number of connected players
Max players: The maximum number of players that can join the game server
IP address: The IP address of the machine the game server is hosted on
Port: The port by which clients can connect to the specific game server on the host machine
Game type: The game that the game server is running
Map: The game map that's currently loaded on the game server
Note: SQP works with the Multiplay Hosting game server monitoring process to ensure reports by the game server match the information in the platform's database.
Requirements
Before implementing SQP as the game server query protocol, you must populate the ServerInfoData object with all the game server information on the game client end. This ensures the game server reports the correct information.
Reference implementation
Refer to go-svrquery for an example implementation of SQP. go-svrquery is a Golang client for talking to game servers using various query protocols, including SQP.
Data types
All server queries consist of five basic types of data packed together into a data stream. All types are big-endian.
Request types
A client can make the following types of requests to a server:
Packet types
The following table shows the distinct types of SQP packets:
Headers
All SQP packets, whether requests or responses, contain a header with the following data:
Challenge numbers
SQP uses a challenge number, which is a random 32-bit integer, to ensure the client making query requests is the same client that received the challenge number.
When a client first sends a request to a server, the server randomly selects the challenge number and includes it in the packet header. The client must then include the same challenge number in the header of all following requests.
ServerInfo response format
The ServerInfo response includes: