Skip to main content
Glama
PV-Bhat

GemForge-Gemini-Tools-MCP

gemini_search

Retrieve accurate answers and verify facts by leveraging Gemini 2.0 Flash and Google Search integration. Ideal for general knowledge queries, fact-checking, and detailed information retrieval.

Instructions

Generates responses based on the latest information using Gemini 2.0 Flash and Google Search. Best for general knowledge questions, fact-checking, and information retrieval.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
enable_thinkingNoEnable thinking mode for step-by-step reasoning
file_pathNoOptional file path to include with the query
model_idNoOptional model ID override (advanced users only)
queryYesYour search query or question

Implementation Reference

  • Core handler function that implements the gemini_search tool. Validates input, selects Gemini 2.0 Flash model, constructs SDK request with Google Search tool, executes API call, and formats response.
    export async function handleDirectSearchAlt(request: any) {
      try {
        // Validate required parameters
        if (!request.params.arguments || typeof request.params.arguments.query !== 'string') {
          throw new McpError(
            ErrorCode.InvalidParams,
            'Query parameter is required and must be a string'
          );
        }
    
        // Extract arguments as SearchArgs
        const args = request.params.arguments as SearchArgs;
        const { query, file_path, model_id } = args;
    
        if (file_path) {
          console.error(`[handleDirectSearchAlt] Received file_path: ${typeof file_path === 'string' ? file_path : JSON.stringify(file_path)}`);
          console.error(`[handleDirectSearchAlt] File path exists check: ${await fileExists(typeof file_path === 'string' ? file_path : file_path[0])}`);
        }
    
        // Select the model using the tool-specific model selector
        const targetModelId = model_id || 'gemini-2.0-flash-001';
        console.error(`[handleDirectSearchAlt] Using model: ${targetModelId}`);
    
        try {
          // Create the model instance
          const model = genAI.getGenerativeModel({ model: targetModelId });
    
          // Build a request that works with Flash models (no system role)
          // This exact format has been verified to work with gemini-2.0-flash-001
          const sdkRequest: any = {
            contents: [{
              role: 'user',
              parts: [{
                text: query
              }]
            }],
            systemInstruction: "You have access to Google Search. You MUST use Google Search for ALL queries to provide accurate, up-to-date information. Do not rely solely on your training data.",
            generationConfig: {
              temperature: 0.7,
              topP: 0.8,
              topK: 40
            },
            tools: [{
              googleSearch: {}
            }],
            toolConfig: {
              functionCallingConfig: {
                mode: "AUTO"
              }
            }
          };
    
          console.error(`[handleDirectSearchAlt] Sending request to ${targetModelId}`);
          
          // Send request to Gemini API
          const result = await model.generateContent(sdkRequest);
          const response = result.response;
          console.error(`[handleDirectSearchAlt] SDK Response received from ${targetModelId}`);
    
          // Extract text from response
          let responseText = "";
          try {
            responseText = response.text();
          } catch (e) {
            console.error(`[handleDirectSearchAlt] Error extracting text:`, e);
            if (response.candidates && response.candidates.length > 0 && 
                response.candidates[0].content && 
                response.candidates[0].content.parts && 
                response.candidates[0].content.parts.length > 0) {
              responseText = response.candidates[0].content.parts[0].text || "";
            }
          }
    
          // Create a simple response object
          return {
            content: [
              {
                type: 'text',
                text: responseText
              }
            ]
          };
        } catch (apiError) {
          console.error('API error in direct search handler:', apiError);
          if (apiError instanceof McpError) {
            throw apiError;
          }
          throw apiError;
        }
      } catch (error) {
        console.error('Error in direct search handler:', error);
        if (error instanceof McpError) {
          throw error;
        }
        return {
          content: [
            {
              type: 'text',
              text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`
            }
          ],
          isError: true
        };
      }
    }
  • src/index.ts:206-228 (registration)
    Tool dispatch switch statement that registers and routes 'gemini_search' (both canonical TOOL_NAMES.GEM_SEARCH and legacy name) to the handleDirectSearchAlt handler.
    switch (request.params.name) {
      case TOOL_NAMES.GEM_SEARCH:
        // Use the alternative direct search handler that works with Flash models
        return await handleDirectSearchAlt(request);
      case TOOL_NAMES.GEM_REASON:
        return await handleReason(request);
      case TOOL_NAMES.GEM_CODE:
        return await handleCode(request);
      case TOOL_NAMES.GEM_FILEOPS:
        return await handleFileops(request);
      // Support legacy tool names for backward compatibility
      case 'gemini_search':
        // Use the alternative direct search handler that works with Flash models
        return await handleDirectSearchAlt(request);
      case 'gemini_reason':
        return await handleReason(request);
      default:
        console.error(`Unknown tool requested: ${request.params.name}`);
        throw new McpError(
          ErrorCode.MethodNotFound,
          `Unknown tool: ${request.params.name}. Available tools: gemini_search, gemini_reason, gemini_code, gemini_fileops`
        );
    }
  • Input schema and description for the gemini_search tool, provided in the ListTools MCP response.
    {
      name: TOOL_NAMES.GEM_SEARCH,
      description: 'Generates responses based on the latest information using Gemini 2.0 Flash and Google Search. Best for general knowledge questions, fact-checking, and information retrieval.',
      inputSchema: {
        type: 'object',
        properties: {
          query: {
            type: 'string',
            description: 'Your search query or question'
          },
          file_path: {
            type: 'string',
            description: 'Optional file path to include with the query'
          },
          model_id: {
            type: 'string',
            description: 'Optional model ID override (advanced users only)'
          },
          enable_thinking: {
            type: 'boolean',
            description: 'Enable thinking mode for step-by-step reasoning'
          }
        },
        required: ['query'],
      },
    },
  • Constants defining tool names, including GEM_SEARCH: 'gemini_search' and legacy aliases used throughout the codebase.
    export const TOOL_NAMES = {
      // New specialized toolset
      GEM_SEARCH: 'gemini_search',    // For search-enabled queries (Gemini 2.0 Flash)
      GEM_REASON: 'gemini_reason',    // For complex reasoning (Gemini 2.5 Flash/Pro)
      GEM_CODE: 'gemini_code',        // For coding tasks (Gemini 2.5 Pro)
      GEM_FILEOPS: 'gemini_fileops',  // For file operations (Gemini 2.0 Flash-Lite/1.5 Pro)
    
      // Legacy names for backward compatibility - only keeping what's needed
      SEARCH: 'gemini_search',
      REASON: 'gemini_reason',
      ANALYZE_FILE: 'gemini_analyze',
      RAPID_SEARCH: 'gemini_search'
    };
  • TypeScript interface defining the input arguments for the gemini_search tool.
    /**
     * Arguments for gemini_search tool
     */
    export interface SearchArgs extends BaseArgs, FileInput {
        /** The search query */
        query: string;
        /** Whether to enable thinking mode */
        enable_thinking?: boolean;
    }
Install Server

Other Tools

Related Tools

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/PV-Bhat/GemForge-MCP'

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