Bio-MCP BLAST

Realize buscas de similaridade de sequências NCBI BLAST através de linguagem natural.

Documentação

Bio-MCP BLAST

🔍 Servidor MCP para busca de similaridade de sequências NCBI BLAST

Permita que assistentes de IA realizem buscas BLAST por meio de linguagem natural. Pesquise bancos de dados de nucleotídeos e proteínas, crie bancos de dados personalizados e obtenha resultados formatados instantaneamente.

🧬 Recursos

  • blastn - Busca BLAST nucleotídeo-nucleotídeo
  • blastp - Busca BLAST proteína-proteína
  • makeblastdb - Crie bancos de dados BLAST personalizados
  • Múltiplos formatos de saída - JSON, XML, tabular, pairwise
  • Entrada flexível - Caminhos de arquivo ou sequências brutas
  • Suporte a filas - Processamento assíncrono para buscas grandes

🚀 Início Rápido

Instalação

# 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

Configuração

Adicione à configuração do seu cliente MCP:

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

💡 Exemplos de Uso

Busca Simples de Sequência

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

Busca Baseada em Arquivo

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

Criação de Banco de Dados

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

Busca de Longa Duração

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

🛠️ Ferramentas Disponíveis

blastn

Busca BLAST nucleotídeo-nucleotídeo

Parâmetros:

  • query (obrigatório) - Caminho para arquivo FASTA ou string de sequência
  • database (obrigatório) - Nome do banco de dados (ex.: "nt", "nr") ou caminho
  • evalue - Limiar de E-value (padrão: 10)
  • max_hits - Máximo de resultados a retornar (padrão: 50)
  • output_format - Formato de saída: "tabular", "xml", "json", "pairwise"

blastp

Busca BLAST proteína-proteína

Parâmetros:

  • Igual ao blastn, mas para sequências de proteínas

makeblastdb

Crie banco de dados BLAST a partir de arquivo FASTA

Parâmetros:

  • input_file (obrigatório) - Caminho para arquivo FASTA
  • database_name (obrigatório) - Nome para o banco de dados de saída
  • dbtype (obrigatório) - "nucl" ou "prot"
  • title - Título do banco de dados (opcional)

Variantes Assíncronas (Modo Fila)

  • blastn_async - Enviar busca de nucleotídeos para a fila
  • blastp_async - Enviar busca de proteínas para a fila
  • get_job_status - Verificar progresso do trabalho
  • get_job_result - Recuperar resultados concluídos

⚙️ Configuração

Variáveis de Ambiente

# 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"

Configuração do Banco de Dados

# 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

🐳 Implantação com 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 Filas

Para buscas BLAST de longa duração, use o sistema de filas:

Configuração

# 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 Saída

Tabular (Padrão)

# 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 BLAST padrão para análise programática.

🧪 Testes

# Run tests
pytest tests/ -v

# Test with real data
python tests/test_integration.py

# Performance testing
python tests/benchmark.py

📈 Dicas de Desempenho

Otimização Local

  • Use armazenamento SSD para bancos de dados
  • Aumente a RAM disponível
  • Use múltiplos núcleos de CPU: export BLAST_NUM_THREADS=8

Seleção de Banco de Dados

  • Use bancos de dados menores e específicos quando possível
  • Considere pré-filtrar sequências
  • Use limiares de E-value apropriados

Otimização de Fila

  • Dimensione os workers com base nos núcleos de CPU
  • Use filas separadas para diferentes tamanhos de banco de dados
  • Monitore o uso de memória com bancos de dados grandes

🔐 Segurança

Validação de Entrada

  • Limites de tamanho de arquivo previnem esgotamento de recursos
  • Validação de caminho previne travessia de diretórios
  • Proteção contra injeção de comandos

Sandboxing

  • Contêineres executam como usuário não-root
  • Arquivos temporários isolados por trabalho
  • Acesso à rede restrito em produção

🐛 Solução de Problemas

Problemas Comuns

BLAST não encontrado

# Check installation
which blastn
blastn -version

# Install via conda
conda install -c bioconda blast

Banco de dados não encontrado

# Check BLASTDB environment variable
echo $BLASTDB

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

Memória insuficiente

# Reduce max_target_seqs
blastn -max_target_seqs 100

# Use streaming for large outputs
# Increase system swap space

Erros de tempo limite

# Increase timeout
export BIO_MCP_TIMEOUT=3600  # 1 hour

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

📚 Recursos

🤝 Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Adicione testes para novas funcionalidades
  4. Garanta que todos os testes passem
  5. Envie um pull request

Veja CONTRIBUTING.md para diretrizes detalhadas.

📄 Licença

Licença MIT - veja o arquivo LICENSE.

🆘 Suporte


Feliz BLASTing! 🧬🔍