mcp-toolkit-server
by GonzaBot
README.md
# MCP Toolkit Server — Ciberseguridad para Claude
[](https://www.python.org/)
[](LICENSE)
[](https://modelcontextprotocol.io/)
[](#tests)
[](#herramientas)
> **Convertí a Claude en tu asistente de ciberseguridad.** Este servidor MCP expone 17 herramientas de red, criptografía y análisis de seguridad directamente en tus conversaciones con Claude Desktop o Claude Code, sin salir del chat.
---
## ¿Qué es MCP y por qué importa?
[MCP (Model Context Protocol)](https://modelcontextprotocol.io/) es el estándar abierto de Anthropic para conectar modelos de IA con herramientas y fuentes de datos externas. Funciona como un "conector universal": en lugar de integrar cada herramienta a mano, un servidor MCP las expone todas a la vez para cualquier cliente compatible.
**Lo que esto significa en la práctica:** podés preguntarle a Claude _"¿el certificado SSL de mi servidor vence esta semana?"_ o _"analizá este JWT y decime si tiene vulnerabilidades"_ y Claude ejecuta las herramientas, interpreta los resultados y te da una respuesta contextualizada, todo dentro de la conversación.
---
## ¿Por qué este servidor?
Este proyecto nació como parte de una ruta de aprendizaje en **ciberseguridad**. El objetivo es doble:
1. **Práctica real**: implementar herramientas que se usan en auditorías, reconocimiento web y análisis de tokens, entendiendo cada detalle por dentro.
2. **Productividad con IA**: potenciar el flujo de trabajo cotidiano en seguridad integrando estas capacidades directamente con Claude.
Las herramientas no son wrappers de otras CLIs — están implementadas en Python puro usando la stdlib más `dnspython`, para entender exactamente qué pasa en cada operación.
---
## Herramientas incluidas
### Sistema y Archivos
| Herramienta | Descripción |
|---|---|
| `info_sistema` | SO, versión, arquitectura, Python, hora UTC |
| `espacio_disco(ruta)` | Espacio total / usado / libre en GB |
| `calcular_hash(archivo, algoritmo)` | SHA-256 / SHA-1 / MD5 de un archivo — verificación de integridad |
| `listar_directorio(ruta)` | Lista archivos y carpetas con tipo |
### Red y Reconocimiento Web
| Herramienta | Descripción |
|---|---|
| `verificar_certificado_ssl(dominio)` | Validez, días hasta expiración, emisor, protocolo, cifrado, SANs |
| `verificar_headers_seguridad(url)` | Auditoría de HSTS, CSP, X-Frame-Options, MIME, Referrer-Policy. Score /6 |
| `hacer_request_http(url, metodo, headers, body)` | HTTP client completo — probar APIs, analizar respuestas |
| `consultar_dns(dominio, tipo)` | Registros A, AAAA, MX, NS, TXT, CNAME |
| `whois_dominio(dominio)` | Registrante, fechas de creación/expiración, nameservers |
### Ciberseguridad
| Herramienta | Descripción |
|---|---|
| `escanear_puertos(host)` | ~35 puertos TCP en paralelo. Detecta servicios críticos expuestos (Docker, Redis, MongoDB, SMB...) con consejos de hardening |
| `verificar_fortaleza_password(password)` | Análisis de entropía en bits, diversidad de charset, patrones débiles comunes |
### Criptografía y Tokens
| Herramienta | Descripción |
|---|---|
| `generar_password_seguro(longitud, ...)` | Contraseña segura con `secrets` — muestra entropía calculada |
| `generar_token_aleatorio(longitud, formato)` | API keys, secrets, session IDs en hex / base64 / urlsafe |
| `calcular_hash_texto(texto, algoritmo)` | Hash de strings — sha256, sha512, md5, blake2b, sha3_256 |
| `analizar_jwt(token)` | Decodifica header + payload, detecta: expiración, `alg:none`, claims de seguridad |
| `codificar_base64(texto)` | Codificación base64 standard o URL-safe |
| `decodificar_base64(texto)` | Decodificación base64 con autodetección de padding |
---
## Casos de uso reales
```
"¿El certificado SSL de api.miempresa.com está por vencer?"
→ verificar_certificado_ssl("api.miempresa.com")
Estado: ADVERTENCIA — expira en 12 días
Emisor: Let's Encrypt
SANs: api.miempresa.com, www.api.miempresa.com
```
```
"Auditá los headers de seguridad de nuestro panel de admin"
→ verificar_headers_seguridad("https://admin.miempresa.com")
Score: 2/6 — Bajo
[OK] Strict-Transport-Security: max-age=31536000
[OK] X-Content-Type-Options: nosniff
[--] Content-Security-Policy
[--] X-Frame-Options ← ¡expuesto a clickjacking!
Fuga: Server: nginx/1.18.0 ← versión expuesta
```
```
"Decodificá este JWT del login y decime si tiene algo raro"
→ analizar_jwt("eyJhbGci...")
Algoritmo: HS256
⚠ TOKEN EXPIRADO — venció el 2024-03-15 10:00 UTC
Claim 'role': admin
Claim 'sub': user_1337
```
```
"Chequeá qué puertos tiene abiertos mi VPS en producción"
→ escanear_puertos("203.0.113.42")
22/tcp SSH
80/tcp HTTP
6379/tcp Redis ← CRÍTICO: Redis sin autenticación — activar requirepass
27017/tcp MongoDB ← CRÍTICO: expone toda la base de datos
```
```
"Generame un API key para el nuevo microservicio"
→ generar_token_aleatorio(32, "hex")
a3f8c2e1d9b7045f6a2c8e4d1f0b3a9c7e2d5f8b1a4c7e0d3f6b9a2c5e8d1f4
Entropía: 256 bits
```
---
## Instalación
```bash
git clone https://github.com/GonzaBot/mcp-toolkit-server.git
cd mcp-toolkit-server
pip install -e .
```
Dependencias: `mcp>=1.0.0`, `dnspython>=2.0.0`. El resto es stdlib de Python 3.10+.
---
## Conectar con Claude Desktop
Editá el archivo de configuración de Claude Desktop:
| SO | Ruta |
|---|---|
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Linux | `~/.config/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
```json
{
"mcpServers": {
"mcp-toolkit-server": {
"command": "mcp-toolkit-server"
}
}
}
```
Reiniciá Claude Desktop. Las 17 herramientas aparecen automáticamente disponibles en la conversación.
---
## Conectar con Claude Code
```bash
claude mcp add mcp-toolkit-server mcp-toolkit-server
```
O en modo proyecto, editá `.claude/mcp.json`:
```json
{
"mcpServers": {
"mcp-toolkit-server": {
"command": "mcp-toolkit-server"
}
}
}
```
---
## Estructura del proyecto
```
mcp-toolkit-server/
├── src/mcp_toolkit_server/
│ ├── server.py # Punto de entrada — registra las 17 tools con FastMCP
│ └── tools/
│ ├── system.py # Info del SO y espacio en disco
│ ├── files.py # Hash de archivos y listado de directorios
│ ├── security.py # Escaneo de puertos y análisis de contraseñas
│ ├── network.py # SSL, headers HTTP, requests, DNS, WHOIS
│ └── crypto.py # Passwords, tokens, hashing, JWT, Base64
├── tests/
│ └── test_tools.py # 53 tests — 47 offline + 6 con internet
├── examples/
│ └── claude_desktop_config.json
└── pyproject.toml
```
---
## Tests
```bash
# Instalar dependencias de desarrollo
pip install -e ".[dev]"
# Tests offline (sin internet)
pytest -k "not network"
# Tests completos (incluye verificaciones contra google.com, httpbin.org)
pytest -m network
# Todo junto
pytest -v
```
**53 tests** cubriendo: happy path, casos de error, valores criptográficos conocidos (hash SHA-256 de string vacío, MD5 de "hello"), JWTs expirados, algoritmo `none`, Base64 con y sin padding, tokens hex/base64/urlsafe.
---
## Cómo agregar tu propia herramienta
1. Agregá la función al módulo correspondiente en `tools/` (o creá uno nuevo).
2. Registrala en `server.py` con `@mcp.tool()`.
3. Escribí un docstring claro — Claude lo usa para saber cuándo y cómo invocarla.
```python
# tools/network.py
def mi_herramienta_nueva(parametro: str) -> str:
"""Descripción clara de qué hace y cuándo usarla.
Args:
parametro: qué representa
"""
return resultado
# server.py
@mcp.tool()
def mi_herramienta_nueva(parametro: str) -> str:
"""Descripción clara de qué hace y cuándo usarla.
Args:
parametro: qué representa
"""
return network.mi_herramienta_nueva(parametro)
```
---
## Uso ético
Las herramientas de reconocimiento de red (`escanear_puertos`, `whois_dominio`, `consultar_dns`, `verificar_certificado_ssl`) deben usarse únicamente sobre:
- Sistemas propios
- Sistemas sobre los que tenés autorización explícita del propietario
Escanear sistemas de terceros sin permiso puede ser ilegal según la jurisdicción.
---
## Roadmap
- [ ] Transporte HTTP/SSE para acceso remoto (correr el servidor en un VPS)
- [ ] `verificar_ip_reputacion` — consultar AbuseIPDB / VirusTotal
- [ ] `auditar_dependencias` — integrar pip-audit para detectar CVEs en proyectos Python
- [ ] `detectar_tecnologias` — fingerprinting de stack tecnológico por headers y respuestas
- [ ] GitHub Actions con tests en CI/CD
- [ ] Tests de integración con cliente MCP simulado
---
## Licencia
MIT © Gonzalo D. Rodríguez de Mello
TDQS
A4/5.0
Scored across 17 tools
Disambiguation5/5
Cada herramienta tiene un propósito claramente diferente: análisis de JWT, hashing, codificación, consultas DNS, escaneo de puertos, generación de contraseñas, etc. No hay superposición significativa.
Naming Consistency5/5
Todos los nombres siguen el patrón consistente verbo_sustantivo en español, usando snake_case. La convención es uniforme en las 17 herramientas.
Tool Count5/5
17 herramientas es un número adecuado para un conjunto de utilidades de seguridad y sistema. Cubre un rango amplio sin ser excesivo.
Completeness4/5
El conjunto cubre bien las funcionalidades principales: hashing, codificación, consultas de red, análisis de seguridad. Faltan herramientas para cifrado simétrico o generación de claves, pero lo esencial está presente.
Maintenance
ActivityInactive
ResponsivenessNo issues