> For the complete documentation index, see [llms.txt](https://docs.sunflower-land.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sunflower-land.com/contributing/portals-ugc/mmo-server.md).

# MMO Server

Do you want player interaction inside of your Portal? This can be useful for mini-games that require co-operation or chat features.

## Setup

To connect to Sunflower Land MMO server, you must first update your `.env` file

```properties
VITE_API_URL=https://api-dev.sunflower-land.com
VITE_ROOM_URL=wss://mmo-dev.sunflower-land.com
```

Next you must ensure that a valid JWT is present from the player, see [Portal APIs](/contributing/portals-ugc/portal-apis.md#setup-and-authorisation)

## Connect to Server

We use `colyseus` to manage MMO connections inside of the game. See the example below in `portalMachine.ts` as to how the Crop Boom minigame creates a server connection.

```typescript
          // Join the MMO Server
          let mmoServer: Room<PlazaRoomState> | undefined;
          const serverName = getServer();
          const mmoUrl = CONFIG.ROOM_URL;

          if (serverName && mmoUrl) {
            const client = new Client(mmoUrl);

            mmoServer = await client?.joinOrCreate<PlazaRoomState>(serverName, {
              jwt: context.jwt,
              bumpkin: game?.bumpkin,
              farmId,
              x: SPAWNS.portal_example.default.x,
              y: SPAWNS.portal_example.default.y,
              sceneId: "portal_example",
              experience: game.bumpkin?.experience ?? 0,
            });
          }
```

Once you have established a server connection, you must pass this `mmoServer` into your Phaser initialisation.

```typescriptreact
game.current.registry.set("mmoServer", portalState.context.mmoServer);
```
