Bloqueos de LaLiga a Cloudflare: cómo seguimos abiertos con MCP
Los bloqueos de LaLiga a IPs de Cloudflare tumban webs legales en cada partido. Así montamos un espejo en Netlify y por qué el servidor MCP sigue funcionando.
Datos a 24 de octubre de 2026 · especificación MCP 2026-07-28
En las jornadas de fútbol, quien intenta entrar en DesarrolloMCP con algunas operadoras españolas puede no llegar. No es una caída nuestra: son los bloqueos de LaLiga a Cloudflare. Durante los partidos, las operadoras españolas bloquean direcciones IP de Cloudflare por una orden judicial y, con ellas, cientos de miles de webs legales que comparten esas direcciones. La nuestra es una de ellas.
En este artículo te contamos qué hay detrás de esos bloqueos y qué hemos montado para que sigas pudiendo usar el curso: un espejo en Netlify que se enciende solo en cada partido. También te contamos por qué el servidor MCP del curso sigue respondiendo mientras la web está bloqueada, con su inicio de sesión incluido.
Qué son los bloqueos de LaLiga
Todo parte de la sentencia 310/2024, del 18 de diciembre de 2024, del Juzgado de lo Mercantil nº 6 de Barcelona. La demanda la presentaron LaLiga y Telefónica Audiovisual Digital, la dueña de Movistar Plus+, contra Vodafone, MásOrange, Digi y Telefónica. Obliga a las operadoras a bloquear las IP que sirven partidos pirata, y LaLiga les envía cada semana listas actualizadas de IP, también en fines de semana y festivos con partido, sin una orden nueva para cada dirección (estudio del Parlamento Europeo, TorrentFreak).
El bloqueo se nota sobre todo en horario de partido. OONI, que mide la censura en internet, vio que los bloqueos empiezan poco antes de que empiece el partido y se levantan poco después de que acabe (OONI). No siempre es así: un negocio de Pego contabilizó unas 115 horas de bloqueo desde el 15 de agosto de 2026, también noches entre semana (Qué!).
La autorización cubre tres temporadas y expira el 20 de junio de 2027, así que la 2026/2027, que arrancó el 15 de agosto, es la última que cubre (Xataka Móvil).
Cloudflare y RootedCON pidieron la nulidad de la sentencia, y el juzgado las rechazó en un auto de marzo de 2025 (LaLiga). Los dos recurrieron después al Tribunal Constitucional (Xataka), y no se conoce ninguna resolución pública (hayahora.futbol). En el Congreso, una comisión aprobó el 29 de abril de 2026 una proposición no de ley para pedir proporcionalidad en los bloqueos, pero no es vinculante y no cambia la ley (Xataka).
Por qué caen webs que no tienen nada que ver con el fútbol
Cloudflare no da a cada web una IP propia. Cuando una web pasa por su red, le asigna direcciones de un conjunto compartido, y en los planes Free, Pro y Business no hay IP dedicadas (documentación de Cloudflare). Detrás de una sola IP puede haber miles de webs (blog de Cloudflare). Si una de ellas emite un partido pirata y la operadora bloquea esa IP, caen todas.
Las cifras de OONI, con datos del 1 de enero al 1 de junio de 2026, lo dejan claro:
- De 9,2 millones de dominios probados, 554.507 (un 5,8 %) estuvieron bloqueados al menos una vez.
- De esos, 501.305 estaban en Cloudflare, repartidos en solo 2.218 IP.
- Bloquear entre 4 y 20 IP durante una hora dejó inaccesibles más de 400.000 dominios.
OONI llama a estas cifras estimaciones conservadoras (OONI). El estudio del Parlamento Europeo concluye que estas medidas producen un «systematic overblocking of non‑infringing content», un bloqueo sistemático de contenido que no infringe nada (estudio PE 783.147).
Para quien programa, el problema es muy concreto. Un fin de semana de abril, docker pull fallaba desde España con un error de certificado (Hacker News). Y no hace falta ser grande: las dos IP que usa DesarrolloMCP, 188.114.96.5 y 188.114.97.5, son las mismas que tiene la web del negocio de Pego del que hablábamos antes (Qué!).
LaLiga defiende que más de la mitad de las IP piratas que distribuyen sus partidos están protegidas por Cloudflare y que sus bloqueos no son «a broad or indiscriminate block» (comunicado de LaLiga). Cloudflare, por su parte, dice que no ha visto pruebas de que bloquear así resuelva la piratería (blog de Cloudflare).
Qué puede hacer una web pequeña
Poco, y nada definitivo. Cloudflare explica que el bloqueo ocurre en la red de la operadora y que ella no puede restablecer el acceso. Solo los clientes Enterprise pueden tener IP fijas o traer las suyas, y lo que recomienda es reclamar a la operadora (documentación de Cloudflare).
Irse de Cloudflare tampoco es una garantía: OONI midió bloqueos en IP de 36 proveedores, Amazon incluido (OONI). Y nosotros no queríamos irnos. La web corre en Cloudflare Workers, con su base de datos D1, y el resto de la semana funciona bien.
Así que buscamos otra cosa: no movernos de Cloudflare y, solo durante los partidos, mandar el tráfico a otro sitio.
El modo liga: un espejo en Netlify durante los partidos
Lo llamamos modo liga. Funciona así:
flowchart LR
U[Usuario en España] --> D{¿Hay partido?}
D -- No --> CF[Cloudflare] --> W[Worker de DesarrolloMCP]
D -- Sí --> N[Netlify]
N --> E[Copia estática: blog, temario y fichas]
N --> A[Aviso: cuenta, registro y pagos]
N -- Proxy firmado --> W
W --> M[Servidor MCP, OAuth y login de la conexión] 1. Horarios. Cada lunes, una tarea programada del Worker lee los horarios de Primera de los próximos ocho días en la API de football-data.org. Leemos cada semana, y no una vez por temporada, porque también hay jornadas entre semana y los horarios cambian.
2. Ventanas. Cada partido abre una ventana desde una hora antes del inicio hasta tres horas después: unas dos horas de partido y una de margen. Si dos ventanas se solapan, se unen en una sola. Este sábado, con el primer partido a las 14:00 y el último a las 21:00, la ventana va de 13:00 a medianoche.
3. DNS. Cada diez minutos, la misma tarea mira si está dentro de una ventana y cambia el DNS con la API de Cloudflare. Fuera de los partidos, el dominio pasa por la red de Cloudflare, como siempre. Durante un partido, apunta a Netlify sin pasar por Cloudflare, con un TTL de 60 segundos para que el cambio se note pronto. La tarea solo toca un registro si no está como debe, y siempre se puede forzar a mano en un sentido u otro.
4. La copia. Cada madrugada, una GitHub Action recorre la web como un visitante anónimo y publica la copia en Netlify. Antes de publicar comprueba que no lleva el texto de ninguna lección de pago. En la copia se leen el blog, el temario y las fichas públicas de las lecciones.
5. Lo que la copia no puede hacer. Entrar en tu cuenta, registrarte, comprar o ver tu panel necesitan el servidor, y el servidor está detrás de la IP bloqueada. Esas rutas llevan a una página que explica qué pasa, pide disculpas y te deja publicar en X, con un clic, un mensaje ya escrito contra el bloqueo.
6. El certificado. Netlify solo renueva su certificado TLS si el dominio apunta a Netlify, y casi todo el tiempo apunta a Cloudflare. Por eso otra Action lo emite cada mes con Let’s Encrypt, validando por DNS en Cloudflare, y lo sube a Netlify.
Por qué el servidor MCP sigue funcionando
Aquí está lo interesante para quien construye servidores MCP. El bloqueo se aplica en la red de tu operadora (documentación de Cloudflare). Las peticiones que reenvía Netlify salen de sus servidores, no de la conexión de tu operadora, y durante la ventana de hoy el servidor MCP ha respondido a través del espejo.
Así que Netlify hace de intermediario. Las rutas del servidor MCP, la autorización OAuth y el login de la conexión no se copian: Netlify las reenvía al Worker con un proxy firmado. Cada petición reenviada lleva una firma que el Worker comprueba antes de atenderla. Si no está firmada, no se atiende.
El Worker rehace la petición como si hubiera llegado directa a desarrollomcp.com, y la marca como venida del espejo. Con esa marca, la página de login solo se sirve si vuelve a autorizar una conexión MCP o a registrar un agente. Para entrar en la web normal sigue llevando a la página de aviso, porque detrás vendría el panel, que no está en la copia.
Que esto funcione tan fácil tiene que ver con cómo es MCP desde la versión 2026-07-28. El protocolo no tiene estado: toda la información para procesar una petición viaja en la propia petición, y no hay handshake ni sesión. Un proxy solo tiene que reenviar cada petición tal cual (MCP 2026-07-28 sin estado). La autorización es el mismo OAuth de siempre: el Worker rehace cada petición reenviada en desarrollomcp.com, así que el flujo ve lo mismo que un día sin fútbol. En el ensayo comprobamos que las cookies de sesión pasan por el proxy y que la página de login para autorizar una conexión responde.
El resultado: durante un partido no puedes entrar en la web, pero puedes conectar el curso a Claude, ChatGPT o Claude Code e iniciar sesión con tu cuenta de siempre cuando te lo pida. Sin cuenta, el servidor https://desarrollomcp.com/mcp te deja buscar en el curso, ver el temario, las fichas de las lecciones y los planes, y leer los artículos del blog. Con sesión, te dice qué nivel tienes y por dónde vas, y te da el texto completo de las lecciones a las que tienes acceso. Los pasos para cada cliente están en cómo conectar un servidor MCP a Claude y en la página del servidor MCP del curso.
Lo que el modo liga no resuelve
- Lo que necesita la web. Durante un partido no puedes registrarte, comprar un nivel ni hacer los cuestionarios desde la web. Por MCP puedes leer, pero no todo lo que hace la web.
- Los bloqueos fuera de las ventanas. Si una operadora bloquea fuera de horario, como en el caso de Pego, nuestras ventanas no lo cubren.
- Segunda División. Solo leemos los horarios de Primera.
- Netlify no es inmune. Hoy sirve para esto, pero OONI ha medido bloqueos en 36 proveedores distintos.
El siguiente paso: MCP Apps
Hasta aquí, por MCP el curso llega como texto. El asistente lee la lección y te la explica, pero no se parece a estar en la web.
Lo siguiente que vamos a construir son MCP Apps: interfaces que el servidor entrega y el cliente muestra dentro de la conversación. Claude y ChatGPT ya las muestran (Anthropic, OpenAI). La idea es que puedas ver el temario con tu progreso o leer una lección con su formato desde el chat, de forma parecida a como lo harías en la web. Y como cada herramienta con vista sigue devolviendo texto, un cliente que no muestre MCP Apps seguirá funcionando igual.
Con eso, un partido de fútbol dejaría de notarse en el curso. Te lo contaremos aquí cuando esté listo.
Aprende esto en el curso
- Avanzado 10 € Despliegue con Cloudflare · Un servidor remoto en Workers, de despliegue a observabilidad
- Avanzado 10 € APIs externas y autorización · REST, GraphQL y OAuth 2.1 de extremo a extremo
- Básico Gratis Interacción con el usuario y extensiones · Elicitation en varias rondas, Tasks y el marco de extensiones
La lección 1 la puedes leer ya, sin registro. Las otras 13 del Básico son gratis con una cuenta.
Empieza gratis Ir a la lecciónFuentes
- OONI: LaLiga's IP blocking and its collateral damage (2026-06-30)
- Parlamento Europeo, estudio PE 783.147 (JURI) (2026-07)
- LaLiga: el juzgado desestima las nulidades de Cloudflare y RootedCON (2025-03-26)
- LaLiga: comunicado sobre el bloqueo de IPs (2025-02-15)
- TorrentFreak: Cloudflare pide anular el bloqueo de LaLiga (2025-02-20)
- Xataka: Cloudflare recurre al Tribunal Constitucional (2025-06)
- Cloudflare: informe de transparencia del primer semestre de 2025 (2025-12-19)
- Cloudflare: posible bloqueo por parte del operador
- Xataka Móvil: empieza LaLiga y vuelven los bloqueos (2026-08-17)
- Xataka: el Congreso da el primer paso para poner límite a los bloqueos (2026-04-30)
- Qué!: un empresario afectado por los bloqueos de LaLiga (2026-10-22)
- Hacker News: Docker pull falla en España por el bloqueo (2026-04-12)
- hayahora.futbol
- Add UI to your MCP server (OpenAI)
- Build plugins for Claude (2026-09-25)