MCP server for discovering, fetching, validating, and converting Claude skills from skills.sh and GitHub repositories
SaferSkills independently audited skill-loader-mcp-server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server for discovering, fetching, validating, and converting Claude skills from the skills.sh marketplace and GitHub repositories.
/api/search?q=<query> endpoint — no authentication neededlist_skills and get_leaderboard use the /api/v1/skills endpoint (requires SKILLS_SH_API_KEY)convert_to_power now generates mcp.json when a skill has dependencies or tool references, and creates a steering/ directory when a skill has 3+ complex sections@modelcontextprotocol/sdk v1.29mcp.json and steering/ directory)npm install -g @goldzulu/skill-loader-mcp-servernpm install @goldzulu/skill-loader-mcp-server| Variable | Required | Description |
|---|---|---|
SKILLS_SH_API_KEY | For list_skills and get_leaderboard only | API key for the skills.sh authenticated /api/v1/skills endpoint. Request from Vercel if needed. Not required for search_skills. |
Add to your mcp.json:
{
"mcpServers": {
"skill-loader": {
"command": "npx",
"args": ["-y", "@goldzulu/skill-loader-mcp-server"],
"env": {
"SKILLS_SH_API_KEY": "your-api-key-here"
},
"description": "Skill Loader MCP Server for managing Claude skills"
}
}
}Add to your Claude Desktop configuration:
{
"mcpServers": {
"skill-loader": {
"command": "skill-loader-mcp-server",
"env": {
"SKILLS_SH_API_KEY": "your-api-key-here"
}
}
}
}The env block is optional — only needed if you want to use list_skills or get_leaderboard.
skill-loader-mcp-serverSearch for skills by keyword using the skills.sh search API. No authentication required.
Parameters:
query (required): Search querylimit (optional): Max results (default: 20, max: 50)Example:
{
"tool": "search_skills",
"arguments": { "query": "pdf", "limit": 5 }
}List all available skills from skills.sh with pagination. Requires `SKILLS_SH_API_KEY`.
Parameters:
page (optional): Page number (default: 1)pageSize (optional): Results per page (default: 50, max: 100)Example:
{
"tool": "list_skills",
"arguments": { "page": 1, "pageSize": 10 }
}Get trending or top-installed skills. Requires `SKILLS_SH_API_KEY`.
Parameters:
timeframe (optional): 'all' or '24h' (default: 'all')limit (optional): Max results (default: 20, max: 50)Example:
{
"tool": "get_leaderboard",
"arguments": { "timeframe": "24h", "limit": 10 }
}Fetch raw skill content from GitHub.
Parameters:
identifier (required): Skill name or owner/repo formatExample:
{
"tool": "fetch_skill",
"arguments": { "identifier": "anthropics/pdf-extractor" }
}Validate skill content for security issues.
Parameters:
content (required): Skill content to validateurl (optional): Source URL for verificationExample:
{
"tool": "validate_skill",
"arguments": {
"content": "---\nname: Test\n---\n\n# Test",
"url": "https://example.com/skill.md"
}
}Convert skill to Kiro steering file format.
Parameters:
content (required): Skill contentsourceUrl (optional): Original source URLExample:
{
"tool": "convert_to_steering",
"arguments": {
"content": "---\nname: Test\ndescription: A test skill\n---\n\n# Test",
"sourceUrl": "https://example.com/skill.md"
}
}Convert skill to Kiro power format. Generates mcp.json when the skill has dependencies or tools, and a steering/ directory when the skill has 3+ complex sections.
Parameters:
content (required): Skill contentsourceUrl (optional): Original source URLExample:
{
"tool": "convert_to_power",
"arguments": {
"content": "---\nname: Test\ndescription: A test skill\n---\n\n# Test",
"sourceUrl": "https://example.com/skill.md"
}
}Complete import workflow (fetch + validate + convert).
Parameters:
identifier (required): Skill identifieroutputFormat (required): 'steering' or 'power'skipValidation (optional): Skip security validation (default: false)Example:
{
"tool": "import_skill",
"arguments": {
"identifier": "anthropics/pdf-extractor",
"outputFormat": "steering"
}
}The server includes security validation that scans for:
rm -rf, sudo, eval, exec)/etc/, /usr/, /bin/)${...}, $(...))Skills that fail security validation will be blocked from import unless explicitly skipped.
The server caches skills.sh search results in memory for 1 hour to reduce API calls and improve performance. The cache is automatically refreshed when expired.
All tools return errors in a consistent JSON format with descriptive messages. Common error types:
npm run buildnpm testnpm run test:watchMIT
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
For issues and questions, please open an issue on GitHub.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.