From skill-builder
Guides the user through creating a new Claude Code skill with content-addressable MCP server dependencies. Invoked when the user wants to build a skill, create a skill, or author a new slash command.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-builder:skill-builderThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create a new Claude Code skill that declares its MCP server dependencies via a content-addressable profile. The result is a ready-to-use plugin directory containing a `SKILL.md` with a pinned profile digest and `plugin.json`.
Create a new Claude Code skill that declares its MCP server dependencies via a content-addressable profile. The result is a ready-to-use plugin directory containing a SKILL.md with a pinned profile digest and plugin.json.
If the user already has a profile digest, skip Phase 2 and go straight to Phase 3.
Ask the user:
my-skill → /my-skill)Follow these steps to build a content-addressable profile for the skill's MCP server dependencies.
Ask the user for the list of MCP servers the skill needs. For each server:
io.github.owner/my-server)latestRepeat until the user is done adding servers.
For each server, call the MCP registry API:
GET https://registry.modelcontextprotocol.io/v0.1/servers/{serverName}/versions/{version}
Find the package entry with registryType: oci. Extract:
identifier — the OCI image reference with tag (e.g. ghcr.io/owner/repo:v1.0.0)environmentVariables — array of config optionsIf no OCI package exists for a server, inform the user and skip it.
For each OCI identifier, resolve the mutable tag to an immutable digest. Parse into registry, repository, and tag, then call:
GET https://{registry}/v2/{repository}/manifests/{tag}
Accept: application/vnd.oci.image.manifest.v1+json
Read the Docker-Content-Digest response header to get the sha256:... digest. Store the server as {registry}/{repository}@{digest} — drop the tag entirely.
If a digest cannot be resolved, inform the user and ask whether to skip the server or abort.
For each server, present its environmentVariables one at a time. For each option, show:
isRequired)isSecret)Ask: set a value for this option, or leave it undefined for the end-user to supply?
Write a YAML file:
name: {profile-name}
servers:
- name: {server-name}
identifier: {registry}/{repository}@{digest}
config:
OPTION_ONE: value # set by profile
OPTION_TWO: # undefined — end-user supplies this
Ask the user what to name the profile and where to write the file before writing it.
Build the manifest into a scratch OCI image using oras or docker buildx:
Option A — oras (preferred):
oras push {registry}/{repository}:{tag} profile.yaml:application/yaml
Option B — docker with scratch base:
FROM scratch
COPY profile.yaml /profile.yaml
docker buildx build --platform linux/amd64 -t {image-ref} --output type=oci,dest=profile.tar .
Record the image digest from the output. This digest is the profile's content-addressable reference.
Ask the user which specific MCP tools the skill will call. These come from the servers in the profile. Format: mcp__server-name__tool-name. Collect the full list — these become the restrictToolAccess entries.
Help the user write the skill's instructions: what it does, how it behaves, what tools it calls and when. The generated skill body must include a configuration step at the very top of its instructions:
Runtime config step (include in generated SKILL.md): Before doing any real work, the skill must:
- Pull
config.yamlfrom the profile OCI image referenced in the frontmatter digest- Scan the manifest for
configentries with no value set- For each undefined parameter, show the name and description and prompt the user to supply a value; treat
isSecret: trueentries sensitively- Once all required parameters are supplied, proceed with the skill's instructions
Write the plugin directory with two files.
SKILL.md frontmatter:
---
description: {description}
profile: {registry}/{repository}@{digest}
restrictToolAccess:
- mcp__server-name__tool-name
---
plugin.json:
{
"name": "{skill-name}",
"version": "1.0.0",
"description": "{description}"
}
Ask the user where to write the plugin directory before writing it.
npx claudepluginhub bobbyhouse/client-plugins --plugin skill-builderGuides development of Claude Code SKILL.md files with best practices, structure, YAML frontmatter rules, categories, patterns, references, and testing.
Generates Claude Code skills and slash commands: interviews for requirements, selects type, crafts dense frontmatter with trigger phrases, initializes directories via Python script.
Guides creation, refinement, and best practices for Claude Code Skills including SKILL.md structure, router patterns, workflows, references, XML formatting, and progressive disclosure.