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 viabgp.toolswhois + 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 returnUP/DOWN/PENDING/MAINTENANCE
Use 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, default4000, must be> 0).
Supported alias patterns:
- full name:
s3.joinserver.xyz - short hostname before first dot:
s3fors3.joinserver.xyz - token from short name split by
-,_, or space:br4 - case-insensitive variants:
BR4 - normalized alias (non-alphanumeric chars ignored in fallback matching)
Status mapping:
1->UP0->DOWN2->PENDING- any other/unknown ->
MAINTENANCE
Result format (ok = true):
{
"ok": true,
"input_node_name": "s3",
"node_name": "s3.joinserver.xyz",
"node_id": 124,
"matched_by": "short_hostname",
"status": "DOWN",
"status_code": 0,
"heartbeat_time": "2026-02-19 11:48:48",
"message": "",
"ping": null,
"has_heartbeat": true,
"matched_by_case_insensitive_name": true
}Result format (ok = false):
- not found:
{"ok": false, "input_node_name": "unknown", "error": "Node with this name/alias was not found on Kuma status page."}- ambiguous alias:
{
"ok": false,
"input_node_name": "hmfra1",
"error": "Multiple nodes matched this name/alias at the same confidence level. Use a more specific node name.",
"matches": [{"id": 305, "name": "HMFRA1-7950"}, {"id": 304, "name": "HMFRA1-R9"}]
}GPT usage flow:
- Try short alias first (
s3,br4,fra28). - If ambiguous, retry with a more specific name from
matches. - If not found, retry with full node name.
mcstatus_mcp/client.py- typed API client (MCStatusApiClient)mcstatus_mcp/tools.py- abstractBaseMCStatusTool+ one class per MCP toolmcstatus_mcp/server.py- MCP app bootstrap and tool registration
Each 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.txtdocker compose up -d --buildStop:
docker compose downDefault MCP endpoint from compose:
http://localhost:8000/mcp
Default transport is stdio:
.\.venv\Scripts\python.exe main.pyOptional transport override:
$env:MCP_TRANSPORT="sse"
.\.venv\Scripts\python.exe main.pyAllowed 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 forcheck_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 (sseandstreamable-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.mmdbfile (default:data/GeoLite2-City.mmdb)MAXMIND_EDITION_ID- MaxMind edition ID (default:GeoLite2-City)MAXMIND_REFRESH_HOURS- database refresh interval in hours;0disables periodic refresh (default:24)BGPTOOLS_USER_AGENT- descriptive user-agent with contact for downloadinghttps://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;0disables 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.pyAfter 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)- Open ChatGPT connector settings.
- Add a custom connector using your remote MCP URL.
- Select tools and permissions.
Reference docs: