Rule 34

Busca publicaciones de rule34.xxx por etiqueta a través de la API del sitio. Requiere una clave de API de rule34.xxx.

Documentación

mcp-rule34

npm CI license LobeHub

rule34.xxx es un tablón de imágenes de gran tamaño cuyas publicaciones están indexadas enteramente por etiquetas, y publica una API para leerlas. Una publicación lleva su identificador, la dirección de su página y de su archivo, sus dimensiones, la puntuación que le dieron sus espectadores, su clasificación y la lista completa de etiquetas bajo las que se archivó. El sitio contiene decenas de millones de publicaciones y responde a una búsqueda de etiquetas con el número que coincidió.

Este servidor conecta un cliente de chat con ese índice. Puedes buscar publicaciones por etiquetas, combinando etiquetas requeridas, alternativas y exclusiones, leer el registro de una publicación por su identificador y consultar cómo escribe el sitio una etiqueta antes de buscar en ella. Requiere una cuenta y una clave API, que el sitio emite por persona.

Versión francesa


Instalación

Claude Code

claude mcp add rule34 --env RULE34_USER_ID=your-id --env RULE34_API_KEY=your-key -- npx -y mcp-rule34

Claude Desktop, Cursor y cualquier cliente que use el formato de configuración estándar

{
  "mcpServers": {
    "rule34": {
      "command": "npx",
      "args": ["-y", "mcp-rule34"],
      "env": {
        "RULE34_USER_ID": "your-id",
        "RULE34_API_KEY": "your-key"
      }
    }
  }
}

Se requiere Node 24 o posterior. Las dos credenciales son obligatorias; todo lo demás bajo Configuración es opcional.

Con Docker

{
  "mcpServers": {
    "rule34": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RULE34_USER_ID",
        "-e",
        "RULE34_API_KEY",
        "ghcr.io/smeet666/mcp-rule34:2.0.2"
      ]
    }
  }
}

-i mantiene abierto stdin, que es por donde viaja el protocolo, y -t se omite porque una TTY reescribe el flujo. El contenedor necesita HTTPS saliente hacia api.rule34.xxx y rule34.xxx, y las dos credenciales de tu entorno: sin volumen, sin puerto.

Paquete, sin npm

Descarga mcp-rule34-2.0.2.mcpb desde la última versión y ábrelo. Un cliente que admita paquetes MCP lo instala por sí solo, sin necesidad de ejecutar npm. Las credenciales se siguen configurando en la configuración del cliente.

Qué puedes preguntar

  • "¿Cómo escribe el sitio esa etiqueta?"
  • "Encuentra publicaciones etiquetadas con esas dos, ordenadas por puntuación."
  • "Misma búsqueda, excluyendo monocromo."
  • "Léeme el registro de la publicación 1234567."
  • "¿Cuántas publicaciones coincide con esa búsqueda?"

El camino habitual va desde una consulta de etiqueta hasta una búsqueda: find_tags da la ortografía que usa el sitio, y search_posts la toma.

Herramientas

HerramientaQué hace
find_tagsEncuentra cómo escribe el sitio una etiqueta y cuántas publicaciones la llevan.
search_postsBusca publicaciones por etiquetas, con alternativas y exclusiones.
get_postLee el registro de una publicación por su identificador o su dirección.

Consulta una etiqueta antes de buscar en ella. El sitio indexa solo por etiqueta, y una etiqueta que no tiene no coincide con nada, lo que se lee como un resultado vacío en lugar de como un error ortográfico.

find_tags

Encuentra cómo escribe el sitio una etiqueta.

ArgumentoTipoObligatorioQué hace
querycadena, hasta 60 caracteresEl texto a consultar.

A cambio: query tal como se envió, y tags, cada uno con la ortografía que usa el sitio y el número de publicaciones que lo llevan.

search_posts

Busca publicaciones por etiquetas.

ArgumentoTipoObligatorioQué hace
tagsmatriz de 1 a 10 nombres de etiquetaEtiquetas que una publicación debe llevar.
any_ofmatriz de 1 a 10 nombres de etiquetanoEtiquetas de las que una publicación debe llevar al menos una.
excludematriz de 1 a 10 nombres de etiquetanoEtiquetas que una publicación no debe llevar.
media_typeimage, animated, video o any, por defecto anynoImágenes fijas, GIF o MP4.
ratingquestionable o explicitnoSe buscan ambas cuando se omite.
sortscore, id, updated o random, por defecto scorenoEl orden por el que ordena el sitio.
limitentero, 1 a 100, por defecto 20noPublicaciones a servir.
pageentero, 1 a 200, por defecto 1noQué página de publicaciones.

media_type se lee de las propias etiquetas del sitio, por lo que la clasificación es tan buena como el etiquetado. Las dos clasificaciones anteriores son las únicas que tiene el sitio: cualquier otro valor responde cero publicaciones y sin error, lo que devolvería una ausencia que el sitio nunca tuvo.

A cambio: tags, any_of y exclude tal como las escribe el sitio; query, la búsqueda tal como se envió en el propio idioma del sitio; total, las publicaciones que coinciden con toda la búsqueda según el recuento del sitio; y las propias publicaciones, cada una con su id, post_url, file_url, preview_url, sample_url, width, height, score, rating y tags. La puntuación es la propia del sitio y se actualiza una vez al día.

get_post

Lee el registro de una publicación.

ArgumentoTipoObligatorioQué hace
identero, 1 o másuno de dosEl identificador de la publicación.
urluna URL de publicación de rule34.xxxuno de dosLa dirección de la página de la publicación.

A cambio: la publicación que lleva una fila de búsqueda, con su lista completa de etiquetas.

Configuración

Las dos credenciales son obligatorias. Todo lo demás es opcional, y todo va en el bloque env de la configuración de tu cliente.

VariablePor defectoQué hace
RULE34_USER_IDninguno, obligatorioTu identificador de cuenta numérico.
RULE34_API_KEYninguno, obligatorioTu clave API, que es personal.
RULE34_USER_AGENTla identidad del proyectoNombra tu aplicación ante el sitio, con una dirección donde se pueda contactar a una persona.
RULE34_MIN_INTERVAL_MS1000Intervalo entre dos solicitudes, de 1000 a 60000.
RULE34_TIMEOUT_MS20000Plazo para una solicitud, de 1000 a 120000.
RULE34_MAX_RETRIES3Intentos tras un fallo transitorio, de 0 a 10.
RULE34_CACHE_TTL_MS300000Cuánto tiempo permanece una respuesta en memoria, de 0 a 86400000.
RULE34_CACHE_MAX_ENTRIES300Respuestas mantenidas en memoria a la vez, de 0 a 10000.
RULE34_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

De dónde vienen las credenciales. Inicia sesión, abre Opciones de cuenta y busca la fila llamada Credenciales de acceso a la API. Muestra &api_key=…&user_id=…, y esos dos valores son los que van en la configuración anterior. Si la clave está vacía, marca ¿Generar nueva clave? y guarda.

El sitio emite una clave por persona y pide que las aplicaciones que sirven su contenido no muestren publicidad y no lo pongan detrás de un muro de pago. Este servidor no incluye ninguna clave propia, y cada usuario aporta la suya. Si se inicia sin credenciales, se ejecuta, publica sus herramientas y responde a cada llamada nombrando las dos variables a configurar: no envía ninguna solicitud que sepa que el sitio rechazará.

Un valor fuera de su rango vuelve al valor por defecto, y el motivo se escribe en stderr.

Errores

Cada fallo lleva uno de seis códigos, un mensaje y, cuando ayuda, una pista que nombra el siguiente paso.

CódigoQué pasóQué hacer
not_foundEl sitio respondió y no tiene nada en esa dirección.Comprueba el identificador con search_posts.
invalid_inputLos argumentos se rechazaron antes de enviar ninguna solicitud.Lee el mensaje, que nombra el argumento. Aquí se informa de una credencial faltante.
rate_limitedEl sitio pidió a este cliente que fuera más lento.Espera el número de segundos que nombre la pista y vuelve a llamar con los mismos argumentos. La publicación sigue ahí.
parse_failureLa respuesta llegó en una forma que este cliente no puede leer.Repórtalo en el rastreador de incidencias.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo.Sube RULE34_TIMEOUT_MS, o pide menos publicaciones.

Como biblioteca

La capa que lee el sitio se publica por separado, con su ritmo, su caché y sus errores, y sin ningún protocolo adjunto.

import { Rule34Client } from "mcp-rule34/client";

const client = new Rule34Client({ credentials: { userId: "…", apiKey: "…" } });
const { data, cached } = await client.searchPosts({ tags: ["example"], limit: 5 });
console.log(data.total, cached);

Cada lectura responde { data, cached } y lanza un error con uno de los seis códigos. El mínimo de un segundo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen de una en una con al menos un segundo entre ellas, y ese mínimo se mantiene sin importar cómo esté configurado el servidor. El User-Agent siempre termina con la identidad del proyecto y una dirección donde se pueda contactar a una persona.

Las lecturas van a la API que documenta el sitio, y las credenciales que emite son lo que sus términos piden que use la lectura automatizada. Cada resultado lleva la dirección de la página de la publicación. No se descarga nada: una dirección de archivo viaja a través de una respuesta como cadena.

Este servidor MCP es un proyecto no oficial, sin afiliación con rule34.xxx.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta con api.rule34.xxx y rule34.xxx y nada más, mantiene sus respuestas en memoria mientras se ejecuta y no escribe nada en disco. Tus credenciales se leen del entorno y se envían solo a ese sitio. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian algo de eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan contra datos generados y no hacen ninguna solicitud de red. La suite en vivo, npm run test:live, hace una solicitud por ruta y se ejecuta cada noche contra el propio sitio.

Contribuciones

Los errores, preguntas e ideas van en el rastreador de incidencias. Las solicitudes de extracción son bienvenidas; abrir una incidencia primero ayuda a acordar la forma del cambio. Consulta CONTRIBUTING.md.

Licencia

MIT, consulta LICENSE. Las publicaciones y las etiquetas pertenecen a rule34.xxx y a las personas que las subieron.


mcp-rule34 (español)

Versión en inglés

rule34.xxx es un imageboard de gran tamaño cuyas publicaciones están indexadas enteramente por etiquetas, y publica una API para leerlas. Una publicación lleva su identificador, la dirección de su página y de su archivo, sus dimensiones, la nota que sus visitantes le han dado, su clasificación, y la lista completa de las etiquetas bajo las que está archivada. El sitio contiene decenas de millones de publicaciones y responde a una búsqueda por etiquetas dando el número que ha encontrado.

Este servidor conecta un cliente de conversación con ese índice. Se pueden buscar publicaciones por etiquetas, combinando las etiquetas exigidas, las alternativas y las exclusiones, leer la ficha de una publicación por su identificador, y verificar cómo el sitio escribe una etiqueta antes de buscar sobre ella. Requiere una cuenta y una clave de API, que el sitio entrega por persona.

Instalación

Claude Code

claude mcp add rule34 --env RULE34_USER_ID=votre-id --env RULE34_API_KEY=votre-cle -- npx -y mcp-rule34

Claude Desktop, Cursor, y cualquier cliente con formato de configuración estándar

{
  "mcpServers": {
    "rule34": {
      "command": "npx",
      "args": ["-y", "mcp-rule34"],
      "env": {
        "RULE34_USER_ID": "votre-id",
        "RULE34_API_KEY": "votre-cle"
      }
    }
  }
}

Se necesita Node 24 o más reciente. Los dos identificadores son obligatorios; todo lo demás, en Configuración, es opcional.

Con Docker

{
  "mcpServers": {
    "rule34": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RULE34_USER_ID",
        "-e",
        "RULE34_API_KEY",
        "ghcr.io/smeet666/mcp-rule34:2.0.2"
      ]
    }
  }
}

-i mantiene la entrada estándar abierta, que es el canal del protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita acceso HTTPS saliente hacia api.rule34.xxx y rule34.xxx, y los dos identificadores tomados de su entorno: sin volúmenes, sin puertos.

Bundle, sin npm

Descargue mcp-rule34-2.0.2.mcpb desde la última publicación y ábralo. Un cliente que gestione bundles MCP lo instala solo, sin necesidad de ejecutar npm. Los identificadores se siguen colocando en la configuración del cliente.

Lo que se puede pedir

  • «¿Cómo escribe el sitio esta etiqueta?»
  • «Encuentra las publicaciones que llevan estas dos etiquetas, ordenadas por nota.»
  • «La misma búsqueda, sin monocromo.»
  • «Léeme la ficha de la publicación 1234567.»
  • «¿Cuántas publicaciones encuentra esta búsqueda?»

El camino habitual va de una búsqueda de etiqueta a una búsqueda de publicaciones: find_tags da la ortografía que emplea el sitio, y search_posts la retoma.

Las herramientas

HerramientaLo que hace
find_tagsEncuentra la ortografía de una etiqueta, y cuántas publicaciones la llevan.
search_postsBusca publicaciones por etiquetas, con alternativas y exclusiones.
get_postLee la ficha de una publicación por su identificador o su dirección.

Verifique una etiqueta antes de buscar sobre ella. El sitio indexa solo por etiqueta, y una etiqueta que no conoce no corresponde a nada, lo que se lee como un resultado vacío en lugar de un error de ortografía.

find_tags

Encuentra la ortografía de una etiqueta.

ArgumentoTipoRequeridoLo que hace
querycadena, hasta 60 caracteresEl texto a verificar.

En retorno: query tal como se envió, y tags, cada una con la ortografía que emplea el sitio y el número de publicaciones que la llevan.

search_posts

Busca publicaciones por etiquetas.

ArgumentoTipoRequeridoLo que hace
tagsmatriz de 1 a 10 nombres de etiquetasEtiquetas que una publicación debe llevar.
any_ofmatriz de 1 a 10 nombres de etiquetasnoEtiquetas de las que una publicación debe llevar al menos una.
excludematriz de 1 a 10 nombres de etiquetasnoEtiquetas que una publicación no debe llevar.
media_typeimage, animated, video o any, por defecto anynoImágenes fijas, GIF o MP4.
ratingquestionable o explicitnoAmbos se buscan cuando se omite.
sortscore, id, updated o random, por defecto scorenoEl orden de clasificación del sitio.
limitentero, 1 a 100, por defecto 20noPublicaciones a servir.
pageentero, 1 a 200, por defecto 1noQué página de publicaciones.

media_type se lee sobre las etiquetas del propio sitio, por lo que la clasificación vale lo que vale el etiquetado. Las dos clasificaciones anteriores son las únicas que el sitio conoce: cualquier otro valor devuelve cero publicaciones y ningún error, lo que entregaría una ausencia que el sitio nunca ha tenido.

En retorno: tags, any_of y exclude tal como el sitio las escribe; query, la búsqueda tal como se envió en el idioma del sitio; total, las publicaciones que toda la búsqueda encuentra, tal como el sitio las cuenta; y las publicaciones mismas, cada una con su id, post_url, file_url, preview_url, sample_url, width, height, score, rating y tags. La nota es la del sitio y se actualiza una vez al día.

get_post

Lee la ficha de una publicación.

ArgumentoTipoRequeridoLo que hace
identero, 1 o másuno de los dosEl identificador de la publicación.
urluna dirección de página rule34.xxxuno de los dosLa dirección de la página.

En retorno: la publicación que lleva una línea de búsqueda, con su lista completa de etiquetas.

Configuración

Los dos identificadores son obligatorios. Todo lo demás es opcional, y todo se coloca en el bloque env de la configuración del cliente.

VariablePor defectoLo que hace
RULE34_USER_IDninguno, obligatorioEl identificador numérico de su cuenta.
RULE34_API_KEYninguno, obligatorioSu clave de API, que es personal.
RULE34_USER_AGENTla identidad del proyectoNombra su aplicación ante el sitio, con una dirección donde contactar a una persona.
RULE34_MIN_INTERVAL_MS1000Intervalo entre dos solicitudes, de 1000 a 60000.
RULE34_TIMEOUT_MS20000Tiempo de espera de una solicitud, de 1000 a 120000.
RULE34_MAX_RETRIES3Intentos tras un fallo pasajero, de 0 a 10.
RULE34_CACHE_TTL_MS300000Duración durante la cual una respuesta permanece en memoria, de 0 a 86400000.
RULE34_CACHE_MAX_ENTRIES300Respuestas guardadas en memoria a la vez, de 0 a 10000.
RULE34_LOG_LEVELerrorsilent, error, info o debug, escrito en la salida de error.

De dónde vienen los identificadores. Inicie sesión, abra Account options, y encuentre la línea API Access Credentials. Muestra &api_key=…&user_id=…, y esos dos valores son lo que va en la configuración anterior. Si la clave está vacía, marque Generate New Key? y guarde.

El sitio entrega una clave por persona, y pide que las aplicaciones que sirven su contenido no muestren publicidad y no lo coloquen detrás de ningún pago. Este servidor no incorpora ninguna clave, y cada uno aporta la suya. Iniciado sin identificadores, funciona, publica sus herramientas, y responde a cada llamada nombrando las dos variables a colocar: no envía ninguna solicitud que sepa que el sitio rechazará.

Un valor fuera de su rango cae en el valor por defecto, y la razón se escribe en la salida de error.

Errores

Cada fallo lleva uno de los seis códigos, un mensaje, y cuando ayuda una indicación del siguiente paso.

CódigoLo que ha pasadoQué hacer
not_foundEl sitio ha respondido, y no tiene nada en esa dirección.Verifique el identificador con search_posts.
invalid_inputLos argumentos fueron rechazados antes de cualquier solicitud.Lea el mensaje, que nombra el argumento. Un identificador faltante se señala aquí.
rate_limitedEl sitio pide a este cliente que reduzca la velocidad.Espere los segundos indicados y vuelva a llamar con los mismos argumentos. La publicación sigue ahí.
parse_failureLa respuesta llegó en una forma ilegible aquí.Repórtelo en el seguimiento de incidentes.
network_errorLa solicitud no se completó.Reintente en breve.
timeoutLa solicitud superó su tiempo de espera.Aumente RULE34_TIMEOUT_MS, o pida menos publicaciones.

Como biblioteca

La capa que lee el sitio se publica sola, con su ritmo, su caché y sus errores, sin protocolo adjunto.

import { Rule34Client } from "mcp-rule34/client";

const client = new Rule34Client({ credentials: { userId: "…", apiKey: "…" } });
const { data, cached } = await client.searchPosts({ tags: ["example"], limit: 5 });
console.log(data.total, cached);

Cada lectura responde { data, cached }, y lanza un error que lleva uno de los seis códigos. El mínimo de un segundo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen una a una con al menos un segundo entre ellas, y este mínimo se mantiene sea cual sea la configuración. El User-Agent termina siempre con la identidad del proyecto y una dirección donde contactar a una persona.

Las lecturas pasan por la API que el sitio documenta, y los identificadores que entrega son lo que sus condiciones piden emplear para una lectura automatizada. Cada resultado lleva la dirección de la página de la publicación. Nada se descarga: una dirección de archivo atraviesa una respuesta como una cadena de caracteres.

Este MCP es un proyecto no oficial, sin afiliación con rule34.xxx.

Privacidad

Este servidor no recopila nada sobre ti ni envía nada a su autor. Se ejecuta en tu máquina, solo se conecta a api.rule34.xxx y rule34.xxx, guarda sus respuestas en memoria mientras está en ejecución y no escribe nada en el disco. Tus credenciales se leen del entorno y se envían únicamente a ese sitio. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan sobre fixtures generados y no emiten ninguna solicitud. La suite en vivo, npm run test:live, emite una solicitud por ruta y se ejecuta cada noche contra el propio sitio.

Contribuir

Los errores, las preguntas y las ideas tienen su lugar en el seguimiento de incidencias. Las propuestas de modificación son bienvenidas; abrir un ticket primero ayuda a ponerse de acuerdo sobre la forma del cambio. Ver CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las publicaciones y las etiquetas pertenecen a rule34.xxx y a las personas que las han subido.