Skip to content
michig-codePublic

About

Manage your Minecraft server from your phone – live, encrypted and free.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

135 Commits

Folders and files

Repository files navigation

RemoteMC logo

RemoteMC

Build Release Minecraft Android License: MIT

Manage your Minecraft server from your phone – live, encrypted and free. Deutsche Version

🤖 RemoteMC is developed with the help of the AI Claude (Anthropic) – see How RemoteMC is made.

Folder What it is
plugin/ Server plugin for Paper, Purpur, Folia and Spigot (Minecraft 1.20.6 – 26.x)
android-app/ Android app (Android 8+, Kotlin / Jetpack Compose)
desktop-app/ Windows app (Compose Multiplatform; shares the network code with the Android app)

Server list Dashboard Players Console with command suggestions

Chat Pairing Naming the phone Settings

Performance history Whitelist Ban list Blue colour theme

Tablet layout

Features

  • Your overview – hold a card to rearrange the overview: drag cards, make them full, half or a third wide, or hide them (phone and PC, saved per device)
  • Files and plugins – browse the server folder, edit config files, upload and delete files; add a plugin by picking its .jar or remove one (admins; security.allow-files: false turns it off; RemoteMC's own folder with the tokens is never reachable)
  • Scheduled tasks – commands every N minutes or daily, with a countdown in the chat (admins)
  • Worlds – time, weather, difficulty and game rules per world at a tap (admins)
  • Dashboard – TPS gauge, MSPT, memory, uptime and worlds, updated live, plus charts of TPS, players, memory and MSPT over the last hour, day or week
  • Players – heads, health, ping and location; message, heal, teleport, game mode, OP, kick, ban; play time; search and sort; whitelist and ban list with unban
  • Console – coloured live server log, commands with their output, suggestions while typing (from the server's own tab completion) and your recently used commands
  • Server list – hold and drag to sort or to move servers between folders, pin to the top, search by name or address
  • Notifications – server offline or back online, low TPS, player joins, mentions in chat (optional; a live connection in the background, no Google services needed)
  • Widget & tile – home screen widget with all servers, quick settings tile for notifications
  • Chat – chat, joins and leaves as they happen; send messages to all players
  • Pairing in seconds – /remotemc pair shows a QR code on an in-game map or in the console
  • Security – built-in HTTPS with certificate pinning, one token per device (stored hashed on the server, encrypted in the Android Keystore on the phone), roles, lockout, audit log
  • Polish – light/dark theme, 9 colour themes or your own colour, Material You, tablet layout, 10 languages, haptics, accessibility

Quick start

  1. Plugin: download RemoteMC-x.y.z.jar from the releases, put it into plugins/ and restart the server.
  2. Port: open TCP port 8765 in your firewall/router (or set api.port to an extra port your host gives you).
  3. App: install RemoteMC-App-x.y.z.apk from the releases (allow “install unknown apps”).
  4. Pair: run /remotemc pair in game or in the console and scan the QR code with the app. Without a camera: tap “Enter code” and type the address, port and 6-digit code.

Upgrading from the McRemote prototype? Remove McRemote-1.0.0.jar. RemoteMC takes over its config and token on first start.

Windows app

The same server control on the PC: server list with live status, pairing with the code or a pasted remotemc:// link (with the same certificate check), overview with TPS, memory and history chart, players with all actions, whitelist and ban list, world settings (time, weather, difficulty, game rules), plugin list with add/remove, file manager with editor, scheduled tasks, coloured console with suggestions (Tab) and history (↑/↓), chat. Windows notifications (server offline, low TPS, player joins, mentions) with RemoteMC staying in the tray when you close the window. Colour themes and all 10 languages. Access tokens are stored with Windows DPAPI.

Download RemoteMC-Windows-x.y.z.msi (or -Setup.exe) from the releases; Java is included. Installed this way, the app finds new releases by itself and updates with one click. Build it yourself on Windows with cd desktop-app && gradlew packageMsi.

Windows app: overview Windows app: console Windows app: world settings Windows app: scheduled tasks

Commands

Permission remotemc.admin (default: OP), alias /rmc.

Command Description
/remotemc pair [admin|moderator|viewer] One-time pairing code + QR code (default role: admin)
/remotemc info API status, port, certificate fingerprint, paired devices
/remotemc token create <name> [role] Token for scripts or manual setup (shown once)
/remotemc token list Paired devices and when they were last used
/remotemc token revoke <name> Revoke a device's access
/remotemc reload Reload config.yml

Roles

Role Can
viewer see status, players and chat
moderator + read the console, chat, message / heal / game mode / kick / ban players
admin + run console commands, OP / DeOP

Configuration (plugins/RemoteMC/config.yml)

language: en              # en, de, es, fr, it, nl, pl, pt-BR, tr, ru
api:
  host: 0.0.0.0
  port: 8765
  public-address: ""      # domain/IP for QR codes; empty = server-ip or LAN address
  tls: true               # built-in HTTPS; only disable behind your own HTTPS reverse proxy
security:
  max-failed-attempts: 5
  lockout-seconds: 300
  pairing-code-minutes: 5
  allow-commands: true
  blocked-commands: [stop, restart]
console:
  buffer-size: 500
audit-log: true
update-check: true

Security

  • Traffic is encrypted with TLS. The plugin creates its own certificate (tls.p12); the QR code contains its SHA-256 fingerprint, so the app trusts exactly that certificate. When pairing by hand, the app shows a short code (e.g. AB12-CD34) to compare with the server console.
  • Each phone gets its own token. The server stores only hashes; revoke a phone with /remotemc token revoke.
  • If the certificate ever changes, the app refuses to connect and asks you to pair again.
  • Access tokens, open pairing codes and console QR codes are hidden from the console stream, so a moderator cannot read an admin's credentials there.
  • Deleting tls.p12 creates a new certificate – all devices then have to pair again.
  • Behind a reverse proxy, all requests come from the proxy's IP; the lockout then applies to everyone.

Compatibility

Tested with the end-to-end suite in plugin/integration-test:

Server Result
Paper 1.20.6 ✅ all API and player checks
Paper 1.21.4 ✅ all API and player checks
Paper 26.3 (Java 25) ✅ all API checks
Folia 1.21.4 ✅ all checks; TPS is not reported (Folia ticks per region)
Spigot 1.21.4 ✅ all checks; no TPS, command output appears in the console stream

API

JSON over HTTPS, Authorization: Bearer <token>. Errors are {"error": "<code>", "message": "…"}.

Method Path Role Description
GET /api/v1/ping – Plugin version and API version
POST /api/v1/pair – {"code","device"} → {"token","name","role"}
GET /api/v1/me viewer Name and role of this token
GET /api/v1/status viewer TPS, MSPT, memory, players, worlds
GET /api/v1/history?range=1h|24h|7d viewer Up to 360 averaged points: [time, tps, mspt, memoryMb, players]
GET /api/v1/players viewer Online players
GET /api/v1/whitelist moderator {"enabled", "players"}
POST /api/v1/whitelist admin {"enabled"} turns it on or off
POST /api/v1/whitelist/add · /remove moderator {"name"}
GET /api/v1/bans moderator Player bans with reason, source, created, expires
GET /api/v1/schedules admin Scheduled commands with their next run, server time zone
POST /api/v1/schedules admin Create or update: {"id"?, "name", "command", "type": "interval"|"daily", "minutes", "time", "warn", "enabled"}
POST /api/v1/schedules/<id>/run · /delete admin Run now or delete
GET /api/v1/plugins moderator Installed plugins: name, version, enabled, description, authors, file (its JAR)
GET /api/v1/files?path= admin Folder contents (folders first): name, dir, size, modified
GET /api/v1/files/content?path= admin A text file up to 1 MB
POST /api/v1/files/content admin Save a text file: {"path", "content"}
POST /api/v1/files/upload?path= admin Upload a file (raw body, up to 200 MB), e.g. plugins/MyPlugin.jar
POST /api/v1/files/delete · /mkdir admin {"path"}; deleting a folder removes everything in it. Deleted files go to a trash for 24 h (plugins/RemoteMC/trash); the answer has its trash id
POST /api/v1/files/restore admin {"trash"}: puts a deleted file or folder back (fails with file_exists if something new is there)
GET /api/v1/worlds/<world> admin Time, weather, difficulty, game rules
POST /api/v1/worlds/<world>/time · weather · difficulty · gamerule admin {"time": "day"}, {"weather": "rain"}, {"difficulty": "hard"}, {"rule", "value"}
POST /api/v1/bans/<name>/pardon moderator Unban
GET /api/v1/chat?since=<id> viewer Chat, joins and leaves
GET /api/v1/events viewer Server-Sent Events: hello, status, chat, console (moderator+)
GET /api/v1/console?since=<id> moderator Console lines
POST /api/v1/chat moderator {"message"} broadcast
GET /api/v1/players/<name>/inventory moderator Inventory, armor, off hand and ender chest of an online player (read-only, logged in audit.log)
POST /api/v1/players/<name>/<action> moderator kick, ban (reason), heal, gamemode (mode), message (message); op/deop need admin
POST /api/v1/command admin {"command"} → {"success","output","formatted"} (formatted keeps § colour codes)
GET /api/v1/commands admin Commands the console can run (name, description, usage, aliases)
GET /api/v1/complete?buffer=<text> admin Tab completion, e.g. gamemode cr → ["creative"]

Development

cd plugin && mvn package                      # plugin + unit tests → target/RemoteMC-*.jar
cd android-app && ./gradlew lintGithubDebug lintPlayDebug testGithubDebugUnitTest assembleGithubRelease bundlePlayRelease
# Two versions: "github" (de.remotemc.app, APK) and "play" (de.remotemc.app.play, bundle for Google Play) – see docs/store/google-play.md
./gradlew testGithubDebugUnitTest -Proborazzi.test.record=true   # update screenshots after UI changes

CI (.github/workflows/build.yml) runs unit tests, an end-to-end test against a real Paper server, Android lint and a screenshot comparison.

Releasing

Push a tag like v2.0.1. The release workflow builds both parts, creates a GitHub release and – if configured – publishes the plugin to Modrinth and Hangar.

Secret / variable Purpose
RMC_KEYSTORE_BASE64, RMC_KEYSTORE_PASSWORD, RMC_KEY_ALIAS, RMC_KEY_PASSWORD Sign the APK (otherwise a debug key is used)
MODRINTH_TOKEN + variable MODRINTH_PROJECT_ID Upload to Modrinth
HANGAR_TOKEN + variable HANGAR_PROJECT Upload to Hangar

SpigotMC has no upload API; upload the jar there by hand. Store texts are in docs/store, the privacy policy in docs/PRIVACY.md.

RemoteMC is not affiliated with Mojang or Microsoft.

How RemoteMC is made

RemoteMC is developed with the help of Claude, an AI by Anthropic, using Claude Code. Most of the code, tests and documentation were written by Claude; this is also visible in the commit history, where Claude is the author. @michig-code decides what gets built, tests every version on real servers and devices, reports bugs and maintains the project.

Every change goes through the same checks: unit tests for plugin and apps, screenshot comparisons of every screen, and an end-to-end test against a real Paper server in CI. Found a bug or a security issue? Please open an issue.

License

MIT. Third-party libraries keep their own licences (listed in the app under Settings → Open-source licences).

About

Manage your Minecraft server from your phone – live, encrypted and free.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages