[Bug]: Remote MCP tool `COMPOSIO_MANAGE_SKILL` parameter schema rejected by Google Vertex AI (must be type OBJECT)
SDK Language
Python SDK (composio package)
SDK Version
Remote MCP Server (https://connect.composio.dev/mcp) accessed via OpenCode MCP client
Runtime Environment
Windows 11 / Node.js v20.x / OpenCode v1.18.x
Environment
Local Development
Describe the Bug
When connecting to Composio's remote MCP server (https://connect.composio.dev/mcp) using an agent/client that connects to Google Vertex AI (e.g., Gemini 3.8 Flash or Gemini 2.5), every model request immediately fails with HTTP 400 INVALID_ARGUMENT.
Root Cause:
The COMPOSIO_MANAGE_SKILL tool schema defines its input parameters using a bare top-level anyOf union (for create, update, delete actions) without wrapping them in an outer type: "object".
Google Vertex AI strictly enforces OpenAPI 3.0 / protobuf schemas for function calling, requiring the top-level parameters schema of every function declaration to be an OBJECT. Because Vertex AI validates all advertised tools upfront before model generation, this single invalid schema breaks all requests, even a simple prompt like "hi".
Expected behavior:
The COMPOSIO_MANAGE_SKILL input parameter schema should declare a top-level type: "object" (with properties for action and associated fields), or wrap union options within an object schema, making it compatible with Google Vertex AI and the OpenAPI 3.0 tool-calling specification.
Steps to Reproduce
- Configure Composio Remote MCP in OpenCode (or any MCP client):
Endpoint:
https://connect.composio.dev/mcp - Configure the LLM provider to use Google Vertex AI (e.g.,
gemini-3.8-flash). - Send any user message in the session (e.g., "hi").
- Observe the Vertex AI 400
INVALID_ARGUMENTerror rejectingcomposio_COMPOSIO_MANAGE_SKILL.
Minimal Reproducible Example
// Tool schema currently exposed by https://connect.composio.dev/mcp for COMPOSIO_MANAGE_SKILL:
// Parameter root lacks "type": "object" and starts with "anyOf":
{
"name": "composio_COMPOSIO_MANAGE_SKILL",
"description": "Manage skills (create, update, delete)",
"parameters": {
"anyOf": [
{
"type": "object",
"properties": { "action": { "const": "create" } /* ... */ }
},
{
"type": "object",
"properties": { "action": { "const": "update" } /* ... */ }
},
{
"type": "object",
"properties": { "action": { "const": "delete" } /* ... */ }
}
]
}
}Error Output / Stack Trace
litellm.BadRequestError: Vertex_ai_betaException BadRequestError - b'{\n "error": {\n "code": 400,\n "message": "Unable to submit request because `composio_COMPOSIO_MANAGE_SKILL` functionDeclaration parameters schema should be of type OBJECT. Learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling",\n "status": "INVALID_ARGUMENT"\n }\n}\n'Reproducibility
- Always reproducible
- Intermittent / Sometimes
- Happened once, can’t reproduce
Additional Context or Screenshots
- Google Vertex AI documentation on FunctionDeclaration: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling
- Vertex AI strictly requires
functionDeclarations[].parameters.type == "OBJECT". - Temporary workaround on client side: explicitly disabling
"composio_COMPOSIO_MANAGE_SKILL": falsein client config allows requests to proceed. - A fix on the server endpoint
connect.composio.dev/mcpwrapping this tool's parameters into a singletype: "object"will fix this permanently for all Gemini/Vertex AI users.
Source: ComposioHQ/composio