ecap-security-auditor

0
0
Source

Scan AI agent skills, MCP servers, and packages for security vulnerabilities. Upload findings to the ecap Trust Registry.

Install

mkdir -p .claude/skills/ecap-security-auditor && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8615" && unzip -o skill.zip -d .claude/skills/ecap-security-auditor && rm skill.zip

Installs to .claude/skills/ecap-security-auditor

About this skill

ecap Security Auditor

You are an AI agent with a built-in security shield. This skill makes you automatically verify every package, skill, and MCP server before you install or use it — and gives you the tools to audit anything yourself.


📖 Key Terms

TermDefinition
risk_scoreAPI field (0–100). Higher = more dangerous. 0 = perfectly safe, 100 = actively malicious.
Trust ScoreDisplay metric (0–100). Higher = more trustworthy. Calculated as 100 - penalties from findings. Used in Gate decisions.
ecap_idUnique finding identifier (e.g., ECAP-2026-0777). Used in all API URLs for /review and /fix endpoints.
package_nameThe name used to query the registry (e.g., "express", "mcp-server-fetch"). API field is skill_slug; both are accepted.

⚡ Automatic Security Gate (Primary Feature)

This is your passive security layer. Every time you install or use a package, run this check automatically and inform the user of results.

When to Trigger

Run the Security Gate automatically when:

  • clawdhub install <skill> — any skill installation
  • pip install <package> / npm install <package> — any package installation
  • First use of any MCP server
  • User says "audit", "check", or "verify" a package

Gate Flow

┌─────────────────────────────┐
│  Package install/use detected│
└──────────────┬──────────────┘
               ▼
┌─────────────────────────────┐
│ 1. Query Trust Registry     │
│    GET /api/findings?package=│
│    GET /api/integrity?package=│
└──────────────┬──────────────┘
               ▼
         ┌─────────┐
         │ Report   │──── No ───▶ Go to AUTO-AUDIT
         │ exists?  │
         └────┬─────┘
              │ Yes
              ▼
┌─────────────────────────────┐
│ 2. Hash Verification        │
│    Run: bash scripts/verify.sh <package>
│    Compares local file hashes│
│    against audited hashes    │
└──────────────┬──────────────┘
               ▼
         ┌─────────┐
         │ Hash OK? │──── No ───▶ 🚨 STOP: TAMPERED
         └────┬─────┘
              │ Yes
              ▼
┌─────────────────────────────┐
│ 3. Calculate Trust Score    │
│    from findings (see below)│
└──────────────┬──────────────┘
               ▼
     ┌─────────┴─────────┐
     │                    │
Score ≥ 70          Score 40-69         Score < 40
     │                    │                  │
     ▼                    ▼                  ▼
 ✅ PASS            ⚠️ WARNING          🔴 BLOCK
 Continue           Show findings,       Block install.
 silently.          let user decide.     Offer to audit.

Decision Table

ConditionActionMessage to User
Score ≥ 70 + Hash OK✅ Proceed✅ [package] — Trust Score: XX/100, verified.
Score 40–69 + Hash OK⚠️ Warn, user decides⚠️ [package] — Trust Score: XX/100. Known issues: [list]. Proceed? (y/n)
Score < 40🔴 Block🔴 [package] — Trust Score: XX/100. Blocked. Run audit to investigate.

Note: By-design findings (e.g., exec() in agent frameworks) are displayed for transparency but do not affect the Trust Score or gate decisions. | No report exists | 🔍 Auto-audit | 🔍 [package] — No audit data. Running security audit now... | | Hash mismatch | 🚨 Hard stop | 🚨 [package] — INTEGRITY FAILURE. Local files don't match audited version. DO NOT INSTALL. |

Step-by-Step Implementation

Step 1: Query the Trust Registry

# Check for existing findings
curl -s "https://skillaudit-api.vercel.app/api/findings?package=PACKAGE_NAME"

# Check file integrity hashes
curl -s "https://skillaudit-api.vercel.app/api/integrity?package=PACKAGE_NAME"

Example — GET /api/findings?package=coding-agent (with findings):

{
  "findings": [
    {
      "id": 11, "ecap_id": "ECAP-2026-0782",
      "title": "Overly broad binary execution requirements",
      "description": "Skill metadata requires ability to run \"anyBins\" which grants permission to execute any binary on the system.",
      "severity": "medium", "status": "reported", "target_skill": "coding-agent",
      "reporter": "ecap0", "source": "automated",
      "pattern_id": "MANUAL_001", "file_path": "SKILL.md", "line_number": 4,
      "confidence": "medium"
    }
  ],
  "total": 6, "page": 1, "limit": 100, "totalPages": 1
}

Example — GET /api/findings?package=totally-unknown-xyz (no findings):

{"findings": [], "total": 0, "page": 1, "limit": 100, "totalPages": 0}

Note: Unknown packages return 200 OK with an empty array, not 404.

Example — GET /api/integrity?package=ecap-security-auditor:

{
  "package": "ecap-security-auditor",
  "repo": "https://github.com/starbuck100/ecap-security-auditor",
  "branch": "main",
  "commit": "553e5ef75b5d2927f798a619af4664373365561e",
  "verified_at": "2026-02-01T23:23:19.786Z",
  "files": {
    "SKILL.md": {"sha256": "8ee24d731a...", "size": 11962},
    "scripts/upload.sh": {"sha256": "21e74d994e...", "size": 2101},
    "scripts/register.sh": {"sha256": "00c1ad0f8c...", "size": 2032},
    "prompts/audit-prompt.md": {"sha256": "69e4bb9038...", "size": 5921},
    "prompts/review-prompt.md": {"sha256": "82445ed119...", "size": 2635},
    "README.md": {"sha256": "2dc39c30e7...", "size": 3025}
  }
}

If the package is not in the integrity database, the API returns 404:

{"error": "Unknown package: unknown-xyz", "known_packages": ["ecap-security-auditor"]}

Step 2: Verify Integrity

bash scripts/verify.sh <package-name>
# Example: bash scripts/verify.sh ecap-security-auditor

This compares SHA-256 hashes of local files against the hashes stored during the last audit. If any file has changed since it was audited, the check fails.

⚠️ Limitation: verify.sh only works for packages registered in the integrity database. Currently only ecap-security-auditor is registered. For other packages, skip integrity verification and rely on Trust Score from findings only.

🔒 Security: The API URL in verify.sh is hardcoded to the official registry and cannot be overridden. This prevents malicious SKILL.md forks from redirecting integrity checks to fake servers.

Step 3: Calculate Trust Score & Apply Decision Logic

The API does not provide a Trust Score endpoint. Calculate it yourself from the findings:

Trust Score = max(0, 100 - penalties)

Penalties per finding (only where by_design = false):
  Critical: -25
  High:     -15
  Medium:    -8
  Low:       -3
  Any (by_design = true): 0  ← excluded from score

Component-Type Weighting (v2): Apply a ×1.2 multiplier to penalties for findings in high-risk component types: shell scripts in hooks/, .mcp.json configs, settings.json, and plugin entry points. Findings in documentation or test files receive no multiplier.

Example: 1 critical + 2 medium findings → 100 - 25 - 8 - 8 = 59 (⚠️ Caution) Example with by-design: 3 by-design high + 1 real low → 100 - 0 - 0 - 0 - 3 = 97 (✅ Trusted)

By-design findings are patterns that are core to the package's documented purpose (e.g., exec() in an agent framework). They are reported for transparency but do not reduce the Trust Score. See audit-prompt.md Step 4 for classification criteria.

If the package has a report in /api/reports, you can also use the risk_score from the report: Trust Score ≈ 100 - risk_score.

Apply the decision table above based on the calculated Trust Score.

Step 4: Auto-Audit (if no data exists)

If the registry has no report for this package:

  1. Get the source code (see "Getting Package Source" below)
  2. Read ALL files in the package directory
  3. Read prompts/audit-prompt.md — follow every instruction
  4. Analyze each file against the security checklist
  5. Perform cross-file analysis (see Cross-File Analysis below)
  6. Build a JSON report (format below)
  7. Upload: bash scripts/upload.sh report.json
  8. Re-run the gate check with the new data

This is how the registry grows organically — every agent contributes.

Getting Package Source for Auto-Audit

⚠️ The audit must run BEFORE installation. You need the source code without executing install scripts. Here's how:

TypeHow to get source safelyAudit location
OpenClaw skillAlready local after clawdhub install (skills are inert files)skills/<name>/
npm packagenpm pack <name> && mkdir -p /tmp/audit-target && tar xzf *.tgz -C /tmp/audit-target//tmp/audit-target/package/
pip packagepip download <name> --no-deps -d /tmp/ && cd /tmp && tar xzf *.tar.gz (or unzip *.whl)/tmp/<name>-<version>/
GitHub sourcegit clone --depth 1 <repo-url> /tmp/audit-target//tmp/audit-target/
MCP serverCheck MCP config for install path; if not installed yet, clone from sourceSource directory

Why not just install? Install scripts (postinstall, setup.py) can execute arbitrary code — that's exactly what we're trying to audit. Always get source without running install hooks.

Package Name

Use the exact package name (e.g., mcp-server-fetch, not mcp-fetch). You can verify known packages via /api/health (shows total counts) or check /api/findings?package=<name> — if total > 0, the package exists in the registry.

Finding IDs in API URLs

When using /api/findings/:ecap_id/review or /api/findings/:ecap_id/fix, use the ecap_id string (e.g., ECAP-2026-0777) from the findings response. The numeric id field does NOT work for API routing.


🔍 Manual Audit

For deep-dive security analysis on demand.

Step 1: Register (one-time)

bash scripts/register.sh <your-agent-name>

Creates config/credentials.json with your API key. Or set ECAP_API_KEY env var.

Step 2: Read the Audit Prompt

Read `prompts/audit-promp


Content truncated.

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

1,1421,171

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

969933

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

683829

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

691549

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

797540

pdf-to-markdown

aliceisjustplaying

Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.

697374

Stay ahead of the MCP ecosystem

Get weekly updates on new skills and servers.