https://linen.dev logo
Composio For You with Anthropic models
# 🖥│support-forum
s
I have composio hooked in as an external MCP tool server in open-webui, and openrouter as my model provider. When I try use an Anthropic model and type in a chat that has the Composio tool enabled, I get an error message. Openrouter shows the following: { "type": "error", "error": { "type": "invalid_request_error", "message": "tools.32.custom.input_schema: input_schema does not support oneOf, allOf, or anyOf at the top level" }, "request_id": "req_vrtx_011CfPW6AgP8QoFa2FKtEYyH" } The same test without Composio enabled as a tool in open-webui works OK. From what I gather Anthropic models do not support oneOf/allOf/anyOf at the top level of the tool schemas - is there any way to fix this on the composio side of things?
Or to put it another way, is there a way to get composio to generate schemas that pass "strict" validation?
c
Hi, Thanks for reporting the error and including OpenRouter's message. It means the model request contains a tool with
oneOf
,
allOf
, or
anyOf
at the top level of its input schema, which that Anthropic endpoint rejects. Your test with Composio disabled narrows the problem to the tool-enabled path, but the error does not identify whether tool 32 came from Composio or how Open WebUI passed its schema to OpenRouter. We can't yet confirm a Composio setting that makes this external MCP path generate strict-compatible schemas. The decisive comparison is tool 32 as sent to OpenRouter against the tool definition returned by Composio's MCP server. That will show whether a Composio schema change can address this case. You don't need to change your connection or scopes for this error.
s
The error does not occur when I disable only composio but leave all the other tools enabled. It is only the composio tool that causes this error. I will do some more digging to find the details of the tool 32 definition as you mentioned.
I did some more digging. composio_COMPOSIO_MANAGE_SKILL has a top-level anyOf in its input schema, and the tool index in the error message that I get always matches the index of the COMPOSIO_MANAGE_SKILL tool. So, I think the ball's in your court.
Here's the tool info retrieved straight from the composio MCP server via curl, then narrowed down and formatted by jq. 'anyOf' is clearly there in the inputSchema.
c
Thanks for the thorough digging — your curl output settles it.
COMPOSIO_MANAGE_SKILL
is one of the session meta tools our hosted MCP/Tool Router server exposes, and you're correct that its
inputSchema
currently has a top-level
anyOf
. Anthropic's tool-use API rejects `oneOf`/`allOf`/`anyOf` at the top level of a tool's
input_schema
, and Open WebUI passes MCP tool schemas through to OpenRouter unchanged — so any Anthropic model + the Composio MCP server fails at request validation, while other providers accept the schema as-is. To answer your question directly: there's no setting on your side today that makes the hosted MCP server emit Anthropic-strict schemas — this needs a fix on our side (flattening that tool's top-level
anyOf
, e.g. into an object with a discriminator field, the same way we already normalize schemas for provider-specific constraints elsewhere). I've filed this as a schema-compatibility bug against the Tool Router backend, referencing this thread. Workarounds until then: 1. Disable just that tool. If your Open WebUI setup lets you toggle individual tools from an MCP server, turn off only
COMPOSIO_MANAGE_SKILL
— it's the skill-management meta tool and isn't needed for normal tool discovery/execution (
COMPOSIO_SEARCH_TOOLS
,
COMPOSIO_MULTI_EXECUTE_TOOL
, etc. will still work). If Open WebUI only exposes the server as a single on/off tool, let me know and I'll check whether we can exclude it from your session config server-side. 2. Use a non-Anthropic model for chats that need Composio tools (as you've found).