Skip to main content
Glama
hollanddd

Pokédex MCP Server

by hollanddd

search_pokemon

Find Pokémon by entering a partial name to retrieve detailed information from the Pokédex database.

Instructions

Search for Pokémon by partial name match

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesPartial name to search for

Implementation Reference

  • The handler function that implements the core logic of the search_pokemon tool: fetches a large list of Pokémon, filters by partial name match on the query, limits to top 20 results, and returns formatted search results or handles errors.
    async ({ query }) => {
      try {
        // Get a larger list to search through
        const pokemonList = await pokeAPI.getPokemonList(1500);
        const matches = pokemonList.results
          .filter((p) =>
            p.name.toLowerCase().includes(query.toLowerCase().trim()),
          )
          .slice(0, 20); // Limit to 20 results
    
        return formatPokemonSearchResults(query, matches);
      } catch (error) {
        return formatCaughtError(error, "searching Pokémon");
      }
    },
  • Input schema using Zod validation for the 'query' parameter, requiring a non-empty string.
    { query: z.string().min(1).describe("Partial name to search for") },
  • src/tools.ts:68-87 (registration)
    Registration of the search_pokemon tool with the MCP server, including name, description, schema, and handler.
    server.tool(
      "search_pokemon",
      "Search for Pokémon by partial name match",
      { query: z.string().min(1).describe("Partial name to search for") },
      async ({ query }) => {
        try {
          // Get a larger list to search through
          const pokemonList = await pokeAPI.getPokemonList(1500);
          const matches = pokemonList.results
            .filter((p) =>
              p.name.toLowerCase().includes(query.toLowerCase().trim()),
            )
            .slice(0, 20); // Limit to 20 results
    
          return formatPokemonSearchResults(query, matches);
        } catch (error) {
          return formatCaughtError(error, "searching Pokémon");
        }
      },
    );
  • Helper function that formats the search results (query and matching Pokémon list) into a user-friendly MCP text response, including numbered list with IDs and usage instructions.
    export function formatPokemonSearchResults(
      query: string,
      matches: Array<{ name: string; url: string }>
    ): MCPResponse {
      if (matches.length === 0) {
        return {
          content: [
            {
              type: "text",
              text: `No Pokémon found matching "${query}". Try a different search term.`,
            },
          ],
        };
      }
    
      const resultText = matches
        .map((p, index) => {
          const id = p.url.split("/").filter(Boolean).pop();
          return `${index + 1}. ${p.name} (ID: ${id})`;
        })
        .join("\n");
    
      return {
        content: [
          {
            type: "text",
            text: `**Search results for "${query}":**\n\n${resultText}\n\n*Use fetch_pokemon with any of these names to get detailed information.*`,
          },
        ],
      };
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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/hollanddd/pokedex-mcp'

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