MCP Tool Definition Features in Apicurio Registry
Apicurio Registry supports storing and managing MCP (Model Context Protocol) tool definitions as first-class artifacts. This enables central governance, version management, and discovery of MCP tools across an organization.
Overview
The Model Context Protocol (MCP) allows servers to expose tools that can be invoked by language models. Tools enable models to interact with external systems, such as querying databases, calling APIs, or performing computations.
Apicurio Registry acts as a Tool Registry, storing MCP tool definitions with:
-
Version management — Track tool evolution with full version history
-
Validation — Ensure tool definitions conform to the MCP specification
-
Compatibility checking — Detect breaking changes in tool input schemas
-
Discovery — Search for tools by name or input parameter
-
Well-known endpoints — Serve tool definitions at standard URLs
┌─────────────────────────────────────────────────────────────────────────────┐
│ Apicurio Registry │
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ MCP Tool Registry │ │
│ │ │ │
│ │ /.well-known/mcp-tools (search tools) │ │
│ │ /.well-known/mcp-tools/{group}/{id} (retrieve tool) │ │
│ │ │ │
│ │ - Store tool definitions │ │
│ │ - Search by name or parameter │ │
│ │ - Version management │ │
│ │ - Validation and compatibility checking │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
Configuration
MCP tool features are controlled via configuration properties:
| Property | Default | Description |
|---|---|---|
|
|
Enable/disable MCP tool definition support (experimental) |
|
|
Must be enabled to use experimental features like MCP tools |
To enable MCP tool support, set both properties:
apicurio.features.experimental.enabled=true
apicurio.mcp-tools.enabled=true
MCP Tool Definition Schema
Tool definitions follow the MCP specification (2025-11-25).
| The MCP specification has two authoritative sources: the formal JSON schema and the specification docs. In some cases these sources diverge. The table below notes where Apicurio Registry’s validation follows the spec docs guidance rather than the formal JSON schema. |
Tool Fields
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
Unique identifier for the tool (1-128 characters, alphanumeric + underscore/hyphen/dot) |
|
string |
No |
Human-readable name for display purposes |
|
string |
No |
Human-readable description of tool functionality |
|
object |
Yes |
JSON Schema defining expected input parameters |
|
object |
No |
JSON Schema defining expected output structure. Described in the spec docs but not yet present in the formal MCP JSON schema. |
|
object |
No |
Optional metadata annotations (audience, priority) |
|
array |
No |
Optional icons for display in user interfaces. Described in the spec docs but not yet present in the formal MCP Tool JSON schema. Passed through without validation. |
|
object |
No |
Optional execution-related properties such as task support. Described in the spec docs but not yet present in the formal MCP Tool JSON schema. Passed through without validation. |
Input Schema
The inputSchema field is a JSON Schema object with these properties:
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
Must be |
|
object |
No |
Parameter definitions (each value is a JSON Schema object) |
|
array |
No |
List of required parameter names |
Annotations (ToolAnnotations)
Annotations provide metadata about the tool using the MCP ToolAnnotations type:
| Field | Type | Description |
|---|---|---|
|
string |
Optional fallback display name. Per the spec docs, display precedence is: top-level |
|
array of strings |
Intended audience. The MCP spec defines a |
|
number (0-1) |
Priority hint; higher values indicate higher priority |
Example Tool Definition
{
"name": "get_weather",
"title": "Weather Information Provider",
"description": "Get current weather information for a location",
"inputSchema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name or zip code"
}
},
"required": ["location"]
},
"outputSchema": {
"type": "object",
"properties": {
"temperature": {
"type": "number",
"description": "Temperature in celsius"
},
"conditions": {
"type": "string",
"description": "Weather conditions"
}
},
"required": ["temperature", "conditions"]
},
"annotations": {
"title": "Weather Lookup",
"audience": ["user", "assistant"],
"priority": 0.8
}
}
Well-Known Endpoints
GET /.well-known/mcp-tools
Search for registered MCP tool definitions with filtering support.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
|
string |
Filter by tool name (partial match) |
|
string (repeatable) |
Filter by input parameter name |
|
integer |
Pagination offset (default: 0) |
|
integer |
Pagination limit (default: 20) |
Example Request:
curl "http://localhost:8080/.well-known/mcp-tools?parameter=location"
Response: McpToolSearchResults
{
"count": 1,
"tools": [
{
"groupId": "mcp-tools",
"artifactId": "weather-tool",
"name": "get_weather",
"title": "Weather Information Provider",
"description": "Get current weather information",
"owner": "admin",
"createdOn": 1700000000000,
"parameters": ["location"]
}
]
}
GET /.well-known/mcp-tools/{groupId}/{artifactId}
Retrieve a specific registered MCP tool definition.
Path Parameters:
-
groupId- The group containing the tool definition -
artifactId- The artifact ID of the tool definition
Query Parameters:
-
version(optional) - Specific version (defaults to latest)
Response: MCP tool definition JSON document
Creating an MCP Tool Artifact
curl -X POST "http://localhost:8080/apis/registry/v3/groups/mcp-tools/artifacts" \
-H "Content-Type: application/json" \
-d '{
"artifactId": "weather-tool",
"artifactType": "MCP_TOOL",
"firstVersion": {
"version": "1.0.0",
"content": {
"contentType": "application/json",
"content": "{\"name\": \"get_weather\", \"title\": \"Weather Tool\", \"description\": \"Get weather data\", \"inputSchema\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\"}}, \"required\": [\"location\"]}}"
}
}
}'
Validation Rules
MCP tool definitions support three validation levels:
| Level | Description |
|---|---|
|
No validation performed |
|
Validates JSON syntax and that the document is a JSON object |
|
Complete validation including:
- Required |
Compatibility Checking
When versioning MCP tool definitions, compatibility rules detect breaking changes:
Compatible Changes (allowed):
-
Adding optional input parameters
-
Changing name, title, description
-
Changing annotations
-
Adding or modifying outputSchema
Incompatible Changes (may break clients):
-
Removing input parameters from inputSchema.properties
-
Adding new required parameters
-
Removing required parameters
-
Changing the inputSchema type
