Bio-MCP BLAST

Realiza búsquedas de similitud de secuencias NCBI BLAST mediante lenguaje natural.

Documentación

Bio-MCP BLAST

🔍 Servidor MCP para búsqueda de similitud de secuencias NCBI BLAST

Permite a los asistentes de IA realizar búsquedas BLAST mediante lenguaje natural. Busca en bases de datos de nucleótidos y proteínas, crea bases de datos personalizadas y obtén resultados formateados al instante.

🧬 Características

  • blastn - Búsqueda BLAST nucleótido-nucleótido
  • blastp - Búsqueda BLAST proteína-proteína
  • makeblastdb - Crea bases de datos BLAST personalizadas
  • Múltiples formatos de salida - JSON, XML, tabular, pairwise
  • Entrada flexible - Rutas de archivo o secuencias sin procesar
  • Soporte de cola - Procesamiento asíncrono para búsquedas grandes

🚀 Inicio Rápido

Instalación

# Install BLAST+
conda install -c bioconda blast

# Or via package manager
# macOS: brew install blast
# Ubuntu: sudo apt-get install ncbi-blast+

# Install MCP server
git clone https://github.com/bio-mcp/bio-mcp-blast.git
cd bio-mcp-blast
pip install -e .

Uso Básico

# Start the server
python -m src.server

# Or with queue support
python -m src.main --mode queue

Configuración

Añade a la configuración de tu cliente MCP:

{
  "mcpServers": {
    "bio-blast": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/bio-mcp-blast"
    }
  }
}

💡 Ejemplos de Uso

Búsqueda de Secuencia Simple

User: "BLAST this sequence against nr: ATGCGATCGATCG"
AI: [calls blastn] → Returns top hits with E-values and alignments

Búsqueda Basada en Archivos

User: "Search proteins.fasta against SwissProt database"
AI: [calls blastp] → Processes file and returns similarity results

Creación de Bases de Datos

User: "Create a BLAST database from reference_genomes.fasta"
AI: [calls makeblastdb] → Creates searchable database files

Búsqueda de Larga Duración

User: "BLAST large_dataset.fasta against nt database"
AI: [calls blastn_async] → "Job submitted! ID: abc123, checking progress..."

🛠️ Herramientas Disponibles

blastn

Búsqueda BLAST nucleótido-nucleótido

Parámetros:

  • query (requerido) - Ruta al archivo FASTA o cadena de secuencia
  • database (requerido) - Nombre de la base de datos (p. ej., "nt", "nr") o ruta
  • evalue - Umbral de E-value (predeterminado: 10)
  • max_hits - Máximo de resultados a devolver (predeterminado: 50)
  • output_format - Formato de salida: "tabular", "xml", "json", "pairwise"

blastp

Búsqueda BLAST proteína-proteína

Parámetros:

  • Igual que blastn, pero para secuencias de proteínas

makeblastdb

Crea una base de datos BLAST a partir de un archivo FASTA

Parámetros:

  • input_file (requerido) - Ruta al archivo FASTA
  • database_name (requerido) - Nombre para la base de datos de salida
  • dbtype (requerido) - "nucl" o "prot"
  • title - Título de la base de datos (opcional)

Variantes Asíncronas (Modo Cola)

  • blastn_async - Envía una búsqueda de nucleótidos a la cola
  • blastp_async - Envía una búsqueda de proteínas a la cola
  • get_job_status - Comprueba el progreso del trabajo
  • get_job_result - Recupera los resultados completados

⚙️ Configuración

Variables de Entorno

# Basic settings
export BIO_MCP_MAX_FILE_SIZE=100000000    # 100MB max file size
export BIO_MCP_TIMEOUT=300                # 5 minute timeout
export BIO_MCP_BLAST_PATH="blastn"        # BLAST executable path

# Queue mode settings
export BIO_MCP_QUEUE_URL="http://localhost:8000"

Configuración de la Base de Datos

# Download common databases
mkdir -p ~/blast-databases
cd ~/blast-databases

# NCBI databases (large downloads!)
update_blastdb.pl --decompress nt
update_blastdb.pl --decompress nr
update_blastdb.pl --decompress swissprot

# Set environment variable
export BLASTDB=~/blast-databases

🐳 Despliegue con Docker

Docker Local

# Build image
docker build -t bio-mcp-blast .

# Run container
docker run -p 5000:5000 \
  -v ~/blast-databases:/data/blast-db:ro \
  -e BLASTDB=/data/blast-db \
  bio-mcp-blast

Docker Compose

services:
  blast-server:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - ./databases:/data/blast-db:ro
    environment:
      - BLASTDB=/data/blast-db
      - BIO_MCP_TIMEOUT=600

🔄 Sistema de Cola

Para búsquedas BLAST de larga duración, utiliza el sistema de cola:

Configuración

# Start queue infrastructure
cd ../bio-mcp-queue
./setup-local.sh

# Start BLAST server with queue support
python -m src.main --mode queue --queue-url http://localhost:8000

Uso

# Submit async job
job_info = await blast_server.submit_job(
    job_type="blastn",
    parameters={
        "query": "large_sequences.fasta",
        "database": "nt",
        "evalue": 0.001
    }
)

# Check status
status = await blast_server.get_job_status(job_info["job_id"])

# Get results when complete
results = await blast_server.get_job_result(job_info["job_id"])

📊 Formatos de Salida

Tabular (Predeterminado)

# Fields: query_id, subject_id, percent_identity, alignment_length, ...
Query_1    gi|123456    98.5    500    7    0    1    500    1000    1499    1e-180    633

JSON

{
  "BlastOutput2": [{
    "report": {
      "results": {
        "search": {
          "query_title": "Query_1",
          "hits": [...]
        }
      }
    }
  }]
}

XML

Formato XML estándar de BLAST para análisis programático.

🧪 Pruebas

# Run tests
pytest tests/ -v

# Test with real data
python tests/test_integration.py

# Performance testing
python tests/benchmark.py

📈 Consejos de Rendimiento

Optimización Local

  • Utiliza almacenamiento SSD para las bases de datos
  • Aumenta la RAM disponible
  • Utiliza múltiples núcleos de CPU: export BLAST_NUM_THREADS=8

Selección de Base de Datos

  • Utiliza bases de datos más pequeñas y específicas cuando sea posible
  • Considera prefiltrar las secuencias
  • Utiliza umbrales de E-value apropiados

Optimización de la Cola

  • Escala los workers según los núcleos de CPU
  • Utiliza colas separadas para diferentes tamaños de bases de datos
  • Supervisa el uso de memoria con bases de datos grandes

🔐 Seguridad

Validación de Entrada

  • Los límites de tamaño de archivo previenen el agotamiento de recursos
  • La validación de rutas previene el recorrido de directorios
  • Protección contra inyección de comandos

Aislamiento (Sandboxing)

  • Los contenedores se ejecutan como usuario no root
  • Archivos temporales aislados por trabajo
  • Acceso a la red restringido en producción

🐛 Solución de Problemas

Problemas Comunes

BLAST no encontrado

# Check installation
which blastn
blastn -version

# Install via conda
conda install -c bioconda blast

Base de datos no encontrada

# Check BLASTDB environment variable
echo $BLASTDB

# List available databases
blastdbcmd -list /path/to/databases

Memoria insuficiente

# Reduce max_target_seqs
blastn -max_target_seqs 100

# Use streaming for large outputs
# Increase system swap space

Errores de tiempo de espera

# Increase timeout
export BIO_MCP_TIMEOUT=3600  # 1 hour

# Or use queue mode for long searches
python -m src.main --mode queue

📚 Recursos

🤝 Contribuciones

  1. Haz un fork del repositorio
  2. Crea una rama de funcionalidad
  3. Añade pruebas para la nueva funcionalidad
  4. Asegúrate de que todas las pruebas pasen
  5. Envía un pull request

Consulta CONTRIBUTING.md para obtener pautas detalladas.

📄 Licencia

Licencia MIT - consulta el archivo LICENSE.

🆘 Soporte


¡Feliz BLASTing! 🧬🔍