返回首页

API 文档

Minecraft 服务器信息查询接口 — HTTP GET / UTF-8 JSON

基础信息

说明当前 API 版本为 v1,字段变更会向下兼容。如有破坏性变更将通过新版本路径提供。
Base URLhttps://mca.umrc.cn
端点/api/query.php
请求方式GET
数据格式application/json; charset=utf-8
域名绑定仅接受 Host 头为 mca.umrc.cn 的请求
CORSAccess-Control-Allow-Origin: *
限流单 IP 每分钟 120 次

请求参数

参数类型必填描述
host string 服务器地址。支持域名、IPv4、[::1] 格式 IPv6。默认端口 25565,可用 域名:端口[IPv6]:端口 指定自定义端口,如 play.example.com:25566

请求示例

示例中的 play.example.com 为占位地址,请替换为真实服务器域名或 IP。

方式一:浏览器直接访问

https://mca.umrc.cn/api/query.php?host=play.example.com

浏览器直接打开即可查询,无需额外参数。

方式二:命令行

curl "https://mca.umrc.cn/api/query.php?host=play.example.com"

频繁请求会触发限流(每分钟 120 次),请合理控制频率。

方式三:嵌入式组件

<script src="https://mca.umrc.cn/mcquery.js" host="play.example.com"></script>
<div mc-online></div>
<div mc-online mc-field="max"></div>
<div mc-online mc-field="latency"></div>

支持的 mc-field 值:online、max、latency、version、motd、type

成功响应

{
    "success": true,
    "data": {
        "host":           "play.example.com",
        "port":           25565,
        "version":        "Paper 1.20.4",
        "protocol":       765,
        "players_online": 42,
        "players_max":    100,
        "player_sample":  [
            { "name": "Steve", "id": "8667ba71-b85a-4004-9b54-0cceb1e2f1b6", "online_mode": true },
            { "name": "Alex",  "id": "ca2b4b4c-1c3a-4a1a-8b2c-1e2f3a4b5c6d", "online_mode": true }
        ],
        "motd":           "<span style=\"color:#55FF55\">Welcome</span><span style=\"color:#FF5555\"> to my server!</span>",
        "motd_plain":     "Welcome to my server!",
        "favicon":        "iVBORw0KGgoAAAANS...",
        "favicon_mime":   "image/png",
        "latency":        23.5,
        "server_type":    "Paper",
        "modinfo":        null,
        "location":       "广东"
    },
    "rate_limit": {
        "remaining": 119
    }
}

响应字段说明

字段类型说明
successbool请求是否成功
data.hoststring查询的服务器地址
data.portint服务器端口
data.versionstring服务器版本名称(如 Paper 1.20.4)
data.protocolint协议版本号
data.players_onlineint当前在线人数
data.players_maxint最大玩家数
data.player_samplearray在线玩家样例。每个元素包含 name、id(UUID)、online_mode(true=正版/false=离线)。头像可通过 Cravatar 获取:正版玩家 https://cravatar.eu/avatar/{uuid去除横杠}/32.png,离线玩家 https://cravatar.eu/avatar/MHF_Steve/32.png。1.19+ 服务器可能不返回玩家列表,此时为空数组
data.motdstringHTML 格式的服务器 MOTD(§ 颜色码和 JSON 格式均已转为 HTML span)
data.motd_plainstring纯文本格式的 MOTD(去除所有颜色码和格式)
data.server_typestring服务器类型。支持识别:Paper、Spigot、Purpur、BungeeCord、Waterfall、Velocity、Pufferfish、Folia、Forge、Vanilla
data.faviconstringBase64 编码的服务器图标(不含 data: 前缀)
data.favicon_mimestring图标 MIME 类型(如 image/png),前端拼接 data:{mime};base64,{favicon} 使用
data.latencyfloatTCP 往返延迟,单位 ms,精确到 0.1
data.modinfoobject/null模组信息。Forge 服务器返回 {"type":"FML","modList":[...]},原版返回 null
data.locationstring/null服务器 IP 所在省份(通过 ip-api.com 查询),查询失败时为 null
rate_limit.remainingint本 IP 当前窗口剩余可用请求次数

错误码

HTTP错误信息触发条件建议
400请提供服务器地址缺少 host 参数检查参数,不重试
400服务器地址格式无效host 不符合域名/IP 规范修正格式,不重试
403请求被拒绝:非法的域名来源Host 头不是 mca.umrc.cn检查请求目标域名
403请求被拒绝:IP 不一致,疑似会话劫持请求来源 IP 发生变化检查网络环境
403请求被拒绝:不支持的客户端User-Agent 被拦截更换 UA,不重试
429请求过于频繁单 IP 超过每分钟 120 次等待 retry_after 秒后重试
502无法连接到服务器目标 MC 服务器无响应或超时检查服务器地址是否正确

安全机制

1. 域名强绑定

API 仅接受 HTTP Host 头为 mca.umrc.cn 的请求。直接使用 IP 地址或其他域名访问将被 403 拒绝。CORS 已放开(Access-Control-Allow-Origin: *),允许任意来源的前端 JS 跨域调用,但请求目标必须是 mca.umrc.cn

2. IP 对账防劫持

每 2 次请求校验一次客户端 IP 是否与之前记录一致。若 IP 变化,立即销毁 session 并返回 403。正常用户通过固定网络访问不受影响。

3. 请求限流

基于 IP 的滑动窗口限流:每分钟 120 次。超限后 IP 被临时封禁 300 秒。响应中返回 rate_limit.remaining 标识剩余次数,超限时附带 retry_after 秒数。

4. 客户端过滤

拦截常见爬虫工具的 User-Agent(wget、python-requests、Go-http-client、scrapy 等)。浏览器和标准 HTTP 客户端不受影响。

5. CDN 适配

兼容阿里云 CDN、腾讯云 CDN、Cloudflare 等主流 CDN 的 IP 透传头,确保限流和 IP 对账基于真实客户端 IP。

注意事项

  • 高版本服务器(1.19+)可能不返回在线玩家列表,player_sample 此时为空数组
  • 服务器图标以 Base64 返回,前端用 data:{mime};base64,{favicon} 渲染
  • MOTD 同时支持传统 § 颜色码和 1.19+ JSON 格式,自动转换为 HTML
  • SRV 记录自动解析:端口为 25565 时会查询 _minecraft._tcp DNS SRV 记录
  • 地理位置数据来源于 ip-api.com,仅返回省份信息
  • 禁止利用本 API 进行大规模爬取、商业转售或其他未经授权的用途

联系与支持