skill-mcp-master — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-mcp-master (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} is the classic direct prompt-injection phrasing. Placed in a skill body that the agent reads as trusted instructions, it tries to make the agent abandon its prior rules and follow whatever comes next — a full system-prompt override.
ignore/disregard/forget … previous instructions sentence.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.
The Skill MCP server is a self-hosted agent skills registry accessible to any MCP-compatible AI agent or tool. It stores curated, expert-authored instruction sets ("skills") and delivers them on demand through a structured 3-tier disclosure model.
Each skill contains:
| Tier | Content | Tools |
|---|---|---|
| 1 | Frontmatter - name, description, tags, score | skills_find_relevant |
| 2 | Instructions, system prompt addition | skills_get_body, skills_get_options |
| 3 | Reference docs, executable scripts, asset templates | skills_get_reference, skills_run_script, skills_get_asset |
Follow this sequence for every task where a skill might apply.
skills_find_relevant)skills_find_relevant(query="<specific description of your task>", top_k=5)Interpret scores:
score > 0.6 → strong match - proceed to Step 2score 0.4–0.6 → possible match - read description to decidescore < 0.4 → no relevant skill - proceed without oneQuery tips:
"write pytest unit tests for a Flask REST API endpoint""extract tables from a multi-page PDF and output as CSV""review Python code for security vulnerabilities""testing" (too generic - poor embedding)"help me" (no task signal)skills_get_body)skills_get_body(skill_id="<top result from Step 1>")The response contains:
{
"skill_id": "test-writer",
"instructions": "## Testing Workflow\n1. Identify the function under test ...",
"system_prompt_addition": "You are a senior test engineer ...",
"tier3_manifest": {
"references": ["TESTING-GUIDE.md", "COVERAGE-POLICY.md"],
"scripts": ["coverage_check.py"],
"assets": ["test-template.py"]
}
}After loading:
instructions - this is the authoritative guidancesystem_prompt_addition is non-empty, incorporate it into your contexttier3_manifest - only proceed to Step 3 if instructions reference specific filesOptional: load config (skills_get_options)
skills_get_options(skill_id="<skill_id>")Only needed when customising skill behaviour or checking constraints/dependencies.
3a - Reference documents:
# First: get the manifest
skills_get_reference(skill_id="test-writer", filename="list")
# Then: fetch the specific file the instructions mentioned
skills_get_reference(skill_id="test-writer", filename="TESTING-GUIDE.md")3b - Execute a helper script:
# First: see available scripts
skills_run_script(skill_id="test-writer", filename="list")
# Then: run with optional inputs
skills_run_script(skill_id="test-writer", filename="coverage_check.py",
input_data={"TARGET_DIR": "./src", "MIN_COVERAGE": "80"})
# Returns: exit_code, stdout, stderr - source is never exposed3c - Fetch a template or asset:
# First: get the manifest
skills_get_asset(skill_id="test-writer", filename="list")
# Then: fetch the template
skills_get_asset(skill_id="test-writer", filename="test-template.py")
# Use as a starting template - adapt it to the specific taskRule: Only load Tier 3 resources that the Tier 2 instructions explicitly reference. Do not load them speculatively - it wastes context and latency.
# 1. Discover
results = skills_find_relevant(
query="write integration tests for a Python REST API using pytest"
)
# → test-writer: 0.84 ← strong match
# 2. Load instructions
body = skills_get_body(skill_id="test-writer")
# → instructions: "## Testing Workflow ..."
# → tier3_manifest.references: ["TESTING-GUIDE.md"]
# → tier3_manifest.assets: ["test-template.py"]
# 3. The instructions say "follow TESTING-GUIDE.md for project conventions"
guide = skills_get_reference(skill_id="test-writer", filename="TESTING-GUIDE.md")
# 4. The instructions say "use test-template.py as your file scaffold"
template = skills_get_asset(skill_id="test-writer", filename="test-template.py")
# 5. Apply instructions using the guide and template| Situation | Action |
|---|---|
| Starting any non-trivial task | Always call skills_find_relevant first |
| All scores < 0.4 | No relevant skill - proceed without one |
| Score > 0.4 | Call skills_get_body to load instructions |
| Instructions are complete | Apply them - stop, do not load Tier 3 |
| Instructions mention a file | Load that specific file via Tier 3 |
| User asks to customise skill | Call skills_get_options |
| Task is trivial (< 2 min) | Skip skill lookup if confidence is high |
| skill_id | Domain |
|---|---|
api-integration | REST/GraphQL API integration patterns |
code-review | Security, quality, and bug review |
data-analysis | CSV/tabular data analysis and EDA |
docx-creator | Word document generation |
git-commit-writer | Conventional commit messages |
pdf-processing | PDF extraction and form filling |
readme-writer | Project README generation |
sql-query-writer | SQL query authoring and validation |
test-writer | Unit, integration, and E2E test writing |
web-scraper | Web scraping and data extraction |
Query `skills_find_relevant` for semantic discovery - the above is a reference snapshot.
| Tool | When to call | Returns |
|---|---|---|
skills_find_relevant(query, top_k=5) | Start of every task | Ranked skill list with scores |
skills_get_body(skill_id) | After finding a match | Instructions + tier3_manifest |
skills_get_options(skill_id) | When customising behaviour | Config schema, variants, limits |
skills_get_reference(skill_id, filename="list") | To see/fetch reference docs | Manifest or file content |
skills_run_script(skill_id, filename, input_data={}) | To run a helper script | exit_code, stdout, stderr |
skills_get_asset(skill_id, filename="list") | To see/fetch templates | Manifest or file content |
(MCP_TRANSPORT=streamable-http python -m skill_mcp.server). The Cloudflare Workers deployment returns the script manifest only.
skills_get_options returns the version of each skillhttps://skill-mcp.<your-subdomain>.workers.dev/sse
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.