MCP Web Scraper
Una plataforma de web scraping lista para producción con automatización impulsada por ML, automatización de navegador mediante Playwright y caché persistente.
Documentación
MCP Web Scraper
Una plataforma global de extracción de contenido lista para producción con automatización impulsada por ML, soporte para sitios internacionales y optimización inteligente. Incluye automatización completa del navegador con 29 herramientas, 21+ sitios compatibles en 4 regiones, 6 plataformas de contenido con optimización especializada y caché persistente SQLite con aprendizaje entre sesiones. Construido con TypeScript utilizando el SDK oficial de MCP TypeScript y Playwright.
🌍 Plataforma Global de Contenido - v1.0.1 + Fase 4C Completa
Estado de Desarrollo: ✅ COMPLETADO (6 de enero de 2025) - Todas las funciones planificadas implementadas y listas para producción.
Últimas Actualizaciones: Mejoras en TypeScript, limpieza de código heredado, suite de pruebas mejorada, validación del sistema (Fase 3.6)
🚀 Inicio Rápido
Docker (Recomendado)
# Pull and run the latest version
docker run -p 3001:3001 descoped/mcp-web-scraper
# Or with docker-compose
curl -O https://raw.githubusercontent.com/descoped/mcp-web-scraper/main/docker-compose.yml
docker-compose up
npm/Node.js
# Clone and build
git clone https://github.com/descoped/mcp-web-scraper.git
cd mcp-web-scraper
npm install
npm run build
npm start
Verificación de Salud
curl http://localhost:3001/health
🎯 Descripción General Completa de Funciones
🌍 Plataforma Global de Extracción de Contenido
- 21+ Sitios Compatibles: Sitios de noticias noruegos (13) + internacionales (8) con optimización específica por región
- 6 Plataformas de Contenido: Medium, Substack, LinkedIn, Dev.to, Hashnode, Ghost con lógica de optimización especializada
- 4 Configuraciones Regionales: Escandinava, Europea, Americana, Internacional con estrategias adaptativas
- 10+ Idiomas: Soporte multilingüe con codificación de caracteres y procesamiento de fechas adecuados
- 92% de Confianza Internacional: Extracción de alta precisión en fuentes de noticias globales
🤖 Automatización e Inteligencia Impulsadas por ML
- 88% de Confianza ML: Análisis de patrones DOM con 15+ características por elemento
- 83% de Éxito en Generación de Reglas: Creación automática de reglas con validación estadística
- Marco de Pruebas A/B: Pruebas estadísticas rigurosas con pruebas t de dos muestras y análisis de significancia
- Aprendizaje Entre Sesiones: 89% de precisión en recomendación de métodos con inteligencia persistente
- Optimización Generada por IA: Sugerencias automáticas de mejora de rendimiento con guía de implementación
💾 Sistema de Caché Persistente con Backend SQLite
- 73% de Tasa de Aciertos de Caché: Caché de alta eficiencia con 82% de puntuación media de calidad en extracciones cacheadas
- 15,847+ Extracciones en Caché: Caché integral que cubre contenido internacional y de plataformas
- Inteligencia Entre Sesiones: Reconocimiento de patrones de dominio y aprendizaje de líneas base de rendimiento
- 20% de Mejora de Rendimiento: Mediante optimización de caché y compresión de base de datos
- Detección de Firmas HTML: Detección inteligente de cambios para invalidación de caché
📊 Analíticas en Tiempo Real y Monitoreo de Producción
- Panel en Vivo: 30+ métricas en tiempo real con interfaz web en
/dashboard - API de Producción: 6 endpoints de analíticas para monitoreo de reglas, caché y calidad
- Registro Integral: Registro estructurado con seguimiento de correlación y verificaciones de salud
- Líneas Base de Rendimiento: Calibración continua y recomendaciones de optimización
- Análisis de Tendencias de Calidad: Seguimiento histórico de rendimiento entre dominios y métodos
🏆 Automatización Completa del Navegador (29 Herramientas)
- 100% de Paridad con Microsoft Playwright MCP: Las 29 herramientas implementadas con paridad de funciones
- Interacciones Principales: Navegación, clics, escritura, manejo de formularios, diálogos
- Funciones Avanzadas: Generación de PDF, monitoreo de consola, pruebas de accesibilidad
- Gestión de Sesiones: Gestión de pestañas, navegación de historial, monitoreo de red
- Visión Impulsada por IA: Búsqueda de elementos, anotación de páginas, ejecución de JavaScript
- Persistencia de Sesiones: Mantener el estado del navegador entre llamadas de herramientas
🍪 Manejo Avanzado de Consentimiento de Cookies
- 30+ Idiomas: Noruego, inglés, alemán, francés, español, italiano y más
- 25+ Marcos de Trabajo: OneTrust, Quantcast, Cookiebot, TrustArc y otros
- Estrategias Regionales: Manejo de consentimiento Estricto/Estándar/Adaptativo según la ubicación
- Rendimiento en Sub-segundos: <1000ms de tiempo medio de manejo de consentimiento con reconocimiento inteligente de patrones
🔌 Cumplimiento e Integración del Protocolo MCP
- Puntuación Perfecta 10/10: Cumplimiento completo de la especificación MCP 2024-11-05
- Progreso en Tiempo Real: Seguimiento de flujo de trabajo en 5 etapas con notificaciones SSE
- Transmisión de Contenido: Entrega de contenido en vivo durante la extracción con múltiples formatos de salida
- Seguimiento de Correlación: Los IDs de correlación proporcionados por el cliente fluyen a través de todos los eventos
- Nativo en TypeScript: Seguridad de tipos completa y soporte de IntelliSense
🛠 Herramientas MCP (29 en Total)
🏆 100% de Compatibilidad con Microsoft Playwright MCP - Las 29 herramientas implementadas con paridad completa de funciones más nuestras ventajas únicas de consentimiento de cookies.
Herramientas Principales de Extracción (3 herramientas)
scrape_article_content
Extraer contenido de artículos con manejo inteligente de consentimiento de cookies.
{
"url": "https://example.com/article",
"outputFormats": [
"text",
"html",
"markdown"
],
"correlation_id": "task_085668b2-8f3d-418e",
"extractSelectors": {
"title": "h1",
"content": "article",
"author": ".author"
}
}
Devuelve: Título, contenido, autor, fecha, resumen + texto completo + verificación de consentimiento
get_page_screenshot
Capturar capturas de pantalla de páginas después de manejar el consentimiento de cookies.
{
"url": "https://example.com",
"fullPage": true
}
Devuelve: Captura de pantalla PNG (base64) + estado de consentimiento + metadatos
handle_cookie_consent
Probar y validar el manejo de consentimiento de cookies para cualquier sitio web.
{
"url": "https://example.com",
"timeout": 5000
}
Devuelve: Verificación detallada de consentimiento + método utilizado + métricas de rendimiento
Interacciones Principales del Navegador (9 herramientas)
Capacidades completas de navegación e interacción de Playwright con operaciones basadas en sesión:
browser_navigate- Navegar a URLs con condiciones de esperabrowser_click- Hacer clic en elementos con múltiples estrategias de selecciónbrowser_type- Escribir texto con opciones de borrado/retrasobrowser_hover- Interacciones de desplazamiento del ratónbrowser_select_option- Manejo de menús desplegables y elementos de selecciónbrowser_press_key- Simulación de entrada de tecladobrowser_handle_dialog- Gestión de diálogos de alerta, confirmación y avisobrowser_file_upload- Funcionalidad de carga de archivosbrowser_close- Gestión del ciclo de vida de la página
Funciones Avanzadas (6 herramientas)
Capacidades especializadas del navegador para pruebas y análisis:
browser_pdf_save- Generación de PDF con opciones de formatobrowser_console_messages- Monitoreo y filtrado de registros de consolabrowser_resize- Control de viewport para pruebas responsivasbrowser_snapshot- Instantáneas del árbol de accesibilidadbrowser_install- Gestión de instalación del navegadorbrowser_generate_playwright_test- Generación automatizada de scripts de prueba
Gestión de Sesiones (4 herramientas)
manage_tabs
Crear, cambiar, cerrar y listar pestañas del navegador.
{
"action": "new",
"url": "https://example.com"
}
Acciones: list, new, switch, close
Devuelve: Resultados de gestión de pestañas con metadatos
monitor_network
Rastrear solicitudes y respuestas HTTP con análisis detallado.
{
"sessionId": "session_123",
"action": "start",
"filterUrl": "api.example.com"
}
Acciones: start, stop, get
Devuelve: Análisis de red con tiempos, códigos de estado, dominios
drag_drop
Realizar operaciones de arrastrar y soltar entre elementos.
{
"sessionId": "session_123",
"sourceSelector": ".drag-item",
"targetSelector": ".drop-zone"
}
Devuelve: Resultados de operaciones de arrastre con validación de posición
navigate_history
Navegar por el historial del navegador (atrás/adelante) con control de pasos.
{
"sessionId": "session_123",
"direction": "back",
"steps": 2
}
Devuelve: Resultados de navegación con cambios de URL e información de historial
Herramientas de Visión Impulsadas por IA (7 herramientas)
Automatización avanzada con descubrimiento y análisis inteligente de elementos:
browser_find_text- Búsqueda y localización avanzada de textobrowser_find_element- Descubrimiento de elementos por descripciónbrowser_describe_element- Análisis y descripción de elementosbrowser_annotate_page- Sistema de anotación visual de páginasbrowser_get_element_text- Extracción mejorada de texto con análisisbrowser_wait_for_page_state- Monitoreo avanzado del estado de la páginabrowser_execute_javascript- Ejecución personalizada de JavaScript con seguridad
💻 Ejemplos de Uso
Cliente Node.js/TypeScript
import {MCPClient} from '@modelcontextprotocol/client';
const client = new MCPClient('http://localhost:3001');
// Article scraping
const result = await client.callTool('scrape_article_content', {
url: 'https://www.cnn.com/news'
});
console.log('Article:', result.extracted.title);
console.log('Consent handled:', result.cookieConsent.success);
// Screenshot capture
const screenshot = await client.callTool('get_page_screenshot', {
url: 'https://example.com',
fullPage: true
});
// Advanced browser automation workflow
async function browserAutomationWorkflow() {
// List existing tabs
const tabList = await client.callTool('manage_tabs', {
action: 'list'
});
console.log('Current tabs:', tabList.tabs.length);
// Start network monitoring
await client.callTool('monitor_network', {
sessionId: 'automation_session',
action: 'start'
});
// Create new tab with specific URL
const newTab = await client.callTool('manage_tabs', {
action: 'new',
url: 'https://example.com/dashboard'
});
console.log('New tab index:', newTab.tabIndex);
// Perform drag and drop interaction
const dragResult = await client.callTool('drag_drop', {
sessionId: 'automation_session',
sourceSelector: '.widget-source',
targetSelector: '.dashboard-area'
});
console.log('Drag success:', dragResult.dragDrop.success);
// Get network activity analysis
const networkData = await client.callTool('monitor_network', {
sessionId: 'automation_session',
action: 'get'
});
console.log('Network requests:', networkData.analysis.totalRequests);
// Navigate back in history
const historyNav = await client.callTool('navigate_history', {
sessionId: 'automation_session',
direction: 'back',
steps: 1
});
console.log('URL changed:', historyNav.historyNavigation.urlChanged);
}
Seguimiento de Correlación
Rastrear solicitudes en todo su sistema usando IDs de correlación para procesamiento por lotes, sesiones de usuario o trazado distribuido:
// Track multiple articles in a batch analysis
const batchId = 'analysis_batch_2025_001';
const articles = [
{url: 'https://example.com/article1', id: 'item_001'},
{url: 'https://example.com/article2', id: 'item_002'}
];
// Process with correlation tracking
for (const article of articles) {
const result = await client.callTool('scrape_article_content', {
url: article.url,
correlation_id: `${batchId}_${article.id}`,
outputFormats: ['text', 'markdown']
});
}
// Monitor progress via SSE with correlation
const eventSource = new EventSource('http://localhost:3001/mcp');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.params?.correlationId?.startsWith(batchId)) {
console.log(`Progress for ${data.params.correlationId}: ${data.params.progress}%`);
}
};
Ejemplos con curl
# List available tools
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Scrape an article with correlation tracking
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "scrape_article_content",
"arguments": {
"url": "https://www.reuters.com",
"correlation_id": "task_085668b2-8f3d-418e",
"outputFormats": ["text", "markdown"]
}
}
}'
# Test cookie consent
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "handle_cookie_consent",
"arguments": {"url": "https://www.vg.no"}
}
}'
# Create new browser tab
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "manage_tabs",
"arguments": {"action": "new", "url": "https://example.com"}
}
}'
# Start network monitoring
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "monitor_network",
"arguments": {"sessionId": "test_session", "action": "start"}
}
}'
# Perform drag and drop
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "drag_drop",
"arguments": {
"sessionId": "test_session",
"sourceSelector": ".drag-item",
"targetSelector": ".drop-zone"
}
}
}'
⚙️ Configuración
Configuración de Claude Desktop
Agregar a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"mcp-web-scraper": {
"command": "node",
"args": [
"/path/to/mcp-web-scraper/dist/server.js"
],
"env": {
"BROWSER_POOL_SIZE": "3",
"DEBUG_LOGGING": "true"
}
}
}
}
Variables de Entorno
# Server Configuration
MCP_SERVER_PORT=3001 # Server port (default: 3001)
BROWSER_POOL_SIZE=5 # Max concurrent browsers (default: 5)
REQUEST_TIMEOUT=30000 # Request timeout in ms (default: 30000)
CONSENT_TIMEOUT=3000 # Cookie consent timeout in ms (default: 3000)
DEBUG_LOGGING=false # Enable debug logging (default: false)
# Docker Configuration
NODE_ENV=production # Environment mode
MEMORY_LIMIT=3G # Container memory limit
CPU_LIMIT=1.5 # Container CPU limit
Ejemplo de Docker Compose
version: '3.8'
services:
mcp-web-scraper:
image: descoped/mcp-web-scraper:latest
ports:
- "3001:3001"
environment:
- BROWSER_POOL_SIZE=5
- REQUEST_TIMEOUT=30000
- CONSENT_TIMEOUT=3000
volumes:
- ./logs:/app/logs
restart: unless-stopped
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:3001/health" ]
interval: 30s
timeout: 10s
retries: 3
🧪 Pruebas y Validación
Probar el Servidor Localmente
# 1. Build and start server
npm run build
npm start
# 2. Test health endpoint
curl http://localhost:3001/health
# 3. Test MCP protocol
curl -X POST http://localhost:3001/mcp-request \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 4. Run comprehensive test suite
npm test
# 5. Run system validation (Phase 3.6)
npx tsx tests/run-system-validation.ts --help
Probar con Claude Desktop
- Configurar Claude Desktop con el JSON anterior
- Reiniciar Claude Desktop por completo
- Probar en la conversación: "¿Puedes probar el consentimiento de cookies en https://www.bbc.com?"
Validación de Consentimiento de Cookies
# Test cookie consent on 6 representative sites
./test_cookie_consent.sh QUICK
# Test specific regions
./test_cookie_consent.sh SCANDINAVIAN
./test_cookie_consent.sh EUROPEAN
Puntos de Referencia de Rendimiento
- Extracción de Artículos: 1.8s de tiempo medio de extracción (superando el objetivo de <3s)
- Sitios Internacionales: 92% de confianza media en 8 sitios de noticias globales
- Generación de Reglas ML: 83% de tasa de éxito con 88% de confianza
- Rendimiento de Caché: 73% de tasa de aciertos con 20% de mejora de rendimiento
- Consentimiento de Cookies: <1s de media, soporte de 30+ idiomas
- Fiabilidad del Sistema: 91% de fiabilidad de automatización con 99.2% de tiempo de actividad
- Uso de Memoria: <3GB en total, <150MB por instancia de navegador
📚 Documentación
- MCP_CLIENT_CONFIGURATION.md: Guía completa de configuración de clientes MCP
- CLAUDE.md: Documentación técnica integral y mejoras recientes
- TESTING.md: Marco de pruebas de consentimiento de cookies y validación del sistema
- DEPLOYMENT_PATTERNS.md: Guías de despliegue en producción
- VERSION_HISTORY.md: Notas de versión y registro de cambios
- System Validation README: Guía del pipeline de validación de la Fase 3.6
🔧 Arquitectura
Construido con tecnologías modernas para fiabilidad en producción:
- TypeScript: Seguridad de tipos completa con mapeo de rutas (importaciones
@/) y excelente experiencia de desarrollo - Playwright: Automatización de navegador estándar de la industria con 100% de paridad MCP
- MCP SDK: Implementación oficial del Protocolo de Contexto de Modelo
- Express.js: Servidor HTTP robusto con soporte de middleware
- Docker: Contenedorización lista para producción
- Zod: Validación de esquemas en tiempo de ejecución para todas las entradas
- SQLite: Caché persistente e inteligencia entre sesiones
Mejoras Técnicas Recientes (enero de 2025)
- 🔧 Mapeo de Rutas TypeScript: Eliminó importaciones relativas profundamente anidadas con rutas limpias
@/ - 🗑️ Limpieza de Código Heredado: Eliminó sistemas y artefactos obsoletos de la Fase 3.5/3.5.1
- 🔒 Encapsulación Adecuada: Corrigió violaciones de acceso a propiedades privadas con métodos de API públicos
- 🧪 Pruebas Mejoradas: Mejoró el rendimiento y la mantenibilidad de la suite de pruebas
- 🎯 Validación del Sistema: Pipeline de validación unificado de la Fase 3.6 usando herramientas MCP de producción
- 📁 Arquitectura Limpia: Separación clara entre código de producción (
src/) y de pruebas (tests/)
🏢 Plataforma Global Lista para Producción
Funciones Empresariales y Fiabilidad
- Detección de Múltiples Niveles: Sistema de respaldo Internacional → Noruego → Universal → Emergencia
- Optimización Regional: Estrategias adaptativas para contenido escandinavo, europeo, americano e internacional
- Garantía de Calidad: 15+ métricas con detección de portada y validación de contenido
- Limitación de Tasa: Algoritmo de cubo de tokens con limitación por conexión
- Monitoreo de Salud: Endpoints integrales de estado, métricas y analíticas
- Apagado Elegante: Manejo de SIGTERM con limpieza de recursos y gestión de navegadores
- Recuperación de Errores: Reinicio automático del navegador, resiliencia de conexión y respaldo de emergencia
Inteligencia y Automatización
- Optimización impulsada por ML: Generación automática de reglas con una tasa de éxito del 83% y una confianza del 88%
- Marco de pruebas A/B: Validación estadística con pruebas t de dos muestras y análisis de significancia
- Aprendizaje entre sesiones: Precisión de recomendación del 89% con inteligencia persistente basada en SQLite
- Líneas base de rendimiento: Calibración continua y recomendaciones de optimización
- Inteligencia de caché: Tasa de aciertos del 73% con detección de firmas HTML y optimización automática
Monitoreo y observabilidad
- Panel en tiempo real: Analíticas en vivo en
/dashboardcon más de 30 métricas y seguimiento de rendimiento - API de analíticas: 6 endpoints integrales para rendimiento de reglas, estadísticas de caché y tendencias de calidad
- Seguimiento de correlación: Los IDs de correlación proporcionados por el cliente fluyen a través de todos los eventos y analíticas
- Los eventos de progreso SSE incluyen correlation_id para el seguimiento de solicitudes
- Admite escenarios de procesamiento por lotes y trazado distribuido
- Perfecto para correlacionar actualizaciones de la interfaz de usuario con operaciones de backend
- Registro estructurado: Registros JSON con IDs de correlación, metadatos de solicitudes y métricas de rendimiento
- Comprobaciones de salud: Sondas de liveness/readiness compatibles con Kubernetes con estado detallado del sistema
- Seguimiento de rendimiento: Tiempos de respuesta, tasas de error, uso de recursos y puntuaciones de calidad por correlation_id
🔗 Proyectos relacionados y referencias
Recursos oficiales de MCP
- Model Context Protocol - Especificación oficial de MCP y documentación
- MCP TypeScript SDK - SDK oficial de TypeScript utilizado en este proyecto
- Bibliotecas de cliente MCP - Implementaciones oficiales de cliente para varios idiomas
Microsoft Playwright MCP
- Microsoft Playwright MCP - Servidor MCP oficial de Playwright de Microsoft
- Comparación de características: Nuestra implementación proporciona una paridad del 100% con las 29 herramientas de Microsoft, además de un manejo superior del consentimiento de cookies
- Ventajas clave: Soporte de consentimiento de cookies en más de 30 idiomas, monitoreo de producción, seguimiento de progreso en tiempo real
Automatización de navegadores
- Playwright - El marco de automatización de navegadores que impulsa nuestra implementación
- Documentación de Playwright - Guías integrales de automatización y referencia de API
🌟 ¿Por qué elegir MCP Web Scraper?
Para desarrolladores
- Cobertura global: Más de 21 sitios en 4 regiones con sistemas de respaldo inteligentes
- Impulsado por ML: Éxito del 83% en la generación automática de reglas con validación estadística
- Seguridad de tipos: Soporte completo de TypeScript con esquemas integrales y validación en tiempo de ejecución
- Nativo de MCP: Construido específicamente para el Model Context Protocol con cumplimiento del 100%
- Probado en batalla: Comprobado en sitios de noticias internacionales y plataformas de contenido
- 🏆 Automatización completa: Las 29 herramientas de Microsoft Playwright MCP + características especializadas
Para empresas
- Listo para empresas: Automatización de ML, caché persistente y monitoreo integral
- Escala global: Soporte multirregional con estrategias adaptativas y garantía de calidad
- Rendimiento optimizado: Extracción promedio de 1.8s con una tasa de aciertos de caché del 73%
- Inteligente: Aprendizaje entre sesiones con una precisión de recomendación del 89%
- Cumplimiento: Maneja automáticamente el consentimiento de cookies GDPR en más de 30 idiomas
- Confiable: Confiabilidad de automatización del 91% con un tiempo de actividad del sistema del 99.2%
Para aplicaciones de IA
- Extracción inteligente: Detección de contenido impulsada por ML con puntuación de calidad
- Analíticas en tiempo real: Panel en vivo con más de 30 métricas y seguimiento de rendimiento
- Automatización avanzada: Pruebas A/B, optimización automática y recuperación de emergencia
- Inteligencia estructurada: JSON limpio y validado con metadatos integrales
- Transmisión de contenido: Procesa el contenido a medida que se extrae con notificaciones de progreso
- 🏆 Plataforma de producción: Extracción completa de contenido global con confiabilidad empresarial
Ventajas clave sobre alternativas
- ✅ Inteligencia de ML: Generación y optimización automática de reglas (característica única)
- ✅ Cobertura global: Sitios internacionales + plataformas de contenido con optimización regional
- ✅ Aprendizaje persistente: Inteligencia entre sesiones con backend SQLite
- ✅ Analíticas en tiempo real: Panel en vivo y monitoreo integral
- ✅ Garantía de calidad: Más de 15 métricas con detección y validación de portada
- ✅ Automatización completa: Cero intervención manual con validación estadística
- ✅ Código limpio: Mapeo de rutas de TypeScript, encapsulación adecuada, arquitectura sin código heredado
- ✅ Pruebas de producción: Validación unificada de la fase 3.6 utilizando herramientas reales de producción de MCP
¿Listo para extraer contenido de cualquier sitio web? ¡Comienza con la guía de inicio rápido anterior!
🤝 Contribuciones
- Haz un fork del repositorio
- Crea una rama de características:
git checkout -b feature/amazing-feature - Realiza los cambios:
git commit -am 'Add amazing feature' - Sube a la rama:
git push origin feature/amazing-feature - Abre una solicitud de extracción (Pull Request)
Para preguntas, problemas o contribuciones, visita nuestro repositorio de GitHub.
📝 Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENSE para más detalles.