# Bawbel Scanner

A static scanner for MCP servers and skill files. It flags AVE vulnerabilities, gives each finding an OWASP AIVSS score, and never launches the servers it inspects.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 12
- Author: bawbel
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/bawbel/scanner
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/bawbel-scanner

## What it does

Point it at skill files, a directory, or a server card URL. The check runs in layers: regex rules, YARA, Semgrep, an LLM pass for meaning, and a Docker sandbox for behaviour. Every layer feeds one merged list sorted by severity, and a separate step pairs capability tags against known attack chains to surface compound risk.

The sandbox stays off unless you set `BAWBEL_SANDBOX_ENABLED=true`, so scanned content does not execute by default. Server cards are fetched over HTTP; the MCP process itself is never started. The YARA, Semgrep and LLM engines come as separate extras of the package, and the LLM one also wants an API key. Skip them and you are left with plain pattern matching, which catches far less.

There is housekeeping too. `bawbel init` writes `.bawbelignore` and `bawbel.yml`, while `bawbel pin` stores hashes of skill files in `.bawbel-pins.json` so later drift shows a swapped file. Findings you don't care about get a suppression comment carrying a reason, a reviewer and an optional expiry date. For pipelines, `--fail-on-severity` and SARIF output do the job.

## Requirements
- Needs: Python and uv (commands run via uvx)

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add bawbel-scanner -- uvx bawbel-scanner
```
uvx runs the command named after the package; if the README names another one, use uvx --from bawbel-scanner <command>

### Codex

**Platform CLI**
```bash
codex mcp add bawbel-scanner -- uvx bawbel-scanner
```
uvx runs the command named after the package; if the README names another one, use uvx --from bawbel-scanner <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "bawbel-scanner": {
            "command": "uvx",
            "args": [
                "bawbel-scanner"
            ]
        }
    }
}
```
uvx runs the command named after the package; if the README names another one, use uvx --from bawbel-scanner <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "bawbel-scanner": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "bawbel-scanner"
            ]
        }
    }
}
```
uvx runs the command named after the package; if the README names another one, use uvx --from bawbel-scanner <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add bawbel-scanner uvx bawbel-scanner
```
uvx runs the command named after the package; if the README names another one, use uvx --from bawbel-scanner <command>

## When to use it
- audit agent skill files before they reach a real project
- scan an MCP server from its card without launching the process
- catch hardcoded credentials and leaked secrets in skill files
- detect a swapped skill file by comparing hashes
- fail a CI build when findings exceed a severity threshold

## Example prompts
- Scan the `./skills/` directory and list findings with their AIVSS scores
- Check the server card at `https://server` without starting the server
- Mark that finding as accepted risk and record the reviewer

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [World Monitor](https://affpapa.org/en/nevibecode/mcp/world-monitor.md) — MCP server · ★ 89408
- [mcp](https://affpapa.org/en/nevibecode/mcp/kubeshark-mcp.md) — MCP server · ★ 12109
- [Robin: AI-Powered Dark Web OSINT](https://affpapa.org/en/nevibecode/mcp/robin-ai-powered-dark-web-osint.md) — MCP server · ★ 7658
- [jshookmcp](https://affpapa.org/en/nevibecode/mcp/jshookmcp.md) — MCP server · ★ 2061
- [OpenOSINT](https://affpapa.org/en/nevibecode/mcp/openosint.md) — MCP server · ★ 1802

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
