ServerProperties.json

Main server config file: config/ServerProperties.json.

Full example

{
  "TelemetryEnabled": true,
  "TelemetryToken": "replace-with-stable-random-token",
  "VoiceCraftConfig": {
    "Language": "en-US",
    "Port": 9050,
    "MaxClients": 100,
    "Motd": "VoiceCraft Proximity Chat!",
    "PositioningType": 0,
    "EnableVisibilityDisplay": true
  },
  "McWssConfig": {
    "Enabled": false,
    "LoginToken": "replace-with-secure-guid",
    "Hostname": "ws://127.0.0.1:9051/",
    "MaxClients": 1,
    "MaxTimeoutMs": 10000,
    "DataTunnelCommand": "voicecraft:data_tunnel",
    "CommandsPerTick": 3,
    "MaxByteLengthPerCommand": 300,
    "DisabledPacketTypes": []
  },
  "McHttpConfig": {
    "Enabled": true,
    "LoginToken": "replace-with-secure-guid",
    "Hostname": "http://127.0.0.1:9050/",
    "MaxClients": 1,
    "MaxTimeoutMs": 10000,
    "DisabledPacketTypes": []
  },
  "McTcpConfig": {
    "Enabled": false,
    "LoginToken": "replace-with-secure-guid",
    "Hostname": "127.0.0.1",
    "Port": 9050,
    "MaxClients": 1,
    "MaxTimeoutMs": 10000,
    "DisabledPacketTypes": []
  },
  "DefaultAudioEffectsConfig": {
    "1": { "EffectType": 1 },
    "2": { "WetDry": 1, "MinRange": 0, "MaxRange": 30, "EffectType": 2 },
    "4": { "WetDry": 1, "Delay": 0.5, "Range": 30, "EffectType": 4 },
    "8": { "WetDry": 1, "EffectType": 6 }
  }
}

Telemetry

  • TelemetryEnabled: enables anonymous startup, heartbeat, and crash diagnostics from VoiceCraft.Server.
  • TelemetryToken: stable pseudonymous fingerprint used to group telemetry events from one server installation.

If you do not want telemetry, set:

{
  "TelemetryEnabled": false
}

VoiceCraftConfig

  • Language: server log language.
  • Port: UDP port for the core VoiceCraft server.
  • MaxClients: maximum VoiceCraft client connections.
  • Motd: text returned by ping / info responses.
  • PositioningType: positioning mode:
    • 0 = Server
    • 1 = Client
  • EnableVisibilityDisplay: whether visibility indicators are sent to clients.

McWssConfig

Used for websocket / command-tunnel Bedrock flows.

  • Enabled: enable or disable McWss.
  • LoginToken: shared auth token, typically used with /voicecraft:vcconnect <token>.
  • Hostname: websocket host such as ws://0.0.0.0:9051/.
  • MaxClients: maximum McWss clients.
  • MaxTimeoutMs: inactivity timeout.
  • DataTunnelCommand: command name used for the data tunnel, usually voicecraft:data_tunnel.
  • CommandsPerTick: how many command packets are forwarded per tick.
  • MaxByteLengthPerCommand: payload budget (bytes) per command invocation.
  • DisabledPacketTypes: packet types blocked on this transport.

McHttpConfig

Used for Bedrock Dedicated Server and HTTP-based integrations.

  • Enabled
  • LoginToken
  • Hostname
  • MaxClients
  • MaxTimeoutMs
  • DisabledPacketTypes

Typical BDS binding:

{
  "Enabled": true,
  "LoginToken": "replace-with-token",
  "Hostname": "http://0.0.0.0:9050/",
  "MaxClients": 10,
  "MaxTimeoutMs": 10000,
  "DisabledPacketTypes": []
}

McTcpConfig

Used by Java-side bridges, especially GeyserVoice.

  • Enabled: enable or disable McTcp.
  • LoginToken: shared auth token for the TCP bridge.
  • Hostname: bind hostname, for example 127.0.0.1 or 0.0.0.0.
  • Port: TCP listen port.
  • MaxClients: maximum transport clients.
  • MaxTimeoutMs: inactivity timeout.
  • DisabledPacketTypes: packet types blocked on this transport.

Important differences compared to McHttp / McWss:

  • Hostname is a plain host, not a URI
  • Port is a separate field
  • this is the transport most relevant to GeyserVoice

DefaultAudioEffectsConfig

Dictionary key is a ushort bitmask, value is an effect JSON object.

Default matrix:

  • 1: Visibility
  • 2: Proximity
  • 4: ProximityEcho
  • 8: ProximityMuffle

You can override or extend the dictionary to change default effect behavior for new entities.

DisabledPacketTypes

Each transport supports DisabledPacketTypes.

Use this carefully:

  • it is intended for debugging, compatibility experiments, or emergency mitigation
  • disabling core packets can break login, entity sync, or audio delivery
  • do not change this in production unless you understand the packet flow

Practical production patterns

Bedrock Dedicated Server

  • McHttpConfig.Enabled = true
  • McWssConfig.Enabled = false
  • McTcpConfig.Enabled = false unless you also run Java-side bridges

Local world / singleplayer

  • McWssConfig.Enabled = true
  • McHttpConfig.Enabled = false or optional

GeyserVoice / Java bridge

  • McTcpConfig.Enabled = true
  • McHttpConfig.Enabled = false or optional
  • McWssConfig.Enabled = false unless also needed elsewhere

Important notes

  • always replace generated LoginToken values
  • with Hostname: http://0.0.0.0:9050/, the HTTP listener binds to a wildcard address
  • with McTcpConfig.Hostname = 0.0.0.0, the TCP bridge becomes remotely reachable
  • keep PositioningType aligned with the client configuration

See also: