TTSim-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| run_luaA | Execute Lua in the TTSim Global script context and return the result. Use |
| 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 Returns {"events": [{"seq", "time", "kind", ...}], "last_seq"}. Pass |
| 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 |
| move_objectsA | Move several objects at once and wait until all have settled. Either:
|
| 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
|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
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.
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.
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.
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.