Rule 34

Pesquise posts do rule34.xxx por tag através da API do próprio site. Requer uma chave de API do rule34.xxx.

Documentação

mcp-rule34

npm CI license LobeHub

rule34.xxx é um grande image board cujos posts são indexados inteiramente por tags, e ele publica uma API para lê-los. Um post carrega seu identificador, o endereço de sua página e de seu arquivo, suas dimensões, a pontuação que seus visualizadores lhe deram, sua classificação e a lista completa de tags sob as quais foi arquivado. O site contém dezenas de milhões de posts e responde a uma busca por tag com o número de correspondências.

Este servidor conecta um cliente de chat a esse índice. Você pode buscar os posts por tags, combinando tags obrigatórias, alternativas e exclusões, ler o registro de um post pelo seu identificador e consultar como o site escreve uma tag antes de pesquisar nela. Ele precisa de uma conta e de uma chave de API, que o site emite por pessoa.

Versão francesa


Instalação

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 e qualquer cliente que use o formato de configuração padrão

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

Node 24 ou posterior é necessário. As duas credenciais são obrigatórias; todo o resto em Configuração é opcional.

Com 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 mantém o stdin aberto, que é por onde o protocolo trafega, e -t é omitido porque um TTY reescreve o fluxo. O contêiner precisa de HTTPS de saída para api.rule34.xxx e rule34.xxx, e das duas credenciais do seu ambiente: sem volume, sem porta.

Pacote, sem npm

Baixe mcp-rule34-2.0.2.mcpb de o lançamento mais recente e abra-o. Um cliente que suporta pacotes MCP o instala por conta própria, sem npm para executar. As credenciais ainda são definidas na configuração do cliente.

O que você pode perguntar

  • "Como o site escreve essa tag?"
  • "Encontre posts com essas duas tags, ordenados por pontuação."
  • "Mesma busca, excluindo monocromático."
  • "Leia o registro do post 1234567."
  • "Quantos posts essa busca corresponde?"

O caminho comum vai de uma consulta de tag a uma busca: find_tags fornece a grafia que o site usa, e search_posts a utiliza.

Ferramentas

FerramentaO que ela faz
find_tagsDescobre como o site escreve uma tag e quantos posts a carregam.
search_postsBusca os posts por tags, com alternativas e exclusões.
get_postLê o registro de um post pelo seu identificador ou endereço.

Consulte uma tag antes de pesquisar nela. O site indexa apenas por tag, e uma tag que ele não possui não corresponde a nada, o que aparece como um resultado vazio em vez de um erro de grafia.

find_tags

Descobre como o site escreve uma tag.

ArgumentoTipoObrigatórioO que faz
querystring, até 60 caracteressimO texto a consultar.

Em retorno: query como foi enviado, e tags, cada um com a grafia que o site usa e o número de posts que a carregam.

search_posts

Busca os posts por tags.

ArgumentoTipoObrigatórioO que faz
tagsarray de 1 a 10 nomes de tagsimTags que um post deve carregar.
any_ofarray de 1 a 10 nomes de tagnãoTags que um post deve carregar pelo menos uma.
excludearray de 1 a 10 nomes de tagnãoTags que um post não deve carregar nenhuma.
media_typeimage, animated, video ou any, padrão anynãoImagens estáticas, GIFs ou MP4.
ratingquestionable ou explicitnãoAmbos são pesquisados quando isso é omitido.
sortscore, id, updated ou random, padrão scorenãoA ordem pela qual o site ordena.
limitinteiro, 1 a 100, padrão 20nãoPosts a servir.
pageinteiro, 1 a 200, padrão 1nãoQual página de posts.

media_type é lido das próprias tags do site, então a classificação é tão boa quanto a marcação. As duas classificações acima são as únicas que o site possui: qualquer outro valor responde zero posts e nenhum erro, o que devolveria uma ausência que o site nunca teve.

Em retorno: tags, any_of e exclude como o site as escreve; query, a busca como foi enviada na própria linguagem do site; total, os posts que a busca inteira corresponde conforme contado pelo site; e os próprios posts, cada um com seu id, post_url, file_url, preview_url, sample_url, width, height, score, rating e tags. A pontuação é a do próprio site e é atualizada uma vez por dia.

get_post

Lê o registro de um post.

ArgumentoTipoObrigatórioO que faz
idinteiro, 1 ou maisum de doisO identificador do post.
urluma URL de post do rule34.xxxum de doisO endereço da página do post.

Em retorno: o post que uma linha de busca carrega, com sua lista completa de tags.

Configuração

As duas credenciais são obrigatórias. Todo o resto é opcional, e tudo isso vai no bloco env da configuração do seu cliente.

VariávelPadrãoO que faz
RULE34_USER_IDnenhum, obrigatórioSeu ID de conta numérico.
RULE34_API_KEYnenhum, obrigatórioSua chave de API, que é pessoal.
RULE34_USER_AGENTa identidade do projetoNomeia seu aplicativo para o site, com um endereço onde uma pessoa pode ser contatada.
RULE34_MIN_INTERVAL_MS1000Intervalo entre duas requisições, de 1000 a 60000.
RULE34_TIMEOUT_MS20000Prazo para uma requisição, de 1000 a 120000.
RULE34_MAX_RETRIES3Tentativas após uma falha transitória, de 0 a 10.
RULE34_CACHE_TTL_MS300000Quanto tempo uma resposta permanece na memória, de 0 a 86400000.
RULE34_CACHE_MAX_ENTRIES300Respostas mantidas na memória de uma vez, de 0 a 10000.
RULE34_LOG_LEVELerrorsilent, error, info ou debug, escrito em stderr.

De onde vêm as credenciais. Entre, abra Opções da conta e encontre a linha chamada Credenciais de acesso à API. Ela mostra &api_key=…&user_id=…, e esses dois valores são o que vai na configuração acima. Se a chave estiver vazia, marque Gerar nova chave? e salve.

O site emite uma chave por pessoa e pede que aplicativos que servem seu conteúdo não exibam publicidade e não o coloquem atrás de um paywall. Este servidor não envia chave própria, e cada usuário traz a sua. Iniciado sem credenciais, ele executa, publica suas ferramentas e responde a cada chamada nomeando as duas variáveis a definir: ele não envia nenhuma requisição que sabe que o site recusará.

Um valor fora do intervalo cai no padrão, e o motivo é escrito em stderr.

Erros

Cada falha carrega um de seis códigos, uma mensagem e, onde ajuda, uma dica nomeando o próximo passo.

CódigoO que aconteceuO que fazer
not_foundO site respondeu e não contém nada naquele endereço.Verifique o identificador com search_posts.
invalid_inputOs argumentos foram recusados antes de qualquer requisição sair.Leia a mensagem, que nomeia o argumento. Uma credencial ausente é relatada aqui.
rate_limitedO site pediu que este cliente diminuísse o ritmo.Aguarde o número de segundos que a dica nomeia e chame novamente com os mesmos argumentos. O post ainda está lá.
parse_failureA resposta chegou em um formato que este cliente não consegue ler.Relate em o rastreador de problemas.
network_errorA requisição não foi concluída.Tente novamente em breve.
timeoutA requisição passou do prazo.Aumente RULE34_TIMEOUT_MS, ou peça menos posts.

Como biblioteca

A camada que lê o site é publicada separadamente, com seu ritmo, seu cache e seus erros, e sem nenhum protocolo anexado.

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 leitura responde { data, cached } e lança um erro carregando um dos seis códigos. O piso de um segundo entre duas requisições também vale aqui.

Ritmo e atribuição

Requisições saem uma de cada vez com pelo menos um segundo entre elas, e esse piso vale independentemente de como o servidor está configurado. O User-Agent sempre termina com a identidade do projeto e um endereço onde uma pessoa pode ser contatada.

Leituras vão para a API que o site documenta, e as credenciais que ele emite são o que seus termos pedem que a leitura automatizada use. Cada resultado carrega o endereço da página do post. Nada é baixado: um endereço de arquivo viaja através de uma resposta como uma string.

Este servidor MCP é um projeto não oficial, sem afiliação ao rule34.xxx.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda na sua máquina, contata api.rule34.xxx e rule34.xxx e nada mais, mantém suas respostas na memória enquanto executa e não escreve nada no disco. Suas credenciais são lidas do ambiente e enviadas apenas a esse site. PRIVACY.md declara o que uma requisição carrega e quais configurações alteram qualquer parte disso.

Desenvolvimento

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

Testes rodam contra fixtures geradas e não fazem nenhuma requisição de rede. A suíte ao vivo, npm run test:live, faz uma requisição por rota e roda todas as noites contra o próprio site.

Contribuindo

Bugs, perguntas e ideias pertencem a o rastreador de problemas. Pull requests são bem-vindos; abrir um problema primeiro ajuda a concordar sobre a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. Os posts e as tags pertencem ao rule34.xxx e às pessoas que os enviaram.


mcp-rule34 (français)

Versão em inglês

rule34.xxx é um grande imageboard cujas publicações são indexadas inteiramente por etiquetas, e ele publica uma API para lê-las. Uma publicação carrega seu identificador, o endereço de sua página e de seu arquivo, suas dimensões, a nota que seus visitantes lhe deram, sua classificação, e a lista completa das etiquetas sob as quais está arquivada. O site contém dezenas de milhões de publicações e responde a uma pesquisa por etiquetas informando o número que encontrou.

Este servidor conecta um cliente de conversa a esse índice. Pode-se pesquisar as publicações por etiquetas, combinando as etiquetas exigidas, as alternativas e as exclusões, ler a ficha de uma publicação por seu identificador, e verificar como o site soletra uma etiqueta antes de pesquisar sobre ela. Ele exige uma conta e uma chave de API, que o site entrega por pessoa.

Instalação

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, e qualquer cliente no formato de configuração padrão

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

Node 24 ou mais recente é necessário. As duas credenciais são obrigatórias; todo o resto, em Configuração, é opcional.

Com 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 mantém a entrada padrão aberta, que é o canal do protocolo, e -t é omitido porque um TTY reescreve o fluxo. O contêiner precisa de acesso HTTPS de saída para api.rule34.xxx e rule34.xxx, e das duas credenciais obtidas do seu ambiente: nenhum volume, nenhuma porta.

Bundle, sem npm

Baixe mcp-rule34-2.0.2.mcpb de a última publicação e abra-o. Um cliente que gerencia bundles MCP o instala sozinho, sem npm para executar. As credenciais são sempre definidas na configuração do cliente.

O que se pode pedir

  • « Como o site soletra essa etiqueta? »
  • « Encontre as publicações que carregam essas duas etiquetas, ordenadas por nota. »
  • « A mesma pesquisa, sem monocromático. »
  • « Leia-me a ficha da publicação 1234567. »
  • « Quantas publicações essa pesquisa encontra? »

O caminho comum vai de uma pesquisa de etiqueta a uma pesquisa de publicações: find_tags fornece a grafia que o site usa, e search_posts a retoma.

As ferramentas

FerramentaO que ela faz
find_tagsEncontra a grafia de uma etiqueta, e quantas publicações a carregam.
search_postsPesquisa as publicações por etiquetas, com alternativas e exclusões.
get_postLê a ficha de uma publicação por seu identificador ou seu endereço.

Verifique uma etiqueta antes de pesquisar sobre ela. O site indexa por etiqueta apenas, e uma etiqueta que ele não conhece não corresponde a nada, o que se lê como um resultado vazio em vez de um erro de grafia.

find_tags

Encontra a grafia de uma etiqueta.

ArgumentoTipoObrigatórioO que ele faz
querystring, até 60 caracteressimO texto a verificar.

Em retorno: query tal como enviado, e tags, cada uma com a grafia que o site usa e o número de publicações que a carregam.

search_posts

Pesquisa as publicações por etiquetas.

ArgumentoTipoObrigatórioO que ele faz
tagsarray de 1 a 10 nomes de etiquetassimEtiquetas que uma publicação deve carregar.
any_ofarray de 1 a 10 nomes de etiquetasnãoEtiquetas das quais uma publicação deve carregar ao menos uma.
excludearray de 1 a 10 nomes de etiquetasnãoEtiquetas que uma publicação não deve carregar.
media_typeimage, animated, video ou any, padrão anynãoImagens fixas, GIF ou MP4.
ratingquestionable ou explicitnãoAmbos são pesquisados quando é omitido.
sortscore, id, updated ou random, padrão scorenãoA ordem de classificação do site.
limitinteiro, 1 a 100, padrão 20nãoPublicações a servir.
pageinteiro, 1 a 200, padrão 1nãoQual página de publicações.

media_type se lê nas etiquetas do próprio site, portanto a classificação vale o que vale a etiquetagem. As duas classificações acima são as únicas que o site conhece: qualquer outro valor retorna zero publicações e nenhum erro, o que entregaria uma ausência que o site nunca teve.

Em retorno: tags, any_of e exclude tal como o site as soletra; query, a pesquisa tal como foi enviada na língua do site; total, as publicações que toda a pesquisa encontra, tal como o site as conta; e as próprias publicações, cada uma com seu id, post_url, file_url, preview_url, sample_url, width, height, score, rating e tags. A nota é a do site e é atualizada uma vez por dia.

get_post

Lê a ficha de uma publicação.

ArgumentoTipoObrigatórioO que ele faz
idinteiro, 1 ou maisum dos doisO identificador da publicação.
urlum endereço de página rule34.xxxum dos doisO endereço da página.

Em retorno: a publicação que uma linha de pesquisa carrega, com sua lista completa de etiquetas.

Configuração

As duas credenciais são obrigatórias. Todo o resto é opcional, e tudo se define no bloco env da configuração do cliente.

VariávelPadrãoO que ela faz
RULE34_USER_IDnenhum, obrigatórioO identificador numérico da sua conta.
RULE34_API_KEYnenhum, obrigatórioSua chave de API, que é pessoal.
RULE34_USER_AGENTa identidade do projetoNomeia seu aplicativo junto ao site, com um endereço para contatar uma pessoa.
RULE34_MIN_INTERVAL_MS1000Intervalo entre duas requisições, de 1000 a 60000.
RULE34_TIMEOUT_MS20000Tempo limite de uma requisição, de 1000 a 120000.
RULE34_MAX_RETRIES3Tentativas após uma falha passageira, de 0 a 10.
RULE34_CACHE_TTL_MS300000Duração durante a qual uma resposta permanece em memória, de 0 a 86400000.
RULE34_CACHE_MAX_ENTRIES300Respostas mantidas em memória por vez, de 0 a 10000.
RULE34_LOG_LEVELerrorsilent, error, info ou debug, escrito na saída de erro.

De onde vêm as credenciais. Conecte-se, abra Account options, e encontre a linha API Access Credentials. Ela exibe &api_key=…&user_id=…, e esses dois valores são o que vai na configuração acima. Se a chave estiver vazia, marque Generate New Key? e salve.

O site entrega uma chave por pessoa, e pede que os aplicativos que servem seu conteúdo não exibam nenhuma publicidade e não o coloquem atrás de nenhum pagamento. Este servidor não embute nenhuma chave, e cada um traz a sua. Iniciado sem credenciais, ele roda, publica suas ferramentas, e responde a cada chamada nomeando as duas variáveis a definir: ele não envia nenhuma requisição que sabe que o site recusará.

Um valor fora de sua faixa cai no padrão, e o motivo é escrito na saída de erro.

Erros

Cada falha carrega um dos seis códigos, uma mensagem, e quando isso ajuda uma indicação do próximo gesto.

CódigoO que aconteceuO que fazer
not_foundO site respondeu, e não tem nada nesse endereço.Verifique o identificador com search_posts.
invalid_inputOs argumentos foram recusados antes de qualquer requisição.Leia a mensagem, que nomeia o argumento. Um identificador ausente é sinalizado aqui.
rate_limitedO site pede que este cliente desacelere.Aguarde os segundos indicados e chame novamente com os mesmos argumentos. A publicação ainda está lá.
parse_failureA resposta chegou em uma forma ilegível aqui.Sinalize em o rastreamento de incidentes.
network_errorA requisição não foi concluída.Tente novamente em breve.
timeoutA requisição excedeu seu tempo limite.Aumente RULE34_TIMEOUT_MS, ou peça menos publicações.

Como biblioteca

A camada que lê o site é publicada sozinha, com seu ritmo, seu cache e seus erros, sem protocolo anexado.

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 leitura responde { data, cached }, e levanta um erro carregando um dos seis códigos. O piso de um segundo entre duas requisições também vale aqui.

Ritmo e atribuição

As requisições partem uma a uma com pelo menos um segundo entre elas, e esse piso vale independentemente da configuração. O User-Agent termina sempre pela identidade do projeto e um endereço para contatar uma pessoa.

As leituras passam pela API que o site documenta, e as credenciais que ele entrega são o que suas condições pedem para empregar em uma leitura automatizada. Cada resultado carrega o endereço da página da publicação. Nada é baixado: um endereço de arquivo atravessa uma resposta como uma string de caracteres.

Este MCP é um projeto não oficial, sem afiliação com rule34.xxx.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda na sua máquina, apenas acessa api.rule34.xxx e rule34.xxx, mantém suas respostas em memória enquanto está em execução e não grava nada no disco. Suas credenciais são lidas do ambiente e enviadas apenas a esse site. PRIVACY.md explica o que uma requisição envia e quais configurações alteram isso.

Desenvolvimento

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

Os testes são executados em fixtures geradas e não emitem nenhuma requisição. A suíte ao vivo, npm run test:live, emite uma requisição por rota e roda todas as noites contra o próprio site.

Contribuindo

Bugs, perguntas e ideias têm seu lugar em o rastreador de problemas. Propostas de alteração são bem-vindas; abrir um ticket primeiro ajuda a alinhar a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. As publicações e as tags pertencem à rule34.xxx e às pessoas que as enviaram.