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
Server Discovery
Our scanning infrastructure continuously discovers new Minecraft servers through various methods, namely zmap scans from various IPs.
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.
Data Processing
Collected data is processed, validated, and stored in our database. We perform deduplication, data normalization, and quality checks to ensure accuracy.
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
/servers
Retrieve a list of all scanned Minecraft servers with optional filtering and sorting.
Query Parameters
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
๐ซ 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.