#!/bin/bash
# Script di installazione per MCP MD2PDF Server
# Installa tutte le dipendenze necessarie per il server MCP di conversione Markdown in PDF
set -e
echo "π Installazione MCP MD2PDF Server..."
echo "======================================"
# Colori per l'output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Funzione per stampare messaggi colorati
print_status() {
echo -e "${GREEN}β
$1${NC}"
}
print_warning() {
echo -e "${YELLOW}β οΈ $1${NC}"
}
print_error() {
echo -e "${RED}β $1${NC}"
}
# Funzione per verificare se un comando esiste
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Ottieni la directory del script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
echo "π Directory di lavoro: $SCRIPT_DIR"
# 1. Verifica Python
echo ""
echo "π Verifica Python..."
if command_exists python3; then
PYTHON_VERSION=$(python3 --version)
print_status "Python trovato: $PYTHON_VERSION"
else
print_error "Python 3 non trovato. Installalo prima di continuare."
exit 1
fi
# 2. Verifica pip
echo ""
echo "π¦ Verifica pip..."
if command_exists pip3; then
PIP_VERSION=$(pip3 --version)
print_status "pip trovato: $PIP_VERSION"
else
print_error "pip3 non trovato. Installalo prima di continuare."
exit 1
fi
# 3. Installa dipendenze Python
echo ""
echo "π Installazione dipendenze Python..."
if [ -f "requirements.txt" ]; then
print_status "File requirements.txt trovato"
pip3 install -r requirements.txt
print_status "Dipendenze Python installate"
else
print_warning "File requirements.txt non trovato, installo le dipendenze manualmente"
pip3 install mcp>=1.0.0 fastapi>=0.104.0 uvicorn>=0.24.0 pydantic>=2.0.0
print_status "Dipendenze Python installate manualmente"
fi
# 4. Verifica Docker
echo ""
echo "π³ Verifica Docker..."
if command_exists docker; then
DOCKER_VERSION=$(docker --version)
print_status "Docker trovato: $DOCKER_VERSION"
# Verifica che Docker sia in esecuzione
if docker info >/dev/null 2>&1; then
print_status "Docker daemon in esecuzione"
else
print_error "Docker daemon non in esecuzione. Avvialo prima di continuare."
exit 1
fi
else
print_error "Docker non trovato. Installalo da: https://docs.docker.com/get-docker/"
exit 1
fi
# 5. Costruisci l'immagine Docker per Pandoc/Mermaid
echo ""
echo "ποΈ Costruzione immagine Docker pandoc-mermaid..."
if [ -f "Dockerfile" ]; then
print_status "Dockerfile trovato"
echo "Questo potrebbe richiedere alcuni minuti..."
docker build -t pandoc-mermaid .
print_status "Immagine Docker pandoc-mermaid costruita"
else
print_error "Dockerfile non trovato nella directory corrente"
exit 1
fi
# 6. Verifica script convert.sh
echo ""
echo "π Verifica script convert.sh..."
if [ -f "convert.sh" ]; then
chmod +x convert.sh
print_status "Script convert.sh trovato e reso eseguibile"
else
print_error "Script convert.sh non trovato"
exit 1
fi
# 7. Verifica che pandoc-wrapper.sh esista (se necessario)
if [ -f "pandoc-wrapper.sh" ]; then
chmod +x pandoc-wrapper.sh
print_status "Script pandoc-wrapper.sh trovato e reso eseguibile"
fi
# 8. Test delle funzionalitΓ
echo ""
echo "π§ͺ Test delle funzionalitΓ ..."
# Test Docker
echo "Test immagine Docker..."
if docker run --rm pandoc-mermaid pandoc --version >/dev/null 2>&1; then
print_status "Immagine Docker pandoc-mermaid funzionante"
else
print_error "Problema con l'immagine Docker pandoc-mermaid"
exit 1
fi
# Test script Python
echo "Test import MCP server..."
if python3 -c "import sys; sys.path.append('.'); from mcp_md2pdf_server import server" >/dev/null 2>&1; then
print_status "Server MCP importabile correttamente"
else
print_error "Problema nell'importare il server MCP"
exit 1
fi
# 9. Crea script di avvio
echo ""
echo "π Creazione script di avvio..."
cat > start_server.sh << 'EOF'
#!/bin/bash
# Script per avviare il server MCP MD2PDF
cd "$(dirname "${BASH_SOURCE[0]}")"
echo "π Avvio MCP MD2PDF Server..."
python3 mcp_md2pdf_server.py
EOF
chmod +x start_server.sh
print_status "Script di avvio creato: start_server.sh"
# 10. Crea file di test
echo ""
echo "π Creazione file di test..."
cat > test_document.md << 'EOF'
# Test Document
Questo Γ¨ un documento di test per verificare la conversione Markdown -> PDF.
## Features
- **Grassetto** e *corsivo*
- `Codice inline`
- Lista numerata:
1. Primo elemento
2. Secondo elemento
## Codice
```python
def hello_world():
print("Hello, World!")
```
## Diagramma Mermaid
```mermaid
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Action 1]
B -->|No| D[Action 2]
C --> E[End]
D --> E
```
## Conclusioni
Se vedi questo PDF, la conversione Γ¨ funzionante! β
EOF
print_status "File di test creato: test_document.md"
# 11. Informazioni finali
echo ""
echo "π Installazione completata!"
echo "============================="
echo ""
echo "π Per utilizzare il server MCP:"
echo " ./start_server.sh"
echo ""
echo "π Per testare la conversione:"
echo " ./convert.sh test_document.md test_document.pdf"
echo ""
echo "π Files creati:"
echo " - start_server.sh (script di avvio server MCP)"
echo " - test_document.md (documento di test)"
echo ""
# Test finale opzionale
echo "π§ͺ Vuoi eseguire un test di conversione? (y/n)"
read -r response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
echo "π Esecuzione test di conversione..."
if ./convert.sh test_document.md test_document.pdf; then
print_status "Test di conversione completato! Controlla test_document.pdf"
else
print_error "Test di conversione fallito"
exit 1
fi
fi
print_status "Installazione completata con successo! π"