Plugin

Connect a server to your minelog account. Its errors land in your dashboard and in the chat apps you already use, and Skript can send alerts of your own.

What it does

The minelog plugin watches your server's log. When an error shows up, it saves it under Alerts in your dashboard and tells the webhooks you picked. You can also tell it to message you when the server starts or stops. If you use Skript, it adds a few lines of syntax so your own scripts can send alerts and react to the same events.

You need an account for this part, since the alerts belong to you. Sharing a log still works without one.

If something breaks, tell us on GitHub.

Install

  1. Download the jar from the site you like best: Paper Hangar or CurseForge. Modrinth is coming soon. Put the jar in your plugins folder.
  2. Restart the server. Spigot, Paper, Purpur and Folia all run the same jar.
  3. Using Skript? There is nothing more to install. If Skript 2.9 or newer is there, on Java 17 or newer, the syntax below switches on by itself. You will see Skript found. The minelog syntax is ready. in the console.

Connect your server

  1. Sign in and open Servers in your dashboard. Choose Add server.
  2. Copy the key it shows you. It starts with mlk_ and is shown only once.
  3. Run /minelog auth mlk_your_key in the server console.

Use the console, not the in-game chat. Commands typed in chat are written to the server log, and the key would be in it.

The server is named after its software and version, for example Paper 1.21.8. You can rename it in the dashboard. Run /minelog status any time to check the connection.

Right after you connect, the plugin tells you if Skript is missing. Error alerts work without it, but the Skript lines below stay off until you install Skript.

Pick where alerts go

Webhooks live under Webhooks in the dashboard. Paste the URL and minelog works out which service it belongs to. Every webhook also gets a short handle, like ops-discord, that Skript uses to pick it. A webhook can listen to all your servers or only some.

  • Discord. Alerts arrive as a message card.
  • Slack. Alerts arrive as an attachment with a colour bar.
  • Microsoft Teams. Alerts arrive as an Adaptive Card.
  • Google Chat. Alerts arrive as a plain message.
  • Telegram. Alerts arrive as a message from your bot.
  • Guilded. Alerts arrive as an embed, the same way as on Discord.
  • Mattermost. Alerts arrive as an attachment. The server needs a public https address.

The dashboard has a longer list with where to find each URL. Open Add webhook and choose See supported platforms.

Error alerts

The plugin reads logs/latest.log and picks out lines at ERROR or FATAL level, together with the stack trace under them. Each one is saved under Alerts.

  • The same error counts up instead of piling up. Your webhooks hear about it the first time.
  • Alerts are stored encrypted and only you can read them. Each one is deleted after 14 days.
  • The plugin starts reading from the end of the log when it connects, so old errors are not sent.
  • Start and stop notices go to your webhooks too. Turn them off with notify-start and notify-stop in config.yml, or all error alerts with alerts: false.

Want to see it work? Run /minelog test. It writes a harmless error to the log and you should see it under Alerts a few seconds later.

Commands

/mlog does the same as /minelog, and so does /log unless you turn it off with log-command: false. Every permission is given to operators by default, and minelog.admin holds all of them.

CommandWhat it doesPermission
/minelog share [file]Uploads logs/latest.log, or one file from logs/, and gives you a link.minelog.share
/minelog delete <id>Deletes an upload that was made from this server.minelog.delete
/minelog auth <key>Connects the server to your account with a key from the dashboard.minelog.connect
/minelog statusShows whether the server is connected and whether it is watching the log.minelog.connect
/minelog testWrites a harmless test error to the log, so you can see it arrive under Alerts.minelog.connect
/minelog disconnectForgets the key. The server stops sending anything.minelog.connect
/minelog reloadReads config.yml again without a restart.minelog.reload

Use it from Skript

You write the scripts, minelog sends the message. Anything Skript can notice, from a player joining to a command running to a number crossing a line, can become an alert. Put a script in plugins/Skript/scripts and run /sk reload your-script.

Without a webhook named, an alert goes to every webhook listening to the server. Name one with to webhook "handle" to send only there.

Effects

SyntaxWhat it does
send minelog alert "Title"Sends a message to your webhooks. Without a webhook named, it goes to every webhook that listens to this server.
send minelog alert "Title" with message "More text" as warningAdds a second line and a level: info, warning or error. The level picks the colour in Discord, Slack and the others.
send minelog alert "Title" to webhook "ops-discord"Sends to one webhook, by the handle you gave it in the dashboard. Name several with to webhooks "a" and "b".
send minelog tps alert "Title"The same, with the type tps, crash, start or stop in front of alert. The type is sent along as the event name, and it sets a default level: warning for tps, error for crash, info for the rest.
send minelog error "Something broke"Saves an error under Alerts, the same place errors from the server log go. The same text is counted instead of saved twice.
share minelog logUploads logs/latest.log in the background. Add named "2026-10-01-1.log" to pick another file from logs/. The link arrives in the minelog log shared event.
delete minelog log "id"Deletes a log this server shared earlier. You can give the id or the whole link. Logs shared from other servers cannot be deleted from here.

Events

SyntaxWhen it runs
on minelog tps drop [below 15]Runs once when the TPS falls under the number, 15 if you give none. It runs again only after the TPS climbed back up and dropped once more. The TPS is measured every 5 seconds.
on minelog error detectedRuns when an error shows up in the server log. Use it to add your own context, or to send the error somewhere else.
on minelog connectedRuns when the server connects to minelog, at startup or after /minelog auth.
on minelog disconnectedRuns when the key is removed or minelog says it was revoked.
on minelog log sharedRuns when a log was uploaded, from a command or from a script. The link is available inside.
on minelog send failedRuns when something could not be sent or uploaded. It fires at most once every 30 seconds, so a handler that sends an alert cannot loop.

Expressions

SyntaxWhat it gives you
minelog tpsThe server's TPS over the last 5 seconds, from 0 to 20.
minelog error summaryThe error line, inside minelog error detected.
minelog error textThe error with the log lines around it, inside minelog error detected.
minelog link, minelog log id, minelog raw linkThe page link, the id and the plain text link of a shared log. Inside minelog log shared it is that log. Anywhere else it is the last log this server shared.
minelog problem countHow many problems minelog found in the shared log.
minelog failure reasonWhy something failed, inside minelog send failed.
minelog webhooksThe handles of your webhooks. Empty until the server is connected.

Recipes

These are starting points. Change the text, the level and the handle to fit your server. Skript prints its own error in the console when it cannot read a line, so a typo is easy to find.

Someone joins

Waiting two seconds gives the server time to measure the ping. A ping read at the very moment of joining is usually 0.

Skript
on join:
    wait 2 seconds
    if player is online:
        set {_where} to location of player
        send minelog alert "%player% joined" with message "Ping: %ping of player% ms | World: %world of player% | Position: %rounded x-coordinate of {_where}%, %rounded y-coordinate of {_where}%, %rounded z-coordinate of {_where}%" as info

Someone is kicked

A kicked player also triggers the quit event, so the script remembers the kick and skips the second message. Minecraft hands over its default kick text as a translation key, which the script turns into plain words.

Skript
on kick:
    set {minelog::kicked::%uuid of player%} to true
    set {_reason} to "%the on-screen kick message%"
    if {_reason} contains "multiplayer.disconnect.kicked":
        set {_reason} to "Kicked by an operator"
    else if {_reason} contains "<lang:":
        replace all "<lang:" and ">" in {_reason} with ""
    send minelog alert "%player% was kicked" with message "Reason: %{_reason}%" as warning

on quit:
    if {minelog::kicked::%uuid of player%} is set:
        delete {minelog::kicked::%uuid of player%}
        stop
    send minelog alert "%player% left" with message "Players online: %(number of all players) - 1%" as info

The server slows down

Skript
on minelog tps drop below 15:
    send minelog tps alert "TPS dropped to %minelog tps%" with message "Players online: %number of all players%"

An error shows up

New errors already reach your webhooks without a script. Use this when you want one of them sent to a different webhook, or with your own words around it.

Skript
on minelog error detected:
    send minelog alert "Error in the log" with message minelog error summary as error to webhook "ops-discord"

Share a log from a command

Skript
command /sharelog:
    permission: op
    trigger:
        share minelog log
        send "Uploading the log..." to player

on minelog log shared:
    send "Log ready: %minelog link%" to console

on minelog send failed:
    send "minelog problem: %minelog failure reason%" to console

Limits

WhatLimit
Servers10 per account
Webhooks25 per account, up to 10 named in one alert
Alerts keptThe latest 100, each for 14 days
Alert title120 characters
Alert message1500 characters
Same errorSent once, then not again for 20 seconds. At most 12 errors a minute from one server.

Troubleshooting

The plugin says it cannot connect.
Open plugins/minelog/config.yml. api-base should be https://api.minelog.org unless you host your own copy. An error about SSL means the address starts with https:// but the server only speaks plain http://.
Nothing shows up under Alerts.
Run /minelog status. Check that alerts is true in config.yml, then run /minelog test and wait a few seconds. Only lines at ERROR or FATAL level are sent. Skript load errors are printed as plain INFO lines, so they are not alerts.
/minelog test finds nothing right after startup.
Give the server a few seconds first. The plugin starts reading the log from its end, and a line written before that first look is skipped.
Skript says it can't understand a minelog line.
Look for “Skript found. The minelog syntax is ready.” in the console at startup. It needs Skript 2.9 or newer on Java 17 or newer. If the line is missing, Skript was not loaded before minelog or is not installed.
A webhook stays quiet.
Open Webhooks in the dashboard. Each row shows its last result, and the send button posts a test message. A webhook that fails ten times in a row switches itself off.
You typed a key into the game chat.
Commands typed in chat end up in the server log. Revoke that key under Servers and make a new one, then run /minelog auth from the console.

You are leaving Minelog

Someone wrote this link in a shared log. Minelog has not checked it, so only continue if you trust where it goes.