Skip to content

Worker Backend Template

Lionel Timothy Tarigan edited this page May 13, 2026 · 5 revisions

CloudChat Worker Backend

CloudChat requires a Cloudflare Worker backend to connect Minecraft chat to Cloudflare Workers AI.

This backend handles:

  • AI requests
  • API authentication
  • Model selection
  • Server awareness context
  • AI responses

Setup

  1. Create a Cloudflare Worker ( Use the existing one if you already made it before )

  2. Delete the default Worker code

  3. Copy and paste the CloudChat Worker template below

  4. Deploy the Worker

  5. Copy your Worker URL

Example:

https://cloudchat.yourname.workers.dev
  1. Put the Worker URL into your CloudChat config:
worker_url=https://cloudchat.yourname.workers.dev

Paste this code into your Cloudflare Worker: Note : This code Last Updated was V1.1.3 ( Backend and Model Revamp )

export default {
  async fetch(request, env) {
    if (request.method !== "POST") {
      return Response.json(
        { error: "Method not allowed" },
        { status: 405 }
      );
    }

    const authHeader = request.headers.get("Authorization");
    const expectedSecret = `Bearer ${env.API_SECRET}`;

    if (authHeader !== expectedSecret) {
      return Response.json(
        { error: "Unauthorized" },
        { status: 401 }
      );
    }

    let data;

    try {
      data = await request.json();
    } catch {
      return Response.json(
        { error: "Invalid JSON body" },
        { status: 400 }
      );
    }

    const {
      player,
      message,
      system_prompt,
      model,

      safe_mode,
      online_players,
      max_players,
      dimension,
      world_time,

      can_access_online_player_count,
      can_access_dimension,
      can_access_world_time,
      can_access_player_coordinates
    } = data;

    const selectedModel =
      model || "@cf/meta/llama-3.1-8b-instruct";

    let serverContext = "";

    if (can_access_online_player_count) {
      serverContext +=
        `Online players: ${online_players}/${max_players}\n`;
    }

    if (can_access_dimension) {
      serverContext +=
        `Player dimension: ${dimension}\n`;
    }

    if (can_access_world_time) {
      serverContext +=
        `World time: ${world_time}\n`;
    }

    serverContext += `
Capabilities:
- Can access online player count: ${can_access_online_player_count}
- Can access player coordinates: ${can_access_player_coordinates}
- Can access dimension: ${can_access_dimension}
- Can access world time: ${can_access_world_time}
- Safe mode: ${safe_mode}

Important rules:
- Do not invent player counts, coordinates, structures, inventories, commands, or admin data.
- Only use server data provided in this request.
- If the requested data is not provided, say you do not have access to it.
`;

    const aiResponse = await env.AI.run(selectedModel, {
      messages: [
        {
          role: "system",
          content: `${system_prompt}\n\n${serverContext}`
        },
        {
          role: "user",
          content: `${player}: ${message}`
        }
      ]
    });

    return Response.json({
      reply: aiResponse.response || "No response from AI."
    });
  }
};

Clone this wiki locally