Skip to main content
Glama
totodev999

shadcn-ui MCP Server

by totodev999

get_component_examples

Retrieve practical code examples for shadcn/ui components to implement UI elements correctly in your projects.

Instructions

Get usage examples for a specific shadcn/ui component

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
componentNameYesName of the shadcn/ui component (e.g., "accordion", "button")

Implementation Reference

  • Main handler function for the get_component_examples tool. It validates the component name, fetches examples using fetchComponentExamples, and returns them in a standardized response format. Handles errors appropriately.
     * Handle the get_component_examples tool request
     */
    private async handleGetComponentExamples(args: any) {
      const componentName = this.validateComponentName(args);
    
      try {
        // Fetch component examples
        const examples = await this.fetchComponentExamples(componentName);
        return this.createSuccessResponse(examples);
      } catch (error) {
        this.handleAxiosError(error, `Component examples for "${componentName}"`);
      }
    }
  • Core helper function that orchestrates fetching examples by scraping the shadcn/ui docs page with cheerio, collecting code blocks, and fetching additional demo from GitHub.
    /**
     * Fetches component examples from documentation and GitHub
     * @param componentName Name of the component
     * @returns Array of component examples
     */
    private async fetchComponentExamples(
      componentName: string
    ): Promise<ComponentExample[]> {
      const response = await this.axiosInstance.get(
        `${this.SHADCN_DOCS_URL}/docs/components/${componentName}`
      );
      const $ = cheerio.load(response.data);
    
      const examples: ComponentExample[] = [];
    
      // Collect examples from different sources
      this.collectGeneralCodeExamples($, examples);
      this.collectSectionExamples($, 'Usage', 'Basic usage example', examples);
      this.collectSectionExamples($, 'Link', 'Link usage example', examples);
      await this.collectGitHubExamples(componentName, examples);
    
      return examples;
    }
  • Helper function to extract general code examples (pre blocks) from the documentation page, associating them with nearby headings for titles.
    /**
     * Collects general code examples from the page
     * @param $ Cheerio instance
     * @param examples Array to add examples to
     */
    private collectGeneralCodeExamples(
      $: cheerio.CheerioAPI,
      examples: ComponentExample[]
    ): void {
      const codeBlocks = $('pre');
      codeBlocks.each((i, el) => {
        const code = $(el).text().trim();
        if (code) {
          // Find heading before code block
          let title = 'Code Example ' + (i + 1);
          let description = 'Code example';
    
          // Look for headings
          let prevElement = $(el).prev();
          while (
            prevElement.length &&
            !prevElement.is('h1') &&
            !prevElement.is('h2') &&
            !prevElement.is('h3')
          ) {
            prevElement = prevElement.prev();
          }
    
          if (prevElement.is('h2') || prevElement.is('h3')) {
            title = prevElement.text().trim();
            description = `${title} example`;
          }
    
          examples.push({
            title,
            code,
            description,
          });
        }
      });
    }
  • Helper to fetch additional demo code example directly from the shadcn/ui GitHub repo raw file.
    private async collectGitHubExamples(
      componentName: string,
      examples: ComponentExample[]
    ): Promise<void> {
      try {
        const githubResponse = await this.axiosInstance.get(
          `${this.SHADCN_RAW_GITHUB_URL}/apps/www/registry/default/example/${componentName}-demo.tsx`
        );
    
        if (githubResponse.status === 200) {
          examples.push({
            title: 'GitHub Demo Example',
            code: githubResponse.data,
          });
        }
      } catch (error) {
        // Continue even if GitHub fetch fails
        console.error(
          `Failed to fetch GitHub example for ${componentName}:`,
          error
        );
      }
    }
  • src/index.ts:133-147 (registration)
    Tool registration in the list_tools response, including name, description, and input schema.
    {
      name: 'get_component_examples',
      description: 'Get usage examples for a specific shadcn/ui component',
      inputSchema: {
        type: 'object',
        properties: {
          componentName: {
            type: 'string',
            description:
              'Name of the shadcn/ui component (e.g., "accordion", "button")',
          },
        },
        required: ['componentName'],
      },
    },
  • Input schema definition for the tool, specifying the required 'componentName' parameter.
    inputSchema: {
      type: 'object',
      properties: {
        componentName: {
          type: 'string',
          description:
            'Name of the shadcn/ui component (e.g., "accordion", "button")',
        },
      },
      required: ['componentName'],

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/totodev999/shadcn-ui-mcp-server_clone'

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