A Python wrapper for the mcstatus.io API.
Project description
MCStatusio
A Python wrapper for the mcstatus.io API that provides an easy way to query Minecraft server status for both Java Edition and Bedrock Edition servers.
Features
- 🎮 Support for both Java Edition and Bedrock Edition servers
- 🔄 Synchronous and asynchronous API support
- 📊 Comprehensive server information (players, version, MOTD, etc.)
- 🚀 Simple and intuitive interface
- 🔧 Type hints for better IDE support
- ⚡ Lightweight with minimal dependencies
Installation
Requirements: Python 3.11 or higher
You can install the package via pip:
pip install mcstatusio
Quick Start
Java Edition Server
from mcstatusio import JavaServer
# Create a server instance (default port is 25565)
server = JavaServer("mc.hypixel.net")
status = server.status()
if status.online:
print(f"Server is online!")
print(f"Players: {status.players.online}/{status.players.max}")
print(f"Version: {status.version.name.clean}")
print(f"MOTD: {status.motd.clean}")
else:
print("Server is offline")
Bedrock Edition Server
from mcstatusio import BedrockServer
# Create a server instance (default port is 19132)
server = BedrockServer("play.cubecraft.net")
status = server.status()
if status.online:
print(f"Server is online!")
print(f"Players: {status.players.online}/{status.players.max}")
print(f"Version: {status.version.name}")
print(f"Edition: {status.edition}")
else:
print("Server is offline")
Usage Examples
Custom Port
You can specify a custom port either in the hostname or as a parameter:
from mcstatusio import JavaServer
# Method 1: Include port in hostname
server = JavaServer("play.example.com:25566")
# Method 2: Pass port as parameter
server = JavaServer("play.example.com", port=25566)
status = server.status()
Accessing Server Information
from mcstatusio import JavaServer
server = JavaServer("mc.hypixel.net")
status = server.status()
if status.online:
# Player information
print(f"Players online: {status.players.online}")
print(f"Max players: {status.players.max}")
# Version information
print(f"Version: {status.version.name.clean}")
print(f"Protocol: {status.version.protocol}")
# Message of the Day
print(f"MOTD (clean): {status.motd.clean}")
print(f"MOTD (raw): {status.motd.raw}")
print(f"MOTD (HTML): {status.motd.html}")
# Server details
print(f"Hostname: {status.hostname}")
print(f"IP Address: {status.ip_address}")
print(f"Port: {status.port}")
# Optional fields (may be None)
if status.software:
print(f"Software: {status.software}")
if status.plugins:
print(f"Plugins: {len(status.plugins)}")
Error Handling
from mcstatusio import JavaServer
from mcstatusio.exceptions import McstatusioTimeoutError, McstatusioConnectionError
server = JavaServer("invalid.server.address")
try:
status = server.status()
if status.online:
print("Server is online")
else:
print("Server is offline")
except McstatusioTimeoutError:
print("Request timed out")
except requests.exceptions.RequestException as e:
print(f"Error querying server: {e}")
Async Usage
For asynchronous applications, use the async_status() method:
import asyncio
from mcstatusio import JavaServer
async def check_server():
server = JavaServer("mc.hypixel.net")
status = await server.async_status()
if status.online:
print(f"Players online: {status.players.online}")
return status
# Run the async function
status = asyncio.run(check_server())
Query Multiple Servers
import asyncio
from mcstatusio import JavaServer
async def check_multiple_servers():
servers = [
JavaServer("mc.hypixel.net"),
JavaServer("play.cubecraft.net"),
JavaServer("mineplex.com"),
]
# Query all servers concurrently
statuses = await asyncio.gather(*[s.async_status() for s in servers])
for server, status in zip(servers, statuses):
if status.online:
print(f"{server.hostname}: {status.players.online} players online")
else:
print(f"{server.hostname}: Offline")
asyncio.run(check_multiple_servers())
Custom Timeout
from mcstatusio import JavaServer
# Set a custom timeout (default is 5 seconds)
server = JavaServer("mc.hypixel.net", timeout=10)
status = server.status()
API Reference
JavaServer
Constructor:
JavaServer(hostname: str, port: int = 25565, timeout: int = 5)
Methods:
status(): Returns server status synchronouslyasync_status(): Returns server status asynchronously
Response Attributes (when online):
online: bool- Whether the server is onlineplayers.online: int- Number of players currently onlineplayers.max: int- Maximum number of playersplayers.sample: list | None- Sample of online players (if available)version.name.clean: str- Clean version stringversion.protocol: int- Protocol version numbermotd.clean: str- Message of the Day (plain text)motd.raw: str- MOTD with formatting codesmotd.html: str- MOTD in HTML formathostname: str- Server hostnameip_address: str- Server IP addressport: int- Server porticon: str | None- Base64-encoded server iconsoftware: str | None- Server software (e.g., "Paper", "Spigot")plugins: list | None- List of plugins (if available)mods: list | None- List of mods (if available)
BedrockServer
Constructor:
BedrockServer(hostname: str, port: int = 19132, timeout: int = 5)
Methods:
status(): Returns server status synchronouslyasync_status(): Returns server status asynchronously
Response Attributes (when online):
online: bool- Whether the server is onlineplayers.online: int- Number of players currently onlineplayers.max: int- Maximum number of playersversion.name: str- Version stringversion.protocol: int- Protocol version numbermotd.clean: str- Message of the Day (plain text)gamemode: str | None- Server gamemode (e.g., "Survival", "Creative")server_id: str | None- Unique server identifieredition: str | None- Server edition ("MCPE" or "MCEE")ip_address: str- Server IP addressport: int- Server port
Documentation
Full documentation is available at Read the Docs.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
Support
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcstatusio-1.0.6.tar.gz.
File metadata
- Download URL: mcstatusio-1.0.6.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30f301ab72f864635af556790a992c60033be6ffe886a47236d8945155c4d1ad
|
|
| MD5 |
f022892be524df2ef4f34ef0367de625
|
|
| BLAKE2b-256 |
8d00a9ed04e08a88aab95650ef46a2a8cb0345e89f37d81a75e7826a05f3162a
|
File details
Details for the file mcstatusio-1.0.6-py3-none-any.whl.
File metadata
- Download URL: mcstatusio-1.0.6-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d67cefe40b831ace8f1caed2de4658394909436ff67171efe07440e0155f489f
|
|
| MD5 |
3d23bda8993ad0fb5a4dca589929c002
|
|
| BLAKE2b-256 |
8bab6f5e3c019ea001dd5a8a329c8e15f08138432fada9fd1ec000dc541d9434
|