<div align="center">
📋 MCSL — MineCraftServerLogs
The fastest way to capture, analyse, and share your Minecraft server logs.
Minecraft
Platform
License
Powered by HasteLog
bStats
---
> MCSL is a lightweight Minecraft server plugin that gives server administrators a single command to upload, parse, redact, and share server logs — all powered by MCSL, a fast and free log-sharing service. No more copy-pasting giant log files into chat or Discord. One command and your log is live on the web, ready to share with support staff, developers, or your community.
---
``` [17:34:12 INFO]: ────────────────────────────────────────────────── [17:34:12 INFO]: MCSL — MineCraftServerLogs v1.0.0 [17:34:12 INFO]: Powered by https://logs.protectcord.com [17:34:12 INFO]: ────────────────────────────────────────────────── [17:34:12 INFO]: /mcsl upload [lines|all|errors] — Upload latest.log to HasteLog [17:34:12 INFO]: /mcsl info — Print server info summary [17:34:12 INFO]: /mcsl errors [lines] — Show recent errors in chat [17:34:12 INFO]: /mcsl players — Show player events from log [17:34:12 INFO]: /mcsl plugins — List all plugins & status [17:34:12 INFO]: /mcsl share — Upload full diagnostic report [17:34:12 INFO]: /mcsl crash — Upload latest crash report [17:34:12 INFO]: ────────────────────────────────────────────────── ```
</div>
---
🎯 Who Is This Plugin For?
MCSL is built specifically for server administrators and developers who spend time diagnosing issues on Bukkit, Spigot, Paper, Purpur, or Folia servers.
| If you are... | MCSL helps you... | |---|---| | A hosting provider with a broken plugin | Upload errors instantly and share the link with the plugin's support team | | A hosting provider debugging your own plugin | Get a full diagnostic report — version, all loaded plugins, errors, TPS — in one link | | A hosting provider managing multiple servers | Run `/mcsl share` on any node and get a single URL to compare behaviour across servers | | A hosting provider on a help Discord | Ask users to run `/mcsl upload errors` instead of pasting 3,000 lines of log | | A hosting provider | Include MCSL on your pre-installed plugin list — your clients get self-service diagnostics |
---
✨ Features
🔼 One-Command Log Upload
Upload your entire `latest.log` — or just the last N lines, or only errors — to logs.protectcord.com with a single command. You get back a short, shareable URL that you can click directly from your in-game chat.
🔍 Intelligent Log Parsing
MCSL automatically scans your logs and categorises what it finds: - Crash signals — full stack traces, `[ERROR]`, `[SEVERE]` entries - Crash signals — `[WARN]` and `[WARNING]` entries - Crash signals — which plugins enabled, disabled, or failed to load - Crash signals — join, leave, kick, and ban entries - Crash signals — Minecraft crash report headers and unhandled exceptions
🔒 Privacy-First Redaction
Before anything leaves your server, MCSL scrubs sensitive data: - IPv4 and IPv6 addresses → `[REDACTED_IP]` - JWT tokens → `[REDACTED_TOKEN]` - API keys and Bearer tokens → `[REDACTED_KEY]` - JDBC/database passwords → `password=[REDACTED]` - Your own custom regex patterns (defined in `config.yml`)
All redaction is configurable and can be turned on or off per category. Player IPs are redacted by default.
📊 Full Server Diagnostic Reports
`/mcsl share` produces a rich, structured report including: - Server software, version, and full build string - All loaded plugins with version and enabled/disabled status - All loaded mods (Forge 1.12, Forge 1.13+, and Fabric all supported via reflection) - Memory usage, TPS (1m/5m/15m), and server uptime - MOTD, gamemode, difficulty, online mode, max players - Parsed errors, warnings, and player events - The full log tail
💥 Automatic Crash Detection
If your server crashes unexpectedly, MCSL's JVM shutdown hook fires automatically, uploads the last 1,000 log lines along with the parsed error summary, and logs the HasteLog URL to console — even if the Bukkit scheduler is no longer running. Online operators receive an in-game notification with the link.
⚡ Fully Asynchronous
Every upload runs off the main server thread. Your TPS will never drop because of a log upload.
🧩 Mod Server Support
MCSL detects and lists mods on: - Fabric (1.12.x via `fml.common.Loader`, 1.13+ via `fml.ModList`) - Fabric (via `net.fabricmc.loader.api.FabricLoader`)
---
📸 In Action
`/mcsl upload 500`
``` [MCSL] Uploading last 500 lines to HasteLog... [MCSL] Uploaded (last 500 lines) successfully! [MCSL] View report: https://logs.protectcord.com/GvuuyVDqN2 ``` > The URL is clickable in-game — click it to open in your browser.
---
`/mcsl info`
``` ────────────────────────────────────────────────── Server Information ────────────────────────────────────────────────── Name: My Minecraft Server Software: Paper 1.20.4 Version: git-Paper-388 (MC: 1.20.4) Port: 25565 Online Mode: true Gamemode: survival Difficulty: normal Max Players: 100 Online: 12 / 100 Memory: 1842MB used / 4096MB max (committed: 2048MB) Uptime: 6h 34m 12s TPS: 19.98 / 19.97 / 19.95 (1m/5m/15m) Plugins: 32 enabled / 33 total ────────────────────────────────────────────────── ```
---
`/mcsl plugins`
``` ────────────────────────────────────────────────── Plugins — 32 enabled / 33 total ────────────────────────────────────────────────── [+] EssentialsX v2.20.1 by EssentialsX Team [+] LuckPerms v5.4.108 by Luck [+] Vault v1.7.3 by MilkBowl [+] WorldEdit v7.3.1 by sk89q [-] BrokenPlugin v1.0.0 by SomeAuthor ────────────────────────────────────────────────── ``` > `[+]` = enabled, `[-]` = disabled/failed to load
---
`/mcsl errors`
``` [MCSL] Found 3 errors and 7 warnings in the last 500 lines. [MCSL] Last 3 errors: [ERROR] Could not load 'plugins/BrokenPlugin.jar' in folder 'plugins' org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml [ERROR] Error occurred while enabling BrokenPlugin v1.0.0 (Is it up to date?) [MCSL] Use /mcsl upload errors to upload the full error log. ```
---
Uploaded Report (example)
``` ════════════════════════════════════════════════════════════ MCSL — Server Diagnostic Report ════════════════════════════════════════════════════════════
Generated : 2026-04-20 17:34:12 UTC Generator : MCSL v1.0.0 (https://logs.protectcord.com)
SERVER INFORMATION ──────────────────────────────────────────────────────────── Name : My Minecraft Server Software : Paper 1.20.4 Full Version : git-Paper-388 (MC: 1.20.4) MOTD : Welcome to My Server Online Mode : true Port : 25565 Max Players : 100 Online Now : 12 / 100 Memory : 1842MB used / 4096MB max Uptime : 6h 34m 12s TPS : 19.98 / 19.97 / 19.95
PLUGINS (32 enabled / 33 total) ──────────────────────────────────────────────────────────── [+] EssentialsX v2.20.1 [+] LuckPerms v5.4.108 [-] BrokenPlugin v1.0.0 ← DISABLED
ERRORS & EXCEPTIONS (3 found) ──────────────────────────────────────────────────────────── [ERROR] Could not load 'plugins/BrokenPlugin.jar' ...
FULL LOG (500 lines) ──────────────────────────────────────────────────────────── ... (redacted log content) ... ```
---
🚀 Installation
1. Download `MCSL-1.0.0.jar` from the Releases tab 2. Drop it into your server's `/plugins/` folder 3. Restart or reload your server 4. A `plugins/MCSL/config.yml` will be generated automatically 5. Run `/mcsl help` in-game or from console
No configuration required out of the box. The plugin ships with a pre-configured API key and sane defaults.
Requirements
| Requirement | Version | |---|---| | Java | 8 or newer | | Server | Bukkit / Spigot / Paper / Purpur / Folia | | Minecraft | 1.8.8 — 1.21.x |
---
⚙️ Configuration
`plugins/MCSL/config.yml` is generated on first run. Every option is documented inline.
```yaml
HasteLog API settings
api: timeout-ms: 50000 # HTTP request timeout
Privacy & redaction
redaction: enabled: true # Master toggle redact-player-ips: true # Hide IPv4/IPv6 addresses redact-server-ip: false # Hide the server's own IP (for /mcsl share) redact-api-keys: true # Hide JWT tokens, Bearer keys, sk- keys, etc. custom-patterns: [] # Your own regex patterns, e.g. "password=[^\s]+"
Log upload behaviour
upload: default-lines: 25000 # Lines uploaded when no argument is given include-server-info-header: true include-plugin-list: true include-mod-list: true async: true # Always recommended
Automatic actions
auto: upload-on-crash: true # Auto-upload on abnormal server exit upload-on-start: false # Upload a summary when the server starts notify-ops-on-crash-upload: true
/mcsl share options
share: include-server-ip: true include-port: true include-player-count: true include-performance: true
Chat formatting
messages: prefix: "&8[&bMCSL&8]&r " ```
Live Config Changes
You can change most settings without restarting: ``` /mcsl config redaction.redact-player-ips false /mcsl config upload.default-lines 1000 /mcsl config auto.upload-on-crash false /mcsl reload ```
> ⚠️ The API URL and API key are baked into the JAR and cannot be changed through config. This is intentional — it prevents misconfiguration and keeps the global key secure.
---
📖 Commands Reference
All commands require the `mcsl.use` permission (op by default).
`/mcsl upload [argument]`
Uploads `latest.log` to HasteLog and returns a clickable URL.
| Argument | Behaviour | |---|---| | *(none)* | Upload the last `upload.default-lines` lines (default: 25,000) | | `500` | Upload the last 500 lines | | `all` | Upload the entire log file | | `errors` | Upload only lines containing errors or warnings |
Example: ``` /mcsl upload 1000 /mcsl upload errors /mcsl upload all ```
---
`/mcsl share`
Generates and uploads a full structured diagnostic report — server info, plugin list, mod list, TPS, memory, errors, warnings, player events, and the full log tail — in a single HasteLog document.
This is the command to use when asking for help. Share the link with a support team, developer, or community Discord and they have everything they need to diagnose your issue.
---
`/mcsl info`
Prints a formatted server information panel directly to your chat or console. Includes software version, performance metrics, player count, and plugin summary. Nothing is uploaded — it's local only.
---
`/mcsl errors [lines]`
Scans the last N lines of `latest.log` and prints a summary of errors and warnings directly in chat. Shows the last 10 errors inline. Suggests `/mcsl upload errors` if there are more.
``` /mcsl errors → scan last 25,000 lines /mcsl errors 500 → scan last 500 lines ```
---
`/mcsl players`
Scans the log for player events (join, leave, lost connection, kick, ban) and prints the last 15 in chat. Useful for quickly checking recent player activity without reading the full log.
---
`/mcsl plugins`
Lists every plugin currently loaded by the server, with its version, author(s), and enabled/disabled status. Disabled or failed plugins are shown with `[-]` in red so they're immediately visible.
---
`/mcsl mods`
Lists all loaded Forge or Fabric mods, including mod ID, display name, and version. Returns a message if the server is vanilla/Bukkit-only with no mod loader.
---
`/mcsl crash`
Finds the most recently modified file in the `crash-reports/` directory, uploads it with a plugin list header, and returns a HasteLog URL. Useful after a crash to quickly get the report online.
---
`/mcsl config <key> <value>`
Change a config setting at runtime without editing `config.yml` directly. Supports tab completion for key names and boolean values.
``` /mcsl config redaction.enabled false /mcsl config share.include-server-ip false /mcsl config upload.default-lines 5000 ```
---
`/mcsl reload`
Reloads `config.yml` from disk and recompiles any custom redaction patterns.
---
🔐 Permissions
| Permission | Default | Description | |---|---|---| | `mcsl.use` | op | Access to all `/mcsl` commands | | `mcsl.upload` | op | Upload logs to HasteLog | | `mcsl.info` | op | View server info | | `mcsl.share` | op | Generate full diagnostic reports | | `mcsl.config` | op | Change config at runtime |
`mcsl.use` is a parent permission that grants all children automatically.
---
🛡️ Privacy & Security
What is redacted by default?
| Data | Redacted? | Replacement | |---|---|---| | Player IPv4 addresses | ✅ Yes | `[REDACTED_IP]` | | Player IPv6 addresses | ✅ Yes | `[REDACTED_IPv6]` | | JWT tokens | ✅ Yes | `[REDACTED_TOKEN]` | | API keys (`sk-`, `Bearer`, `hl_`, etc.) | ✅ Yes | `[REDACTED_KEY]` | | JDBC/database passwords | ✅ Yes | `password=[REDACTED]` | | Server IP (in `/mcsl share`) | ❌ No (configurable) | `[SERVER_IP]` | | Player usernames | ❌ No | — | | World names | ❌ No | — |
What is uploaded?
Only the content you explicitly request. MCSL never uploads in the background unless you have `auto.upload-on-crash: true` or `auto.upload-on-start: true` in your config. The API key is embedded in the JAR and cannot be read from config.yml.
Where is the data stored?
All uploads go to logs.protectcord.com, which is a HasteLog instance operated by ProtectCord. Documents are accessible to anyone with the link.
---
📊 Analytics
MCSL collects anonymous usage statistics via anonymous usage statistics. This includes: - Number of servers using the plugin - Minecraft and server software versions in use
No log content, player data, or server-identifying information is ever collected. You can disable bStats server-wide in `plugins/bStats/config.yml`.
---
❓ FAQ
Q: Does `/mcsl upload` upload the entire log file? No — by default it uploads the last 25,000 lines. Use `/mcsl upload all` for the full file, or specify a number like `/mcsl upload 500`.
Q: Can players see the uploaded URL? Only operators (or players with `mcsl.use`) can run any MCSL command. The URL is shown only to the command sender.
Q: Is the API key safe? The API key is XOR-obfuscated and compiled into the JAR — it does not appear as a readable string in the bytecode. It is also excluded from `config.yml` entirely and cannot be changed or read by server admins.
Q: Does this work on Folia? MCSL loads on Folia servers. Commands, log reading, and uploads all work. TPS detection uses Folia's scheduler where available.
Q: Can I use a self-hosted HasteLog instance? Not through config — the URL is baked into the JAR. Contact ProtectCord if you need a custom build for your hosting environment.
Q: Does it work with Forge or Fabric? MCSL is a Bukkit plugin, so it runs on hybrid servers like Mohist (Forge+Bukkit) or Cardboard (Fabric+Bukkit). Mod detection works on these platforms via reflection.
---
🔗 Links
| Resource | Link | |---|---| | HasteLog Service | logs.protectcord.com | | bStats Dashboard | bstats.org/plugin/bukkit/MCSL/30872 |
---
<div align="center">
Made with ❤️ by ProtectCord · Powered by ProtectCord
Modrinth
bStats
</div>