NFT Log Analyser

Servidor MCP de análisis de registros impulsado por IA. Escanea archivos de registro de más de 500 MB localmente, analiza errores con agentes de Ollama + CrewAI y archiva automáticamente Issues estructurados en GitHub. 100% local: los registros no salen de tu máquina.

Documentación

🔍 NFT Log Analyzer

Análisis de logs impulsado por IA que archiva automáticamente Issues de GitHub — 100% local vía Ollama, cero datos salen de tu máquina.

Python Ollama MCP License


Qué Hace

Apúntalo a cualquier archivo de log y:

  1. Escanea archivos de más de 500MB en segundos usando ripgrep
  2. Analiza patrones de error, deduplica eventos repetidos
  3. Examina usando LLM local (Ollama + deepseek-r1:14b) vía agentes CrewAI
  4. Redacta Issues de GitHub estructurados con causa raíz y correcciones sugeridas
  5. Archiva Issues automáticamente en tu repositorio — omitiendo duplicados

Todo el procesamiento ocurre localmente en tu máquina. El contenido crudo del log nunca sale de tu sistema.


Arquitectura

Claude Desktop / Cursor / LangChain
         ↓  MCP (stdio or HTTP+SSE)
   MCP Log Analyzer Server
         ↓
   ripgrep pre-filter (2-4s on 500MB)
         ↓
   mmap streaming parser + deduplicator
         ↓
   CrewAI agents → Ollama (local LLM)
         ↓
   GitHub Issues API

Requisitos

RequisitoVersiónNotas
Python3.11+3.14 no soportado
OllamaÚltimabrew install ollama
deepseek-r1:14b~9GB de descarga
ripgrepÚltimabrew install ripgrep
RAM16GB mínimo32GB recomendado
macOSVentura 13+Apple Silicon recomendado

Inicio Rápido

1. Instalar dependencias del sistema

brew install ollama ripgrep
brew services start ollama
ollama pull deepseek-r1:14b   # ~9GB — start this first

2. Clonar y configurar el entorno Python

git clone https://github.com/YOUR_ORG/mcp-log-analyzer
cd mcp-log-analyzer

/opt/homebrew/bin/python3.11 -m venv .venv
source .venv/bin/activate

pip install --upgrade pip
pip install mcp "crewai>=0.80.0" crewai-tools langchain-ollama \
    litellm fastapi uvicorn httpx httpx-sse \
    structlog loguru pydantic python-dotenv \
    tenacity rich typer

3. Configurar el entorno

cp .env.example .env
nano .env   # fill in your values
GITHUB_PAT=ghp_your_token_here
GITHUB_REPO_OWNER=your-username
GITHUB_REPO_NAME=your-repo
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=deepseek-r1:14b
CREWAI_TELEMETRY_OPT_OUT=true
OTEL_SDK_DISABLED=true
OLLAMA_KEEP_ALIVE=-1

4. Crear un PAT de GitHub

Ve a: github.com → Settings → Developer settings → Personal access tokens → Tokens (classic)

Habilita el alcance: repo (completo)

5. Registrar con Claude Desktop

Añade a ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-log-analyzer": {
      "command": "/path/to/mcp-log-analyzer/.venv/bin/python",
      "args": ["/path/to/mcp-log-analyzer/mcp_server/server.py"],
      "env": {
        "GITHUB_PAT": "ghp_your_token",
        "GITHUB_REPO_OWNER": "your-username",
        "GITHUB_REPO_NAME": "your-repo",
        "OLLAMA_BASE_URL": "http://localhost:11434",
        "OLLAMA_MODEL": "deepseek-r1:14b"
      }
    }
  }
}

Reinicia Claude Desktop. Deberías ver aparecer el icono de herramientas 🔨.


Uso

Vía Claude Desktop (lenguaje natural)

analyze the log file at /var/log/app.log and file GitHub issues for any errors
use analyze_log_file with path="/var/log/app.log" dry_run=true
check status of job abc12345

Vía CLI de Python

source .venv/bin/activate

python3 -c "
from dotenv import load_dotenv
load_dotenv()
from mcp_server.tools.analyze_tool import analyze_log_file
import asyncio, json

result = asyncio.run(analyze_log_file({
    'path': '/var/log/app.log',
    'severity': 'ERROR',
    'dry_run': False
}))
print(result[0].text)
"

Referencia de Herramientas MCP

ping

Verificación de estado — verifica que el servidor y Ollama estén ejecutándose.

{}

Devuelve: "mcp-log-analyzer online — Ollama: deepseek-r1:14b"


analyze_log_file

Inicia análisis de logs asíncrono. Devuelve un ID de trabajo inmediatamente — el pipeline se ejecuta en segundo plano.

ParámetroTipoRequeridoPredeterminadoDescripción
pathstringRuta absoluta al archivo de log
severitystringERRORSeveridad mínima: WARN, ERROR, CRITICAL
dry_runbooleanfalseVista previa de issues sin archivar en GitHub

Devuelve:

{
  "job_id": "abc12345",
  "status": "started",
  "message": "Analysis started. Check progress with get_job_status('abc12345')."
}

get_job_status

Verifica el estado de un trabajo de análisis en ejecución.

ParámetroTipoRequeridoDescripción
job_idstringID de trabajo devuelto por analyze_log_file

Devuelve (en ejecución):

{
  "status": "running",
  "job_id": "abc12345",
  "lines_filtered": 487,
  "chunks": 1
}

Devuelve (completado):

{
  "status": "done",
  "job_id": "abc12345",
  "lines_filtered": 487,
  "unique_events": 4,
  "chunks": 1,
  "issues_filed": 2,
  "github_issues": [
    {
      "title": "[CRITICAL][minting-service] DB connection pool exhausted (x117)",
      "url": "https://github.com/your-org/your-repo/issues/42",
      "number": 42
    }
  ]
}

Clientes MCP Compatibles

ClienteTransporteConfiguración
Claude Desktopstdioclaude_desktop_config.json
Claude Code CLIstdio.mcp.json en la raíz del proyecto
Cursorstdio o HTTP+SSE.cursor/mcp.json
LangChainHTTP+SSEurl: http://localhost:8000/sse
n8nHTTP+SSENodo HTTP Request → SSE

Transporte HTTP+SSE (para Cursor, LangChain, n8n)

python mcp_server/server.py --transport sse --port 8000

Personalización con Skills

Los Skills son archivos .md en inglés sencillo que enseñan a los agentes los patrones de error de tu stack. Tres skills integrados vienen con el proyecto:

SkillPropósito
skills/nft-app-errors.skill.mdClasificación de errores NFT/blockchain
skills/infrastructure-errors.skill.mdClasificación de errores de infraestructura
skills/bug-composition.skill.mdReglas de formato de Issues de GitHub

Escribir tu propio skill

Crea skills/my-stack-errors.skill.md:

# My Stack Error Classification

## CRITICAL — file bug immediately
- "FATAL: database connection refused" = service down
- "out of memory" = process crash imminent

## HIGH — file bug, non-urgent  
- "connection timeout" on external API = degraded performance

## IGNORE — known false positives
- "reconnecting..." during deploys = expected

Luego cárgalo en agents/crew.py:

_load_skill("my-stack-errors.skill.md")

Internals del Pipeline

500MB log file
    ↓  ripgrep (2-4 seconds)
    ↓  Filters: ERROR|FATAL|CRITICAL|WARN|Exception|Traceback
~5MB of error lines
    ↓  mmap streaming parser
    ↓  LogEvent objects with timestamp, level, component, message
    ↓  Deduplicator (fingerprints strip req_id, numbers, hex)
4-20 unique error patterns
    ↓  Chunker (10 events per chunk, CRITICAL first)
1-3 chunks
    ↓  Single CrewAI agent → Ollama (local)
    ↓  Structured bug reports in markdown
    ↓  Title extractor + label classifier
    ↓  Duplicate check via GitHub search API
GitHub Issues filed

Rendimiento

Probado en Apple Silicon (M2, 32GB):

Tamaño de archivoTiempo de filtradoTiempo de análisisTotal
10MB<1s3-5 min~5 min
100MB1-2s3-5 min~7 min
500MB3-5s5-10 min~15 min

El tiempo de análisis depende del número de patrones de error únicos encontrados (no del tamaño del archivo).


Solución de Problemas

SíntomaSolución
ollama ps muestra vacíoEjecuta ollama run deepseek-r1:14b y luego /bye para calentar el modelo
Servidor MCP desconectado en Claude DesktopVerifica ~/Library/Logs/Claude/mcp-server-*.log para errores de Python
Issues filed: 0Verifica que GITHUB_PAT en claude_desktop_config.json sea un token real, no un marcador de posición
Tiempo de espera agotado después de 600sAñade OLLAMA_KEEP_ALIVE=-1 a .env y reinicia Ollama
La instalación de crewai fallaRequiere Python 3.11 — no compatible con 3.13/3.14
Permiso denegado en /usr/local/binUsa /opt/homebrew/bin/ en su lugar en Apple Silicon

Hoja de Ruta

v1 (actual)

  • Ingestión de logs del sistema de archivos local
  • Pipeline ripgrep + mmap
  • Análisis CrewAI de agente único
  • Archivado de Issues de GitHub con deduplicación
  • Claude Desktop + transporte MCP stdio

v2 (planificada)

  • Integración MCP de Datadog
  • Integración MCP de Splunk
  • Transporte HTTP+SSE (Cursor, LangChain, n8n)
  • Disparadores de análisis programados
  • Procesamiento paralelo de fragmentos
  • Panel web para historial de trabajos

Contribuciones

Las contribuciones son bienvenidas — especialmente nuevos archivos de skill para diferentes stacks.

  1. Haz un fork del repositorio
  2. Crea skills/your-stack-errors.skill.md
  3. Pruébalo contra un archivo de log real
  4. Abre un PR con salida de ejemplo

Licencia

MIT — ver LICENSE