English and Russian user guide for the ServerScope Paper/Folia plugin.
Author: Erotoro
ServerScope is a monitoring and observability plugin for Paper and Folia Minecraft servers. It is designed to give server owners and administrators a clearer view of runtime health, performance behavior, and operational stability through a built-in diagnostics platform.
It helps you answer questions like:
- Why is the server lagging right now?
- Which chunks are heavy?
- Are entities growing too fast?
- Are alerts firing because of a real issue or just noise?
- Which profiled events/plugins look suspicious?
Main features:
- live server metrics
- chunk and world diagnostics
- basic event and plugin profiling
- alert system
- built-in web dashboard
- JSON API
- in-game admin commands
- SQLite storage
- Java 21 or newer
- Paper 1.21+ or Folia 1.21+
- Download the ready release jar.
- Put
ServerScope-1.0.0.jarinto your serverplugins/folder. - Start the server.
- Wait until ServerScope creates its folder and config.
- Stop the server if you want to review the config first.
- Open:
plugins/ServerScope/config.yml
By default, ServerScope is already useful after the first start.
Enabled by default:
- storage
- collectors
- alerts
- profiling
- web dashboard
Web defaults are safe:
- host:
127.0.0.1 - port:
8080 - token: auto-generated per server
- reverse proxy mode: off
That means:
- the dashboard is on by default
- it is local-only by default
- it does not expose itself to the internet unless you change the host/network setup
On first start, ServerScope will:
- create
plugins/ServerScope/config.yml - create a unique web token for this server
- start collectors
- start storage
- start diagnostics and alerts
- start the local web dashboard on
127.0.0.1:8080
You do not need to invent a token manually.
The token is generated automatically and stored in:
plugins/ServerScope/config.yml
Look for:
web:
auth-token: ...If you are on the same machine as the server, open:
http://127.0.0.1:8080/
Then:
- Copy the value of
web.auth-tokenfromconfig.yml - Paste it into the dashboard token field
- Save the token in the UI
If the page opens but data does not load, the token is usually wrong.
Default block:
web:
enabled: true
host: 127.0.0.1
port: 8080
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: http://127.0.0.1
reverse-proxy-enabled: false
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152What each option means:
enabled: turns the built-in web server on or offhost: network interface to bind toport: dashboard/API portauth-token: secret token used by the dashboard and APIcors-enabled: allows cross-origin browser requestscors-allowed-origin: allowed browser origin when CORS is enabledreverse-proxy-enabled: trustX-Forwarded-*headers from your own proxymax-requests-per-window: per-IP request limitrate-limit-window-millis: rate-limit windowmax-request-uri-length: maximum URI lengthmax-response-bytes: maximum JSON response size
If your server is on a Minecraft hosting provider and you want to open the built-in web panel from your browser, you usually need a separate free port for the panel.
Use this checklist:
- Ask the hosting provider whether your plan allows an extra TCP/HTTP port for plugins.
- Choose a free port for ServerScope, for example
25656. - Find the public IP or domain of your server in the hosting panel.
- Put that port into
web.port. - Set
web.hostto0.0.0.0if the panel must be reachable from outside the machine. - Restart the server.
- Open the panel in your browser using
http://YOUR_IP_OR_DOMAIN:YOUR_FREE_PORT/.
Example for direct external access:
web:
enabled: true
host: 0.0.0.0
port: YOUR_FREE_PORT
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: http://YOUR_IP_OR_DOMAIN:YOUR_FREE_PORT/
reverse-proxy-enabled: false
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152What to put into each important field:
host: 0.0.0.0means "listen on all network interfaces" so the panel can be reached from outsideportmust be a free port that the hosting provider allowsauth-token: auto-generated-per-servermeans ServerScope will generate a unique token for this server automaticallycors-allowed-originshould match the exact address you open in the browser, including the port, if you enable CORS later
Open the panel in your browser:
- if your host gives you an IP, use
http://YOUR_SERVER_IP:FREE_PORT/ - if your host gives you a domain, use
http://YOUR_DOMAIN:FREE_PORT/
Where to get the token:
- Start the server once with ServerScope installed.
- Open
plugins/ServerScope/config.yml. - Find
web.auth-token. - Copy that value.
- Open the web panel.
- Paste the token into the token field in the dashboard.
If you exposed the token publicly, rotate it with:
/serverscope web regenerate-token
What to ask your hosting provider if the panel does not open:
I use a Minecraft plugin with a built-in web panel.
Please confirm whether my server can accept external TCP/HTTP connections on port 25636.
If custom ports are blocked, do you provide port forwarding, reverse proxy, or another way to expose a plugin web panel?
How to understand common problems:
- page does not open at all: the port is blocked or not forwarded by the host
- page opens but API says
401: wrong token - page opens on the same machine but not from your PC or phone: external access is blocked by the host or firewall
- you changed
config.ymlbut nothing changed: restart the server or run/serverscope reload
Important:
- do not post your token publicly
- direct HTTP access is not encrypted, so HTTPS through a reverse proxy is safer
- if the hosting provider does not allow custom ports, the built-in panel may be unavailable from the internet
If you want to open the panel from another machine, the best way is:
- keep ServerScope on a private/local address
- put Nginx or Caddy in front of it
- use HTTPS on the reverse proxy
ServerScope config:
web:
enabled: true
host: 127.0.0.1
port: 8080
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: https://panel.example.com
reverse-proxy-enabled: true
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152Minimal Nginx example:
server {
listen 443 ssl http2;
server_name panel.example.com;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}Do not expose the raw ServerScope HTTP port to the public internet unless you understand the risk.
Main commands:
/serverscope
/serverscope status
/serverscope reload
/serverscope report
/serverscope findings
/serverscope alerts
/serverscope web regenerate-token
What they do:
/serverscope: quick summary/serverscope status: runtime/module status/serverscope reload: reload config and runtime/serverscope report: quick health report/serverscope findings: active diagnostic findings/serverscope alerts: active alerts/serverscope web regenerate-token: create a new web token and reload web runtime
serverscope.adminserverscope.command.statusserverscope.command.reloadserverscope.command.reportserverscope.command.findingsserverscope.command.alertsserverscope.command.webserverscope.alerts
Default:
- all admin permissions are
op - in-game alert receiving is
op
Profiling watches selected Bukkit/Paper events and builds summaries.
It helps show:
- slow events
- frequent events
- suspicious bursts
- approximate plugin impact
Default profiled events:
player_interactblock_breakblock_placeentity_damageinventory_clickcreature_spawn
Important:
- this is not a full JVM profiler
- numbers are approximate
- it is meant for live diagnostics, not deep Java profiling
Alerts are notifications produced by the analyzer.
Examples:
- low TPS
- high MSPT
- too many entities
- hot chunk
- unstable server trend
Current behavior:
CRITICALcan notify admins in-gameWARNstays in console and web UI- repeated spam was reduced
This is intentional so that admins are not flooded in chat by low-quality warnings.
ServerScope stores data in SQLite.
Default file:
plugins/ServerScope/serverscope-mvp.db
Storage is:
- async
- batched
- bounded
The plugin also prevents SQLite from being configured outside the plugin folder.
Use:
/serverscope web regenerate-token
This will:
- generate a new token
- save it to
config.yml - reload the runtime
After that:
- old browser/API sessions using the old token stop working
- you must use the new token
Usually the token is wrong.
Fix:
- open
plugins/ServerScope/config.yml - copy
web.auth-token - paste it into the dashboard
Your token is missing or incorrect.
You are hitting the API too fast.
Wait a few seconds or reduce polling from external tools.
Check:
web.enabled: trueweb.hostweb.port- firewall rules
- host restrictions
Most likely:
hostis127.0.0.1- or the port is blocked
Then the embedded dashboard may not be reachable externally.
Options:
- use it locally only
- use SSH tunnel
- use a reverse proxy/tunnel supported by your environment
- keep
host: 127.0.0.1unless remote access is really needed - use a reverse proxy for public access
- use HTTPS externally
- never publish the token
- rotate the token if you think it leaked
- leave CORS disabled unless you know why you need it
If you just want it to work:
- Download the ready ServerScope jar
- Put the jar into
plugins/ - Start the server
- Open
plugins/ServerScope/config.yml - Find
web.auth-token - Open
http://127.0.0.1:8080/ - Paste the token into the dashboard
- Use:
/serverscope status/serverscope report/serverscope findings/serverscope alerts
That is enough to start using the plugin.
Автор: Erotoro
ServerScope это плагин мониторинга и observability для Minecraft-серверов на Paper и Folia. Он создан для того, чтобы владельцы и администраторы сервера могли лучше видеть состояние сервера, его производительность и общую стабильность через встроенную диагностическую платформу.
Он нужен, чтобы быстро понимать:
- почему сервер лагает прямо сейчас
- какие чанки тяжёлые
- не растёт ли количество сущностей слишком быстро
- настоящая ли это проблема или просто шумный warning
- какие события и плагины выглядят подозрительно
Основные функции:
- живые метрики сервера
- диагностика миров и чанков
- базовое профилирование событий и плагинов
- система alert-ов
- встроенная web-панель
- JSON API
- игровые админ-команды
- хранение данных в SQLite
- Java 21 или новее
- Paper 1.21+ или Folia 1.21+
- Скачай готовый release jar.
- Положи
ServerScope-1.0.0.jarв папкуplugins/. - Запусти сервер.
- Дождись, пока ServerScope создаст свою папку и конфиг.
- При желании останови сервер и открой конфиг.
- Конфиг лежит здесь:
plugins/ServerScope/config.yml
Сразу после первого запуска уже включены:
- storage
- collectors
- alerts
- profiling
- web-панель
Web по умолчанию настроен безопасно:
- host:
127.0.0.1 - port:
8080 - токен: генерируется автоматически для этого сервера
- reverse proxy режим: выключен
Это значит:
- панель включена сразу
- она доступна только локально
- наружу сама по себе она не торчит, пока ты сам это не изменишь
При первом запуске ServerScope:
- создаёт
plugins/ServerScope/config.yml - генерирует уникальный web-токен именно для этого сервера
- запускает collectors
- запускает storage
- запускает диагностику и alerts
- запускает локальную web-панель на
127.0.0.1:8080
Тебе не нужно вручную придумывать токен.
Токен автоматически записывается в:
plugins/ServerScope/config.yml
Ищи здесь:
web:
auth-token: ...Если ты находишься на той же машине, где работает сервер, открой:
http://127.0.0.1:8080/
Дальше:
- открой
config.yml - скопируй
web.auth-token - вставь его в поле токена в панели
- сохрани токен в UI
Если страница открывается, но данные не грузятся, почти всегда причина в неправильном токене.
Текущий дефолтный блок:
web:
enabled: true
host: 127.0.0.1
port: 8080
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: http://127.0.0.1
reverse-proxy-enabled: false
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152Что это значит:
enabled: включает или выключает встроенный web-серверhost: на какой сетевой интерфейс он слушаетport: порт панели и APIauth-token: секретный токен для панели и APIcors-enabled: разрешить cross-origin запросы из браузераcors-allowed-origin: какой origin разрешён при включённом CORSreverse-proxy-enabled: доверять ли заголовкамX-Forwarded-*от твоего reverse proxymax-requests-per-window: лимит запросов на IPrate-limit-window-millis: окно для rate limitmax-request-uri-length: максимальная длина URImax-response-bytes: максимальный размер JSON-ответа
Если сервер стоит на обычном Minecraft-хостинге и ты хочешь открыть встроенную web-панель в браузере, обычно нужен отдельный свободный порт под эту панель.
Делай так:
- Уточни у хостинга, можно ли открыть дополнительный TCP/HTTP-порт для плагина.
- Выбери свободный порт, например
25656. - Найди внешний IP или домен сервера в панели хостинга.
- Укажи этот порт в
web.port. - Поставь
web.host: 0.0.0.0, если панель должна открываться извне. - Перезапусти сервер.
- Открой панель по адресу
http://IP_ИЛИ_ДОМЕН:СВОБОДНЫЙ_ПОРТ/.
Пример конфига для прямого внешнего доступа:
web:
enabled: true
host: 0.0.0.0
port: СВОБОДНЫЙ_ПОРТ
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: http://IP_ИЛИ_ДОМЕН:СВОБОДНЫЙ_ПОРТ/
reverse-proxy-enabled: false
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152Что указывать в важных полях:
host: 0.0.0.0означает, что панель слушает все сетевые интерфейсы и может быть доступна извнеportэто отдельный свободный порт, который должен разрешать твой хостингauth-token: auto-generated-per-serverозначает, что плагин сам создаст уникальный токен для этого сервераcors-allowed-originдолжен совпадать с точным адресом панели в браузере, включая порт, если ты потом включишь CORS
Открывай панель в браузере:
- используй
http://IP_СЕРВЕРА:СВОБОДНЫЙ_PORT/ - если хостинг дал домен, используй
http://DOMAIN_СЕРВЕРА:СВОБОДНЫЙ_PORT/
Где взять токен:
- Один раз запусти сервер с установленным ServerScope.
- Открой
plugins/ServerScope/config.yml. - Найди
web.auth-token. - Скопируй это значение.
- Открой web-панель.
- Вставь токен в поле токена в интерфейсе.
Если токен засветился или ты отправил его кому-то, сразу смени его командой:
/serverscope web regenerate-token
Что написать в поддержку хостинга, если панель не открывается:
У меня Minecraft-плагин поднимает встроенную web-панель.
Подскажите, доступен ли на моём тарифе внешний TCP/HTTP-порт 25636 для входящих подключений?
Если произвольные порты запрещены, есть ли у вас port forwarding, reverse proxy или другой способ открыть web-панель плагина?
Как понять типичную проблему:
- страница вообще не открывается: хостинг не пробросил порт или его режет firewall
- страница открывается, но API отвечает
401: неверный токен - на самой машине панель доступна, а с ПК или телефона нет: внешний доступ блокируется хостингом или firewall
- ты поменял
config.yml, но ничего не изменилось: перезапусти сервер или выполни/serverscope reload
Важно:
- не публикуй токен в чатах, скриншотах и тикетах
- прямой HTTP-доступ без HTTPS менее безопасен
- если хостинг не разрешает отдельные порты, встроенная панель может быть недоступна извне
Если хочешь открывать панель с другого устройства, правильнее всего:
- держать сам ServerScope на локальном/внутреннем адресе
- поставить перед ним Nginx или Caddy
- наружу отдавать уже HTTPS через reverse proxy
Конфиг ServerScope:
web:
enabled: true
host: 127.0.0.1
port: 8080
auth-token: auto-generated-per-server
cors-enabled: false
cors-allowed-origin: https://panel.example.com
reverse-proxy-enabled: true
max-requests-per-window: 120
rate-limit-window-millis: 10000
max-request-uri-length: 2048
max-response-bytes: 2097152Минимальный пример Nginx:
server {
listen 443 ssl http2;
server_name panel.example.com;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}Не стоит просто так открывать сырой HTTP-порт ServerScope в интернет.
Основные команды:
/serverscope
/serverscope status
/serverscope reload
/serverscope report
/serverscope findings
/serverscope alerts
/serverscope web regenerate-token
Что делает каждая:
/serverscope: короткая сводка/serverscope status: статус runtime и модулей/serverscope reload: перезагрузка конфига и runtime/serverscope report: быстрый отчёт по состоянию сервера/serverscope findings: активные диагностические findings/serverscope alerts: активные alerts/serverscope web regenerate-token: создать новый web-токен и перезагрузить web runtime
serverscope.adminserverscope.command.statusserverscope.command.reloadserverscope.command.reportserverscope.command.findingsserverscope.command.alertsserverscope.command.webserverscope.alerts
По умолчанию:
- все админ-права для
op - игровые alert-уведомления тоже для
op
Profiling следит за выбранными событиями Bukkit/Paper и строит сводки.
Он помогает увидеть:
- медленные события
- частые события
- подозрительные всплески
- примерное влияние плагинов
По умолчанию профилируются:
player_interactblock_breakblock_placeentity_damageinventory_clickcreature_spawn
Важно:
- это не полноценный JVM profiler
- цифры приблизительные
- он нужен для live-диагностики, а не для глубокой Java-профилировки
Alerts это уведомления, которые создаёт анализатор.
Примеры:
- низкий TPS
- высокий MSPT
- слишком много сущностей
- горячий чанк
- нестабильный тренд состояния сервера
Текущее поведение:
CRITICALможет приходить администраторам в игруWARNостаётся в консоли и web UI- спам повторяющихся сообщений сильно уменьшен
Это сделано специально, чтобы чат админов не засыпало мусором.
ServerScope хранит данные в SQLite.
Файл по умолчанию:
plugins/ServerScope/serverscope-mvp.db
Storage здесь:
- асинхронный
- батчевый
- ограниченный по нагрузке
Плагин также не даёт вынести SQLite-файл за пределы папки плагина.
Используй:
/serverscope web regenerate-token
Что произойдёт:
- создастся новый токен
- он запишется в
config.yml - runtime перезагрузится
После этого:
- старый токен перестанет работать
- нужно будет использовать новый
Обычно неверный токен.
Что делать:
- открыть
plugins/ServerScope/config.yml - скопировать
web.auth-token - вставить его в панель
Токен отсутствует или неверный.
Ты слишком часто дёргаешь API.
Подожди немного или уменьши polling во внешнем инструменте.
Проверь:
web.enabled: trueweb.hostweb.port- firewall
- ограничения хостинга
Скорее всего:
- стоит
host: 127.0.0.1 - или порт заблокирован
Тогда встроенная панель может быть недоступна извне.
Варианты:
- использовать только локально
- использовать SSH tunnel
- использовать reverse proxy/туннель, если это позволяет окружение
- оставляй
host: 127.0.0.1, если удалённый доступ не нужен - для публичного доступа используй reverse proxy
- наружу лучше отдавать только HTTPS
- никому не показывай токен
- если думаешь, что токен утёк, ротируй его
- не включай CORS без причины
Если хочется просто запустить и пользоваться:
- Скачай готовый jar ServerScope
- Положи jar в
plugins/ - Запусти сервер
- Открой
plugins/ServerScope/config.yml - Найди
web.auth-token - Открой
http://127.0.0.1:8080/ - Вставь токен в панель
- Используй:
/serverscope status/serverscope report/serverscope findings/serverscope alerts
Этого уже достаточно, чтобы начать пользоваться плагином.
Supported me - https://ko-fi.com/erotoro Thx <3