Skip to main content
Glama

search

Find and add movies or TV series to your media library by searching across connected streaming and management services.

Instructions

Search for media (series/movies) to add

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
serviceYes

Implementation Reference

  • src/index.ts:87-99 (registration)
    Registration of the 'search' tool in the MCP tools list, including name, description, and input schema.
    { name: "search", description: "Search for media (series/movies) to add", inputSchema: { type: "object", properties: { service: { type: "string" }, query: { type: "string" }, limit: { type: "number" }, }, required: ["service", "query"], }, },
  • Dispatch handler in the main tool request handler that calls the service-specific search method.
    case "search": if (!input.query) { throw new McpError( ErrorCode.InvalidParams, "Missing query parameter", ); } return await service.search(input.query, { limit: input.limit, });
  • Core implementation of the search tool logic in BaseArrService, querying the *arr API lookup endpoint and mapping results to standardized SearchData.
    async search( query: string, options: SearchOptions = {}, ): Promise<OperationResult<SearchData>> { debugOperation(this.serviceName, "search", { query: query.substring(0, 50), limit: options.limit, }); try { const limit = options.limit || 10; const params = { term: query }; const response: SearchResponse = await fetchJson( this.buildApiUrl(this.endpoints.lookup, params), ); const results = Array.isArray(response) ? response : []; const limitedResults = results.slice(0, limit); const searchResults = limitedResults.map((item: SearchRecord) => ({ id: this.id === "sonarr" ? item.tvdbId : item.tmdbId, title: item.title, year: item.year, overview: item.overview, mediaKind: this.mediaKind, foreignId: this.id === "sonarr" ? item.tvdbId : item.tmdbId, imdbId: item.imdbId, })); return { ok: true, data: { service: this.serviceName, mediaKind: this.mediaKind, total: results.length, results: searchResults, truncated: results.length > limit, }, }; } catch (error) { return handleError(error, this.serviceName); } } async addNew(request: AddRequest): Promise<OperationResult<AddData>> {
  • Type definitions for SearchOptions, SearchResult, and SearchData used by the search tool.
    export interface SearchOptions { limit?: number; } export interface SearchResult { id?: number; title: string; year?: number; overview?: string; mediaKind: "series" | "movie"; foreignId?: number; imdbId?: string; } export interface SearchData { service: string; mediaKind: "series" | "movie"; total: number; results: SearchResult[]; truncated: boolean; }
  • Interface definition for the search method in ServiceImplementation.
    search( query: string, options?: SearchOptions, ): Promise<OperationResult<SearchData>>;

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/thesammykins/FlixBridge'

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