The MCP code fails with a 400 INVALID_ARGUMENT error when calling the Google Gemini GenAI API.

View original issue on GitHub  ·  Variant 1

Fixing the 400 INVALID_ARGUMENT Error with Google Gemini GenAI API in MCP

You might encounter a frustrating 400 INVALID_ARGUMENT error when your MCP (Metadata Change Proposal) code interacts with the Google Gemini GenAI API. This error specifically arises when calling the API with the Gemini 2.5 flash model. The error message indicates that the functionDeclaration.parameters.keywords schema is missing a required type field. Let's break down what this means and how to resolve it.

The complete error message typically looks like this:

google.genai.errors.ClientError: 400 INVALID_ARGUMENT.
Unable to submit request because `list_schema_fields` functionDeclaration
`parameters.keywords` schema didn't specify the schema type field.

Understanding the Root Cause

The root cause lies in how your code defines the schema for function parameters, particularly the keywords parameter within the list_schema_fields function declaration. The Google Gemini GenAI API expects a specific schema format, and if the type field is omitted for the keywords parameter, it throws the 400 INVALID_ARGUMENT error. This often happens when the schema definition is incomplete or doesn't adhere to the API's required structure.

Solution: Correcting the Schema Definition

The solution involves modifying your code to explicitly define the type field for the keywords parameter within the function declaration schema. This ensures that the API receives the expected input format.

Here's a general example of how the fix might look in your code. Remember that the specific implementation depends on how you're defining the function declaration schema in your project, but the key is to ensure the type field is present for keywords.

# Incorrect (missing 'type' field)
parameters = {
    "type": "OBJECT",
    "properties": {
        "keywords": {
            "description": "Keywords to search for."
            # Missing 'type' field here!
        }
    }
}

# Correct (with 'type' field)
parameters = {
    "type": "OBJECT",
    "properties": {
        "keywords": {
            "type": "array", # Or "string", depending on the expected data type
            "description": "Keywords to search for.",
            "items": {
              "type": "string" # If it's an array of strings
            }
        }
    }
}

In this example, we've added "type": "array" and an "items" section to the keywords parameter. This tells the API that keywords is expected to be an array of strings. Adjust the type (e.g., to "string" if you expect a single keyword) and the items section accordingly based on your specific requirements.

If your keywords field is supposed to be an object with specific properties, you'd define the type as "object" and then specify those properties and their types within the "properties" field, similar to how the top-level parameters object is structured.

After making this change, redeploy your code. The 400 INVALID_ARGUMENT error should be resolved, and your MCP code should successfully interact with the Google Gemini GenAI API.

Practical Tips and Considerations

By understanding the root cause of the 400 INVALID_ARGUMENT error and applying the appropriate fix to your schema definition, you can ensure smooth and reliable integration with the Google Gemini GenAI API.