---
title: "Get MCP tool compatibility"
method: GET
path: "/well-known/mcp-tools/{groupId}/{artifactId}/compatibility"
tags: ["WellKnown"]
---

# Get MCP tool compatibility

`GET /well-known/mcp-tools/{groupId}/{artifactId}/compatibility`

## Request

- The document declares no server URL.
- Auth: none declared

Compares the `outputSchema` of the source tool with the `inputSchema` of each candidate MCP tool, as if the whole output object were passed to the candidate, and returns every verdict with its reasons and limitations, newest candidate first. A source tool whose `outputSchema` is absent or cannot be compared is compared with no candidate, and the top-level `limitations` say why.

## Query parameters

- `version` string
- `verdict` string[]
- `offset` integer
- `limit` integer

## Response `200`

The verdict for each evaluated candidate tool, with its reasons and limitations.

- McpToolCompatibilityResults: The compatibility of the `outputSchema` of a source MCP tool with the `inputSchema` of each evaluated candidate tool.
  - `candidateTotal` integer, required: The number of MCP tools in the registry, including the source tool. When per-resource authorization is enabled, only the tools that the caller can read are counted. It is 0 when the source tool cannot be compared.
  - `evaluated` integer, required: The number of candidate tools compared with the source tool. The source tool is not a candidate, and a tool that is deleted during the scan, or that has no enabled or deprecated version, is skipped.
  - `scanLimit` integer, required: The maximum number of MCP tools scanned, newest first by creation date.
  - `complete` boolean, required: False when older MCP tools were not compared because only the newest `scanLimit` tools are scanned. It reports scan coverage, not that every verdict is conclusive.
  - `totals` McpToolCompatibilityTotals, required: The number of evaluated candidate tools with each verdict, before the `verdict` filter.
    - `compatible` integer, required
    - `incompatible` integer, required
    - `indeterminate` integer, required
  - `count` integer, required: The number of results that match the `verdict` filter, before pagination.
  - `limitations` McpToolCompatibilityLimitation[], required: Why the source tool cannot be compared with any candidate, such as `SOURCE_HAS_NO_OUTPUT_SCHEMA`. Empty when the candidates were compared.
    - `code` string, required: What kind of limitation this is. Current values are `UNSUPPORTED_DIALECT`, `UNSUPPORTED_KEYWORD`, `PRODUCER_OBJECT_OPEN`, `DEPTH_LIMIT_REACHED`, `COMPARISON_FAILED` and `SOURCE_HAS_NO_OUTPUT_SCHEMA`. Later versions can add values.
    - `side` 'PRODUCER' | 'CONSUMER', required: The tool that a limitation refers to. * PRODUCER: the source tool, whose `outputSchema` is compared * CONSUMER: the candidate tool, whose `inputSchema` is compared
    - `pointer` string, required: A JSON Pointer into the tool definition on that side, which locates the cause.
    - `message` string, required: A human readable description of the limitation.
  - `results` McpToolCompatibilityResult[], required: The requested page of results that match the `verdict` filter, newest candidate first.
    - `tool` McpToolSearchResult, required: MCP tool search result.
      - `groupId` string
      - `artifactId` string
      - `name` string
      - `title` string
      - `description` string
      - `owner` string
      - `createdOn` integer
      - `parameters` string[]
    - `verdict` 'COMPATIBLE' | 'INCOMPATIBLE' | 'INDETERMINATE', required: Whether the output of the source tool can be passed to the input of the candidate tool. * COMPATIBLE: no mismatch was found and no limitation affects either schema. * INCOMPATIBLE: at least one mismatch was found that no limitation invalidates. * INDETERMINATE: no mismatch stands, but a limitation prevents a positive verdict.
    - `reasons` McpToolCompatibilityReason[], required: The mismatches that make the verdict `INCOMPATIBLE`. Empty for any other verdict.
      - `code` string, required: What kind of mismatch this is. Current values are `REQUIRED_NOT_GUARANTEED`, `TYPE_NOT_ACCEPTED`, `ADDITIONAL_PROPERTY_NOT_ACCEPTED` and `VALUE_NOT_ACCEPTED`. Later versions can add values.
      - `producerPointer` string, required: A JSON Pointer into the source tool definition.
      - `consumerPointer` string, required: A JSON Pointer into the candidate tool definition.
      - `message` string, required: A human readable description of the mismatch.
    - `limitations` McpToolCompatibilityLimitation[], required: Everything that prevented a complete comparison. An `INCOMPATIBLE` result can have limitations that do not affect its reasons.
      - `code` string, required: What kind of limitation this is. Current values are `UNSUPPORTED_DIALECT`, `UNSUPPORTED_KEYWORD`, `PRODUCER_OBJECT_OPEN`, `DEPTH_LIMIT_REACHED`, `COMPARISON_FAILED` and `SOURCE_HAS_NO_OUTPUT_SCHEMA`. Later versions can add values.
      - `side` 'PRODUCER' | 'CONSUMER', required: The tool that a limitation refers to. * PRODUCER: the source tool, whose `outputSchema` is compared * CONSUMER: the candidate tool, whose `inputSchema` is compared
      - `pointer` string, required: A JSON Pointer into the tool definition on that side, which locates the cause.
      - `message` string, required: A human readable description of the limitation.

## Other responses

- `400`: Common response for all operations that can return a `400` error.
- `401`: Common response for all operations that can return a `401` error indicating authentication is required.
- `403`: Common response for all operations that can return a `403` error indicating the user is authenticated but not authorized.
- `404`: Common response for all operations that can return a `404` error.
- `500`: Common response for all operations that can fail with an unexpected server error.

## Changes

- **2026-11-10** `9ea539691ab7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/apicurio/apis/apicurio-registry-api-v3/changes/well-known/mcp-tools/:groupId/:artifactId/compatibility/get.md)

---

[API](https://skmtc.dev/apicurio/apis/apicurio-registry-api-v3.md) - [All operations](https://skmtc.dev/apicurio/apis/apicurio-registry-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/apicurio/apis/apicurio-registry-api-v3/revisions/952cb20d3c0d?raw)
