Skip to main content

Skills extension API

The skills extension API provides endpoints for publishing, discovering, and managing Agent Skills in the ToolHive Registry. These endpoints are available under the dev.toolhive extension namespace.

Base path

All skills endpoints use the following base path:

/{registryName}/v0.1/x/dev.toolhive/skills

Where {registryName} is the name of the registry as defined in your configuration.

Endpoints

List skills

GET /{registryName}/v0.1/x/dev.toolhive/skills

Returns a paginated list of skills, showing the latest version of each.

Query parameters:

ParameterTypeDefaultDescription
searchstring-Substring match on name, title, or description
statusstring-Filter by status (e.g., active, deprecated)
limitint50Results per page (1-100)
cursorstring-Pagination cursor from a previous response

Response: 200 OK

{
"skills": [
{
"namespace": "io.github.acme",
"name": "code-review",
"description": "Structured code review following OWASP guidelines",
"version": "1.2.0",
"status": "active",
"title": "Security Code Review",
"license": "Apache-2.0",
"compatibility": "Requires git",
"repository": { "url": "https://github.com/acme/skills", "type": "git" },
"packages": [
{
"registryType": "git",
"url": "https://github.com/acme/skills",
"ref": "v1.2.0",
"subfolder": "skills/code-review"
}
]
}
],
"metadata": {
"count": 1,
"nextCursor": ""
}
}

Get latest version

GET /{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}

Returns the latest version of a skill.

Path parameters:

ParameterDescription
namespaceSkill namespace in reverse-DNS format
nameSkill name

Response: 200 OK with a single skill object.

List versions

GET /{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions

Returns all versions of a skill.

Response: 200 OK with a skill list response containing all versions.

Get specific version

GET /{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}

Returns a specific version of a skill.

Path parameters:

ParameterDescription
namespaceSkill namespace in reverse-DNS format
nameSkill name
versionVersion string

Response: 200 OK with a single skill object.

Publish skill

POST /{registryName}/v0.1/x/dev.toolhive/skills

Publishes a new skill version to a managed registry. Requires authentication.

Request body:

{
"namespace": "io.github.acme",
"name": "code-review",
"description": "Structured code review following OWASP guidelines",
"version": "1.2.0",
"status": "active",
"title": "Security Code Review",
"license": "Apache-2.0",
"compatibility": "Requires git",
"allowedTools": ["Bash(git:*)", "Read"],
"repository": {
"url": "https://github.com/acme/skills",
"type": "git"
},
"icons": [
{
"src": "https://example.com/icon.png",
"size": "64x64",
"type": "image/png",
"label": "logo"
}
],
"packages": [
{
"registryType": "git",
"url": "https://github.com/acme/skills",
"ref": "v1.2.0",
"subfolder": "skills/code-review"
}
],
"metadata": {
"author": "acme-security-team"
},
"_meta": {}
}

Required fields: namespace, name, description, version

Response: 201 Created with the published skill object.

Delete skill version

DELETE /{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}

Deletes a specific skill version from a managed registry. Requires authentication.

Response: 204 No Content

Skill object

FieldTypeRequiredDescription
namespacestringYesReverse-DNS ownership scope (e.g., io.github.acme)
namestringYesSkill identifier (e.g., code-review)
descriptionstringYesWhat the skill does and when to use it
versionstringYesVersion string (e.g., 1.2.0)
statusstringNoactive, deprecated, or archived (defaults to active)
titlestringNoHuman-friendly display name
licensestringNoSPDX license identifier
compatibilitystringNoEnvironment requirements
allowedToolsstring[]NoPre-approved tools (experimental)
repositoryobjectNoSource repository (url, type)
iconsobject[]NoDisplay icons (src, size, type, label)
packagesobject[]NoDistribution packages (see below)
metadataobjectNoCustom key-value pairs
_metaobjectNoExtended metadata with reverse-DNS namespacing

Package types

OCI package

FieldTypeRequiredDescription
registryTypestringYesMust be "oci"
identifierstringYesOCI image reference
digeststringNoContent digest
mediaTypestringNoOCI media type

Git package

FieldTypeRequiredDescription
registryTypestringYesMust be "git"
urlstringYesGit repository URL
refstringNoTag or branch reference
commitstringNoCommit SHA
subfolderstringNoPath within the repository

Error responses

All error responses return a JSON object with an error field:

{ "error": "description of the error" }
StatusDescription
400Invalid request (missing required fields, bad query parameters)
401Authentication required
403Registry is not a managed registry
404Skill, version, or registry not found
409Version already exists for this skill
500Internal server error

See also