#4518·composio

[Bug]: Remote MCP tool `COMPOSIO_MANAGE_SKILL` parameter schema rejected by Google Vertex AI (must be type OBJECT)

Author: belalhassan-KonectaCreated Sep 17, 2026Updated Sep 17, 2026
Labelssupport

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

  1. Configure Composio Remote MCP in OpenCode (or any MCP client): Endpoint: https://connect.composio.dev/mcp
  2. Configure the LLM provider to use Google Vertex AI (e.g., gemini-3.8-flash).
  3. Send any user message in the session (e.g., "hi").
  4. Observe the Vertex AI 400 INVALID_ARGUMENT error rejecting composio_COMPOSIO_MANAGE_SKILL.

Minimal Reproducible Example

bash
// 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

bash
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": false in client config allows requests to proceed.
  • A fix on the server endpoint connect.composio.dev/mcp wrapping this tool's parameters into a single type: "object" will fix this permanently for all Gemini/Vertex AI users.