Skip to main content
Glama

search_gifs

Search for GIFs on Giphy using keywords, with options to filter by content rating, language, and limit results.

Instructions

Search for GIFs on Giphy with a query string

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query term or phrase
limitNoMaximum number of objects to return (default: 10, max: 50)
offsetNoResults offset (default: 0)
ratingNoContent rating (g, pg, pg-13, r)
langNoLanguage code (default: en)

Implementation Reference

  • The core handler function that implements the search_gifs tool logic: constructs API parameters, calls Giphy search endpoint, formats response GIFs, and handles errors.
    export async function searchGifs(params: { query: string; limit?: number; offset?: number; rating?: "g" | "pg" | "pg-13" | "r"; lang?: string; }) { const { query, limit = 10, offset = 0, rating = "g", lang = "en" } = params; const searchParams = { q: query, limit, offset, rating, lang, }; const url = buildUrl("search", searchParams); try { const response = await axios.get(url); const responseData = response.data as GiphyResponse; return formatGifs(responseData.data); } catch (error) { let errorMsg = "Giphy API error"; if (axios.isAxiosError(error) && error.response) { errorMsg = `${errorMsg}: ${error.response.status} ${error.response.statusText}`; } else if (error instanceof Error) { errorMsg = `${errorMsg}: ${error.message}`; } throw new Error(errorMsg); } }
  • Defines the input schema and metadata for the search_gifs tool, used for validation in MCP.
    export const searchGifsTool: Tool = { name: "search_gifs", description: "Search for GIFs on Giphy with a query string", inputSchema: { type: "object", properties: { query: { type: "string", description: "Search query term or phrase" }, limit: { type: "number", description: "Maximum number of objects to return (default: 10, max: 50)", }, offset: { type: "number", description: "Results offset (default: 0)" }, rating: { type: "string", enum: ["g", "pg", "pg-13", "r"], description: "Content rating (g, pg, pg-13, r)", }, lang: { type: "string", description: "Language code (default: en)" }, }, required: ["query"], }, };
  • src/server.ts:107-111 (registration)
    Registers searchGifsTool in the MCP server's listTools handler, making it discoverable.
    server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [searchGifsTool, getRandomGifTool, getTrendingGifsTool], }; });
  • src/server.ts:32-50 (registration)
    Handles incoming callTool requests for search_gifs by invoking the searchGifs handler and formatting the MCP response.
    case "search_gifs": { const searchParams = args as { query: string; limit?: number; offset?: number; rating?: "g" | "pg" | "pg-13" | "r"; lang?: string; }; const gifs = await searchGifs(searchParams); return { content: [ { type: "text", text: JSON.stringify({ gifs }), }, ], }; }
  • Helper function to format multiple GIFs from Giphy response, used by searchGifs.
    function formatGifs(gifs: GiphyGif[]) { return gifs.map(formatGif); }

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/magarcia/mcp-server-giphy'

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