An MCP server that lets any AI agent discover, search, and install 9,000+ agent skills from across the GitHub ecosystem (Anthropic, Superpowers, wshobson, antigravity, Composio, antfu, TerminalSkills, and more).
skillsmcp.intelliforge.tech — browse the catalog and the install steps in the browser.
Scripted terminal recreation — every result, count and path in it is real skills-mcp output.
Also available as GIF and MP4.
Agent skills — the SKILL.md packages that teach Cursor, Claude Code and friends how to do one
specific job well — are scattered across a dozen unrelated GitHub repos. Anthropic publishes a
handful. Superpowers, wshobson, antigravity, Composio, TerminalSkills and others publish thousands
more. There is no index, no search, and no install path: you find a skill by already knowing which
repo it lives in, then copy a folder by hand. skills-mcp collapses that into one MCP server —
9,000+ skills from 11 repos, searchable from inside your editor and installable in a single tool
call.
The Model Context Protocol (MCP) lets editors like Cursor, Claude Desktop, Claude Code, Cline, Continue, Windsurf, and OpenCode plug in external tool providers. This server provides:
| Tool | Purpose |
|---|---|
search_skills |
Free-text + faceted search (domain / repo / tier) |
get_skill |
Fetch the full SKILL.md content from upstream GitHub |
recommend_skills |
"I want to add Stripe to Next.js" → ranked skill suggestions |
list_domains |
All 20 logical domains with skill counts |
list_repos |
All source repositories with counts and links |
install_skill |
Download a skill folder into your IDE's skills directory |
catalog_stats |
Versions, generation time, totals |
Plus a resource (skills://catalog) exposing the full JSON index.
Counts are from the catalog build on 2026-08-03 and grow with the daily refresh — catalog_stats
always reports the live figure.
The catalog is built directly from upstream GitHub repos (no local clones needed) by scripts/build-catalog.mjs and shipped inside the npm package — so search_skills has zero network latency. get_skill and install_skill fetch live from GitHub on demand.
Install it once, globally. Every config below then points at the skills-mcp binary:
npm i -g @gengirish/skills-mcp
skills-mcp
# [skills-mcp] v1.0.1 ready · 9324 skills · 11 reposIt then waits on stdin for JSON-RPC, which is what your client speaks. Ctrl-C to exit.
Why not
npx -y @gengirish/skills-mcp? It works, butnpxre-resolves the package on every launch — measured at ~13s to reach the ready banner versus ~0.5s for the installed binary. Several MCP clients give a server less than that to complete the handshake and will report the server as failed to connect. Usenpxonly for a one-off try; install globally for anything you actually use.
Edit ~/.cursor/mcp.json (or per-project .cursor/mcp.json):
{
"mcpServers": {
"skills": {
"command": "skills-mcp"
}
}
}Restart Cursor. The agent will auto-discover the tools.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"skills": {
"command": "skills-mcp"
}
}
}claude mcp add skills -- skills-mcp # macOS / Linux
claude mcp add skills -- cmd /c skills-mcp # WindowsThe -- is required. Without it claude mcp add parses the rest as its own flags and fails with
error: unknown option. On Windows the cmd /c wrapper is needed because the global npm binary is
a .cmd shim. Add -s user to register it for every project instead of just the current one.
Check it took:
claude mcp list # skills: ... - ✓ ConnectedIn Cline's settings → MCP Servers, add:
{
"skills": {
"command": "skills-mcp"
}
}In ~/.continue/config.yaml:
mcpServers:
- name: skills
command: skills-mcpAny MCP-compatible client: spawn skills-mcp over stdio.
get_skill and install_skill hit GitHub. Anonymous = 60 req/hr, authenticated = 5,000 req/hr. Set:
{
"mcpServers": {
"skills": {
"command": "skills-mcp",
"env": { "GITHUB_TOKEN": "ghp_xxxxxxxxxx
8000
xx" }
}
}
}A token with no scopes (read-only public access) is sufficient.
Once installed, talk to your agent naturally:
"Use the skills tool to find me skills related to Stripe payments."
"Recommend skills for building a Next.js app with auth and a Postgres database."
"Install the systematic-debugging skill into my Cursor."
"Show me everything tagged 'security' from the wshobson repo."
The agent will call the appropriate tool and act on the results.
{
"tool": "search_skills",
"arguments": { "query": "kubernetes deploy", "domain": "devops", "limit": 5 }
}{
"tool": "install_skill",
"arguments": {
"id": "anthropic-skills/skills/skill-creator/SKILL.md",
"ide": "cursor"
}
}ide accepts: cursor (default), claude-code, claude, codex, windsurf, opencode, or custom (with explicit target_dir).
| Repo | Skills | Tier |
|---|---|---|
| zebbern/antigravity-awesome-skills | 6,308 | Mega bundle |
| TerminalSkills/skills | 1,016 | Cross-tool |
| ComposioHQ/awesome-claude-skills | 864 | Curated |
| alirezarezvani/claude-skills | 798 | Production teams |
| wshobson/agents | 180 | Plugin marketplace |
| spencerpauly/awesome-cursor-skills | 65 | Cursor-native |
| obra/superpowers-skills | 31 | Framework |
| antfu/skills | 19 | Curated |
| anthropics/skills | 18 | Official |
| obra/superpowers | 14 | Framework |
| gmh5225/awesome-skills | 8 | Curated |
Each skill is automatically tagged into one or more of:
testing · debugging · security · devops · data · ai-ml · frontend · mobile · backend · documents · git-collab · performance · design · marketing-content · business-pm · automation · meta-skills · documentation · blockchain · other
Tagging rules live in scripts/classify.mjs (shared by the catalog builder and the Explorer UI's adapter).
git clone https://github.com/gengirish/skills-mcp
cd skills-mcp
npm install
GITHUB_TOKEN=ghp_xxx npm run build:catalog # ~5–10 min first time
npm run build # compile TS
npm run inspect # MCP Inspector
node scripts/smoke-test.mjs # JSON-RPC smoke testA fine-grained PAT with public-repo read access is enough. Without it, GitHub limits unauthenticated requests to 60 req/hr — the build will still work for tiny subsets via --> but won't complete a full refresh.
Project layout:
skills-mcp/
├── src/
│ ├── index.ts # MCP server (tools + resources)
│ ├── catalog.ts # JSON catalog loader
│ ├── search.ts # Fuse.js fuzzy search + filters
│ └── fetcher.ts # GitHub raw + API download logic
├── scripts/
│ ├── build-catalog.mjs # GitHub-native catalog builder
│ ├── classify.mjs # shared domain classification rules
│ ├── smoke-test.mjs # JSON-RPC stdio smoke test
│ ├── test-install.mjs # end-to-end install test
│ ├── make-demo.mjs # README demo (animated SVG + GIF/MP4 frames)
│ └── make-social.mjs # 1280x640 social preview card
├── sources.json # declarative list of upstream repos + globs
├── .cache/ # per-repo SHA-keyed cache (gitignored)
├── assets/ # demo.svg / demo.gif / demo.mp4 / social-preview.*
├── data/
│ └── catalog.json # generated, ~5 MB (committed)
└── dist/ # tsc output (published)
Both generators are dependency-free and emit SVG:
node scripts/make-demo.mjs # -> assets/demo.svg (animated, 20s loop)
node scripts/make-social.mjs # -> assets/social-preview.svgdemo.svg degrades gracefully: where CSS animation doesn't run, it renders the finished transcript
instead of an empty window. To refresh the raster copies (needs ffmpeg):
node scripts/make-demo.mjs --frames # assets/.frames/*.svg
npx @resvg/resvg-js-cli assets/social-preview.svg assets/social-preview.png
# rasterise .frames to PNG, then:
ffmpeg -framerate 10 -i png/f%04d.png -i palette.png \
-lavfi "[0:v]mpdecimate=hi=200:lo=100:frac=0.005[d];[d][1:v]paletteuse=dither=none:diff_mode=rectangle" \
-vsync vfr -loop 0 -final_delay 450 assets/demo.gifThe mpdecimate + -vsync vfr pass collapses the static holds into single long frames — it takes
the GIF from ~4 MB to ~316 KB with no visible change.
# Incremental: only fetches repos whose HEAD SHA changed.
GITHUB_TOKEN=ghp_xxx npm run build:catalog
# Full refetch (ignore .cache/):
GITHUB_TOKEN=ghp_xxx npm run build:catalog -- --force --report
# A single repo:
npm run build:catalog -- --
# Include the giant aggregator (~227k entries; very slow):
npm run build:catalog -- --include-registryAdding a new source: append an entry to sources.json with {key, owner, repo, branch, label, tier, upstream, include}. Re-run npm run build:catalog and the new repo's skills appear automatically.
The included GitHub Actions workflow (.github/workflows/refresh-catalog.yml) runs daily at 06:00 UTC, refreshes the catalog, commits any diff back to main. Manual trigger with --force / --include-registry toggles is available via "Run workflow".
Published as @gengirish/skills-mcp.
npm version patch # or minor / major
npm publish --access public # runs prepublishOnly = build:catalog + build--access public is required: npm defaults scoped packages to restricted.
Two things that are easy to trip over:
The publish hook rebuilds the catalog. prepublishOnly runs build:catalog, which needs
GITHUB_TOKEN and takes 5–10 minutes. It also rewrites data/catalog.json, so expect a diff
afterwards — usually just generatedAt/elapsedSec if the upstream repos haven't moved.
To publish without paying for a second rebuild — after a failed publish, say — pack once and push
the tarball. Publishing a tarball skips prepublishOnly entirely:
npm pack # uses the catalog already on disk
npm publish gengirish-skills-mcp-1.0.0.tgz --access publicnpm requires 2FA to publish. Without it you get a 403 that reads as though you failed a 2FA
challenge, when the real state is that there's no second factor configured to challenge you with —
so passing --otp can't help. Check with npm profile get; if it says two-factor auth: disabled,
enable 2FA on npmjs.com first. With auth-and-writes set, every publish needs a fresh --otp, and
npm login (browser flow) is the most reliable way to get a token that accepts one. The documented
alternative is a granular access token with 2FA bypass, scoped @gengirish at the scope level —
package-level won't work for a package that doesn't exist yet.
Verify a release actually boots the way a client will spawn it:
npx -y @gengirish/skills-mcp # should print: [skills-mcp] vX.Y.Z ready · N skills · M reposTo submit to MCP discovery registries:
- mcp.so — open a PR adding an entry
- Smithery —
npx -y @smithery/cli install @gengirish/skills-mcp - claude-plugins.dev — opens an issue/PR to add the server
- Glama AI MCP directory — auto-indexed from npm
scripts/build-catalog.mjsreadssources.json, hits the GitHub Trees API once per source, fetches eachSKILL.mdoverraw.githubusercontent.com(with concurrency + per-repo SHA cache), parses YAML frontmatter, applies the shared regex-based domain classifier, and writesdata/catalog.json(~5 MB).- MCP server loads the catalog at startup, runs Fuse.js fuzzy search in-memory, and uses the upstream coordinates (owner/repo/branch/path) to fetch raw
SKILL.mdcontent or recursively download skill folders via the GitHub Contents API on demand.
The catalog is small enough to ship in the npm tarball so search_skills has zero network latency. No local clones of any upstream repo are required at any stage.
MIT (this server). Indexed skills retain their upstream licenses — see each source repo. Anthropic's document skills (docx, pdf, pptx, xlsx) are source-available; check before redistribution.