{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "game_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "pattern": "^[^\\r\\n]*$",
      "description": "The actual published game name."
    },
    "game_url": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "allOf": [
        {
          "pattern": "^[^\\r\\n]*$"
        },
        {
          "pattern": "^https?:\\/\\/[^@/?#\\s]+(?:[/?#]|$)"
        }
      ],
      "description": "The official playable browser-game URL. Do not invent a mirror."
    },
    "game_type": {
      "type": "string",
      "enum": [
        "ai-made",
        "indie",
        "fan-made",
        "port"
      ],
      "description": "ai-made: original made with AI coding tools; indie: other original; fan-made: tribute/parody; port: browser adaptation."
    },
    "summary": {
      "type": "string",
      "minLength": 10,
      "maxLength": 600,
      "description": "A factual short description: what the player does and what makes the game distinctive."
    },
    "gameplay": {
      "type": "string",
      "minLength": 10,
      "maxLength": 2000,
      "description": "Goal, core loop, how to start, progression, and win/lose conditions where applicable. Mark unknown details instead of guessing."
    },
    "controls": {
      "type": "string",
      "minLength": 2,
      "maxLength": 1000,
      "description": "Keyboard, mouse, controller, and touch controls, including any known limitations."
    },
    "creator_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "pattern": "^[^\\r\\n]*$",
      "description": "Creator or studio to credit."
    },
    "contact_email": {
      "type": "string",
      "minLength": 1,
      "maxLength": 254,
      "format": "email",
      "allOf": [
        {
          "pattern": "^[^\\r\\n]*$"
        },
        {
          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        }
      ],
      "description": "A contact email the submitter is authorized to share."
    },
    "genre": {
      "description": "For example puzzle, racing, action, or strategy.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[^\\r\\n]*$"
    },
    "ai_tools": {
      "description": "Only tools confirmed by the creator. Omit if unknown or not applicable.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80,
        "pattern": "^[^\\r\\n]*$"
      }
    },
    "engine": {
      "description": "The confirmed engine or renderer; omit if unknown.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[^\\r\\n]*$"
    },
    "mobile_support": {
      "description": "Whether the game has been verified to work on a phone.",
      "type": "string",
      "enum": [
        "yes",
        "no",
        "unknown"
      ]
    },
    "multiplayer": {
      "description": "Distinguish online multiplayer from shared-device play.",
      "type": "string",
      "enum": [
        "single-player",
        "online",
        "local",
        "both",
        "unknown"
      ]
    },
    "embed_permission": {
      "description": "Whether the creator permits OttersPlay to embed the game. Technical reachability is not permission.",
      "type": "string",
      "enum": [
        "yes",
        "no",
        "unknown"
      ]
    },
    "creator_url": {
      "description": "Creator website or public profile.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "allOf": [
        {
          "pattern": "^[^\\r\\n]*$"
        },
        {
          "pattern": "^https?:\\/\\/[^@/?#\\s]+(?:[/?#]|$)"
        }
      ]
    },
    "source_url": {
      "description": "Repository, project announcement, or other evidence supporting the submission.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "allOf": [
        {
          "pattern": "^[^\\r\\n]*$"
        },
        {
          "pattern": "^https?:\\/\\/[^@/?#\\s]+(?:[/?#]|$)"
        }
      ]
    },
    "cover_url": {
      "description": "Publicly accessible game cover or screenshot the creator permits OttersPlay to use.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "allOf": [
        {
          "pattern": "^[^\\r\\n]*$"
        },
        {
          "pattern": "^https?:\\/\\/[^@/?#\\s]+(?:[/?#]|$)"
        }
      ]
    },
    "notes": {
      "description": "Pricing, login/data/browser requirements, content notes, asset permissions, or anything a reviewer should know.",
      "type": "string",
      "maxLength": 1500
    }
  },
  "required": [
    "game_name",
    "game_url",
    "game_type",
    "summary",
    "gameplay",
    "controls",
    "creator_name",
    "contact_email"
  ],
  "additionalProperties": false,
  "title": "OttersPlay game submission draft",
  "description": "Arguments for the prepare_game_submission MCP tool. Generates an email draft only; no email is sent and no listing is created."
}