Search, fetch, lint, and install Agent Skills (SKILL.md) from the SkillMD registry.
An Agent Skill is a folder with a SKILL.md file: YAML frontmatter (name, description) plus Markdown instructions an agent loads on demand. Claude Code, Cursor, Codex, Gemini CLI, GitHub Copilot, Windsurf and dozens of other agents read the same format, which is what makes a shared registry worth having. If the format is new to you, start with What is an Agent Skill? and the anatomy of a SKILL.md file.
skillmd.com is the open registry of those skills: 25,000+ skills from 470+ publishers, every one of them linted against the format, security-scanned for what it can do, and pinned to a commit. Verdicts, capability flags and independent scanner results sit on every skill page. Installing writes files and does nothing else.
This repository is everything that runs on your machine or in your CI, MIT-licensed:
| Package | What it is | Install |
|---|---|---|
skillmds | One npm package, two binaries: the skillmd CLI and the skillmds MCP server | npm i -g skillmds |
@skillmds/core | The SKILL.md engine: parser, lint rules, security scanner, quality score, SARIF / JSON / GitHub formatters | npm i @skillmds/core |
skillmds/skillmd/action | GitHub Action: lint every skill in a repo, results in GitHub Code Scanning | uses: skillmds/skillmd/action@v1 |
The registry applies the same engine, so a skill that passes locally passes on publish.
# Search the registry and install a skill into every agent on your machine
npx skillmds search "pdf"
npx skillmds add anthropic/pdf
# Lint your own skill before you share it
npx skillmds lint ./my-skill
No account needed for any of the above. Skills land in each detected agent's own directory (.claude/skills/, .cursor/skills/, .agents/skills/, …). Per-agent walkthroughs: Claude Code · Cursor · Codex · Gemini CLI · GitHub Copilot · Windsurf · all agents.
skillmdnpm i -g skillmds
| Command | What it does |
|---|---|
skillmd lint [path] | Validate SKILL.md files. Diagnostics, a 0–100 quality score, --fix for the mechanical ones. |
skillmd scan [path] | What would this skill do? Reports scripts, network calls and secret access. |
skillmd rules [id] | List the lint rules, or explain one. |
skillmd init [name] | Scaffold a new skill from a template. |
skillmd search <query> | Search the registry from the terminal. |
skillmd add <source> | Install from a registry slug, a GitHub repo or a local path. Lints first, never executes scripts. |
skillmd list / remove / update | Manage installed skills across agents. |
skillmd publish [path] | Publish to skillmd.com. Blocked on lint errors. |
skillmd lint . --format sarif > skillmd.sarif # GitHub Code Scanning
skillmd lint . --strict # warnings fail too
skillmd add owner/repo -a claude-code -g # one agent, global scope
skillmd add some/skill --deny executes_scripts # refuse skills that run code
skillmd add detects 68 agents by their config directories: Claude Code, Cursor, Codex, Windsurf, OpenCode, Gemini CLI, Antigravity, Kiro, Warp, GitHub Copilot, Cline, Roo Code, Goose, Trae, Qwen Code, Amp, Zed, Continue, Devin, OpenHands, Replit and more. Agents that share the .agents/skills convention are written once. Running plain skillmd opens a guided menu.
Full reference: docs/cli.md · CLI docs on skillmd.com · How one SKILL.md works in every agent
skillmdsGive any MCP-capable agent the whole registry. It can search, inspect, lint and install skills mid-conversation.
# Claude Code
claude mcp add skillmd -- npx -y skillmds
// Claude Desktop, Cursor, VS Code, Windsurf, … (examples/mcp/ has per-client files)
{ "mcpServers": { "skillmd": { "command": "npx", "args": ["-y", "skillmds"] } } }
Or use the hosted remote server, zero install, streamable HTTP:
https://api.skillmd.com/mcp
| Tool | What the agent gets |
|---|---|
skillmd_search | Registry search with categories, ratings and install snippets |
skillmd_get | Full skill detail: body, provenance, license, security flags |
skillmd_install | Safe install: validated, SHA-256-verified, zip-slip-guarded, never executes scripts |
skillmd_trending / skillmd_recommend | Leaderboard and similar-skill suggestions |
skillmd_list_saved | Your saved skills (with SKILLMD_TOKEN) |
skillmd_lint | Validate any SKILL.md content on the spot |
Full reference: docs/mcp.md · MCP docs on skillmd.com · Using SkillMD over MCP · MCP registry entry: com.skillmd/skillmd
@skillmds/corenpm i @skillmds/core
import { lint } from "@skillmds/core";
const { ok, score, diagnostics, security } = lint(rawSkillMd, { slug: "my-skill" });
Nine lint rules, a line-aware security scanner, a 0–100 quality score and SARIF / JSON / GitHub-annotation formatters. ESM, typed, no runtime dependency beyond yaml, runs in Node, browsers and edge runtimes.
The scanner classifies every skill into capability flags you can filter or deny on install:
| Flag | Meaning |
|---|---|
docs_only | Nothing executable found. Pure instructions. |
network_calls | Fetches, curls or otherwise talks to the network. |
executes_scripts | Runs commands or bundled scripts. |
reads_secrets | Touches env vars, tokens or credential files. |
untrusted_install | Fetch-and-execute from a non-standard source. |
Rules and scoring: docs/rules.md · Debugging skills: lint, scan, score · Common SKILL.md mistakes
- uses: skillmds/skillmd/action@v1
with:
path: .
Lints every skill in the repo and uploads SARIF to GitHub Code Scanning, so findings show up in pull requests. Full example: examples/github-action.yml · action/README.md
skillmd login # token from your skillmd.com account
skillmd publish ./my-skill # blocked on lint errors
skillmd publish ./my-skill --dry-run
Published skills get a page at skillmd.com/skills/<you>/<name>, a safety verdict, an install command for every agent, and a live README badge:
[](https://skillmd.com/skills/<you>/<name>)
Guides: Publishing a skill to the registry · Writing skills that get used · What a verified badge means · Skill packs
Everything here is a thin client over the public API at api.skillmd.com (GET /v1/search?q=…, GET /v1/skills/<owner>/<name>, …). Described by docs/registry-api.md, skillmd.com/openapi.json and, for AI systems, skillmd.com/llms.txt. Every skill page also has a Markdown twin at …/<name>.md.
Browse by category: Coding & Dev Tools · AI & ML · DevOps & Infra · Integrations & APIs · Security · Data & Analytics · Web & Frontend · Productivity · Docs & Writing · Design & Media
Or by publisher, official skills from verified publishers, the leaderboard, or what's new. Live counts: skillmd.com/stats.
Installing a skill writes files and does nothing else. No script execution, strict path containment (slug validation plus zip-slip guards), SHA-256 integrity verification against the registry's content-addressed store, and companion files pinned to GitHub raw hosts. Publishing runs the same lint and scan the CLI does, and every listed skill shows its verdict, capability flags and independent scanner results.
Details in SECURITY.md. Report vulnerabilities to hi@skillmd.com.
npm ci
npm run build # @skillmds/core, then skillmds
npm test # vitest across both packages, incl. an MCP stdio smoke test
npm run typecheck # strict tsc
See CONTRIBUTING.md for layout, PR guidelines and the release process, and CODE_OF_CONDUCT.md.
MIT © SkillMD · skillmd.com · hi@skillmd.com
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y skillmdsMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"com-skillmd-skillmd": {
"command": "npx",
"args": [
"-y",
"skillmds"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencecom.skillmd/skillmd works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.