Skip to main content
Glama

list_components

Retrieve all available Basecoat UI components organized by category to help developers find and implement pre-built, accessible interface elements.

Instructions

List all available Basecoat components organized by category

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Handler for the 'list_components' tool. Retrieves the list of components using getComponentsList() and formats them into a markdown output listing components by category.
    case 'list_components': {
      const components = await this.getComponentsList();
      let output = '# Basecoat UI Components\n\n';
    
      for (const [category, categoryComponents] of Object.entries(components)) {
        output += `## ${category.charAt(0).toUpperCase() + category.slice(1)}\n\n`;
        for (const component of categoryComponents) {
          output += `- **${component.name}** (${component.file})\n`;
        }
        output += '\n';
      }
    
      return {
        content: [
          {
            type: 'text',
            text: output,
          },
        ],
      };
    }
  • Input schema definition for the 'list_components' tool, which takes no parameters.
      name: 'list_components',
      description: 'List all available Basecoat components organized by category',
      inputSchema: {
        type: 'object',
        properties: {},
      },
    },
  • server.js:166-251 (registration)
    Registration of tools list including 'list_components' in the ListToolsRequestSchema handler.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: [
          {
            name: 'get_component',
            description: 'Get HTML code for a specific Basecoat component',
            inputSchema: {
              type: 'object',
              properties: {
                name: {
                  type: 'string',
                  description: 'Component name (e.g., "button-primary", "card-basic", "input-with-label")',
                },
              },
              required: ['name'],
            },
          },
          {
            name: 'list_components',
            description: 'List all available Basecoat components organized by category',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'get_usage',
            description: 'Get usage documentation for a component',
            inputSchema: {
              type: 'object',
              properties: {
                component: {
                  type: 'string',
                  description: 'Component name (e.g., "button", "card", "input")',
                },
              },
              required: ['component'],
            },
          },
          {
            name: 'get_setup',
            description: 'Get Basecoat CSS setup code with CDN links',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'get_theme_script',
            description: 'Get theme switcher script for dark/light mode',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'search_components',
            description: 'Search for components by name or category',
            inputSchema: {
              type: 'object',
              properties: {
                query: {
                  type: 'string',
                  description: 'Search term (e.g., "button", "form", "navigation")',
                },
              },
              required: ['query'],
            },
          },
          {
            name: 'get_category',
            description: 'Get all components in a specific category',
            inputSchema: {
              type: 'object',
              properties: {
                category: {
                  type: 'string',
                  description: 'Category name (forms, navigation, feedback, interactive, layout)',
                },
              },
              required: ['category'],
            },
          },
        ],
      };
    });
  • Helper method getComponentsList() that scans the components directory for HTML files organized by category and returns a structured object.
    async getComponentsList() {
      const categories = ['forms', 'navigation', 'feedback', 'interactive', 'layout'];
      const components = {};
    
      for (const category of categories) {
        const categoryPath = path.join(__dirname, 'components', category);
        try {
          const files = await fs.readdir(categoryPath);
          const htmlFiles = files
            .filter(file => file.endsWith('.html'))
            .map(file => ({
              name: file.replace('.html', ''),
              category: category,
              file: file
            }));
    
          if (htmlFiles.length > 0) {
            components[category] = htmlFiles;
          }
        } catch (error) {
          console.error(`Error reading category ${category}:`, error.message);
        }
      }
    
      return components;
    }

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/GustavoGomezPG/basecoat-mcp'

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