diff --git a/docs/toolhive/reference/crd-spec.md b/docs/toolhive/reference/crd-spec.md
index 27c9b168..8a517f1d 100644
--- a/docs/toolhive/reference/crd-spec.md
+++ b/docs/toolhive/reference/crd-spec.md
@@ -1418,6 +1418,7 @@ _Appears in:_
| Field | Description | Default | Validation |
| --- | --- | --- | --- |
+| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#condition-v1-meta) array_ | Conditions represent the latest available observations of the MCPExternalAuthConfig's state | | Optional: \{\}
|
| `observedGeneration` _integer_ | ObservedGeneration is the most recent generation observed for this MCPExternalAuthConfig.
It corresponds to the MCPExternalAuthConfig's generation, which is updated on mutation by the API Server. | | Optional: \{\}
|
| `configHash` _string_ | ConfigHash is a hash of the current configuration for change detection | | Optional: \{\}
|
| `referencingServers` _string array_ | ReferencingServers is a list of MCPServer resources that reference this MCPExternalAuthConfig
This helps track which servers need to be reconciled when this config changes | | Optional: \{\}
|
diff --git a/static/api-specs/publisher-provided.schema.json b/static/api-specs/publisher-provided.schema.json
index 50abf562..63131172 100644
--- a/static/api-specs/publisher-provided.schema.json
+++ b/static/api-specs/publisher-provided.schema.json
@@ -52,6 +52,17 @@
},
"uniqueItems": true
},
+ "overview": {
+ "type": "string",
+ "description": "Longer Markdown-formatted description for web display. Unlike the upstream description (limited to 100 chars), this supports full Markdown and is intended for rich rendering on catalog pages."
+ },
+ "tool_definitions": {
+ "type": "array",
+ "description": "Full MCP Tool definitions describing the tools available from this server, including name, description, inputSchema, and annotations",
+ "items": {
+ "$ref": "#/definitions/tool_definition"
+ }
+ },
"metadata": {
"$ref": "#/definitions/metadata"
},
@@ -112,11 +123,6 @@
"description": "Number of repository stars",
"minimum": 0
},
- "pulls": {
- "type": "number",
- "description": "Number of container image pulls or usage count",
- "minimum": 0
- },
"last_updated": {
"type": "string",
"description": "Timestamp when the metadata was last updated, in RFC3339 format",
@@ -392,6 +398,30 @@
}
},
"additionalProperties": false
+ },
+ "tool_definition": {
+ "type": "object",
+ "description": "An MCP Tool definition describing a tool available from this server",
+ "required": ["name"],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the tool"
+ },
+ "description": {
+ "type": "string",
+ "description": "A human-readable description of the tool"
+ },
+ "inputSchema": {
+ "type": "object",
+ "description": "A JSON Schema object defining the expected parameters for the tool"
+ },
+ "annotations": {
+ "type": "object",
+ "description": "Optional properties describing tool behavior (e.g., readOnlyHint, destructiveHint)"
+ }
+ },
+ "additionalProperties": true
}
}
}
diff --git a/static/api-specs/toolhive-api.yaml b/static/api-specs/toolhive-api.yaml
index fea9ffaf..3ca634e4 100644
--- a/static/api-specs/toolhive-api.yaml
+++ b/static/api-specs/toolhive-api.yaml
@@ -228,7 +228,7 @@ components:
scopes_supported:
description: |-
ScopesSupported lists the OAuth 2.0 scope values advertised in discovery documents.
- If empty, defaults to ["openid", "profile", "email", "offline_access"].
+ If empty, defaults to registration.DefaultScopes (["openid", "profile", "email", "offline_access"]).
items:
type: string
type: array
@@ -806,6 +806,12 @@ components:
Name is the identifier for the MCP server, used when referencing the server in commands
If not provided, it will be auto-generated from the registry key
type: string
+ overview:
+ description: |-
+ Overview is a longer Markdown-formatted description for web display.
+ Unlike the Description field (limited to 500 chars), this supports
+ full Markdown and is intended for rich rendering on catalog pages.
+ type: string
permissions:
$ref: '#/components/schemas/permissions.Profile'
provenance:
@@ -838,6 +844,11 @@ components:
description: Tier represents the tier classification level of the server,
e.g., "Official" or "Community"
type: string
+ title:
+ description: |-
+ Title is an optional human-readable display name for the server.
+ If not provided, the Name field is used for display purposes.
+ type: string
tools:
description: Tools is a list of tool names provided by this MCP server
items:
@@ -892,9 +903,6 @@ components:
description: LastUpdated is the timestamp when the server was last updated,
in RFC3339 format
type: string
- pulls:
- description: Pulls indicates how many times the server image has been downloaded
- type: integer
stars:
description: Stars represents the popularity rating or number of stars for
the server
@@ -1037,6 +1045,12 @@ components:
type: string
oauth_config:
$ref: '#/components/schemas/registry.OAuthConfig'
+ overview:
+ description: |-
+ Overview is a longer Markdown-formatted description for web display.
+ Unlike the Description field (limited to 500 chars), this supports
+ full Markdown and is intended for rich rendering on catalog pages.
+ type: string
repository_url:
description: RepositoryURL is the URL to the source code repository for
the server
@@ -1056,6 +1070,11 @@ components:
description: Tier represents the tier classification level of the server,
e.g., "Official" or "Community"
type: string
+ title:
+ description: |-
+ Title is an optional human-readable display name for the server.
+ If not provided, the Name field is used for display purposes.
+ type: string
tools:
description: Tools is a list of tool names provided by this MCP server
items:
@@ -2040,6 +2059,12 @@ components:
v1.installSkillRequest:
description: Request to install a skill
properties:
+ client:
+ description: Client is the target client (e.g., "claude-code")
+ type: string
+ force:
+ description: Force allows overwriting unmanaged skill directories
+ type: boolean
name:
description: Name or OCI reference of the skill to install
type: string
diff --git a/static/api-specs/toolhive-legacy-registry.schema.json b/static/api-specs/toolhive-legacy-registry.schema.json
index 8012e80b..54694cda 100644
--- a/static/api-specs/toolhive-legacy-registry.schema.json
+++ b/static/api-specs/toolhive-legacy-registry.schema.json
@@ -110,6 +110,14 @@
"type": "string",
"description": "Identifier for the MCP server, used when referencing the server in commands (auto-generated from the object key)"
},
+ "title": {
+ "type": "string",
+ "description": "Optional human-readable display name for the server. If not provided, the name field is used for display."
+ },
+ "overview": {
+ "type": "string",
+ "description": "Longer Markdown-formatted description for web display. Unlike the description field (limited to 500 chars), this supports full Markdown and is intended for rich rendering on catalog pages."
+ },
"permissions": {
"description": "Security profile and access permissions for the server",
"$ref": "#/definitions/permissions"
@@ -165,6 +173,13 @@
"minItems": 1,
"uniqueItems": true
},
+ "tool_definitions": {
+ "type": "array",
+ "description": "Full MCP Tool definitions describing the tools available from this server, including name, description, inputSchema, and annotations",
+ "items": {
+ "type": "object"
+ }
+ },
"transport": {
"type": "string",
"description": "Communication transport protocol used by the MCP server",
@@ -490,6 +505,14 @@
"type": "string",
"description": "Identifier for the remote MCP server (auto-generated from the object key)"
},
+ "title": {
+ "type": "string",
+ "description": "Optional human-readable display name for the server. If not provided, the name field is used for display."
+ },
+ "overview": {
+ "type": "string",
+ "description": "Longer Markdown-formatted description for web display. Unlike the description field (limited to 500 chars), this supports full Markdown and is intended for rich rendering on catalog pages."
+ },
"url": {
"type": "string",
"description": "Endpoint URL for the remote MCP server",
@@ -532,6 +555,13 @@
"minItems": 1,
"uniqueItems": true
},
+ "tool_definitions": {
+ "type": "array",
+ "description": "Full MCP Tool definitions describing the tools available from this server, including name, description, inputSchema, and annotations",
+ "items": {
+ "type": "object"
+ }
+ },
"headers": {
"type": "array",
"description": "HTTP headers for authentication to the remote server",
diff --git a/static/api-specs/upstream-registry.schema.json b/static/api-specs/upstream-registry.schema.json
index 72ea1a17..2ae69c76 100644
--- a/static/api-specs/upstream-registry.schema.json
+++ b/static/api-specs/upstream-registry.schema.json
@@ -78,6 +78,13 @@
}
}
}
+ },
+ "skills": {
+ "type": "array",
+ "description": "Array of skills in the registry",
+ "items": {
+ "$ref": "https://raw.githubusercontent.com/stacklok/toolhive/main/pkg/registry/data/skill.schema.json"
+ }
}
}
}