arr_search_all
Search for media content across all connected *arr services (Sonarr, Radarr, Lidarr, Readarr, Prowlarr) using a single query to find TV shows, movies, music, and books.
Instructions
Search across all configured *arr services for any media
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term |
Implementation Reference
- src/index.ts:582-595 (registration)Registration of the 'arr_search_all' tool in the TOOLS array, including its name, description, and input schema requiring a 'term' string.TOOLS.push({ name: "arr_search_all", description: "Search across all configured *arr services for any media", inputSchema: { type: "object" as const, properties: { term: { type: "string", description: "Search term", }, }, required: ["term"], }, });
- src/index.ts:582-595 (schema)Input schema definition for 'arr_search_all' tool: object with required 'term' string property.TOOLS.push({ name: "arr_search_all", description: "Search across all configured *arr services for any media", inputSchema: { type: "object" as const, properties: { term: { type: "string", description: "Search term", }, }, required: ["term"], }, });
- src/index.ts:1645-1688 (handler)Handler implementation in the tool call switch statement. Extracts search term, calls search methods on all configured clients (sonarr.searchSeries, radarr.searchMovies, etc.), limits to top 5 results per service, handles errors per service, and returns aggregated JSON results.case "arr_search_all": { const term = (args as { term: string }).term; const results: Record<string, unknown> = {}; if (clients.sonarr) { try { const sonarrResults = await clients.sonarr.searchSeries(term); results.sonarr = { count: sonarrResults.length, results: sonarrResults.slice(0, 5) }; } catch (e) { results.sonarr = { error: e instanceof Error ? e.message : String(e) }; } } if (clients.radarr) { try { const radarrResults = await clients.radarr.searchMovies(term); results.radarr = { count: radarrResults.length, results: radarrResults.slice(0, 5) }; } catch (e) { results.radarr = { error: e instanceof Error ? e.message : String(e) }; } } if (clients.lidarr) { try { const lidarrResults = await clients.lidarr.searchArtists(term); results.lidarr = { count: lidarrResults.length, results: lidarrResults.slice(0, 5) }; } catch (e) { results.lidarr = { error: e instanceof Error ? e.message : String(e) }; } } if (clients.readarr) { try { const readarrResults = await clients.readarr.searchAuthors(term); results.readarr = { count: readarrResults.length, results: readarrResults.slice(0, 5) }; } catch (e) { results.readarr = { error: e instanceof Error ? e.message : String(e) }; } } return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; }