Skip to main content
Glama
koopatroopa787

MCP PC Control Server

search_files

Find files by name or extension using wildcard patterns in specified directories. Recursively searches and returns matching file paths for file management tasks.

Instructions

Recursively search for files matching a pattern in a directory. Supports wildcards (* and **) and returns matching file paths. Useful for finding files by name or extension.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYesThe directory to search in
patternYesThe pattern to match (e.g., '*.ts', '**/*.json')

Implementation Reference

  • Handler case within the CallToolRequestSchema request handler that parses input arguments, invokes the searchFiles helper function, and returns the search results in JSON format.
    case "search_files": {
      const searchPath = args.path as string;
      const pattern = args.pattern as string;
    
      const results = await searchFiles(searchPath, pattern);
    
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(
              {
                matches: results,
                count: results.length,
              },
              null,
              2
            ),
          },
        ],
      };
    }
  • Input schema defining the parameters for the search_files tool: path (directory to search) and pattern (glob-like pattern to match). Used for validation.
      type: "object",
      properties: {
        path: {
          type: "string",
          description: "The directory to search in",
        },
        pattern: {
          type: "string",
          description: "The pattern to match (e.g., '*.ts', '**/*.json')",
        },
      },
      required: ["path", "pattern"],
    },
  • src/index.ts:190-207 (registration)
    Registration of the search_files tool in the TOOLS array, which is returned by the ListToolsRequestSchema handler. Includes name, description, and schema.
    {
      name: "search_files",
      description: "Recursively search for files matching a pattern in a directory. Supports wildcards (* and **) and returns matching file paths. Useful for finding files by name or extension.",
      inputSchema: {
        type: "object",
        properties: {
          path: {
            type: "string",
            description: "The directory to search in",
          },
          pattern: {
            type: "string",
            description: "The pattern to match (e.g., '*.ts', '**/*.json')",
          },
        },
        required: ["path", "pattern"],
      },
    },
  • Helper function implementing the core recursive file search logic: converts glob pattern to regex, traverses directory tree, and collects absolute paths of matching files.
    async function searchFiles(
      dirPath: string,
      pattern: string
    ): Promise<string[]> {
      const results: string[] = [];
    
      // Convert glob pattern to regex
      const regexPattern = pattern
        .replace(/\./g, "\\.")
        .replace(/\*\*/g, ".*")
        .replace(/\*/g, "[^/]*");
      const regex = new RegExp(regexPattern);
    
      async function search(currentPath: string) {
        try {
          const entries = await fs.readdir(currentPath, { withFileTypes: true });
    
          for (const entry of entries) {
            const fullPath = path.join(currentPath, entry.name);
            const relativePath = path.relative(dirPath, fullPath);
    
            if (entry.isDirectory()) {
              await search(fullPath);
            } else if (regex.test(relativePath)) {
              results.push(fullPath);
            }
          }
        } catch (error) {
          // Skip directories we can't access
        }
      }
    
      await search(dirPath);
      return results;
    }

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/koopatroopa787/first_mcp'

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