Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
run_luaA

Execute Lua in the TTSim Global script context and return the result.

Use return to get a value back. Tables arrive as JSON objects/arrays; numbers, strings, booleans and nil (null) work too. TTSim objects (userdata) cannot be returned directly: return their fields instead, e.g. local o = getObjectFromGUID("abc123") return {name = o.getName(), pos = o.getPosition()}. Lua runtime and syntax errors come back as tool errors with the TTSim message. Changes made here are visible to the player immediately, so act deliberately.

get_scriptsA

Read the loaded game's Lua scripts and UI XML (read-only).

Returns {"global": {"script", "ui"}, "objects": [{"guid", "name", "type", "script", "ui"}]}, listing only objects whose script or UI is not empty.

get_eventsA

Messages TTSim sent on its own since sequence number since: print output, Lua errors, game loaded/saved, objects created.

Returns {"events": [{"seq", "time", "kind", ...}], "last_seq"}. Pass last_seq as since next time to get only new events. Only events received while this server runs are available.

ttsim_statusA

Check whether TTSim is reachable; if so, return the loaded game's name, object count and seated players (colour, host). Never fails: an unreachable TTSim is reported, not raised.

list_objectsA

List objects on the table: guid, name, description, type, tags, tint (hex), position, rotation, locked, resting. Optional filters: name (case-insensitive substring), type (e.g. "Dice"), tag, tint (hex, e.g. "bbbbbb"). GUIDs change when a game is loaded, so look objects up each session.

inspect_objectA

Full details of one object: everything list_objects gives, plus scale, bounds (world-axis box: center, size), value (dice etc.), whether it is held or moving, and its snap points in world coordinates (e.g. the slots on a game board).

move_objectA

Move one object to position (optionally rotation) and wait until it has settled. smooth=true (default) glides it so the player sees the move; false teleports it. Place pieces slightly above their resting height and let physics settle them. Returns the final position and rotation.

move_objectsA

Move several objects at once and wait until all have settled. Either:

  • moves: [{"guid", "position", "rotation"?}, ...] for explicit targets, or

  • guids + offset [dx, dy, dz] to shift them together, keeping their formation.

table_geometryA

The table's type and bounding box (center, size), and global snap points. Snap points that belong to a board are listed by inspect_object on the board.

measureB

Horizontal distance between two objects (GUIDs) or points ([x, y, z]), in world units. Returns center (centre to centre), edge (between bounding boxes, 0 if overlapping), dx, dy, dz.

highlightB

Highlight an object for a few seconds to point it out to the player. color is a TTSim colour name: White, Red, Orange, Yellow, Green, Blue, Purple, Pink, ...

roll_diceA

Roll dice with TTSim's physics roll (visibly lifted and spun, like pressing R) and wait until all have come to rest. Coins (and other objects with named faces) are flipped with TTSim's randomize and report their face name, e.g. "Heads"; only numeric dice count towards the total. Returns each die's value and tilt (degrees from lying flat), the total, and cocked: dice tilted more than cocked_tilt (default 10°, for flat surfaces), whose value may be disputed. Dice bounce: roll them where nothing else can be hit, e.g. in a dice tray.

read_diceA

Read dice values without rolling (e.g. after the player rolled): the given dice/coins, or all dice and coins on the table. Coins report their face name, e.g. "Heads". Each die has value, resting, tilt, cocked, tint and position.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a clearly distinct action or resource: script reading vs. Lua execution, single- vs. multi-object movement, rolling vs. reading dice, measuring vs. geometry, listing vs. inspecting objects. The singular/plural move_object/move_objects and roll_dice/read_dice pairs are explicitly differentiated in their descriptions, leaving no realistic ambiguity.

Naming Consistency4/5

The set is consistently snake_case and mostly follows a verb_noun pattern (get_scripts, list_objects, inspect_object, move_object, roll_dice, read_dice). A few tools deviate: ttsim_status and table_geometry are noun phrases while measure and highlight are bare verbs without an object, but these are still readable and predictable.

Tool Count5/5

13 tools is well within the ideal 3-15 range and each earns its place, covering distinct facets of tabletop simulation control (scripting, object manipulation, measurement, dice, status). No tool feels redundant or padded.

Completeness4/5

The surface covers the core lifecycle: reading scripts, executing arbitrary Lua, listing/inspecting objects, moving single/multiple objects, geometry, measurement, highlighting, and dice roll/read. Gaps exist around object creation/deletion, chat/player messaging, and save/load operations, but run_lua serves as a powerful escape hatch for most of these.

Maintenance

ActivityMaintained
ResponsivenessNo issues