advanced-search
Search text across files using regex or literal patterns with options for case sensitivity, file type filtering, context lines, and more using ripgrep on the MCP Ripgrep Server.
Instructions
Advanced search with ripgrep with more options
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| caseSensitive | No | Use case sensitive search (default: auto) | |
| context | No | Show N lines before and after each match | |
| filePattern | No | Filter by file type or glob | |
| fileType | No | Filter by file type (e.g., js, py) | |
| fixedStrings | No | Treat pattern as a literal string, not a regex | |
| followSymlinks | No | Follow symbolic links | |
| includeHidden | No | Search in hidden files and directories | |
| invertMatch | No | Show lines that don't match the pattern | |
| maxResults | No | Limit the number of matching lines | |
| path | Yes | Directory or file(s) to search. | |
| pattern | Yes | The search pattern (regex by default) | |
| showFilenamesOnly | No | Only show filenames of matches, not content | |
| showLineNumbers | No | Show line numbers | |
| useColors | No | Use colors in output (default: false) | |
| wordMatch | No | Only show matches surrounded by word boundaries |
Implementation Reference
- src/index.ts:262-378 (handler)Executes the advanced-search tool by constructing a comprehensive ripgrep command based on provided parameters including case sensitivity, fixed strings, file types, context lines, invert matching, and more, then runs it and returns the output.case "advanced-search": { const pattern = String(args.pattern || ""); const path = String(args.path); const caseSensitive = typeof args.caseSensitive === 'boolean' ? args.caseSensitive : undefined; const fixedStrings = typeof args.fixedStrings === 'boolean' ? args.fixedStrings : undefined; const filePattern = args.filePattern ? String(args.filePattern) : undefined; const fileType = args.fileType ? String(args.fileType) : undefined; const maxResults = typeof args.maxResults === 'number' ? args.maxResults : undefined; const context = typeof args.context === 'number' ? args.context : undefined; const invertMatch = typeof args.invertMatch === 'boolean' ? args.invertMatch : undefined; const wordMatch = typeof args.wordMatch === 'boolean' ? args.wordMatch : undefined; const includeHidden = typeof args.includeHidden === 'boolean' ? args.includeHidden : undefined; const followSymlinks = typeof args.followSymlinks === 'boolean' ? args.followSymlinks : undefined; const showFilenamesOnly = typeof args.showFilenamesOnly === 'boolean' ? args.showFilenamesOnly : undefined; const showLineNumbers = typeof args.showLineNumbers === 'boolean' ? args.showLineNumbers : undefined; const useColors = typeof args.useColors === 'boolean' ? args.useColors : false; if (!pattern) { return { isError: true, content: [{ type: "text", text: "Error: Pattern is required" }] }; } // Build the rg command with flags let command = "rg"; // Add case sensitivity flag if specified if (caseSensitive === true) { command += " -s"; // Case sensitive } else if (caseSensitive === false) { command += " -i"; // Case insensitive } // Add fixed strings flag if specified if (fixedStrings === true) { command += " -F"; // Fixed strings } // Add file pattern if specified if (filePattern) { command += ` -g ${escapeShellArg(filePattern)}`; } // Add file type if specified if (fileType) { command += ` -t ${fileType}`; } // Add max results if specified if (maxResults !== undefined && maxResults > 0) { command += ` -m ${maxResults}`; } // Add context lines if specified if (context !== undefined && context > 0) { command += ` -C ${context}`; } // Add invert match if specified if (invertMatch === true) { command += " -v"; } // Add word match if specified if (wordMatch === true) { command += " -w"; } // Add hidden files flag if specified if (includeHidden === true) { command += " -." } // Add follow symlinks flag if specified if (followSymlinks === true) { command += " -L"; } // Add filenames only flag if specified if (showFilenamesOnly === true) { command += " -l"; } // Add line numbers flag if specified if (showLineNumbers === true) { command += " -n"; } else if (showLineNumbers === false) { command += " -N"; } else { // Default to showing line numbers command += " -n"; } // Add color setting command += useColors ? " --color always" : " --color never"; // Add pattern and path command += ` ${escapeShellArg(pattern)} ${escapeShellArg(path)}`; console.error(`Executing: ${command}`); const { stdout, stderr } = await exec(command); // If there's anything in stderr, log it for debugging if (stderr) { console.error(`ripgrep stderr: ${stderr}`); } return { content: [ { type: "text", text: processOutput(stdout, useColors) || "No matches found" } ] }; }
- src/index.ts:114-138 (schema)Defines the tool name, description, and input schema for 'advanced-search', specifying all parameters, their types, descriptions, and required fields.{ name: "advanced-search", description: "Advanced search with ripgrep with more options", inputSchema: { type: "object", properties: { pattern: { type: "string", description: "The search pattern (regex by default)" }, path: { type: "string", description: "Directory or file(s) to search." }, caseSensitive: { type: "boolean", description: "Use case sensitive search (default: auto)" }, fixedStrings: { type: "boolean", description: "Treat pattern as a literal string, not a regex" }, filePattern: { type: "string", description: "Filter by file type or glob" }, fileType: { type: "string", description: "Filter by file type (e.g., js, py)" }, maxResults: { type: "number", description: "Limit the number of matching lines" }, context: { type: "number", description: "Show N lines before and after each match" }, invertMatch: { type: "boolean", description: "Show lines that don't match the pattern" }, wordMatch: { type: "boolean", description: "Only show matches surrounded by word boundaries" }, includeHidden: { type: "boolean", description: "Search in hidden files and directories" }, followSymlinks: { type: "boolean", description: "Follow symbolic links" }, showFilenamesOnly: { type: "boolean", description: "Only show filenames of matches, not content" }, showLineNumbers: { type: "boolean", description: "Show line numbers" }, useColors: { type: "boolean", description: "Use colors in output (default: false)" } }, required: ["pattern", "path"] } },
- src/index.ts:185-185 (registration)Checks if the requested tool name is one of the allowed tools, including 'advanced-search', before handling the call.if (!["search", "advanced-search", "count-matches", "list-files", "list-file-types"].includes(toolName)) {