Integration Recipes
These are practical deployment patterns for the most common VoiceCraft scenarios.
Use this page after you understand the basic components and need a concrete topology recipe. Each scenario lists the stack, the main reason to choose it, the config that matters most, and the validation point that proves it works.
Scenario A: Bedrock Dedicated Server
Stack:
VoiceCraft.ServerVoiceCraft.Addon.Core.McHttp- VoiceCraft clients
Choose this when:
- BDS is the main game server
- BDS can reach a VoiceCraft HTTP endpoint
- you want the most stable Bedrock production path
Recommended config:
McHttpConfig.Enabled = trueMcWssConfig.Enabled = falseMcTcpConfig.Enabled = falseunless also needed
Flow:
- deploy
VoiceCraft.Server - secure
McHttpConfig.LoginToken - ensure BDS can reach
McHttpConfig.Hostname - install
Core.McHttp - run
voicecraft:vcconnect <hostname> <token> - validate
voicecraft:vcbind <key> - connect a client and confirm proximity changes with movement
Scenario B: Local / singleplayer Bedrock world
Stack:
- local VoiceCraft stack
VoiceCraft.Addon.Core.McWss
Choose this when:
- you are testing locally
- you do not run BDS
- the
/connectwebsocket flow is available
Flow:
- enable
McWss - keep
DataTunnelCommand = voicecraft:data_tunnel - install
Core.McWss - use
/connect - run
voicecraft:vcconnect <token> - validate bind and movement
Scenario C: Direct Paper with GeyserVoice-managed runtime
Stack:
- Paper / Folia
GeyserVoice- plugin-managed VoiceCraft runtime
Choose this when:
- one Paper/Folia server should own voice integration
- you want fewer external services
- GeyserVoice should download and start VoiceCraft
Flow:
- install
GeyserVoice - set
config.proxy.enabled = false - configure
config.voicecraft.transport.login-token - enable
config.voicecraft.auto-start - reload and validate bind flow
This is the simplest Java-side setup when you want the plugin to run VoiceCraft under the hood.
Scenario D: Direct Paper with external VoiceCraft
Stack:
- Paper / Folia
GeyserVoice- externally managed
VoiceCraft.Server
Choose this when:
- you already run VoiceCraft with systemd, Docker, or a panel
- several components may need the same backend
- you want external logs and restart policy
Flow:
- enable
McTcpon VoiceCraft - set
config.voicecraft.transport.host,config.voicecraft.transport.port, andconfig.voicecraft.transport.login-tokenin GeyserVoice - disable plugin runtime management if not needed
- reload and validate connection
Scenario E: Velocity or Bungee network
Stack:
GeyserVoiceon proxyGeyserVoiceon backend Paper serversVoiceCraft.ServerwithMcTcp
Choose this when:
- Velocity or BungeeCord routes players across backend servers
- the proxy should own the VoiceCraft connection
- backend servers should only send snapshots
Flow:
- configure the proxy as the VoiceCraft owner
- configure backend Paper nodes for proxy mode
- reload plugin on all nodes
- validate cross-server player movement
Minimal production config fragment
{
"VoiceCraftConfig": {
"Port": 9050,
"MaxClients": 250,
"PositioningType": 0
},
"McHttpConfig": {
"Enabled": true,
"LoginToken": "replace-with-strong-token",
"Hostname": "http://0.0.0.0:9050/",
"MaxClients": 10
},
"McTcpConfig": {
"Enabled": true,
"LoginToken": "replace-with-strong-token",
"Hostname": "0.0.0.0",
"Port": 9052,
"MaxClients": 10
},
"McWssConfig": {
"Enabled": false,
"LoginToken": "replace-with-strong-token",
"Hostname": "ws://0.0.0.0:9051/",
"DataTunnelCommand": "voicecraft:data_tunnel"
}
}
This fragment shows a mixed HTTP + TCP deployment. Do not bind McHttp and McTcp to the same TCP port. The VoiceCraft UDP client port can share the number 9050 because it is UDP, but HTTP and raw TCP listeners need distinct TCP bindings.
Troubleshooting order
- verify token match
- verify host / port reachability
- verify chosen transport is enabled
- verify addon or plugin topology matches the config
- only then investigate packet-level issues
What "working" means
A recipe is complete only when all of these are true:
VoiceCraft.Serverstarts without listener errors- at least one VoiceCraft client connects
- the Minecraft-side transport authenticates
- bind flow completes
- moving in game changes proximity behavior
- staff can identify connected clients/entities for troubleshooting