Skip to main content
Glama
lallen30

BluestoneApps MCP Remote Server

by lallen30

get_hook_example

Retrieve React Native hook examples from BluestoneApps coding standards to implement specific functionality in your application.

Instructions

Get a React Native hook example

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
hook_nameYesHook Name

Implementation Reference

  • The handler function for the get_hook_example MCP tool. Retrieves a React Native hook example by name from the codebase examples directory, supporting exact and fuzzy matching, and returns markdown content or error messages.
    async ({ hook_name }) => {
      if (!hook_name) {
        return {
          content: [
            {
              type: "text",
              text: "Hook name not specified",
            },
          ],
        };
      }
      
      try {
        // First try exact match
        const result = getExampleContent("hooks", hook_name);
        
        if (result.error) {
          // Try to find by fuzzy match
          const hooksDir = path.join(CODE_EXAMPLES_DIR, "react-native", "hooks");
          const closestMatch = findClosestMatch(hooksDir, hook_name);
          
          if (closestMatch) {
            const fuzzyResult = getExampleContent("hooks", closestMatch);
            return {
              content: [
                {
                  type: "text",
                  text: fuzzyResult.content?.[0] ?? fuzzyResult.error ?? "Error: No content available",
                },
              ],
            };
          } else {
            return {
              content: [
                {
                  type: "text",
                  text: `Hook ${hook_name} not found`,
                },
              ],
            };
          }
        }
        
        return {
          content: [
            {
              type: "text",
              text: result.content?.[0] ?? result.error ?? "Error: No content available",
            },
          ],
        };
      } catch (err) {
        console.error(`Error getting hook example ${hook_name}:`, err);
        return {
          content: [
            {
              type: "text",
              text: `Error getting hook example: ${err}`,
            },
          ],
        };
      }
    },
  • Zod input schema for the get_hook_example tool, defining the required hook_name string parameter.
    {
      hook_name: z.string().describe("Hook Name"),
    },
  • src/index.ts:298-367 (registration)
    Registration of the get_hook_example tool on the MCP server using server.tool() with name, description, schema, and inline handler.
    server.tool(
      "get_hook_example",
      "Get a React Native hook example",
      {
        hook_name: z.string().describe("Hook Name"),
      },
      async ({ hook_name }) => {
        if (!hook_name) {
          return {
            content: [
              {
                type: "text",
                text: "Hook name not specified",
              },
            ],
          };
        }
        
        try {
          // First try exact match
          const result = getExampleContent("hooks", hook_name);
          
          if (result.error) {
            // Try to find by fuzzy match
            const hooksDir = path.join(CODE_EXAMPLES_DIR, "react-native", "hooks");
            const closestMatch = findClosestMatch(hooksDir, hook_name);
            
            if (closestMatch) {
              const fuzzyResult = getExampleContent("hooks", closestMatch);
              return {
                content: [
                  {
                    type: "text",
                    text: fuzzyResult.content?.[0] ?? fuzzyResult.error ?? "Error: No content available",
                  },
                ],
              };
            } else {
              return {
                content: [
                  {
                    type: "text",
                    text: `Hook ${hook_name} not found`,
                  },
                ],
              };
            }
          }
          
          return {
            content: [
              {
                type: "text",
                text: result.content?.[0] ?? result.error ?? "Error: No content available",
              },
            ],
          };
        } catch (err) {
          console.error(`Error getting hook example ${hook_name}:`, err);
          return {
            content: [
              {
                type: "text",
                text: `Error getting hook example: ${err}`,
              },
            ],
          };
        }
      },
    );
  • Helper function called by the handler to locate and read the content of example files in the react-native/{subcategory} directories.
    // Helper function to get example content
    function getExampleContent(subcategory: string, filename: string): { content?: string[]; path?: string; error?: string } {
      const searchDir = path.join(CODE_EXAMPLES_DIR, "react-native", subcategory);
      
      const filePath = findFileInSubdirectories(searchDir, filename);
      
      if (!filePath || !fs.existsSync(filePath)) {
        return { error: `Example ${filename} not found` };
      }
      
      try {
        const content = fs.readFileSync(filePath, 'utf8');
        return {
          content: [content],
          path: path.relative(BASE_DIR, filePath)
        };
      } catch (err) {
        console.error(`Error reading example ${filename}:`, err);
        return { error: `Error reading example ${filename}` };
      }
    }
  • Helper function used for fuzzy matching of hook filenames when exact match fails.
    function findClosestMatch(directory: string, searchName: string, extensions: string[] = ['.js', '.jsx', '.ts', '.tsx']) {
      if (!fs.existsSync(directory)) return null;
      
      let closestMatch = null;
      
      for (const ext of extensions) {
        const files = glob.sync(`${directory}/**/*${ext}`);
        
        for (const filePath of files) {
          const fileName = path.basename(filePath);
          const fileNameNoExt = path.basename(fileName, path.extname(fileName));
          
          if (fileNameNoExt.toLowerCase().includes(searchName.toLowerCase())) {
            closestMatch = fileNameNoExt;
            break;
          }
        }
        
        if (closestMatch) break;
      }
      
      return closestMatch;
    }

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/lallen30/mcp-remote-server'

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