From skill-builder
Creates a content-addressable OCI scratch image bundling a set of MCP servers pinned by digest. Invoked when the user asks to create a profile or bundle MCP servers into a content-addressable dependency.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-builder:profilesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create a profile: a YAML manifest of MCP servers pinned to immutable OCI digests, bundled into a scratch OCI image. The resulting image digest is a single content-addressable reference that guarantees tools and config are consistent with agent skill expectations.
Create a profile: a YAML manifest of MCP servers pinned to immutable OCI digests, bundled into a scratch OCI image. The resulting image digest is a single content-addressable reference that guarantees tools and config are consistent with agent skill expectations.
Follow these steps in order. Do not skip steps.
Ask the user for the list of MCP servers to include. For each server they want to add, ask for:
io.github.owner/my-server)latestRepeat until the user says they are done adding servers.
For each server, call the MCP registry API:
GET https://registry.modelcontextprotocol.io/v0.1/servers/{serverName}/versions/{version}
From the response, 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 that server.
For each OCI identifier, resolve the mutable tag to an immutable digest. Parse the identifier 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 the 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 the user: set a value for this option, or leave it undefined for the end-user to supply?
Collect their answers.
Write a YAML file with the following structure:
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 docker buildx or oras:
Option A — oras (preferred for plain artifacts):
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. Report the digest to the user.
npx claudepluginhub bobbyhouse/client-plugins --plugin skill-builderGenerates server.yaml files for adding custom containerized or remote MCP servers to Docker MCP Gateway catalogs and profiles, including auth, networking, env, and volume configs.
Discovers, recommends, installs, and verifies MCP servers based on detected project stack, handling package installation, configuration, env vars, and testing.
Manages MCP servers by discovering, analyzing, and executing tools/prompts/resources via CLI scripts. Use for integrations, capability discovery, tool filtering, and context bloat resolution.