Come Alimentare Qualsiasi Pagina a una Rete Neurale Senza Pubblicità e Token Extra
Quando fornisci a un agente LLM lo scraping web tradizionale, una marea di menu di navigazione, footer, banner e muri di markup volano istantaneamente nel contesto. Insieme a un articolo di qualche migliaio di parole, l'agente riceve un megabyte di spazzatura, la finestra di contesto si riempie e la bolletta dei token cresce.
Recentemente mi sono imbattuto nel progetto pullmd. È un servizio self-hosted che prende un URL di pagina o file e restituisce Markdown pulito. Nessun bloat extra, nessuna duplicazione dei metadati nel testo, e un paio di funzionalità che spesso mancano nelle librerie di parsing standard.
Cosa c'è sotto il cofano
I creatori del progetto hanno combinato diversi strumenti battle-tested. Quando arriva un URL, il servizio verifica prima la presenza di Markdown nativo da Cloudflare. Se non c'è, entrano in gioco Mozilla Readability e Trafilatura.
A volte una pagina è costruita interamente con React o Vue e l'HTML minimale restituisce un template vuoto. In queste situazioni, pullmd avvia un sidecar Playwright, renderizza la pagina in Chromium headless ed estrae il contenuto da lì. Se non hai bisogno del browser pesante, puoi semplicemente disabilitare il container Playwright da docker-compose.yml, liberando circa 3,7 GB di spazio su disco. In quel caso, il servizio continuerà a funzionare tramite il parsing statico normale.
Tutti i risultati finiscono in un database SQLite locale. Se richiedi lo stesso URL entro un'ora, la risposta arriva istantaneamente dalla cache. Ogni conversione riceve un identificatore breve permanente, quindi un link come /s/:id può essere usato come feed stabile.
Funzionalità principali che fanno risparmiare tempo
Thread Reddit e Hacker News
Di solito gli script inciampano sulle pagine dei commenti. Qui il parser è specificamente addestrato per parsare i thread di Reddit e Hacker News. L'output è un albero strutturato di commenti con nidificazione, autori e conteggio upvote preservati.
Ricerca nella pagina tramite BM25
Una delle migliori novità nella terza versione del servizio. Se passi il parametro ?query=как настроить базу nella query, pullmd non restituirà tutta la documentazione multipagina. Il servizio suddivide il Markdown in sezioni per header, le classifica usando l'algoritmo BM25 e consegna solo i blocchi che rispondono alla domanda. Per le pagine grandi, questo taglia l'uso dei token del 70% al 95%, accelerando visibilmente le prestazioni dell'agente. Tabelle e blocchi di codice rimangono intatti.
Documenti, video e audio
Il servizio gestisce molto più dei semplici siti web. Quando colleghi un sidecar MarkItDown di Microsoft, processa PDF, file Word, fogli di calcolo Excel, presentazioni PowerPoint ed ebook EPUB.
Se passi un link YouTube, il servizio estrae la trascrizione del video con timestamp cliccabili—nessuna chiave API richiesta. Per il riconoscimento di immagini e audio, puoi configurare un endpoint per qualsiasi modello compatibile con OpenAI o server locale come Ollama.
Server MCP integrato e integrazioni
Per l'integrazione con gli agenti sono disponibili diverse opzioni di connessione:
- REST API standard (
GET /api?url=...) - Server MCP per Cursor, Claude Desktop e altri client compatibili
- Plugin pronto all'uso per Claude Code
- Interfaccia web PWA con supporto drag-and-drop per file direttamente dall'esplora risorse
Sicurezza e protezione SSRF
I servizi che recuperano dati da URL arbitrari sono vulnerabili ad attacchi SSRF. Un utente potrebbe far parsare al parser un indirizzo di rete interno o metadati del provider cloud.
pullmd include la validazione degli indirizzi. Prima di ogni richiesta e ad ogni passaggio di redirect, gli indirizzi IP dell'host vengono risolti. Se un indirizzo rientra negli intervalli di rete privata, loopback, CGNAT o intervalli di metadati cloud come 169.254.169.254, la richiesta viene bloccata immediatamente con un errore 403. Per l'accesso intenzionale a un wiki interno, gli indirizzi possono essere inseriti nella whitelist tramite la variabile d'ambiente PULLMD_ALLOWED_HOSTS.
Come distribuire
Per l'avvio base, un singolo file docker-compose.yml è sufficiente:
mkdir pullmd && cd pullmd
curl -O https://raw.githubusercontent.com/AeternaLabsHQ/pullmd/main/docker-compose.yml
docker compose up -d
Il servizio si avvierà sulla porta 3000. L'autenticazione è disabilitata di default, ma puoi configurarla: sono supportate sia la modalità amministratore singolo che la modalità multi-utente con registrazione e cookie di sessione.
Esempio di una semplice richiesta API:
curl "http://localhost:3000/api?url=https://news.ycombinator.com/item?id=1"
Per connetterti a Claude Code, un singolo comando è sufficiente:
claude mcp add --transport http pullmd http://localhost:3000/mcp
A chi è utile
Il progetto è risultato pulito e pratico. Ha meno di cinquecento stelle su GitHub, ma la codebase sembra matura: struttura modulare pulita, file di migrazione dettagliato e dipendenze esterne minimali nel container principale.
Lo strumento si adatta a chi costruisce pipeline RAG, configura assistenti AI locali, o vuole semplicemente un comodo lettore per articoli lunghi in formato Markdown. Se usi Cursor o Claude Code e spesso chiedi loro di revisionare documentazione da un link, un'istanza pullmd locale ti farà risparmiare molto contesto e nervi.
Progetti correlati