prowlarr_search
Search for media across all Prowlarr indexers with a single query. Returns results from configured indexers.
Instructions
Search across all Prowlarr indexers
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query |
Implementation Reference
- src/index.ts:691-735 (registration)Registration of all Prowlarr tools including 'prowlarr_search' (line 703-715). The tool is registered with inputSchema requiring a 'query' string parameter. It is conditionally added when a Prowlarr client is configured.
if (clients.prowlarr) { TOOLS.push( { name: "prowlarr_get_indexers", description: "Get all configured indexers in Prowlarr", inputSchema: { type: "object" as const, properties: {}, required: [], }, }, { name: "prowlarr_search", description: "Search across all Prowlarr indexers", inputSchema: { type: "object" as const, properties: { query: { type: "string", description: "Search query", }, }, required: ["query"], }, }, { name: "prowlarr_test_indexers", description: "Test all indexers and return their health status", inputSchema: { type: "object" as const, properties: {}, required: [], }, }, { name: "prowlarr_get_stats", description: "Get indexer statistics (queries, grabs, failures)", inputSchema: { type: "object" as const, properties: {}, required: [], }, } ); } - src/index.ts:1975-1982 (handler)Handler for the 'prowlarr_search' tool call. It validates that Prowlarr is configured, extracts the 'query' parameter from arguments, calls clients.prowlarr.search(query), and returns the JSON-stringified results.
case "prowlarr_search": { if (!clients.prowlarr) throw new Error("Prowlarr not configured"); const query = (args as { query: string }).query; const results = await clients.prowlarr.search(query); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } - src/arr-client.ts:816-860 (helper)ProwlarrClient class extending ArrClient. Contains the 'search' method (lines 853-859) that makes a GET request to the Prowlarr /search endpoint with the query string and optional category filters.
export class ProwlarrClient extends ArrClient { constructor(config: ArrConfig) { super('prowlarr', config); this.apiVersion = 'v1'; } /** * Get all indexers */ async getIndexers(): Promise<Indexer[]> { return this['request']<Indexer[]>('/indexer'); } /** * Test all indexers */ async testAllIndexers(): Promise<Array<{ id: number; isValid: boolean; validationFailures: Array<{ propertyName: string; errorMessage: string }> }>> { return this['request']<Array<{ id: number; isValid: boolean; validationFailures: Array<{ propertyName: string; errorMessage: string }> }>>('/indexer/testall', { method: 'POST' }); } /** * Test a specific indexer */ async testIndexer(indexerId: number): Promise<{ id: number; isValid: boolean; validationFailures: Array<{ propertyName: string; errorMessage: string }> }> { return this['request']<{ id: number; isValid: boolean; validationFailures: Array<{ propertyName: string; errorMessage: string }> }>(`/indexer/${indexerId}/test`, { method: 'POST' }); } /** * Get indexer statistics */ async getIndexerStats(): Promise<{ indexers: IndexerStats[] }> { return this['request']<{ indexers: IndexerStats[] }>('/indexerstats'); } /** * Search across all indexers */ async search(query: string, categories?: number[]): Promise<unknown[]> { const params = new URLSearchParams({ query }); if (categories) { categories.forEach(c => params.append('categories', c.toString())); } return this['request']<unknown[]>(`/search?${params.toString()}`); } }