Skip to main content
Processes are the core of McDis-RCON configuration. Each process represents a Minecraft server or proxy network that McDis will manage.

Process Types

McDis-RCON distinguishes between two types of processes:

Servers

Minecraft server instances (Vanilla, Paper, Fabric, Spigot, etc.)

Networks

Proxy networks (Velocity, Waterfall, Bungeecord)
The distinction is organizational. Both types function identically in McDis-RCON; the separation helps you organize your infrastructure logically.

Basic Process Configuration

Processes are defined in the Processes section of md_config.yml:
Processes:
  Networks:
    velocity:
      start_cmd: java -Xms1G -Xmx2G -jar velocity.jar
      stop_cmd: end
      blacklist:
        - 'logged in'
        
  Servers:
    survival:
      start_cmd: java -Xms4G -Xmx8G -jar paper.jar nogui
      stop_cmd: stop
      blacklist:
        - 'Can\'t keep up'

Process Naming

Process names must follow these rules:
  • Letters (a-z, A-Z)
  • Numbers (0-9)
  • Periods (.)
  • Hyphens (-)
  • Underscores (_)
  • Spaces
Valid examples:
survival_server:
creative-world:
lobby.1:
SMP Server:
network_01:
Invalid examples:
server@123:     # @ not allowed
test#server:    # # not allowed
my_server!:     # ! not allowed
Maximum length: 40 characters
# Too long (43 characters)
my_super_long_server_name_that_exceeds_limit:

# OK (33 characters)
my_reasonably_named_server_01:
Cannot use these names:
  • .mdbackups
  • .mdaddons
  • Flask
These are reserved for McDis system directories.
Process names are case-insensitive for commands:
SurvivalServer:  # Defined in config
All of these commands work:
!!start SurvivalServer
!!start survivalserver
!!start SURVIVALSERVER
Each process must have a unique name (case-insensitive):
# ERROR: Duplicate names
Servers:
  my_server:  # First definition
    ...
Networks:
  my_server:  # Duplicate! Will fail validation
    ...

Start Command Configuration

The start_cmd defines how to launch the process:
start_cmd: java -Xms4G -Xmx8G -jar paper.jar nogui

Command Structure

McDis splits the command by spaces and executes it:
subprocess.Popen(start_cmd.split(' '), cwd=process_folder, ...)
Important: The command is split by spaces, so arguments cannot contain spaces. If you need spaces in arguments, this won’t work:
# Won't work if path has spaces
start_cmd: java -jar "C:\Program Files\server.jar"
Instead, use paths without spaces or create a wrapper script.

Example Start Commands

start_cmd: java -Xms4G -Xmx8G -jar paper.jar nogui

JVM Memory Flags

Sets initial Java heap size:
-Xms4G    # Start with 4GB
-Xms512M  # Start with 512MB
Setting -Xms equal to -Xmx can improve performance by preventing heap resizing.
Sets maximum Java heap size:
-Xmx8G    # Maximum 8GB
-Xmx2G    # Maximum 2GB
Don’t allocate all system RAM to Minecraft. Leave at least 2-4GB for the operating system and other processes.

Performance Flags

Optional JVM flags for better performance:
start_cmd: java -Xms8G -Xmx8G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -jar paper.jar nogui
These are Aikar’s flags, commonly used for Minecraft servers. Research flags before using them.

Stop Command Configuration

The stop_cmd defines how to gracefully shut down the process:
stop_cmd: stop
This command is sent to the process’s stdin when stopping.

Common Stop Commands

Minecraft Servers

stop

Velocity

end

Waterfall/Bungee

end
Check your server software documentation if unsure. Most Minecraft servers use stop, while most proxies use end.

MCDReforged Special Case

For MCDReforged:
stop_cmd: stop
But also ensure in your MCDR config:
# In MCDReforged's config.yml
advanced_console: false
MCDR’s advanced_console must be set to false to prevent console formatting conflicts with McDis-RCON.

Blacklist Configuration

The blacklist filters console output from Discord:
blacklist:
  - 'Can\'t keep up'
  - 'Debug'
  - 'moved too quickly'
Any log line containing a blacklisted term is silently dropped from Discord (but still sent to plugins).

Common Blacklist Patterns

blacklist:
  - 'Can\'t keep up'
  - 'Is the server overloaded'
  - 'Running'
blacklist:
  - 'joined the game'
  - 'left the game'
  - 'logged in'
  - 'has disconnected'
blacklist:
  - '[Debug]'
  - 'DEBUG'
  - '[VERBOSE]'
blacklist:
  - '[SomePlugin]'
  - 'VeryVerbosePlugin:'
  - 'Checking for updates'
blacklist:
  - 'ServerConnector'
  - 'InitialHandler'
  - 'has connected'

Blacklist Behavior

  • Case-sensitive: 'debug' won’t match '[Debug]'
  • Substring matching: 'keep up' matches "Can't keep up! Is the server overloaded?"
  • Empty blacklist: Use [] or blacklist: [] for no filtering
  • Null/None: If blacklist is missing or null, it’s treated as empty
Start with an empty blacklist and add items as you identify spam. Don’t over-filter or you might miss important warnings!

Multi-Server Configuration Example

Here’s a complete example with multiple servers and a proxy:
Processes:
  Networks:
    velocity_proxy:
      start_cmd: java -Xms1G -Xmx2G -XX:+UseG1GC -jar velocity.jar
      stop_cmd: end
      blacklist:
        - 'logged in with entity id'
        - 'has connected'
        - 'has disconnected'
        - 'ServerConnector'
        
  Servers:
    lobby:
      start_cmd: java -Xms2G -Xmx4G -jar paper.jar nogui
      stop_cmd: stop
      blacklist:
        - 'Can\'t keep up'
        - 'moved too quickly'
        
    survival:
      start_cmd: java -Xms8G -Xmx12G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -jar paper.jar nogui
      stop_cmd: stop
      blacklist:
        - 'Can\'t keep up'
        - 'Debug'
        
    creative:
      start_cmd: java -Xms4G -Xmx6G -jar paper.jar nogui
      stop_cmd: stop
      blacklist:
        - 'Can\'t keep up'
        
    minigames:
      start_cmd: java -Xms3G -Xmx6G -jar paper.jar nogui
      stop_cmd: stop
      blacklist: []

Process Directory Structure

When you define a process, McDis creates directories:
McDis/
├── md_config.yml
├── survival/
│   ├── .mdplugins/        # Plugins for this process
│   ├── .mdcommands/       # Predefined commands
│   ├── server.jar
│   ├── server.properties
│   ├── world/
│   └── ...
├── creative/
│   ├── .mdplugins/
│   ├── .mdcommands/
│   └── ...
├── .mdbackups/
│   ├── survival/
│   └── creative/
└── .mdaddons/
1

Before Starting McDis

Create folders matching your process names:
mkdir survival creative velocity_proxy
2

Place Server Files

Put server JAR and files in each folder:
cp paper.jar survival/
cp fabric-server.jar creative/
cp velocity.jar velocity_proxy/
3

Start McDis

McDis will create .mdplugins and .mdcommands automatically

Working Directory

When a process starts, its working directory is set to its folder:
subprocess.Popen(..., cwd=process_folder)
This means:
  • Relative paths in server configs work correctly
  • Server files are read from the process folder
  • Logs are written to the process folder

Empty Process Sections

If you don’t have networks or servers, use empty sections:
Processes:
  Networks:   # No networks
  
  Servers:
    my_server:
      start_cmd: java -jar server.jar
      stop_cmd: stop
      blacklist: []
Or:
Processes:
  Networks:
    velocity:
      start_cmd: java -jar velocity.jar
      stop_cmd: end
      blacklist: []
      
  Servers:    # No servers

Process Configuration Validation

McDis validates all process configurations on startup:
# Name validation
if not isinstance(process, str):
    print(f'{process}: The process names must be string.')
    
if len(process) > 40:
    print(f'{process}: The process name must not exceed 40 characters.')
    
if process in ['.mdbackups', '.mdaddons', 'Flask']:
    print(f'{process}: A process cannot be named...')
    
# Command validation
if not isinstance(process_config['start_cmd'], str):
    print(f'{process}: The \'start_cmd\' variable must be a string.')
    
if not isinstance(process_config['stop_cmd'], str):
    print(f'{process}: The \'stop_cmd\' variable must be a string.')
    
# Blacklist validation
if not all([isinstance(x,str) for x in process_config['blacklist']]):
    print(f'{process}: The \'blacklist\' variable must be a list of strings.')

Troubleshooting

Check:
  • Is start_cmd correct?
  • Does the JAR file exist in the process folder?
  • Is Java installed and in PATH?
  • Are there enough system resources?
Debug: Try running the start command manually in the process folder:
cd survival
java -Xms4G -Xmx8G -jar paper.jar nogui
Check:
  • Is stop_cmd correct for your server type?
  • Is the server responding to commands?
Solution:
  • Verify stop command in server documentation
  • Use kill command if necessary
Error:
Process names can only contain letters, numbers, periods (.), hyphens (-), underscores (_), and spaces.
Solution: Rename process to use only allowed characters:
# Before
my@server: ...

# After
my_server: ...
Error:
You can't have two processes with the same name: my_server
Solution: Ensure all process names are unique (case-insensitive):
# Wrong
Servers:
  survival: ...
Networks:
  Survival: ...  # Duplicate!
  
# Right
Servers:
  survival_server: ...
Networks:
  survival_proxy: ...

Best Practices

Descriptive Names

Use clear, descriptive process names: survival_smp instead of server1

Memory Allocation

Test and tune memory allocation based on actual usage

Blacklist Wisely

Filter spam but keep important warnings visible

Document Config

Add comments explaining non-obvious configuration choices

Configuration Overview

Complete configuration reference

Discord Setup

Configure bot and panel

Advanced Options

Flask and backup configuration

Process Control

Managing configured processes

Build docs developers (and LLMs) love