MCP tool definition features in Apicurio Registry
You can store and manage MCP (Model Context Protocol) tool definitions as first-class artifacts in Apicurio Registry. You can use MCP tool features for central governance, version management, and discovery of MCP tools across your organization.
Overview
The Model Context Protocol (MCP) defines a standard for servers to expose tools that language models can invoke. With MCP tools, models can interact with external systems, such as querying databases, calling APIs, or running computations.
Apicurio Registry provides a Tool Registry that stores MCP tool definitions with the following capabilities:
Storing an MCP_TOOL definition in Apicurio Registry provides governance, versioning, and searchability for tool definitions. To make stored tools available to LLM clients such as Claude Desktop, you must also deploy the Apicurio Registry MCP server. For more information, see MCP server integration.
|
- Version management
-
Track tool evolution with full version history.
- Validation
-
Ensure that 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.
| Well-known endpoints | Capabilities |
|---|---|
|
|
Configuration
You can configure MCP tool features by using the following configuration properties.
| Property | Default | Description |
|---|---|---|
|
|
Enables or disables MCP tool definition support (experimental) |
|
|
Set to |
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 following table notes where Apicurio Registry validation follows the spec docs guidance rather than the formal JSON schema. |
| 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. |
The inputSchema field is a JSON Schema object with the following 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 provide metadata about the tool by 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 |
{
"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
You can search for and retrieve MCP tool definitions by using the following well-known endpoints.
Search for registered MCP tool definitions with filtering support.
| 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) |
curl "http://localhost:8080/.well-known/mcp-tools?parameter=location"
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"]
}
]
}
Retrieve a specific registered MCP tool definition.
groupId-
The group containing the tool definition
artifactId-
The artifact ID of the tool definition
version(optional)-
Specific version (defaults to latest)
MCP tool definition JSON document
Use this endpoint to retrieve the JSON Schema for MCP tool definitions. You can use the schema for IDE autocompletion and validation.
curl "http://localhost:8080/.well-known/schemas/mcp-tool/v1"
Creating an MCP tool artifact
You can create an MCP tool artifact in Apicurio Registry by using the REST API.
-
Apicurio Registry is installed and running.
-
MCP tools support is enabled (
apicurio.mcp-tools.enabled=trueandapicurio.features.experimental.enabled=true).
-
Send a
POSTrequest to the Apicurio Registry REST API to create the 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
Apicurio Registry validates MCP tool definitions at three levels.
| Level | Description |
|---|---|
|
No validation |
|
Validates JSON syntax and that the document is a JSON object |
|
Complete validation including:
|
Compatibility checking
When you version MCP tool definitions, Apicurio Registry checks for breaking changes based on compatibility rules.
-
Adding optional input parameters
-
Changing name, title, or description
-
Changing annotations
-
Adding or modifying outputSchema
-
Removing input parameters from inputSchema.properties
-
Adding new required parameters
-
Removing required parameters
-
Changing the inputSchema type
Automatic label extraction
When you store MCP tool definitions, Apicurio Registry automatically extracts structured elements for search.
| Element pattern | Source |
|---|---|
|
Each parameter name from inputSchema.properties |
You can use the extracted labels for efficient parameter-based discovery by using the Apicurio Registry search.
