우리는 공식 MCP 레지스트리에서 MCP 서버들의 도구 목록을 읽었습니다. 그런 다음 각 목록을 Claude Haiku 5.5, GPT-5-nano, Gemini 2.5 Flash 세 가지 소형 AI 모델에게 각각 한 번씩 해당 공급업체의 배치 API(Batch APIs)를 통해 전송했습니다. 각 모델은 가장 낮은 추론 수준으로 설정되었으며 단 하나의 고정된 요청을 받았습니다. 이것이 바로 21,812개의 도구 목록이었고, 서버당 하나씩 포함되어 있으며 답변 날짜는 2026-10-25부터 2026-10-26 (UTC)까지였습니다.
어떤 MCP 서버도 접촉되지 않았으며 어떤 도구도 실행되지 않았습니다. 우리는 오직 각 서버가 게시하는 방식 그대로 도구 이름, 설명 및 입력 스키마만을 전송했습니다.
서버 작성자에게 가장 유용한 발견 사항은 다음과 같습니다: 각 API는 모델이 보기 전에 도구 목록을 확인하며, 각 API는 자체적인 규칙을 가지고 있습니다. 동일한 목록이라도 한 API에서는 수락되고 다른 API에서는 거부될 수 있습니다. 거부는 해당 목록이 작성된 방식에 대한 API의 답변입니다. 이는 서버 코드의 결함은 아니지만, 클라이언트가 절대로 모델에게 사용자의 도구를 제공하지 않는다는 것을 의미합니다.
각 API가 자체적으로 거부한 내용
여기서 언급하는 카운트는 저희 실행에서 가져온 서버당 하나의 도구 목록입니다. API는 다른 규칙을 가질 수 있으며 이를 변경할 수도 있습니다.
Anthropic의 API (456개 목록 거부)
| 규칙 | API 메시지 | 목록 수 |
|---|
input_schema의 최상위 레벨에서의 oneOf / allOf / anyOf | input_schema does not support oneOf, allOf, or anyOf at the top level | 267 |
| ... | | |
OpenAI의 API (591개 목록 거부)
| 규칙 | API 메시지 | 목록 수 |
|---|
최상위 레벨이 type: object가 아니거나, 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 |
| ... | | |
128개 도구 제한은 우리가 2026-10-25에 읽었던 chat completions API 참조 페이지에는 명시되어 있지 않았습니다. 거부된 목록의 개수는 129개부터 1,711개의 도구까지 다양했습니다.
Google의 API (135개 설명 불가 + 7개 목록 거부)
| Rule | API message | Lists |
|---|
| 도구 이름이 숫자로 시작하거나 공백, 중괄호 또는 대괄호를 포함하는 경우 | Invalid function name. Must start with a letter or an underscore. … | 7 |
그 7개 목록 중 4개는 이름이 숫자로 시작했습니다. 이는 우리가 읽은 문서 내용과 일치하는데, 해당 문서는 첫 글자에 대한 규칙을 제시하지 않았지만 API가 여전히 거부한 경우입니다. Google의 API 역시 규칙명을 명시하지 않은 채 135개의 목록에 대해 Request contains an invalid argument.라는 응답을 했습니다. 이 135개 중 34개는 튜플 스타일의 items (스키마 배열)를 가졌고, 30개는 동일한 이름을 가진 두 개의 도구를 가지고 있었습니다. Google의 API가 응답한 목록 중 어느 것도 이러한 특징을 가지지는 않았습니다. 이는 우리가 측정한 연관성일 뿐, Google이 제시한 이유가 아닙니다.
MCP 서버 작성자를 위한 체크리스트
위 규칙들을 바탕으로 볼 때, 도구 목록은 다음의 경우 세 가지 API 모두에서 더 자주 수락되었습니다:
- 도구 이름이
a-z A-Z 0-9 _ -만 사용하고, 문자로 시작하며, 64자를 초과하지 않는 경우.
- 목록 내 모든 도구 이름이 고유한 경우.
- 각
inputSchema가 최상위 레벨에서 type: "object"이며, 그곳에 oneOf/anyOf/allOf/enum/const/not이 없는 경우.
pattern 값이 extbackslash p{…} 유니코드 클래스를 피하는 경우.
- 배열이 튜플이 아닌 단일 스키마를
items에 사용하는 경우.
- 서버가 128개 이하의 도구를 노출하는 경우.
이 수치들이 의미하지 않는 것들
이는 제시된 날짜에 세 가지 소규모 모델을, 각각 가장 낮은 추론 설정으로 테스트한 결과입니다. 이는 공급업체의 다른 모델이나 자체 시스템 프롬프트를 가진 실제 클라이언트를 설명하지 않습니다. 또한 어떤 서버나 게시자에 대한 판단도 아닙니다. 저희는 모델 순위를 매기지 않습니다. 각 모델의 개별 수치는 전체 페이지에 있으며, 각 서버의 API 메시지는 해당 서버 페이지에서 확인할 수 있습니다.