Skip to main content
Glama

prowlarr_search

Search across all configured Prowlarr indexers to find media content using a unified query interface.

Instructions

Search across all Prowlarr indexers

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query

Implementation Reference

  • Core handler function in ProwlarrClient that executes the search by constructing the query parameters and calling the Prowlarr /search API endpoint.
    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()}`);
    }
  • Tool schema definition including name, description, and input schema requiring a 'query' string.
    {
      name: "prowlarr_search",
      description: "Search across all Prowlarr indexers",
      inputSchema: {
        type: "object" as const,
        properties: {
          query: {
            type: "string",
            description: "Search query",
          },
        },
        required: ["query"],
      },
  • src/index.ts:535-579 (registration)
    Conditional registration of Prowlarr tools (including prowlarr_search) to the TOOLS array if 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: [],
          },
        }
      );
    }
  • MCP server request handler that dispatches the tool call, extracts arguments, invokes ProwlarrClient.search, and formats the response.
    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) }],
      };
    }
  • ProwlarrClient class definition extending ArrClient, providing service-specific API methods including search.
    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()}`);
      }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aplaceforallmystuff/mcp-arr'

If you have feedback or need assistance with the MCP directory API, please join our Discord server