Skip to main content

Server Management

The MCMP JavaScript SDK provides comprehensive server management capabilities, allowing you to create, configure, start, stop, and monitor Minecraft servers programmatically.

Creating Servers

Basic Server Creation

import { McmpClient } from '@mcmp/sdk';

const client = new McmpClient({
  apiKey: 'your-api-key'
});

// Create a basic server
const server = await client.servers.create({
  name: 'My Minecraft Server',
  type: 'PAPER',
  version: '1.21.1'
});

console.log('Created server:', server.id);

Advanced Server Configuration

const server = await client.servers.create({
  name: 'Production Server',
  type: 'PAPER',
  version: '1.21.1',
  configuration: {
    maxPlayers: 100,
    motd: 'Welcome to our server!',
    difficulty: 'HARD',
    gameMode: 'SURVIVAL'
  },
  resources: {
    memory: '4G',
    cpu: '2',
    disk: '20G'
  }
});

Server Lifecycle Management

Starting Servers

// Start a server
await client.servers.start(server.id);

// Start with custom configuration
await client.servers.start(server.id, {
  jvmArgs: '-Xmx4G -Xms2G',
  serverProperties: {
    'server-port': 25565,
    'enable-command-block': true
  }
});

Stopping Servers

// Graceful shutdown
await client.servers.stop(server.id);

// Force stop
await client.servers.forceStop(server.id);

// Stop with timeout
await client.servers.stop(server.id, {
  timeout: 300000, // 5 minutes
  forceAfterTimeout: true
});

Restarting Servers

// Restart server
await client.servers.restart(server.id);

// Restart with new configuration
await client.servers.restart(server.id, {
  updateConfiguration: true,
  backupBeforeRestart: true
});

Server Configuration

Updating Server Properties

const properties = {
  maxPlayers: 50,
  motd: 'Updated MOTD',
  difficulty: 'NORMAL',
  pvp: true,
  allowFlight: false
};

await client.servers.updateProperties(server.id, properties);

Managing Plugins

// Install a plugin
await client.servers.plugins.install(server.id, 'WorldEdit', '7.3.0');

// List installed plugins
const plugins = await client.servers.plugins.list(server.id);

// Update a plugin
await client.servers.plugins.update(server.id, 'WorldEdit', '7.3.1');

// Remove a plugin
await client.servers.plugins.remove(server.id, 'WorldEdit');

World Management

// Create a new world
const world = await client.servers.worlds.create(server.id, 'new-world');

// List worlds
const worlds = await client.servers.worlds.list(server.id);

// Set default world
await client.servers.worlds.setDefault(server.id, 'new-world');

// Backup world
const backup = await client.servers.worlds.backup(server.id, 'world');

Monitoring and Status

Server Status

// Get server status
const status = await client.servers.getStatus(server.id);
console.log('Server state:', status.state);
console.log('Players online:', status.playerCount);
console.log('Uptime:', status.uptime);

// Check if server is running
if (status.state === 'RUNNING') {
  console.log('Server is running!');
}

Performance Metrics

// Get performance metrics
const metrics = await client.servers.getMetrics(server.id);

console.log('CPU Usage:', metrics.cpuUsage + '%');
console.log('Memory Usage:', metrics.memoryUsage + 'MB');
console.log('Disk Usage:', metrics.diskUsage + 'GB');
console.log('Network I/O:', metrics.networkIn + ' / ' + metrics.networkOut);

Player Information

// List online players
const players = await client.servers.players.list(server.id);

players.forEach(player => {
  console.log('Player:', player.name);
  console.log('UUID:', player.uuid);
  console.log('Join Time:', player.joinTime);
});

// Get specific player info
const player = await client.servers.players.get(server.id, 'player-name');

Server Operations

Console Commands

// Execute console command
const result = await client.servers.executeCommand(server.id, 'say Hello World!');

// Execute command and get output
const output = await client.servers.executeCommand(server.id, 'list');
console.log('Command output:', output);

File Management

// List server files
const files = await client.servers.files.list(server.id, '/');

// Download server file
const fileContent = await client.servers.files.download(server.id, 'server.properties');

// Upload file to server
await client.servers.files.upload(server.id, 'config.yml', fileContent);

// Delete server file
await client.servers.files.delete(server.id, 'old-config.yml');

Logs and Monitoring

// Get server logs
const logs = await client.servers.logs.get(server.id, {
  level: 'INFO',
  since: new Date(Date.now() - 3600000) // Last hour
});

// Stream server logs in real-time
client.servers.logs.stream(server.id, (logEntry) => {
  console.log(`[${logEntry.timestamp}] ${logEntry.message}`);
});

Real-time Events

WebSocket Connection

// Connect to server events
const ws = client.servers.connect(server.id);

// Listen for player events
ws.on('player.join', (player) => {
  console.log(`${player.name} joined the server`);
});

ws.on('player.leave', (player) => {
  console.log(`${player.name} left the server`);
});

ws.on('server.status', (status) => {
  console.log('Server status changed:', status.state);
});

Event Handling

// Set up event listeners
client.servers.on('server.start', (serverId) => {
  console.log(`Server ${serverId} started`);
});

client.servers.on('server.stop', (serverId) => {
  console.log(`Server ${serverId} stopped`);
});

client.servers.on('player.join', (serverId, player) => {
  console.log(`Player ${player.name} joined server ${serverId}`);
});

Server Templates

Using Templates

// Create server from template
const server = await client.servers.createFromTemplate('vanilla-1.21.1', {
  name: 'My Server'
});

// List available templates
const templates = await client.servers.templates.list();

// Create custom template
const template = await client.servers.templates.create({
  name: 'My Custom Template',
  description: 'Custom server configuration',
  serverType: 'PAPER',
  version: '1.21.1',
  plugins: ['WorldEdit', 'Essentials'],
  configuration: customConfig
});

Error Handling

import { ServerError, OperationTimeoutError } from '@mcmp/sdk';

try {
  await client.servers.start(server.id);
} catch (error) {
  if (error instanceof ServerError) {
    console.error('Server operation failed:', error.message);
  } else if (error instanceof OperationTimeoutError) {
    console.error('Operation timed out:', error.message);
  } else {
    console.error('Unexpected error:', error.message);
  }
}

Async/Await Patterns

Sequential Operations

async function setupServer() {
  try {
    // Create server
    const server = await client.servers.create({
      name: 'My Server',
      type: 'PAPER',
      version: '1.21.1'
    });
    
    // Start server
    await client.servers.start(server.id);
    
    // Wait for server to be ready
    await client.servers.waitForStatus(server.id, 'RUNNING');
    
    // Configure server
    await client.servers.updateProperties(server.id, {
      maxPlayers: 50,
      motd: 'Welcome!'
    });
    
    console.log('Server setup complete!');
    
  } catch (error) {
    console.error('Setup failed:', error.message);
  }
}

Parallel Operations

async function manageMultipleServers() {
  const serverIds = ['server1', 'server2', 'server3'];
  
  // Start all servers in parallel
  await Promise.all(
    serverIds.map(id => client.servers.start(id))
  );
  
  // Get status of all servers
  const statuses = await Promise.all(
    serverIds.map(id => client.servers.getStatus(id))
  );
  
  console.log('All servers started:', statuses.every(s => s.state === 'RUNNING'));
}

Best Practices

Resource Management

Monitor resource usage and set appropriate limits

Backup Strategy

Implement regular backups for important servers

Error Handling

Always handle exceptions gracefully

Monitoring

Set up monitoring and alerting for server health

Next Steps

1

Real-time Events

Learn to handle real-time server events
2

Plugin Development

Develop custom plugins with the SDK
3

Monitoring

Set up comprehensive server monitoring