Notice: This site is still under heavy development and may contain bugs or incomplete features. We appreciate your patience and feedback as we work to improve the platform.

Documentation

Complete guide to understanding and using MCScans. Learn how our platform works, explore the API, and discover advanced features for Minecraft server analysis.

Overview

MCScans is a comprehensive Minecraft server scanning platform that continuously monitors and analyzes thousands of Minecraft servers across the internet. Our system provides recent data about server status, player counts, versions, and much more.

๐Ÿ” Continous Scanning

Continuous monitoring of Minecraft servers with up-to-date information about player counts, server versions, and online status.

๐Ÿ“Š Comprehensive Data

Detailed server information including MOTD, player lists, protocol versions, and historical data tracking.

๐Ÿ”ง Powerful API

RESTful API with advanced filtering, sorting, and pagination capabilities for seamless integration into your applications.

๐Ÿ“ˆ Historical Archives

Automatic archiving of historical server data, allowing you to track server version shifts, player trends, and server uptime over time.

How It Works

1

Server Discovery

Our scanning infrastructure continuously discovers new Minecraft servers through various methods, namely zmap scans from various IPs.

2

Data Collection

Each discovered server is pinged using the Minecraft Server List Ping packet to gather information such as player count, server version, MOTD, and favicon.

3

Data Processing

Collected data is processed, validated, and stored in our database. We perform deduplication, data normalization, and quality checks to ensure accuracy.

4

API & Web Interface

The processed data is made available through our web interface and RESTful API, allowing users to search, filter, and analyze Minecraft server data.

Scanning Process

Our scanning process is designed to be efficient, respectful, and comprehensive. Here's how we ensure accurate and up-to-date server information:

Scanning Frequency

  • Passive Global: Scanned every 3-7 days
  • Passive China: Scanned every 4-7 days
  • Active Scanning: Planned

Data Points Collected

Server Information

  • โ€ข Server IP and Port
  • โ€ข Protocol Version
  • โ€ข Server Version
  • โ€ข MOTD (Message of the Day)
  • โ€ข Server Favicon

Player Data

  • โ€ข Current Player Count
  • โ€ข Maximum Player Slots
  • โ€ข Online Player List

API Overview

The MCScans API provides programmatic access to our entire database of Minecraft server information. Built with REST principles, it offers intuitive endpoints for searching, filtering, and retrieving server data.

Base URL

https://api.mcscans.fi/public/v1/

๐Ÿš€ Features

  • โ€ข RESTful API design
  • โ€ข JSON response format
  • โ€ข Advanced filtering & sorting
  • โ€ข Pagination support
  • โ€ข Real-time data
  • โ€ข Historical data access

๐Ÿ“Š Response Format

  • โ€ข Consistent JSON structure
  • โ€ข Error handling with HTTP codes
  • โ€ข Metadata for pagination
  • โ€ข Timestamps in ISO 8601
  • โ€ข UTF-8 encoding

API Endpoints

GET /servers

Retrieve a list of all scanned Minecraft servers with optional filtering and sorting.

Query Parameters

page=1 // Page number (default: 1)
edition="Java" | "Bedrock" // Filter by game edition
software="Paper" // Filter by server software
version="1.20.1" // Filter by version
source="Global" | "China" // Filter by source
sort="player" | "proto" // Sort by: player count, protocol version
authMode="Online" | "Offline" | "Whitelist" // Filter by authentication mode
geo=true // Enable geographic location lookup

Example Response

{
    "totalServers": 1000,
    "servers": [
        {
            "hostname": "172.24.67.89",
            "port": 25565,
            "motd": "Welcome to MCScans!",
            "favicon": {
                "icon": "data:image/png;base64,...",
                "hash": "a498775a"
            },
            "pluginCount": null,
            "playerStats": {
                "maxPlayers": 200000,
                "onlinePlayers": 47823
            },
            "ping": {
                "latency": 0,
                "protocol": 109,
            }
            "players": {
                "ping": [
                    {
                        "uuid": "08dae07c-2bb3-333f-955c-fdef1f438c97",
                        "username": "Thienanbell"
                    }
                ],
                "real": []
            }
            "modInfo": [
                {
                "name": "Create",
                "version": "1.0.0"
                }
            ],
            "authMode": 1, // 0 = Offline, 1 = Online, 2 = Whitelist
            "version": "1.20.4",
            "software": "Forge",
            "timestamp": "2025-06-17T12:40:50.732180",
            "serverType": "",
            "tags": ["historical", "China"],
            "geo": { ... } // Optional geographic data
        },
        { ... }
    ]
}

Authentication

Currently, the MCScans API is publicly accessible without authentication. However, we plan to implement API keys for enhanced features and higher rate limits in the future.

๐Ÿ”ฎ Future Authentication

We're working on implementing API key authentication to provide:

  • โ€ข Higher rate limits for authenticated users
  • โ€ข Increased results per page (20 -> 50)

Current Usage

For now, simply make requests to our API endpoints without any authentication headers:

curl -X GET "https://api.mcscans.fi/public/v1/servers" \
  -H "Accept: application/json"

Rate Limiting

To ensure fair usage and maintain service quality, we implement rate limiting on our API endpoints.

โšก Current Limits

  • Requests per minute: 60
  • Requests per hour: 1,000
  • Concurrent connections: 5
  • Burst limit: 10 requests

๐Ÿ“Š Response Headers

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640995200

๐Ÿšซ Rate Limit Exceeded

When you exceed the rate limit, you'll receive a 429 status code with the following response:

{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message: "Rate limit exceeded: CONTEXT.MAX requests per CONTEXT.AFTER",
  "retryAfter": CONTEXT.AFTER
}

Search & Filtering

MCScans provides powerful search and filtering capabilities to help you find exactly the servers you're looking for, whether through our web interface or API.

๐Ÿ” Search Types

  • Regex Search:
    Search in server ip, port, software, version, motd.

๐ŸŽฏ Filter Options

  • Software:
    BungeeCord, Paper, Spigot, Forge, etc.
  • Version:
    Minecraft version (e.g., 1.20.4)
  • Source:
    Either Global or China

Advanced Search Examples

Find Popular Survival Servers

GET /servers?query=survival&sort=player

Find 1.20 Servers with PvP

GET /servers?query=pvp&version=1.20

Data Sorting

Sort server results by various criteria to find the most relevant servers for your needs.

๐Ÿ‘ฅ Player Count

Sort by current online players

?sort=player

๐ŸŽฎ Protocol Version

Sort by Minecraft version

?sort=proto

๐Ÿ“ถ Timestamp

Sort by last seen timestamp

?sort=timestamp

Historical Records

MCScans automatically archives historical server data, providing valuable insights into server trends, player growth, and long-term statistics.

โœจ New in v1.0.1

Servers that are no longer detected by our scanners are now automatically archived while remaining accessible through both the API and web interface.

๐Ÿ“Š What We Track

The same data as an active server, simply stored for later use.

๐Ÿ” Archive Status

  • โ— Active: Seen in last scan
  • โ— Historical: Legacy data only

Access Historical Data

Records that are historical will have the "tags" property that includes the "historical" tag.

Data Formats

Understanding the structure and format of data returned by MCScans API endpoints.

Server Object Structure

{
    "hostname": "172.24.67.89",
    "port": 25565,
    "motd": "Welcome to MCScans!",
    "favicon": {
        "icon": "data:image/png;base64,...",
        "hash": "a498775a"
    },
    "pluginCount": null,
    "playerStats": {
        "maxPlayers": 200000,
        "onlinePlayers": 47823
    },
    "ping": {
        "latency": 0,
        "protocol": 109
    },
    "players": {
        "ping": [
            {
                "uuid": "08dae07c-2bb3-333f-955c-fdef1f438c97",
                "username": "Thienanbell"
            }
        ],
        "real": []
    },
    "modInfo": [
        {
            "name": "Create",
            "version": "1.0.0"
        }
    ],
    "authMode": null,
    "version": "1.20.4",
    "software": "Forge",
    "timestamp": "2025-06-17T12:40:50.732180",
    "serverType": "",
    "tags": ["historical", "China"]
}

๐Ÿ“… Timestamp Format

All timestamps use ISO 8601 format:

"2025-06-18T14:45:00Z"

UTC timezone, with millisecond precision when available

๐ŸŒˆ MOTD Formatting

Two format options:

  • motd: Original with ยง codes
  • motd_normalized: Original with ยง codes but converts special fancy characters to normal characters, useful for text processing

Integration Guide

Learn how to integrate MCScans API into your applications with these practical examples and best practices.

๐ŸŸจ JavaScript Example

async function getPopularServers() {
  try {
    const response = await fetch(
      'https://api.mcscans.fi/public/v1/servers?' +
      'sort=player&software=Paper&query=SMP'
    );
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    return data.data;
  } catch (error) {
    console.error('Error fetching servers:', error);
    return [];
  }
}

๐Ÿ’ก Best Practices

  • โ€ข Respect rate limits: Implement exponential backoff for failed requests
  • โ€ข Cache responses: Store frequently accessed data locally
  • โ€ข Handle errors gracefully: Always check HTTP status codes
  • โ€ข Monitor usage: Check rate limit headers in responses
  • โ€ข Validate data: Servers may go offline between requests
  • โ€ข Use our public dataset: Instead of scraping our entire API, just download the public dataset on 0xacab

๐Ÿ”ง Common Use Cases

Attack Prevention

Detect which servers are accidentally exposed

Monitoring Tools

Track server uptime and player trends

Analytics Dashboards

Visualize Minecraft community statistics

Discord Bots

Integrate our API to provide info in Discord

Data Removal

Problem: I want to remove my server data from MCScans

MCScans only scans publicly accessible Minecraft servers โ€” similar to how search engines index public websites. If your server is publicly reachable, we consider it fair game for passive data collection. That said, we understand some server owners may have valid concerns. While we donโ€™t offer blanket removal, weโ€™re open to reviewing exceptional cases. If you believe you have a compelling reason for removal, feel free to contact us through DMs on discord.

Query Modes

Two query modes are available for querying the MCScans database.

This feature is not available via the public API route, only via the web interface.

๐Ÿ” Legacy Search

Simple text search across multiple fields:

Searches: hostname, ip, port, software, version, serverType, motd, motd_normalized

Match: Case-insensitive partial matching (exact match for port)

survival

Select all servers where any field contains "survival"

โšก Modern Search

Advanced syntax with operators and field targeting:

record.hostname="103.1.215.33"

Select all servers where hostname equals "103.1.215.33"

record.motd="Invalid hostname%"

Select all servers where MOTD starts with "Invalid hostname"

record.version!="TCPShield.com"

Select all servers where version is not "TCPShield.com"

record.hostname="103.1.215.33" AND record.port=25565

Select all servers where hostname is "103.1.215.33" and port is 25565

record.tags CONTAINS ["China"]

Select all servers where tags array contains "China"

record.tags NOT CONTAINS ["China", "historical"]

Select all servers where tags array does not contain "China" or "historical"

record.ping.protocol>=700

Select all servers where ping protocol version is 700 or higher

NOT record.motd="A minecraft%"

Select all servers where MOTD does not start with "A minecraft"

โš ๏ธ Query Type Auto-Inference

The query type is automatically inferred based on the syntax used and does not need to be selected explicitly.