DEV Community

md sultan mahamud
md sultan mahamud

Posted on Originally published at protocolprobe.com AI-assisted

"Your MCP server's tool list can be refused before the model sees it: the rules three AI APIs applied to 21,812 lists"

We read the tool lists of MCP servers in the official MCP registry. Then we sent each list, once, to three small AI models through their vendors' Batch APIs: Claude Haiku 5.5, GPT-5-nano and Gemini 2.5 Flash. Each model was set to its lowest reasoning level and got one fixed request. That was 21,812 tool lists, one per server, with answers dated 2026-10-25 to 2026-10-26 (UTC).

No MCP server was contacted and no tool was run. We sent only the tool names, descriptions and input schemas, exactly as each server publishes them.

The finding most useful to server authors: each API checks the tool list before its model sees it, and each API has its own rules. The same list can be accepted by one API and refused by another. A refusal is the API's answer about the list as written. It is not a fault in the server's code, but it does mean that client never offers your tools to the model.

What each API refused, in its own words

Counts are tool lists, one per server, from our run. An API can have other rules, and can change them.

Anthropic's API (456 lists refused)

Rule API message Lists
oneOf / allOf / anyOf at the top level of input_schema input_schema does not support oneOf, allOf, or anyOf at the top level 267
Tool name outside ^[a-zA-Z0-9_-]{1,128}$ String should match pattern '^[a-zA-Z0-9_-]{1,128}$' 173
Two tools with the same name Tool names must be unique. 29
Schema not valid JSON Schema draft 2020-12 JSON schema is invalid. It must match JSON Schema draft 2020-12 … 6
Top-level property key outside ^[a-zA-Z0-9_.-]{1,64}$ Property keys should match pattern … 4

OpenAI's API (591 lists refused)

Rule API message Lists
Top level not type: object, or has oneOf/anyOf/allOf/enum/const/not schema must have type 'object' and not have 'oneOf'/'anyOf'/'allOf'/'enum'/'const'/'not' at the top level. 262
More than 128 tools Invalid 'tools': array too long. Expected an array with maximum length 128 … 171
Tool name outside ^[a-zA-Z0-9_-]+$ string does not match pattern … 167
A pattern it does not read as a regex (every case used \p{…} Unicode classes) '^[\\p{L}\\p{N}_-]+$' is not a 'regex' 19
A number in the schema too large a numeric value in the function parameters is too large 4
List longer than the input limit Input tokens exceed the configured limit of 272000 tokens. 3

The 128-tool limit is not stated on the chat completions API reference page we read on 2026-10-25. The refused lists ranged from 129 to 1,711 tools.

Google's API (7 lists refused, plus 135 unexplained)

Rule API message Lists
Tool name starts with a digit, or has a space, braces or square brackets Invalid function name. Must start with a letter or an underscore. … 7

For 4 of those 7 lists, the names started with a digit. That meets the docs text we read, which gives no rule for the first character, but the API still refused them. Google's API also answered Request contains an invalid argument. for 135 more lists without naming a rule. Of those 135, 34 had tuple-style items (an array of schemas) and 30 had two tools with the same name. No list that Google's API answered had either. That is an association we measured, not a reason Google gave.

A checklist for MCP server authors

From the rules above, a tool list is accepted by all three APIs in our run more often when:

  1. Tool names use only a-z A-Z 0-9 _ -, start with a letter, and stay at 64 characters or fewer.
  2. Every tool name in the list is unique.
  3. Each inputSchema is type: "object" at the top level, with no oneOf/anyOf/allOf/enum/const/not there.
  4. pattern values avoid \p{…} Unicode classes.
  5. Arrays use a single schema in items, not a tuple.
  6. The server exposes 128 tools or fewer.

What these figures do not mean

They describe three small models on the dates shown, each at its lowest reasoning setting. They do not describe the vendors' other models or a real client with its own system prompt. They are not a judgment of any server or publisher. We do not rank the models. Each model's own figures are on the full page, and each server's own API message is on its server page.

Top comments (0)