mcs-cli/mcs/techpack-creator
Claude Code and agent skill by mcs-cli/mcs
- community
- ext:[{"type":"config","description":"Configuration overrides"}]
Checking that the SKILL.md file is still in the repository.
Scan a repository that already has Claude Code configuration (hooks, skills, CLAUDE.md, settings, MCP servers) and package it into a valid MCS techpack.yaml for distribution via mcs. Use this skill whenever the user wants to create a tech pack from an existing repo, convert a Claude Code setup into a shareable MCS pack, scaffold a techpack.yaml, or package their dev environment for distribution. Also use when the user asks to "pack" a project, wants to make their Claude Code config reusable, or needs to turn a repo with .claude/ config into an installable tech pack. Even if they don't say "tech pack" explicitly — if they want to distribute Claude Code configuration via MCS, this is the skill to use. Note: this is different from `mcs export` which captures a live running config — this skill analyzes a repo's existing files and structure.
Install
npx vskill@latest install mcs-cli/mcs/techpack-creatorSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
TechPack Creator
You analyze repositories that already have Claude Code configuration and package them into MCS tech packs for distribution. A tech pack is a Git-distributable bundle of Claude Code configuration — MCP servers, hooks, skills, commands, agents, templates, and settings — defined in a single techpack.yaml manifest that the mcs CLI syncs and maintains.
Two approaches — choose based on what's available:
- `mcs export` first (recommended when MCS is installed): Run
mcs export ./pack-outputto
capture the live Claude Code configuration as a starting point. Then review and improve the generated techpack.yaml — add brew components for runtimes, add prompts for env vars, add doctor checks, and wire up templates. This is the fastest path when the user already has a working Claude Code session.
- Direct scan (when no live config or MCS is not installed): Analyze the repo's files and
directory structure directly — read hook scripts, skill directories, command files, settings JSON, CLAUDE.md content, and project manifests to understand what the repo provides. Generate the techpack.yaml and supporting files from scratch.
Both approaches produce the same output: a complete pack directory ready for mcs pack add.
Bundled references (read on demand, not upfront):
references/techpack-schema.md— Complete field-by-field schema fortechpack.yamlreferences/stack-detection.md— File-to-stack mapping and component recommendationsreferences/examples/— Realistic example techpacks (swift-ios.yaml, node-web.yaml, python-ml.yaml)
Remote documentation — use these for the latest info and link them in generated READMEs:
- MCS CLI: https://github.com/mcs-cli/mcs
- Schema reference: https://github.com/mcs-cli/mcs/blob/main/docs/techpack-schema.md
- Creating tech packs guide: https://github.com/mcs-cli/mcs/blob/main/docs/creating-tech-packs.md
- Claude Code hooks: https://code.claude.com/docs/en/hooks
- MCS CLI reference: https://github.com/mcs-cli/mcs/blob/main/docs/cli.md
- MCS troubleshooting: https://github.com/mcs-cli/mcs/blob/main/docs/troubleshooting.md
If the bundled references are unavailable (skill installed without reference files), fetch the remote documentation using WebFetch on the URLs above. The remote docs are the canonical source of truth.
Workflow
First, determine which approach to use:
- If the user has MCS installed and a working Claude Code session → start with `mcs export`:
``bash mcs export ./pack-output # project-scoped config mcs export ./pack-output --global # global-scoped config ` Then review the generated techpack.yaml` and improve it (add runtime brew components, prompts, doctor checks, templates). Skip to Phase 3 (Propose) with the export output as your starting point.
- If no live config is available → follow the full 5-phase workflow below.
Follow these 5 phases in order. Never skip the Propose phase.
Phase 1: Scan
Analyze the target directory.
Existing Claude Code config — this is the PRIMARY source of truth. Scan first:
.claude/hooks/*— existing hook scripts (read each one to understand its event and purpose).claude/skills/*/SKILL.md— existing skills (read frontmatter for name, description).claude/commands/*.md— existing slash commands.claude/agents/*.md— existing subagents.claude/settings.json,.claude/settings.local.json— existing settings (permissions, env vars, hooks config).claude.json— existing MCP server registrationsCLAUDE.md,CLAUDE.local.md— existing instructions (extract sections for templates)
Settings cross-reference — read settings.json/settings.local.json to map hooks to events:
This tells you which hook file maps to which event — critical for the hookEvent field. The command is <interpreter> <path>: everything before the path is the interpreter, so node --experimental-strip-types .claude/hooks/gate.ts becomes hookInterpreter: node --experimental-strip-types. Omit hookInterpreter when it is plain bash or matches what the extension already implies.
Project manifests — detect language and dependencies: Package.swift, *.xcodeproj, *.xcworkspace, package.json, tsconfig.json, Cargo.toml, go.mod, Gemfile, requirements.txt, pyproject.toml, setup.py, Pipfile, build.gradle, build.gradle.kts, pom.xml, composer.json, pubspec.yaml, CMakeLists.txt, *.csproj, *.sln
Configuration files — detect tooling: .eslintrc*, .prettierrc*, biome.json, .swiftlint.yml, .swiftformat, rustfmt.toml, .rubocop.yml, .flake8, ruff.toml, docker-compose.yml, Dockerfile, .github/workflows/*.yml, Fastfile, .env, .env.example
Repository metadata: README.md, LICENSE, git remote URL
Consult references/stack-detection.md for additional file-to-stack mapping recommendations.
Phase 2: Detect
Build a detection report from scan results:
Phase 3: Propose
Present the detection report. Ask for confirmation before generating:
- Show the detection report and ask if the user wants to proceed or modify
- Ask for the pack identifier (suggest one based on repo name — lowercase, hyphens only)
- Ask for the display name and author (suggest from git config)
- Confirm the output directory (default: current directory)
Do NOT generate files without explicit user confirmation.
Phase 4: Generate
Read references/techpack-schema.md now for the complete schema. If the bundled reference is unavailable, fetch the remote version: https://github.com/mcs-cli/mcs/blob/main/docs/techpack-schema.md
Generate the pack directory:
YAML Generation Rules
- Always use shorthand syntax —
brew: nodenot verbosetype/installAction - schemaVersion must be 1
- identifier: lowercase alphanumeric + hyphens, no leading hyphen
- Component IDs: short names, NO dots (MCS auto-prefixes with
<pack-id>.) - YAML field ordering:
- Root: schemaVersion → identifier → displayName → description → author → prompts → components → templates → supplementaryDoctorChecks → configureProject → ignore
- Components grouped: brew first → MCP servers → hooks → skills → commands → agents → settings → gitignore
- Each component: id → displayName → description → hookEvent/hookMatcher/hookTimeout/hookAsync/hookStatusMessage/hookInterpreter → shorthand key
- Runtimes as components:
npxMCP servers need abrew: nodecomponent,uvx/pythonservers needpython, hooks usingjqneedjq. Install order is declaration order, so list what a component needs before it. Never writedependencies:orisRequired:— both are deprecated and ignored; a pack always installs every component - MCP scope: default to
local(per-user, per-project isolation) - Prompts before components in the YAML for readability
- Placeholders:
__UPPER_SNAKE__format. Every__KEY__used in templates/settings MUST have a matching prompt - Populate `ignore:` for non-material paths: When the source repo contains
docs/,examples/, design assets, screenshots, or any directories not referenced by a component/template, add them to a top-levelignore:list (POSIX globs, trailing/silences the directory tree). This silencesmcs pack validateunreferenced-file warnings AND stops downstream "pack update available" notifications from firing on doc/CI commits. Never puttechpack.yamlor referenced paths inignore:—mcs pack validaterejects those. Example:ignore: [docs/, examples/, diagrams/*.png].
Hook Script Template
Hooks are not bash-only. The interpreter follows the file extension (.js/.mjs → node, .py → python3, .rb → ruby, .sh/no extension → bash); declare hookInterpreter for anything else, including arguments (node --experimental-strip-types, uv run). TypeScript infers nothing — always declare it there. Prefer bash when the logic is simple: it is the one runtime guaranteed to exist. Whatever the language, declare a brew component for the runtime and fail open on every error path.
Every hook script must follow this defensive pattern (hooks must NEVER crash the session):
SessionStart hooks that produce output must emit the hookSpecificOutput JSON contract:
UserPromptSubmit hooks can print plain text to stdout — it appears as a system reminder.
Two hooks can share one source file when they need the same logic for different events (e.g., SessionStart + UserPromptSubmit both running a sync/reindex script).
Template Content
Templates should be concise, actionable CLAUDE.local.md instructions:
Settings File
Always include baseline settings in config/settings.json:
Add env vars only when detected from .env.example or similar — use __KEY__ placeholders with matching prompts.
README.md
Generate a README with:
- Pack description
- Prerequisites (list brew dependencies)
- Installation:
mcs pack add <github-user>/<repo>(ormcs pack add /path/to/packfor local) - What it installs (component summary table)
- Configuration (prompt descriptions — what the user will be asked during
mcs sync) - Validation:
mcs pack validate <path> - Links to MCS documentation:
- MCS CLI: https://github.com/mcs-cli/mcs
- Schema: https://github.com/mcs-cli/mcs/blob/main/docs/techpack-schema.md
- Guide: https://github.com/mcs-cli/mcs/blob/main/docs/creating-tech-packs.md
- Troubleshooting: https://github.com/mcs-cli/mcs/blob/main/docs/troubleshooting.md
Phase 5: Validate
After generating, run mcs pack validate {path} if mcs is installed and fix what it reports. Without it, self-check:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/techpack-creator/SKILL.md
Popularity
- Repository stars
- 93
- Repository forks
- 8
- 7-day trend score
- 23
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Extension points
configConfiguration overrides
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mcs-cli/mcs/techpack-creator)