Skip to main content
Glama
JMitac

MCP Security Scanner

by JMitac
README.md
# 🔒 MCP Security Scanner

Servidor MCP (Model Context Protocol) para escaneo de vulnerabilidades en código y dependencias. Genera reportes detallados en español con soluciones priorizadas por criticidad.

## ✨ Características

- 📦 **Escaneo de dependencias** usando npm audit
- 💻 **Análisis de código fuente** para detectar patrones vulnerables (XSS, eval, etc.)
- 🔑 **Detección de secrets** expuestos (API keys, tokens, contraseñas)
- 🇪🇸 **Reportes en español** con soluciones detalladas
- 📊 **Priorización por severidad** (Crítico → Alto → Medio → Bajo)
- 📝 **Reportes en Markdown** fáciles de leer y versionar

## 📋 Requisitos

- Node.js 18.0.0 o superior
- npm 9.0.0 o superior

## 🚀 Instalación

```bash
# Navegar al proyecto
cd mcp-security-scanner

# Instalar dependencias
npm install
```

## 📖 Uso

### Con MCP Inspector (Recomendado para pruebas)

```bash
npm run mcp:inspector
```

Esto abrirá una interfaz web donde puedes:
1. Conectar al servidor
2. Listar herramientas disponibles
3. Ejecutar escaneos de seguridad

### Con Claude Desktop / Windsurf

Agrega esta configuración a tu archivo de configuración MCP:

```json
{
  "mcpServers": {
    "security-scanner": {
      "command": "npx",
      "args": ["tsx", "src/index.ts"],
      "cwd": "/ruta-proyecto/mcp-security-scanner"
    }
  }
}
```

## 🛠️ Herramientas Disponibles

### `scan_dependencies`

Escanea vulnerabilidades en las dependencias del package.json usando npm audit.

| Parámetro | Tipo | Requerido | Descripción |
|-----------|------|-----------|-------------|
| `projectPath` | string | ✅ | Ruta absoluta al proyecto |
| `includeDevDeps` | boolean | ❌ | Incluir devDependencies (default: true) |

**Ejemplo:**
```
"Escanea las dependencias del proyecto en D:/mi-proyecto"
```

### `scan_code_vulnerabilities`

Escanea el código fuente buscando patrones de código vulnerable.

| Parámetro | Tipo | Requerido | Descripción |
|-----------|------|-----------|-------------|
| `projectPath` | string | ✅ | Ruta absoluta al proyecto |
| `patterns` | string[] | ❌ | Patrones glob (default: src/**/*.{ts,tsx,js,jsx}) |

**Detecta:**
- XSS (dangerouslySetInnerHTML, innerHTML)
- Ejecución de código (eval, new Function)
- Almacenamiento inseguro de tokens
- Redirecciones abiertas
- ReDoS potencial

### `scan_secrets`

Detecta secrets expuestos en el código fuente.

| Parámetro | Tipo | Requerido | Descripción |
|-----------|------|-----------|-------------|
| `projectPath` | string | ✅ | Ruta absoluta al proyecto |
| `patterns` | string[] | ❌ | Patrones glob de archivos |

**Detecta:**
- API Keys (Stripe, Google, GitHub, Slack)
- Contraseñas hardcodeadas
- Claves privadas
- Connection strings de bases de datos

### `generate_security_report`

Genera un reporte completo de seguridad en formato Markdown.

| Parámetro | Tipo | Requerido | Descripción |
|-----------|------|-----------|-------------|
| `projectPath` | string | ✅ | Ruta absoluta al proyecto |
| `outputDir` | string | ❌ | Directorio de salida (default: ./reports) |
| `projectName` | string | ❌ | Nombre del proyecto para el reporte |

**Ejemplo:**
```
"Genera un reporte de seguridad completo para el proyecto frontend-app"
```

## 📊 Niveles de Severidad

| Nivel | Emoji | Descripción | Acción Requerida |
|-------|-------|-------------|------------------|
| CRÍTICO | 🔴 | Vulnerabilidad explotable remotamente | Acción inmediata |
| ALTO | 🟠 | Riesgo significativo de seguridad | < 24 horas |
| MEDIO | 🟡 | Vulnerabilidad con impacto limitado | < 1 semana |
| BAJO | 🟢 | Riesgo mínimo | Próximo sprint |

## 📁 Estructura del Proyecto

```
mcp-security-scanner/
├── src/
│   ├── index.ts              # Punto de entrada
│   ├── server.ts             # Configuración del servidor MCP
│   ├── tools/                # Definición de herramientas
│   │   ├── index.ts
│   │   ├── scan-dependencies.tool.ts
│   │   ├── scan-code.tool.ts
│   │   ├── scan-secrets.tool.ts
│   │   └── generate-report.tool.ts
│   ├── services/             # Lógica de negocio
│   │   ├── index.ts
│   │   ├── dependency-scanner.service.ts
│   │   ├── code-scanner.service.ts
│   │   └── report.service.ts
│   ├── patterns/             # Patrones de detección
│   │   ├── index.ts
│   │   └── code-patterns.ts
│   ├── types/                # Tipos TypeScript
│   │   └── index.ts
│   └── utils/                # Utilidades
│       ├── index.ts
│       ├── constants.ts
│       └── formatters.ts
├── docs/
│   └── GUIA_USO.md           # Guía de uso detallada
├── reports/                  # Reportes generados (gitignore)
├── package.json
├── tsconfig.json
└── README.md
```

## 🌿 Ramas del Repositorio

| Rama | Contenido |
|------|-----------|
| `master` | Código fuente del servidor MCP Security Scanner |
| `test-vulnerable-app` | Proyecto React de prueba con vulnerabilidades intencionales para validar el MCP |

### Proyecto de Prueba

La rama `test-vulnerable-app` contiene una aplicación React + TypeScript con vulnerabilidades intencionales:

- 📦 **Dependencias vulnerables:** lodash, axios, minimist, node-fetch con CVEs conocidos
- 💻 **Código vulnerable:** XSS, eval(), innerHTML, tokens en localStorage, redirecciones abiertas
- 🔑 **Secrets expuestos:** API keys, contraseñas, connection strings

Para usar el proyecto de prueba:

```bash
# Cambiar a la rama de prueba
git checkout test-vulnerable-app

# Instalar dependencias
npm install

# Ejecutar el escaneo desde el MCP
# En MCP Inspector usar: projectPath = ruta/al/proyecto
```

## 📚 Documentación

- [Guía de Uso Paso a Paso](./docs/GUIA_USO.md) - Instrucciones detalladas

## 🔧 Scripts Disponibles

```bash
# Iniciar servidor MCP
npm start

# Iniciar con MCP Inspector
npm run mcp:inspector

# Verificar tipos TypeScript
npm run typecheck

# Compilar a JavaScript
npm run build
```

## 📄 Licencia

MIT

TDQS

A3.6/5.0

Scored across 4 tools

Disambiguation3/5

The tools have overlapping purposes that could cause confusion. 'scan_code_vulnerabilities' and 'scan_secrets' both scan source code, and 'generate_security_report' appears to aggregate results from the other scans, creating ambiguity about when to use it versus the individual scan tools. However, the descriptions help clarify their specific focuses, preventing complete misselection.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a clear 'verb_noun' structure: 'generate_security_report', 'scan_code_vulnerabilities', 'scan_dependencies', and 'scan_secrets'. This predictability makes it easy for an agent to understand and navigate the toolset.

Tool Count5/5

With 4 tools, the count is well-scoped for a security scanner server. Each tool serves a distinct function within the domain, and there are no extraneous or missing tools that would make the set feel too thin or bloated.

Completeness4/5

The toolset covers key security scanning areas: code vulnerabilities, dependencies, and secrets, with a reporting tool to aggregate results. Minor gaps exist, such as the lack of tools for remediation actions or scanning configuration files, but agents can work around these by using the provided tools effectively for core workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues