{
  "function_declarations": [
    {
      "name": "resource-list",
      "description": "List all resources of a specific type from the ROM (rooms, sprites, dungeons, entrances, items, overlords)",
      "parameters": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": ["room", "sprite", "dungeon", "entrance", "item", "overlord"],
            "description": "Type of resource to list"
          }
        },
        "required": ["type"]
      }
    },
    {
      "name": "resource-search",
      "description": "Search for resources by name or pattern",
      "parameters": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": ["room", "sprite", "dungeon", "entrance", "item"],
            "description": "Type of resource to search"
          },
          "query": {
            "type": "string",
            "description": "Search query or pattern to match"
          }
        },
        "required": ["type", "query"]
      }
    },
    {
      "name": "dungeon-list-sprites",
      "description": "List all sprites in a specific dungeon or room",
      "parameters": {
        "type": "object",
        "properties": {
          "dungeon": {
            "type": "string",
            "description": "Dungeon name (e.g., 'hyrule_castle', 'eastern_palace') or leave empty for all"
          },
          "room_id": {
            "type": "string",
            "description": "Specific room ID to query (optional)"
          }
        }
      }
    },
    {
      "name": "dungeon-describe-room",
      "description": "Get detailed information about a specific dungeon room including sprites, chests, layout, and connections",
      "parameters": {
        "type": "object",
        "properties": {
          "room_id": {
            "type": "string",
            "description": "Room ID to describe (0-296)"
          },
          "include_sprites": {
            "type": "string",
            "enum": ["true", "false"],
            "description": "Include sprite information (default: true)"
          }
        },
        "required": ["room_id"]
      }
    },
    {
      "name": "overworld-find-tile",
      "description": "Find all locations where a specific tile16 ID appears in the overworld",
      "parameters": {
        "type": "object",
        "properties": {
          "tile_id": {
            "type": "string",
            "description": "Tile16 ID to search for (hex format like '0x42' or decimal)"
          },
          "map_id": {
            "type": "string",
            "description": "Specific overworld map to search (0-63, optional)"
          }
        },
        "required": ["tile_id"]
      }
    },
    {
      "name": "overworld-describe-map",
      "description": "Get detailed information about a specific overworld map including tile composition, warps, and sprites",
      "parameters": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "description": "Overworld map ID (0-63 for light/dark world)"
          },
          "include_tiles": {
            "type": "string",
            "enum": ["true", "false"],
            "description": "Include tile distribution statistics"
          }
        },
        "required": ["map_id"]
      }
    },
    {
      "name": "overworld-list-warps",
      "description": "List all warp/entrance points for a specific overworld map",
      "parameters": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "description": "Overworld map ID (0-63)"
          }
        },
        "required": ["map_id"]
      }
    },
    {
      "name": "overworld-list-sprites",
      "description": "List all sprites placed on a specific overworld map",
      "parameters": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "description": "Overworld map ID (0-63)"
          }
        },
        "required": ["map_id"]
      }
    },
    {
      "name": "overworld-get-entrance",
      "description": "Get detailed information about a specific entrance/exit including destination and properties",
      "parameters": {
        "type": "object",
        "properties": {
          "entrance_id": {
            "type": "string",
            "description": "Entrance ID to query"
          }
        },
        "required": ["entrance_id"]
      }
    },
    {
      "name": "overworld-tile-stats",
      "description": "Get statistical analysis of tile usage across overworld maps",
      "parameters": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "description": "Specific map ID or 'all' for global statistics"
          }
        }
      }
    },
    {
      "name": "hex-read",
      "description": "Read bytes from ROM at a specific address in hexadecimal",
      "parameters": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "ROM address in hex format (e.g., '0x1C800')"
          },
          "length": {
            "type": "integer",
            "description": "Number of bytes to read (default: 16)"
          },
          "format": {
            "type": "string",
            "enum": ["hex", "ascii", "both"],
            "description": "Output format (default: both)"
          }
        },
        "required": ["address"]
      }
    },
    {
      "name": "hex-write",
      "description": "Write bytes to ROM at a specific address (creates a proposal)",
      "parameters": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "ROM address in hex format (e.g., '0x1C800')"
          },
          "data": {
            "type": "string",
            "description": "Hex data to write (space-separated bytes like 'FF 00 12 34')"
          }
        },
        "required": ["address", "data"]
      }
    },
    {
      "name": "hex-search",
      "description": "Search for a byte pattern in ROM",
      "parameters": {
        "type": "object",
        "properties": {
          "pattern": {
            "type": "string",
            "description": "Hex pattern to search (e.g., 'FF 00 ?? 12' where ?? is wildcard)"
          },
          "start_address": {
            "type": "string",
            "description": "Start address (default: 0x00000)"
          },
          "end_address": {
            "type": "string",
            "description": "End address (default: ROM size)"
          }
        },
        "required": ["pattern"]
      }
    },
    {
      "name": "palette-get-colors",
      "description": "Get all colors from a specific palette",
      "parameters": {
        "type": "object",
        "properties": {
          "group": {
            "type": "integer",
            "description": "Palette group index (0-based)"
          },
          "palette": {
            "type": "integer",
            "description": "Palette index within group (0-7)"
          },
          "format": {
            "type": "string",
            "enum": ["snes", "rgb", "hex"],
            "description": "Color format (default: hex)"
          }
        },
        "required": ["group", "palette"]
      }
    },
    {
      "name": "palette-set-color",
      "description": "Set a specific color in a palette (creates a proposal)",
      "parameters": {
        "type": "object",
        "properties": {
          "group": {
            "type": "integer",
            "description": "Palette group index"
          },
          "palette": {
            "type": "integer",
            "description": "Palette index within group"
          },
          "color_index": {
            "type": "integer",
            "description": "Color index in palette (0-15)"
          },
          "color": {
            "type": "string",
            "description": "Color value in hex format (e.g., '#FF0000' or 'FF0000')"
          }
        },
        "required": ["group", "palette", "color_index", "color"]
      }
    },
    {
      "name": "palette-analyze",
      "description": "Analyze color usage and statistics for a palette or bitmap",
      "parameters": {
        "type": "object",
        "properties": {
          "target_type": {
            "type": "string",
            "enum": ["palette", "bitmap", "graphics_sheet"],
            "description": "What to analyze"
          },
          "target_id": {
            "type": "string",
            "description": "ID or index of target"
          }
        },
        "required": ["target_type", "target_id"]
      }
    },
    {
      "name": "todo-create",
      "description": "Create a new TODO task for complex operations",
      "parameters": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Task description"
          },
          "category": {
            "type": "string",
            "description": "Task category (e.g., 'rom_edit', 'ai_task', 'build')"
          },
          "priority": {
            "type": "integer",
            "description": "Priority level (0-10, higher = more important)"
          }
        },
        "required": ["description"]
      }
    },
    {
      "name": "todo-list",
      "description": "List all TODO tasks or filter by status/category",
      "parameters": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": ["pending", "in_progress", "completed", "blocked", "cancelled"],
            "description": "Filter by status"
          },
          "category": {
            "type": "string",
            "description": "Filter by category"
          }
        }
      }
    },
    {
      "name": "todo-update-status",
      "description": "Update the status of a TODO task",
      "parameters": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "TODO ID"
          },
          "status": {
            "type": "string",
            "enum": ["pending", "in_progress", "completed", "blocked", "cancelled"],
            "description": "New status"
          }
        },
        "required": ["id", "status"]
      }
    },
    {
      "name": "todo-next",
      "description": "Get the next actionable TODO task (respecting dependencies and priority)",
      "parameters": {
        "type": "object",
        "properties": {}
      }
    }
  ]
}