Skip to main content
Glama
247arjun

Grep MCP Server

by 247arjun

grep_advanced

Execute grep with custom arguments for advanced text search operations, enabling precise pattern matching and file filtering using command-line parameters.

Instructions

Execute grep with custom arguments (advanced usage)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argsYesArray of grep arguments (excluding 'grep' itself)

Implementation Reference

  • The async handler function for the 'grep_advanced' tool. Validates input args against dangerous flags and executes the grep command via executeGrep helper, returning results or errors.
    async ({ args }) => {
      // Basic validation to prevent potentially dangerous operations
      const dangerousFlags = [
        '--devices=', // Device operations could be dangerous
        '--binary-files=', // Binary file operations
        '-f', '--file', // Reading patterns from files
        '-D', '--devices', // Device handling
      ];
      
      const hasUnsafeFlag = args.some(arg => 
        dangerousFlags.some(dangerous => arg.startsWith(dangerous))
      );
      
      if (hasUnsafeFlag) {
        return {
          content: [
            {
              type: "text",
              text: `Error: This command contains potentially unsafe flags. Please use the specific grep tools for safety.`,
            },
          ],
        };
      }
      
      try {
        const result = await executeGrep(['grep', ...args]);
        
        return {
          content: [
            {
              type: "text",
              text: `Exit Code: ${result.exitCode}\n\nResults:\n${result.stdout}${result.stderr ? `\n\nErrors:\n${result.stderr}` : ''}`,
            },
          ],
        };
      } catch (error) {
        return {
          content: [
            {
              type: "text",
              text: `Error executing grep: ${error instanceof Error ? error.message : String(error)}`,
            },
          ],
        };
      }
    }
  • Zod input schema for the 'grep_advanced' tool, defining a single parameter 'args' as an array of strings.
    {
      args: z.array(z.string()).describe("Array of grep arguments (excluding 'grep' itself)"),
    },
  • src/index.ts:528-580 (registration)
    Registration of the 'grep_advanced' MCP tool using server.tool, including name, description, schema, and inline handler.
    server.tool(
      "grep_advanced",
      "Execute grep with custom arguments (advanced usage)",
      {
        args: z.array(z.string()).describe("Array of grep arguments (excluding 'grep' itself)"),
      },
      async ({ args }) => {
        // Basic validation to prevent potentially dangerous operations
        const dangerousFlags = [
          '--devices=', // Device operations could be dangerous
          '--binary-files=', // Binary file operations
          '-f', '--file', // Reading patterns from files
          '-D', '--devices', // Device handling
        ];
        
        const hasUnsafeFlag = args.some(arg => 
          dangerousFlags.some(dangerous => arg.startsWith(dangerous))
        );
        
        if (hasUnsafeFlag) {
          return {
            content: [
              {
                type: "text",
                text: `Error: This command contains potentially unsafe flags. Please use the specific grep tools for safety.`,
              },
            ],
          };
        }
        
        try {
          const result = await executeGrep(['grep', ...args]);
          
          return {
            content: [
              {
                type: "text",
                text: `Exit Code: ${result.exitCode}\n\nResults:\n${result.stdout}${result.stderr ? `\n\nErrors:\n${result.stderr}` : ''}`,
              },
            ],
          };
        } catch (error) {
          return {
            content: [
              {
                type: "text",
                text: `Error executing grep: ${error instanceof Error ? error.message : String(error)}`,
              },
            ],
          };
        }
      }
    );
  • Shared helper function to safely spawn and execute grep processes, capturing stdout, stderr, and exit code. Used by 'grep_advanced' and other grep tools.
    async function executeGrep(args: string[]): Promise<{ stdout: string; stderr: string; exitCode: number }> {
      return new Promise((resolve) => {
        // Ensure we're only calling grep with safe arguments
        if (!args.includes('grep')) {
          args.unshift('grep');
        }
        
        const child = spawn('grep', args.slice(1), {
          stdio: ['pipe', 'pipe', 'pipe'],
          shell: false,
        });
    
        let stdout = '';
        let stderr = '';
    
        child.stdout.on('data', (data) => {
          stdout += data.toString();
        });
    
        child.stderr.on('data', (data) => {
          stderr += data.toString();
        });
    
        child.on('close', (code) => {
          resolve({
            stdout,
            stderr,
            exitCode: code || 0,
          });
        });
    
        child.on('error', (error) => {
          resolve({
            stdout: '',
            stderr: error.message,
            exitCode: 1,
          });
        });
      });
    }

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/247arjun/mcp-grep'

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