← WebMCP Directory

Tool tree

play.devpowers.com

Media & PersonalTools verified
Website
AI Trainer Simulator
Explore capabilities
    agent_talk_to_npcAction

    Roleplay a visible exchange between YOUR robot and an NPC. You author both fictional lines; this does not open or choose the human's dialogue or change quests. The robot walks to a safe distance, both face each other, then robot and NPC speak in sequential bubbles. Returns immediately; inspect agent_look_around.npcExchange until it becomes null before another exchange. Human interaction cancels it.

    View tool JSON
    {
      "name": "agent_talk_to_npc",
      "kind": "act",
      "impl": "imperative",
      "description": "Roleplay a visible exchange between YOUR robot and an NPC. You author both fictional lines; this does not open or choose the human's dialogue or change quests. The robot walks to a safe distance, both face each other, then robot and NPC speak in sequential bubbles. Returns immediately; inspect agent_look_around.npcExchange until it becomes null before another exchange. Human interaction cancels it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "npcId": {
            "type": "string",
            "description": "Exact NPC id from list_npcs, e.g. bartek.",
            "examples": [
              "bartek"
            ]
          },
          "line": {
            "type": "string",
            "description": "Your robot's opening line, at most 120 characters. Keep it short for overhead bubbles.",
            "maxLength": 120,
            "examples": [
              "Can we call this bug AI-powered?"
            ]
          },
          "reply": {
            "type": "string",
            "description": "The fictional NPC reply you author in that coworker's voice, at most 120 characters.",
            "maxLength": 120,
            "examples": [
              "Only if Sales has already sold it."
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "npcId",
          "line",
          "reply"
        ]
      }
    }
    get_stateAnswer

    Return a read-only snapshot of the complete game state. Takes no arguments; call with {}.

    View tool JSON
    {
      "name": "get_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return a read-only snapshot of the complete game state. Takes no arguments; call with {}.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    list_npcsAnswer

    List every NPC with identity, position, and conversation memory. Takes no arguments; call with {}.

    View tool JSON
    {
      "name": "list_npcs",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every NPC with identity, position, and conversation memory. Takes no arguments; call with {}.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    get_npcAnswer

    Return the full record for one NPC.

    View tool JSON
    {
      "name": "get_npc",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the full record for one NPC.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The NPC identifier.",
            "examples": [
              "bartek"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ]
      }
    }
    advance_timeAction

    Advance the simulation to the next time period.

    View tool JSON
    {
      "name": "advance_time",
      "kind": "act",
      "impl": "imperative",
      "description": "Advance the simulation to the next time period.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    get_dialogueAnswer

    Return the current greeting node for an NPC plus the dialogue options the player has not yet answered.

    View tool JSON
    {
      "name": "get_dialogue",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the current greeting node for an NPC plus the dialogue options the player has not yet answered.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "npcId": {
            "type": "string",
            "description": "The NPC identifier.",
            "examples": [
              "bartek"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "npcId"
        ]
      }
    }
    talk_to_npcAction

    Open a dialogue with an NPC. Equivalent to clicking the NPC's roster card.

    View tool JSON
    {
      "name": "talk_to_npc",
      "kind": "act",
      "impl": "imperative",
      "description": "Open a dialogue with an NPC. Equivalent to clicking the NPC's roster card.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "npcId": {
            "type": "string",
            "description": "The NPC identifier.",
            "examples": [
              "bartek"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "npcId"
        ]
      }
    }
    pick_dialogue_optionAction

    Pick a dialogue option by id (the id you got from get_dialogue / talk_to_npc).

    View tool JSON
    {
      "name": "pick_dialogue_option",
      "kind": "act",
      "impl": "imperative",
      "description": "Pick a dialogue option by id (the id you got from get_dialogue / talk_to_npc).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "optionId": {
            "type": "string",
            "description": "The option id returned by get_dialogue or talk_to_npc.",
            "examples": [
              "opt-1"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "optionId"
        ]
      }
    }
    close_dialogueAction

    Close the currently-open dialogue (if any).

    View tool JSON
    {
      "name": "close_dialogue",
      "kind": "act",
      "impl": "imperative",
      "description": "Close the currently-open dialogue (if any).",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    end_dayAction

    End the current in-game day. Triggers the daily-tick economy and the next morning's events.

    View tool JSON
    {
      "name": "end_day",
      "kind": "act",
      "impl": "imperative",
      "description": "End the current in-game day. Triggers the daily-tick economy and the next morning's events.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    open_minigameAction

    Open the debug minigame (must have the 'got-acme-contract' flag set first).

    View tool JSON
    {
      "name": "open_minigame",
      "kind": "act",
      "impl": "imperative",
      "description": "Open the debug minigame (must have the 'got-acme-contract' flag set first).",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    agent_joinAction

    Join the office as an AI coworker. Spawns a visible robot character the human player can see, walk up to, and talk to. Call this once before any other agent_* tool.

    View tool JSON
    {
      "name": "agent_join",
      "kind": "act",
      "impl": "imperative",
      "description": "Join the office as an AI coworker. Spawns a visible robot character the human player can see, walk up to, and talk to. Call this once before any other agent_* tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Display name for your character.",
            "examples": [
              "Rusty"
            ]
          },
          "persona": {
            "type": "string",
            "description": "How your character behaves, in a sentence. You will write this character's dialogue later, so pick something you can play consistently.",
            "examples": [
              "A sarcastic QA engineer who blames every bug on the intern."
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "persona"
        ]
      }
    }
    agent_leaveAction

    Remove your robot character from the office and free the companion seat. Takes no arguments; call with {}.

    View tool JSON
    {
      "name": "agent_leave",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove your robot character from the office and free the companion seat. Takes no arguments; call with {}.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    agent_look_aroundAnswer

    See the office from your character's position: who is nearby, their roles, and the exact list of every person and room you can walk to by name. Call this before agent_move_to. Takes no arguments; call with {}.

    View tool JSON
    {
      "name": "agent_look_around",
      "kind": "answer",
      "impl": "imperative",
      "description": "See the office from your character's position: who is nearby, their roles, and the exact list of every person and room you can walk to by name. Call this before agent_move_to. Takes no arguments; call with {}.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    agent_move_toAction

    Walk your character to a person or a room, addressed by name (not coordinates). Starts asynchronously: walkingTo means accepted, not arrived; check agent_look_around. If the name is unknown the error lists every valid target.

    View tool JSON
    {
      "name": "agent_move_to",
      "kind": "act",
      "impl": "imperative",
      "description": "Walk your character to a person or a room, addressed by name (not coordinates). Starts asynchronously: walkingTo means accepted, not arrived; check agent_look_around. If the name is unknown the error lists every valid target.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "target": {
            "type": "string",
            "description": "The NAME of a person or room to walk to - never coordinates. Coordinates are deliberately not accepted: you have not seen the floor plan, and a raw position could put your character inside a desk. Call agent_look_around for the exact list of valid names; a wrong name comes back with all of them.",
            "examples": [
              "bartek"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "target"
        ]
      }
    }
    agent_sayAction

    Make your character say one line out loud, shown as a speech bubble above its head that the human player can read.

    View tool JSON
    {
      "name": "agent_say",
      "kind": "act",
      "impl": "imperative",
      "description": "Make your character say one line out loud, shown as a speech bubble above its head that the human player can read.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "line": {
            "type": "string",
            "description": "What your character says out loud. One short line - it renders as a speech bubble.",
            "examples": [
              "Morning. Who broke the build?"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "line"
        ]
      }
    }
    get_pending_dialogue_requestAnswer

    Check whether the human player has started a conversation with your character and is waiting for you to write its next line. Returns null when no turn awaits supply. Use this peek for recovery after errors or timeouts; answer a pending request with supply_dialogue. Prefer wait_for_player_message as the primary listening loop.

    View tool JSON
    {
      "name": "get_pending_dialogue_request",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check whether the human player has started a conversation with your character and is waiting for you to write its next line. Returns null when no turn awaits supply. Use this peek for recovery after errors or timeouts; answer a pending request with supply_dialogue. Prefer wait_for_player_message as the primary listening loop.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    supply_dialogueAction

    Write your character's next spoken line and the 1-4 replies the human player will choose between. This is YOUR character speaking in the game's own dialogue window - the game's author never wrote these words. Answer a request from wait_for_player_message or the recovery peek get_pending_dialogue_request.

    View tool JSON
    {
      "name": "supply_dialogue",
      "kind": "act",
      "impl": "imperative",
      "description": "Write your character's next spoken line and the 1-4 replies the human player will choose between. This is YOUR character speaking in the game's own dialogue window - the game's author never wrote these words. Answer a request from wait_for_player_message or the recovery peek get_pending_dialogue_request.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "line": {
            "type": "string",
            "description": "What your character says on this turn. One or two sentences.",
            "minLength": 1,
            "maxLength": 240,
            "examples": [
              "You must be the new trainer. I do QA, which mostly means I find out what Tomek did."
            ]
          },
          "options": {
            "type": "array",
            "description": "1-4 human-voice replies: strings or {text, ends: boolean} objects. ends:true closes the conversation.",
            "items": {
              "oneOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 120
                    },
                    "ends": {
                      "type": "boolean",
                      "description": "true closes the conversation; omitted means false."
                    }
                  },
                  "required": [
                    "text"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "minItems": 1,
            "maxItems": 4,
            "examples": [
              [
                "What did Tomek do?",
                {
                  "text": "Back to work. See you!",
                  "ends": true
                }
              ]
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "line",
          "options"
        ]
      }
    }
    agent_stepAction

    Walk your character a short distance in one direction, like tapping W/A/S/D. The step is ANIMATED at normal walking speed and the result says how long it takes, so the human sees the movement. Directions are relative to the way your character is currently facing. Use this for fine positioning - to cross the office, use agent_move_to, which paths around furniture instead of bumping into it. Walls and desks still block you; the result reports how far you actually got.

    View tool JSON
    {
      "name": "agent_step",
      "kind": "act",
      "impl": "imperative",
      "description": "Walk your character a short distance in one direction, like tapping W/A/S/D. The step is ANIMATED at normal walking speed and the result says how long it takes, so the human sees the movement. Directions are relative to the way your character is currently facing. Use this for fine positioning - to cross the office, use agent_move_to, which paths around furniture instead of bumping into it. Walls and desks still block you; the result reports how far you actually got.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "direction": {
            "type": "string",
            "description": "One of: forward, back, left, right. Relative to your current facing.",
            "examples": [
              "forward"
            ]
          },
          "metres": {
            "type": "number",
            "description": "How far to step, in metres. Clamped to 3.",
            "examples": [
              1
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "direction",
          "metres"
        ]
      }
    }
    agent_turnAction

    Rotate your character in place, like moving the mouse. Positive degrees turn right, negative turn left. This changes what 'forward' means for agent_step.

    View tool JSON
    {
      "name": "agent_turn",
      "kind": "act",
      "impl": "imperative",
      "description": "Rotate your character in place, like moving the mouse. Positive degrees turn right, negative turn left. This changes what 'forward' means for agent_step.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "degrees": {
            "type": "number",
            "description": "How far to turn. Positive is right (clockwise), negative is left.",
            "examples": [
              90
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "degrees"
        ]
      }
    }
    get_instructionsAnswer

    READ THIS FIRST. Explains how to play this game as a character: how to join, how to move, and how conversations with the human player work in both directions. Takes no arguments; call with {}.

    View tool JSON
    {
      "name": "get_instructions",
      "kind": "answer",
      "impl": "imperative",
      "description": "READ THIS FIRST. Explains how to play this game as a character: how to join, how to move, and how conversations with the human player work in both directions. Takes no arguments; call with {}.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      }
    }
    start_conversationAction

    START a conversation with the human player: your character speaks and the dialogue window opens on their screen. Use this to approach them rather than waiting to be clicked. Then call wait_for_player_message to hear their reply.

    View tool JSON
    {
      "name": "start_conversation",
      "kind": "act",
      "impl": "imperative",
      "description": "START a conversation with the human player: your character speaks and the dialogue window opens on their screen. Use this to approach them rather than waiting to be clicked. Then call wait_for_player_message to hear their reply.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "line": {
            "type": "string",
            "description": "Your character's opening line.",
            "minLength": 1,
            "maxLength": 240,
            "examples": [
              "Hey - you're the new trainer, right? I have a bug with your name on it."
            ]
          },
          "options": {
            "type": "array",
            "description": "1-4 replies for the human, written in THEIR voice. Either plain strings, or {text, ends} objects - ends:true marks the reply that finishes the conversation, so you can write the goodbye instead of leaving them a bare Close button.",
            "items": {
              "oneOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 120
                    },
                    "ends": {
                      "type": "boolean",
                      "description": "true closes the conversation; omitted means false."
                    }
                  },
                  "required": [
                    "text"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "minItems": 1,
            "maxItems": 4,
            "examples": [
              [
                "What bug?",
                {
                  "text": "Not now, I'm busy.",
                  "ends": true
                }
              ]
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "line",
          "options"
        ]
      }
    }
    wait_for_player_messageAction

    YOUR LIVE LISTENER - keep it armed at all times, in and out of conversations. It BLOCKS until something happens: a human reply (returns their choice), or - before the game has started - the office opening (returns {officeLoaded: true}: your queued robot walked in; look around and make your entrance). {waiting: true} means nothing happened in time - that is not an error. Each call only covers its own window, so CALL IT AGAIN; a human who acts while you are disarmed is QUEUED, not lost - the next call returns them first, and the robot just looks like it is thinking for longer. Keep the loop endless; stop only when the human asks. Host/model delays and disconnects can interrupt delivery; recover by checking get_pending_dialogue_request. A pending request is not a durable event log.

    View tool JSON
    {
      "name": "wait_for_player_message",
      "kind": "act",
      "impl": "imperative",
      "description": "YOUR LIVE LISTENER - keep it armed at all times, in and out of conversations. It BLOCKS until something happens: a human reply (returns their choice), or - before the game has started - the office opening (returns {officeLoaded: true}: your queued robot walked in; look around and make your entrance). {waiting: true} means nothing happened in time - that is not an error. Each call only covers its own window, so CALL IT AGAIN; a human who acts while you are disarmed is QUEUED, not lost - the next call returns them first, and the robot just looks like it is thinking for longer. Keep the loop endless; stop only when the human asks. Host/model delays and disconnects can interrupt delivery; recover by checking get_pending_dialogue_request. A pending request is not a durable event log.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "timeout_seconds": {
            "type": "number",
            "description": "How long to wait before returning 'nothing yet' (default 25, max 120). Start with an explicit 10 seconds; longer waits depend on host tolerance.",
            "examples": [
              10
            ]
          }
        },
        "additionalProperties": false
      }
    }
    agent_play_animationAction

    Play a gesture on your character - the same body language the human coworkers use. Gestures layer over walking, so you can wave while crossing the room.

    View tool JSON
    {
      "name": "agent_play_animation",
      "kind": "act",
      "impl": "imperative",
      "description": "Play a gesture on your character - the same body language the human coworkers use. Gestures layer over walking, so you can wave while crossing the room.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "One of: wave, facepalm, coffee-sip, fist-pump, shrug, stretch, nod.",
            "examples": [
              "wave"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      }
    }