Back to Submit
For MUD Server Owners

MSSP Setup Guide

The Mud Server Status Protocol (MSSP) lets crawlers and directories read live statistics directly from your server — player counts, uptime, and more. MudMonster also uses a custom MSSP key to verify MUD ownership without needing an external account or email challenge. Setup varies by codebase; jump to yours below.

What is MSSP?

MSSP is a Telnet sub-negotiation protocol defined in the MUD Protocols specification. When a client connects and sends IAC WILL MSSP, your server responds with a structured block of key/value pairs:

IAC SB MSSP
  MSSP_VAR "NAME"    MSSP_VAL "My Realm"
  MSSP_VAR "PLAYERS" MSSP_VAL "14"
  MSSP_VAR "UPTIME"  MSSP_VAL "1715000000"
IAC SE

Crawlers like MudMonster connect periodically to collect this data without occupying a real player slot. The connection is short-lived and has no impact on gameplay.

Standard Variables

MudMonster reads the following standard MSSP fields. All are optional — broadcast what you can.

Variable Example value Notes
NAME My Realm Full MUD name
PLAYERS 14 Current online player count
UPTIME 1715000000 Unix timestamp of last server start
PORT 4000 Primary connection port
HOSTNAME myrealm.com Canonical hostname
CODEBASE ROM 2.4 Server codebase / engine
WEBSITE https://myrealm.com Public website URL
MINIMUM AGE 0 0 = all ages welcome
FAMILY DIKU Broad codebase family
GENRE Fantasy Game genre

Ownership Verification Key

When you claim a listing on MudMonster, you'll receive a unique token. Add it to your MSSP config as a custom variable — MudMonster will connect, read the value, and confirm ownership automatically.

MSSP_VAR "MUDMONSTER_VERIFY"  MSSP_VAL "mm-verify-your-token-here"

The token is single-use and only needs to be present during verification. Once confirmed:

  • You'll see a success message on the listing page.
  • You can safely remove MUDMONSTER_VERIFY from your config.
  • Your account gains edit access to the listing.

Evennia

Evennia has built-in MSSP support. Add or update MSSP_META_DATA in your server/conf/settings.py:

# server/conf/settings.py

MSSP_META_DATA = {
    "NAME": "My Realm",
    "PLAYERS": lambda: evennia.SESSION_HANDLER.count_sessions(only_connected=True),
    "UPTIME": lambda: int(gametime.SERVER_START_TIME),
    "CODEBASE": "Evennia",
    "WEBSITE": "https://myrealm.com",
    # Ownership verification — remove after confirming on MudMonster
    "MUDMONSTER_VERIFY": "mm-verify-your-token-here",
}

Callable values are evaluated at query time, giving live player counts. Restart Evennia after editing settings (evennia restart).

SMAUG / SMAUG FUSS

Most SMAUG variants ship with an mssp.c module. Custom variables are typically defined in mssp.c inside the mssp_table[] array:

/* In mssp.c — add to the mssp_table[] or equivalent struct */
{ "MUDMONSTER_VERIFY", NULL, "mm-verify-your-token-here", 0 },

If your SMAUG variant reads MSSP config from a flat file (e.g. area/mssp.dat), add a line:

MUDMONSTER_VERIFY   mm-verify-your-token-here

Reboot the MUD after editing. Check your codebase's documentation for the exact file and format.

ROM / Merc / DikuMUD

Stock ROM 2.4, Merc, and most DikuMUD variants do not include MSSP out of the box. You'll need to add it to your telnet negotiation code — usually in comm.c or a dedicated mssp.c file.

A minimal implementation sends the MSSP block in response to the Telnet WILL MSSP negotiation:

/* Telnet constants */
#define IAC   255
#define WILL  251
#define SB    250
#define SE    240
#define MSSP  70   /* 0x46 */
#define MSSP_VAR 1
#define MSSP_VAL 2

void send_mssp(DESCRIPTOR_DATA *d) {
    char buf[4096];
    int  n = 0;

    buf[n++] = IAC; buf[n++] = SB; buf[n++] = MSSP;

    /* NAME */
    buf[n++] = MSSP_VAR;
    n += sprintf(buf + n, "NAME");
    buf[n++] = MSSP_VAL;
    n += sprintf(buf + n, "My Realm");

    /* PLAYERS — replace num_playing() with your own function */
    buf[n++] = MSSP_VAR;
    n += sprintf(buf + n, "PLAYERS");
    buf[n++] = MSSP_VAL;
    n += sprintf(buf + n, "%d", num_playing());

    /* Ownership verification */
    buf[n++] = MSSP_VAR;
    n += sprintf(buf + n, "MUDMONSTER_VERIFY");
    buf[n++] = MSSP_VAL;
    n += sprintf(buf + n, "mm-verify-your-token-here");

    buf[n++] = IAC; buf[n++] = SE;
    write_to_descriptor(d->descriptor, buf, n);
}

Call send_mssp(d) from your Telnet negotiation handler when you receive IAC DO MSSP. Several community patches exist for ROM/Merc — search your codebase's forum for "MSSP patch".

CircleMUD / tbaMUD

tbaMUD (the standard CircleMUD descendant) includes MSSP support. Variables are defined in src/mssp.c in the mssp_info array:

/* src/mssp.c */
struct mssp_data mssp_info[] = {
  { "NAME",              NULL, CONFIG_MUDNAME,          0 },
  { "PLAYERS",           get_player_count,  NULL,       0 },
  /* ... existing entries ... */

  /* Add before the terminating NULL entry: */
  { "MUDMONSTER_VERIFY", NULL, "mm-verify-your-token-here", 0 },

  { NULL, NULL, NULL, 0 }  /* terminator — keep last */
};

Recompile and restart after editing. Stock CircleMUD 3.x does not include MSSP — use tbaMUD or apply a patch.

LPMud / FluffOS / MudOS

MSSP in LP-family drivers is typically implemented in the mudlib, not the driver itself. In FluffOS you can hook into Telnet negotiation via the master object or a dedicated daemon. A common pattern (Lima / MudOS mudlib style):

/* /secure/daemons/mssp_d.c — create and load via master.c or init */

#define IAC      "ÿ"
#define WILL     "û"
#define SB       "ú"
#define SE       "ð"
#define MSSP     "F"
#define MSSP_VAR ""
#define MSSP_VAL ""

string build_mssp() {
    mapping vars = ([
        "NAME"              : mud_name(),
        "PLAYERS"           : "" + sizeof(users()),
        "UPTIME"            : "" + time(),
        "MUDMONSTER_VERIFY" : "mm-verify-your-token-here",
    ]);

    string out = IAC + SB + MSSP;
    foreach(string key, string val : vars) {
        out += MSSP_VAR + key + MSSP_VAL + val;
    }
    return out + IAC + SE;
}

void send_mssp(object connection) {
    efun::write_socket(connection, build_mssp());
}

Call send_mssp() when you detect IAC DO MSSP in your Telnet negotiation handler. Driver and mudlib APIs vary — check your specific driver's documentation for socket write functions.

PennMUSH

PennMUSH 1.8.7+ supports MSSP. Variables are configured in mush.cnf:

# mush.cnf — add under the [mssp] section or at the top level

mssp_name           My Realm
mssp_hostname       myrealm.com
mssp_port           4201

# Custom variable for MudMonster ownership verification
mssp_MUDMONSTER_VERIFY  mm-verify-your-token-here

The exact directive format depends on your PennMUSH version. Some versions use mssp_extra_<key> for custom variables. Check your mush.cnf comments or the PennMUSH GitHub for your version. A @shutdown/reboot picks up config changes.

TinyMUX

TinyMUX 2.x supports MSSP via netmux.conf. Look for the mssp_* directives:

# netmux.conf

mssp_name           My Realm
mssp_port           4201
mssp_hostname       myrealm.com

# Custom field — some TinyMUX versions support free-form extra vars
# If not supported natively, add via the soft-code @mssp command:
#   @mssp MUDMONSTER_VERIFY=mm-verify-your-token-here

Older TinyMUX builds may not support arbitrary custom keys from the config file. In that case, use the in-game @mssp command if available, or apply a patch to add the key in the C source.

Custom / Homebrew Codebases

If you're running a custom server, MSSP requires handling the Telnet sub-negotiation sequence. The full exchange:

  1. Client connects and sends 0xFF 0xFB 0x46 (IAC WILL MSSP)
  2. Your server responds with 0xFF 0xFD 0x46 (IAC DO MSSP)
  3. Your server then immediately sends the MSSP data block (IAC SB MSSP ... IAC SE)

The MSSP data block format:

Byte sequence:
  0xFF 0xFA 0x46              ← IAC SB MSSP (start)
  0x01                        ← MSSP_VAR
  "NAME"                      ← key bytes (ASCII)
  0x02                        ← MSSP_VAL
  "My Realm"                  ← value bytes (ASCII)
  0x01                        ← MSSP_VAR
  "MUDMONSTER_VERIFY"
  0x02                        ← MSSP_VAL
  "mm-verify-your-token-here"
  ...more key/value pairs...
  0xFF 0xF0                   ← IAC SE (end)

Rules: keys and values are plain ASCII. Do not include null bytes. Values can be empty strings. The full variable list and spec are at tintin.mudhalla.net/protocols/mssp.

Testing Your MSSP

Use mudlet or a raw TCP tool to verify your MSSP is broadcasting correctly:

# netcat — sends IAC WILL MSSP and prints the raw response
printf '\xff\xfb\x46' | nc -q 3 your.mud.host 4000 | cat -v

# If you see "^?^Z^F" followed by key/value pairs, MSSP is working.
# Look for MUDMONSTER_VERIFY in the output.

Or use the MudMonster verify button on your listing claim page — it will report whether the token was found.

Mudlet's Server Info dialog (Ctrl+Shift+I) also shows MSSP data received from the connected server.

After Verification

Once MudMonster confirms the token:

  • Remove MUDMONSTER_VERIFY from your MSSP config — it's no longer needed.
  • Your account now has edit access to the listing.
  • Keep the remaining MSSP variables — MudMonster crawls PLAYERS periodically to update the live player count on your listing.