{"ok":true,"site":{"host":"stealthdraft-webmcp.vercel.app","url":"https://stealthdraft-webmcp.vercel.app/","type":"live","desc":"StealthDraft","tools":[{"name":"get_mission_state","kind":"answer","impl":"imperative","description":"Returns the current structured mission graph including rooms, entities, connections, counts, and stable IDs. Call this before modifying an existing mission because a human may have changed the mission since your last read; do not rely on remembered state.","title":"Get mission state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_room","kind":"act","impl":"imperative","description":"Creates a new mission room and returns its stable ID for subsequent entity placement and connections. Supported room types are normal, corridor, security_room, and server_room.","title":"Create room","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["name","type"],"properties":{"name":{"type":"string","description":"Display name for the new room."},"type":{"type":"string","enum":["normal","corridor","server_room","security_room"],"description":"Room kind: normal, corridor, server_room, or security_room."},"x":{"type":"number","description":"Canvas X position. Omit together with y to use a deterministic default."},"y":{"type":"number","description":"Canvas Y position. Omit together with x to use a deterministic default."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_room","kind":"act","impl":"imperative","description":"Updates an existing room. Omitted optional fields remain unchanged.","title":"Update room","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["roomId"],"properties":{"roomId":{"type":"string","description":"Stable id of the room to modify."},"name":{"type":"string","description":"Replacement display name."},"type":{"type":"string","enum":["normal","corridor","server_room","security_room"],"description":"Replacement room kind."},"x":{"type":"number","description":"Replacement canvas X position."},"y":{"type":"number","description":"Replacement canvas Y position."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_room","kind":"transact","impl":"imperative","description":"Deletes a room and also removes entities inside it and connections attached to it. This is destructive; prefer targeted mutations when repairing a mission.","title":"Delete room","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["roomId"],"properties":{"roomId":{"type":"string","description":"Stable id of the room to delete."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"place_entity","kind":"act","impl":"imperative","description":"Places a NEW entity in the mission. Supported types are player_spawn, extraction, objective, enemy, and keycard. To move an existing entity to another room or position, use update_entity instead of place_entity; place_entity creates a new entity.","title":"Place entity","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"type":"string","enum":["player_spawn","extraction","objective","enemy","keycard"],"description":"Entity kind: player_spawn, extraction, objective, enemy, or keycard."},"roomId":{"type":"string","description":"Existing room id to place the entity inside. Omit to place on the canvas."},"x":{"type":"number","description":"X position. Relative to the room when roomId is set, otherwise canvas."},"y":{"type":"number","description":"Y position. Relative to the room when roomId is set, otherwise canvas."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_connection","kind":"act","impl":"imperative","description":"Creates a bidirectional route between two rooms. A↔B and B↔A represent the same connection; duplicate calls are safe and return the existing connection. Connection type is a design-level classification. A locked connection is a controlled security access route visually, but validation treats locked and normal connections as structurally traversable the same way. Keycard gameplay/possession is not simulated by the current deterministic validator.","title":"Create connection","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["sourceRoomId","targetRoomId"],"properties":{"sourceRoomId":{"type":"string","description":"Stable id of one endpoint room. The connection is bidirectional."},"targetRoomId":{"type":"string","description":"Stable id of the other endpoint room. A↔B is the same as B↔A."},"type":{"type":"string","enum":["normal","locked"],"description":"Connection kind: normal (open) or locked. Omit to create a normal connection."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_connection","kind":"transact","impl":"imperative","description":"Removes one existing route using its connection ID.","title":"Delete connection","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["connectionId"],"properties":{"connectionId":{"type":"string","description":"Stable id of the connection to delete."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_entity","kind":"act","impl":"imperative","description":"Updates an existing entity. PATCH semantics apply: omitted fields remain unchanged. Use roomId to move an existing entity to another room.","title":"Update entity","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["entityId"],"properties":{"entityId":{"type":"string","description":"Stable id of the entity to patch."},"roomId":{"type":"string","description":"Move the entity into this existing room. Omit to leave the current room unchanged."},"x":{"type":"number","description":"Replacement X position. Relative to the room when the entity is room-bound."},"y":{"type":"number","description":"Replacement Y position. Relative to the room when the entity is room-bound."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_entity","kind":"transact","impl":"imperative","description":"Removes one existing entity from the mission.","title":"Delete entity","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["entityId"],"properties":{"entityId":{"type":"string","description":"Stable id of the entity to delete."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_mission","kind":"act","impl":"imperative","description":"Runs the fixed set of seven deterministic mission checks and returns pass, fail, or skipped results with dependency information where applicable. This validator uses deterministic graph logic, not an LLM. Reachability is structural: locked connections are traversed the same as normal connections, and keycard possession/gameplay is not simulated. Call validate_mission after every repair and after any multi-step structural change to confirm the resulting mission state.","title":"Validate mission","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"analyze_mission","kind":"answer","impl":"imperative","description":"Read-only deterministic structural analysis of the current mission graph. Returns the shortest player-spawn-to-objective and objective-to-extraction routes, hop counts, ordered room and connection IDs, locked connections on each selected shortest path, connections that are single points of failure for required routes, and whether each required segment survives removal of any one connection. This tool does not return a mission-validity verdict and does not replace validate_mission. Use validate_mission for the fixed seven structural checks. Use analyze_mission after validation to inspect structural resilience in a mission that already functions. It changes nothing and writes no Activity entry. If status is INCOMPLETE, read blockedBy. Missing required entities can be created with place_entity; entities that exist but are not assigned to a valid room can be moved with update_entity. Adding connections cannot fix an unassigned critical entity. Locked connections are a design-level classification only. This analysis treats locked and normal links as equally traversable and does not simulate keycard possession or access control. To improve resilience, make one or two targeted connection changes at a time using existing mutation tools, then call analyze_mission and validate_mission again.","title":"Analyze mission","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/stealthdraft-webmcp.vercel.app.svg","apiSurface":"spec","toolCount":11}}