loading…
Search for a command to run...
loading…
Provides tools for retrieving Minecraft Java and Bedrock server status via the mcstatus.xyz API. It also includes advanced network diagnostic features such as D
Provides tools for retrieving Minecraft Java and Bedrock server status via the mcstatus.xyz API. It also includes advanced network diagnostic features such as DNS resolution, GeoIP lookups, and BGP/ASN provider information.
MCP server (Python) with tools for https://mcstatus.xyz/api and Kuma status-page API.
get_minecraft_status - Minecraft server status (Java/Bedrock), endpoint /api/statusget_java_status - Java status shortcut, endpoint /api/statusget_bedrock_status - Bedrock status shortcut, endpoint /api/statusget_srv_records - SRV records, endpoint /api/srvresolve_dns - DNS resolution and provider info, endpoint /api/dnsrdns - reverse DNS (PTR) lookup for IPgeoip_maxmind - GeoIP lookup using local MaxMind GeoLite2 databaseget_ip_provider_info - provider/operator info for IP via bgp.tools whois + ASN databaseis_ip_anycast - check if player IP is Anycast by curated known-node listget_bgp_info - BGP/ASN details for an IP, endpoint /api/bgpcheck_node_status - find Kuma node by name or short alias (e.g., s3, br4) and return UP/DOWN/PENDING/MAINTENANCEcheck_node_status For GPTUse this tool when you need node state from Kuma by human-friendly alias.
Input parameters:
node_name (string, required) - full node name or short alias.timeout_ms (integer, optional, default 4000, must be > 0).Supported alias patterns:
s3.joinserver.xyzs3 for s3.joinserver.xyz-, _, or space: br4BR4Node-x21, node x 21, Nodex21, Нода-x21 -> x21.oinserver.xyzx 21 -> x21.oinserver.xyzStatus mapping:
1 -> UP0 -> DOWN2 -> PENDINGMAINTENANCEResult format (ok = true):
{
"ok": true,
"input_node_name": "x 21",
"interpreted_query": {
"normalized": "x21",
"core_parts": ["x", "21"],
"core_fingerprint": "x21"
},
"node_name": "x21.oinserver.xyz",
"node_id": 386,
"matched_by": "short_hostname_normalized",
"match_priority": 3,
"status": "DOWN",
"status_code": 0,
"heartbeat_time": "2026-03-15 13:52:53",
"message": "",
"ping": null,
"has_heartbeat": true,
"matched_by_case_insensitive_name": true
}
Result format (ok = false):
{
"ok": false,
"input_node_name": "unknown",
"interpreted_query": {
"normalized": "unknown",
"core_parts": ["unknown"],
"core_fingerprint": "unknown"
},
"error": "Node with this name/alias was not found on Kuma status page."
}
{
"ok": true,
"input_node_name": "fra",
"interpreted_query": {
"normalized": "fra",
"core_parts": ["fra"],
"core_fingerprint": "fra"
},
"ambiguous": true,
"match_count": 2,
"match_priority": 6,
"matched_by_modes": ["core_terms_subset"],
"matches": [
{
"node_name": "fra9.joinserver.xyz",
"node_id": 245,
"matched_by": "core_terms_subset",
"match_priority": 6,
"status": "UP",
"status_code": 1
},
{
"node_name": "MySQL-FRA9",
"node_id": 290,
"matched_by": "core_terms_subset",
"match_priority": 6,
"status": "UP",
"status_code": 1
}
]
}
GPT usage flow:
s3, br4, fra28, x 21, Node-x21.matches, inspect returned statuses directly; broad queries now return all best matches.Compatibility note:
content and structuredContent, which avoids "returned no result" behavior in clients that ignore empty structured-only replies.mcstatus_mcp/client.py - typed API client (MCStatusApiClient)mcstatus_mcp/tools.py - abstract BaseMCStatusTool + one class per MCP toolmcstatus_mcp/server.py - MCP app bootstrap and tool registrationEach tool is implemented as a class that inherits from BaseMCStatusTool.
All tools depend on a shared MCStatusApiClient instance.
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
docker compose up -d --build
Stop:
docker compose down
Default MCP endpoint from compose:
http://localhost:8000/mcp
Default transport is stdio:
.\.venv\Scripts\python.exe main.py
Optional transport override:
$env:MCP_TRANSPORT="sse"
.\.venv\Scripts\python.exe main.py
Allowed MCP_TRANSPORT values: stdio, sse, streamable-http.
{
"mcpServers": {
"mcstatus": {
"command": "C:\\Users\\rakse\\PycharmProjects\\MCP-MCSTATUS\\.venv\\Scripts\\python.exe",
"args": ["C:\\Users\\rakse\\PycharmProjects\\MCP-MCSTATUS\\main.py"]
}
}
}
MCP_TRANSPORT - MCP transport (default: stdio)MCSTATUS_API_BASE_URL - API base URL (default: https://mcstatus.xyz/api)KUMA_API_BASE_URL - Kuma API base URL for check_node_status (default: http://status.dsts.cloud:3001/api)MCSTATUS_TIMEOUT_MS - default timeout in milliseconds for tools (default: 4000)MCP_HOST - host for HTTP transports (sse and streamable-http, default: 127.0.0.1)MCP_PORT - port for HTTP transports (default: 8000)MCP_STREAMABLE_HTTP_PATH - streamable HTTP path (default: /mcp)MCP_SSE_PATH - SSE path (default: /sse)MAXMIND_LICENSE_KEY - MaxMind license key for GeoLite2 download (required for auto-download if DB is missing/outdated)MAXMIND_DB_PATH - local path to .mmdb file (default: data/GeoLite2-City.mmdb)MAXMIND_EDITION_ID - MaxMind edition ID (default: GeoLite2-City)MAXMIND_REFRESH_HOURS - database refresh interval in hours; 0 disables periodic refresh (default: 24)BGPTOOLS_USER_AGENT - descriptive user-agent with contact for downloading https://bgp.tools/asns.csv (recommended)BGPTOOLS_ASN_DB_URL - ASN CSV source URL (default: https://bgp.tools/asns.csv)BGPTOOLS_ASN_DB_PATH - local path to ASN CSV cache (default: data/bgp_tools_asns.csv)BGPTOOLS_ASN_REFRESH_HOURS - ASN CSV refresh interval in hours; 0 disables periodic refresh (default: 24)BGPTOOLS_WHOIS_HOST - bgp.tools whois host (default: bgp.tools)BGPTOOLS_WHOIS_PORT - bgp.tools whois port (default: 43)Important: OpenAI MCP integration uses remote MCP servers.
Local stdio servers are good for local dev/testing, but for OpenAI binding you should expose a public HTTPS endpoint.
$env:MCP_TRANSPORT="streamable-http"
$env:MCP_HOST="0.0.0.0"
$env:MCP_PORT="8000"
.\.venv\Scripts\python.exe main.py
After deployment your MCP URL will look like:
https://your-domain.example/mcp
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4.1",
tools=[
{
"type": "mcp",
"server_label": "mcstatus",
"server_url": "https://your-domain.example/mcp",
"require_approval": "never",
"allowed_tools": [
"get_minecraft_status",
"get_java_status",
"get_bedrock_status",
"get_srv_records",
"resolve_dns",
"rdns",
"geoip_maxmind",
"get_ip_provider_info",
"is_ip_anycast",
"get_bgp_info",
"check_node_status",
],
}
],
input="Check DNS and Java status for mc.hypixel.net",
)
print(response.output_text)
Reference docs:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-mcstatus": {
"command": "npx",
"args": []
}
}
}