# search_catalog > Find releases and tracks by title, artist, label, ISRC or UPC, optionally by status. Tool `search_catalog` · Read-only · Every account with MCP access · Role permission: `releases.view` Find releases and tracks by title, artist, label, ISRC or UPC, optionally by status. Returns release ids for release_status and streams_and_revenue, and the tracks that matched. Leave query empty to list the most recently updated releases. ## Arguments | Argument | Type | Required | Description | | --- | --- | --- | --- | | `query` | string | No | Title, artist, label, ISRC (e.g. USRC17607839) or UPC. Empty lists recent releases. | | `status` | `draft` \| `in_review` \| `changes_requested` \| `approved` \| `live` \| `archived` \| `taken_down` \| `rejected` | No | Only releases in this status. in_review = submitted, waiting for review; live = approved and live in at least one store; rejected = changes_requested (old name). | | `limit` | integer (1–50) | No | Results per page (max 50). Default 20. | | `offset` | integer (0–5000) | No | Skip this many results (from next_offset). Default 0. | ## Example call Assistants make this call for you; this is what goes to `https://app.hillsmusic.com/mcp` over JSON-RPC. ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search_catalog", "arguments": { "limit": 20, "offset": 0 } } } ``` ## Result A one-line summary as text, then the same data as JSON in `structuredContent`, with these fields: | Field | Type | Description | | --- | --- | --- | | `total` | number | | | `offset` | number | | | `next_offset` | number or null | | | `releases` | array of object | | A refusal (no permission, not found, bad input) comes back as a tool error (`isError: true`) whose text says why. Source: https://developer.hillsmusic.com/mcp/search-catalog/