Skip to main content
Glama

search_components

Find Modus Web Components by name or keyword to access documentation and usage details for your IDE projects.

Instructions

Search for Modus Web Components by name or keyword. Returns a list of matching components with brief descriptions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (component name, keyword, or feature)

Implementation Reference

  • The main handler function implementing the search_components tool. It searches loaded component documentation for matches against the query in component names or content, extracts brief descriptions, and returns formatted markdown results or a no-match message.
    private async searchComponents(query: string): Promise<any> {
      const normalizedQuery = query.toLowerCase();
      const results: Array<{
        component: string;
        filename: string;
        relevance: string;
      }> = [];
    
      for (const doc of this.docs) {
        const content = doc.content.toLowerCase();
        const componentName = doc.component.toLowerCase();
    
        if (
          componentName.includes(normalizedQuery) ||
          content.includes(normalizedQuery)
        ) {
          // Extract the first paragraph or description
          const lines = doc.content.split("\n");
          let description = "";
    
          for (const line of lines) {
            if (
              line.trim() &&
              !line.startsWith("#") &&
              !line.startsWith("Tag:")
            ) {
              description = line.trim();
              break;
            }
          }
    
          results.push({
            component: doc.component,
            filename: doc.filename,
            relevance: description || "Modus Web Component",
          });
        }
      }
    
      if (results.length === 0) {
        return {
          content: [
            {
              type: "text",
              text: `No components found matching "${query}". Try searching for common UI elements like "button", "input", "modal", "card", etc.`,
            },
          ],
        };
      }
    
      const resultText = results
        .map((r) => `**${r.component}**\n${r.relevance}\n`)
        .join("\n");
    
      return {
        content: [
          {
            type: "text",
            text: `Found ${results.length} component(s) matching "${query}":\n\n${resultText}`,
          },
        ],
      };
    }
  • Input schema for the search_components tool, defining the required 'query' string parameter.
    inputSchema: {
      type: "object",
      properties: {
        query: {
          type: "string",
          description:
            "Search query (component name, keyword, or feature)",
        },
      },
      required: ["query"],
    },
  • src/index.ts:165-180 (registration)
    Tool registration in the ListToolsRequestSchema handler, defining the search_components tool with name, description, and schema.
    {
      name: "search_components",
      description:
        "Search for Modus Web Components by name or keyword. Returns a list of matching components with brief descriptions.",
      inputSchema: {
        type: "object",
        properties: {
          query: {
            type: "string",
            description:
              "Search query (component name, keyword, or feature)",
          },
        },
        required: ["query"],
      },
    },
  • src/index.ts:304-305 (registration)
    Dispatch registration in the CallToolRequestSchema switch statement, routing calls to the searchComponents handler.
    case "search_components":
      return await this.searchComponents((args?.query as string) || "");
  • Helper method that loads component documentation files into memory (this.docs), which is used by the searchComponents handler.
    private loadDocs(): void {
      if (!existsSync(this.docsPath)) {
        console.error(`Documentation directory not found at: ${this.docsPath}`);
        console.error("Please run: node download-docs.js");
        return;
      }
    
      const files = readdirSync(this.docsPath).filter((f) => f.endsWith(".md"));
    
      for (const file of files) {
        const content = readFileSync(join(this.docsPath, file), "utf-8");
        const component = file.replace("modus-wc-", "").replace(".md", "");
    
        this.docs.push({
          filename: file,
          component,
          content,
        });
      }
    
      console.error(`Loaded ${this.docs.length} component documentation files`);
    }

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/julianoczkowski/mcp-modus'

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