Skip to main content
Glama
lallen30

BluestoneApps MCP Remote Server

by lallen30

get_service_example

Retrieve React Native service examples to implement coding standards and accelerate development with BluestoneApps MCP server.

Instructions

Get a React Native service example

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
service_nameYesService Name

Implementation Reference

  • src/index.ts:370-439 (registration)
    Registration of the 'get_service_example' tool using server.tool, including name, description, input schema, and inline handler function.
    server.tool(
      "get_service_example",
      "Get a React Native service example",
      {
        service_name: z.string().describe("Service Name"),
      },
      async ({ service_name }) => {
        if (!service_name) {
          return {
            content: [
              {
                type: "text",
                text: "Service name not specified",
              },
            ],
          };
        }
        
        try {
          // First try exact match
          const result = getExampleContent("services", service_name);
          
          if (result.error) {
            // Try to find by fuzzy match
            const servicesDir = path.join(CODE_EXAMPLES_DIR, "react-native", "services");
            const closestMatch = findClosestMatch(servicesDir, service_name);
            
            if (closestMatch) {
              const fuzzyResult = getExampleContent("helper", closestMatch);
              return {
                content: [
                  {
                    type: "text",
                    text: fuzzyResult.content?.[0] ?? fuzzyResult.error ?? "Error: No content available",
                  },
                ],
              };
            } else {
              return {
                content: [
                  {
                    type: "text",
                    text: `Service ${service_name} not found`,
                  },
                ],
              };
            }
          }
          
          return {
            content: [
              {
                type: "text",
                text: result.content?.[0] ?? result.error ?? "Error: No content available",
              },
            ],
          };
        } catch (err) {
          console.error(`Error getting service example ${service_name}:`, err);
          return {
            content: [
              {
                type: "text",
                text: `Error getting service example: ${err}`,
              },
            ],
          };
        }
      },
    );
  • Inline async handler function that executes the tool logic: checks input, attempts exact match with getExampleContent, falls back to fuzzy match using findClosestMatch, returns markdown content or error.
    async ({ service_name }) => {
      if (!service_name) {
        return {
          content: [
            {
              type: "text",
              text: "Service name not specified",
            },
          ],
        };
      }
      
      try {
        // First try exact match
        const result = getExampleContent("services", service_name);
        
        if (result.error) {
          // Try to find by fuzzy match
          const servicesDir = path.join(CODE_EXAMPLES_DIR, "react-native", "services");
          const closestMatch = findClosestMatch(servicesDir, service_name);
          
          if (closestMatch) {
            const fuzzyResult = getExampleContent("helper", closestMatch);
            return {
              content: [
                {
                  type: "text",
                  text: fuzzyResult.content?.[0] ?? fuzzyResult.error ?? "Error: No content available",
                },
              ],
            };
          } else {
            return {
              content: [
                {
                  type: "text",
                  text: `Service ${service_name} not found`,
                },
              ],
            };
          }
        }
        
        return {
          content: [
            {
              type: "text",
              text: result.content?.[0] ?? result.error ?? "Error: No content available",
            },
          ],
        };
      } catch (err) {
        console.error(`Error getting service example ${service_name}:`, err);
        return {
          content: [
            {
              type: "text",
              text: `Error getting service example: ${err}`,
            },
          ],
        };
      }
    },
  • Input schema using Zod: requires 'service_name' as a string.
    {
      service_name: z.string().describe("Service Name"),
    },
  • Shared helper function called by the handler to load example code content from files in resources/code-examples/react-native/{subcategory} directory.
    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}` };
      }
    }
  • Shared helper function called by the handler for fuzzy matching of service names to available example filenames.
    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