Pequerecetas

Leia receitas familiares espanholas do Pequerecetas e reescalone-as honestamente. Sem chave de API.

Documentação

mcp-pequerecetas

npm CI license MCP Registry Glama Install in Cursor Install in VS Code

Pequerecetas é um site espanhol de culinária caseira feito para famílias. Ele contém alguns milhares de receitas com seus ingredientes, seus passos e suas fotografias, e arquiva cada uma sob a dieta que atende, o eletrodoméstico em que é cozida, a ocasião para a qual é feita e a idade de quem a come, de seis meses para cima.

Este servidor conecta um cliente de chat a esse site. Você pode pesquisar suas receitas, ler uma com suas quantidades redimensionadas para o número de pessoas à sua mesa, listar os valores que cada taxonomia publica, navegar por uma taxonomia página por página e redimensionar qualquer lista de ingredientes em espanhol que você já tenha. Ele não precisa de chave de API nem de conta.

Version française


Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

claude mcp add pequerecetas -- npx -y mcp-pequerecetas

Claude Desktop, Cursor e qualquer cliente que use o formato de configuração padrão

{
  "mcpServers": {
    "pequerecetas": {
      "command": "npx",
      "args": ["-y", "mcp-pequerecetas"]
    }
  }
}

Node 24 ou posterior é necessário, e nenhuma variável de ambiente precisa ser definida.

Com Docker

{
  "mcpServers": {
    "pequerecetas": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-pequerecetas:1.0.1"]
    }
  }
}

-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 www.pequerecetas.com, e nada mais: sem volume, sem porta, sem credencial.

Pacote, sem npm

Baixe mcp-pequerecetas-1.0.1.mcpb de o último lançamento e abra-o. Um cliente que suporta pacotes MCP o instala por conta própria, sem npm e sem arquivo de configuração para editar. O pacote carrega suas dependências, então nada é baixado no momento da instalação.

O que você pode perguntar

  • « Búscame una receta de paella de marisco. »
  • "Leia-me essa receita para oito pessoas."
  • "O que posso cozinhar em uma fritadeira a ar neste site?"
  • "Mostre-me os purês que ele arquiva sob seis meses."
  • "Redimensione esta lista de ingredientes em espanhol por três."

Pequerecetas é escrito em espanhol e sua busca corresponde às palavras com as quais uma página foi escrita, então as receitas são encontradas em espanhol. O caminho comum vai de uma busca ou taxonomia até uma receita: uma linha carrega um id, e get_recipe recebe esse id.

Ferramentas

FerramentaO que faz
get_recipeLê uma página da seção de receitas, redimensionada sob solicitação.
search_recipesEncontra receitas por prato ou por ingrediente.
list_facetsLista os valores que cada taxonomia publica.
browse_recipesLê uma taxonomia, página por página.
scale_ingredientsRedimensiona qualquer lista de ingredientes em espanhol, sem solicitação ao site.

get_recipe

Lê uma página da seção de receitas e redimensiona suas quantidades quando um número de porções é fornecido.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 200 caracteressimO slug no endereço de uma receita, como uma linha o carrega.
servingsinteiro, 1 a 1000nãoRedimensiona as quantidades para este número.

Em retorno: kind, que lê recipe ou collection. O site publica ambos neste tipo de endereço e os descreve de forma semelhante, então é isso que os distingue: uma coleção é um artigo que reúne outras receitas, e ela retorna com headings e recipes, as linhas para as quais aponta, no lugar dos campos de uma receita.

Uma receita carrega source_shape, lendo structured quando o bloco que a página publica para mecanismos de busca continha seus ingredientes e article quando eles foram lidos do corpo da página, que é onde a maioria das receitas deste site os mantém. Depois vêm title, url, description, published_at, modified_at, prep_minutes, cook_minutes, total_minutes, categories, cuisines, keywords, author, author_url, rating, nutrition e images, cada null ou vazio onde a página não declara nada. yield diz para o que a receita foi escrita e para o que foi redimensionada; uma página que não declara número de porções retorna com factor em 1 e uma nota explicando o porquê. Cada linha de ingredients carrega scaling, lendo scaled, rounded ou unscaled, e is_equipment, que marca uma linha que nomeia uma ferramenta em vez de algo comestível.

search_recipes

Pesquisa as receitas por um prato ou ingrediente.

ArgumentoTipoObrigatórioO que faz
querystring, 1 a 120 caracteressimUm prato ou ingrediente, em espanhol.
limitinteiro, 1 a 60nãoLinhas a retornar.

Em retorno: linhas carregando id, que get_recipe recebe, title, url e image_url. Junto vêm result_count para as linhas retornadas e total_available, que é sempre null: o site não publica contagem do que uma busca correspondeu. O site serve sua busca em uma única página e responde a uma solicitação por uma segunda com a primeira novamente, então estas são todas as linhas que ele oferece para uma consulta. Algumas linhas são artigos que reúnem receitas, o que get_recipe relata como um collection.

list_facets

Lista os valores pelos quais o site navega suas receitas, lidos do sitemap que cada taxonomia publica.

ArgumentoTipoObrigatórioO que faz
facetstring, 1 caractere ou maisnãoUma taxonomia. Todas as oito quando omitido.

As taxonomias são dieta, edad, ingrediente, ocasion, recetas-de, tecnica, tipo-de-cocina e tipo-plato: dieta, a idade de quem come, ingrediente principal, ocasião, momento do dia, eletrodoméstico, culinária e tipo de prato.

Em retorno: facets, cada uma carregando name, value_count e values, cujo value é o slug que browse_recipes recebe. Os valores mantêm a ordem que o site os publica. Ler todas as oito custa uma solicitação por taxonomia. Uma taxonomia que não pôde ser lida é nomeada em notes e omitida de facets, então uma listagem sem uma nunca parece um site que tem sete.

browse_recipes

Lê uma página das receitas de uma taxonomia.

ArgumentoTipoObrigatórioO que faz
facetstring, 1 caractere ou maissimA taxonomia a navegar.
valuestring, 1 a 120 caracteressimUm slug de list_facets, como thermomix.
pageinteiro, 1 a 200nãoQual página ler, a primeira por padrão.

Em retorno: linhas da mesma forma que search_recipes retorna, com page_served para a página que o site realmente serviu, has_more para saber se sua própria paginação oferece outra, e total_available, sempre null porque o site não imprime contagem nessas páginas. O site escreve seus próprios slugs, então um construído à mão alcança uma página que ele não possui e retorna como not_found. As taxonomias não podem ser combinadas: o site não oferece como pedir duas ao mesmo tempo.

scale_ingredients

Redimensiona uma lista de linhas de ingredientes em espanhol. Ele não alcança nenhum site.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 200 stringssimAs linhas a redimensionar, como escritas.
factornúmero, maior que 0 até 1000um dePelo que multiplicar as quantidades.
from_servingsinteiro, 1 a 1000um dePara quantas a lista foi escrita.
to_servingsinteiro, 1 a 1000um dePara quantas deve servir.

factor, ou from_servings e to_servings juntos. Nomear ambas as formas ao mesmo tempo é recusado, porque podem pedir coisas diferentes.

Em retorno: cada linha com text como agora lê, original como foi dada, amount, amount_max, unit e scaling, que carrega a honestidade da resposta: scaled quando a aritmética acertou exatamente, rounded quando o valor mudou para permanecer algo que uma cozinha pode medir, unscaled quando a linha não carrega quantidade. is_equipment marca uma linha que nomeia uma ferramenta. Junto vêm scaled_count, rounded_count e unscaled_count. Nada é convertido entre sistemas de unidades, e uma medida aproximada como um pizca mantém o tamanho que o cozinheiro lhe dá.

Configuração

VariávelPadrãoLimitesO que faz
PQR_USER_AGENTnão definidoPrefixado ao User-Agent próprio deste servidor.
PQR_MIN_INTERVAL_MS30003000 a 60000Milissegundos entre duas solicitações.
PQR_TIMEOUT_MS200001000 a 120000Quanto tempo uma solicitação pode levar.
PQR_MAX_RETRIES30 a 8Tentativas de uma solicitação que o site não respondeu.
PQR_CACHE_TTL_MS9000000 a 86400000Quanto tempo uma leitura é mantida. Zero desliga o armazenamento.
PQR_CACHE_MAX_ENTRIES2001 a 5000Leituras mantidas de uma vez.
PQR_LOG_LEVELerrorsilent, error, info, debugO que vai para o stderr.

O intervalo tem um piso de 3000 milissegundos. Um valor abaixo dele é recusado e o padrão permanece, o que é declarado no stderr em vez de aplicado em silêncio.

Erros

CódigoO que significaO que fazer
not_foundO site não contém nada nesse endereço.Verifique o slug em relação a search_recipes.
invalid_inputOs argumentos não podem gerar uma solicitação.A mensagem nomeia o argumento.
rate_limitedO site pediu que este cliente diminuísse o ritmo.Aguarde e tente novamente. A coisa solicitada ainda existe.
parse_failureUma página chegou em um formato que não pode ser lido.Reporte; o site pode ter mudado.
network_errorA solicitação não pôde ser concluída.Tente novamente.
timeoutNenhuma resposta chegou a tempo.Tente novamente, ou aumente PQR_TIMEOUT_MS.

Como biblioteca

A camada de leitura é publicada separadamente, com seu ritmo, seu armazenamento e seu vocabulário de erros, e sem protocolo anexado.

import { PequerecetasClient } from "mcp-pequerecetas/client";

const client = new PequerecetasClient();
const read = await client.getRecipe("paella-de-marisco");

Construída sem nada, ela obtém suas configurações do ambiente e envia seus diagnósticos para stderr. loadConfig e createLogger vêm do mesmo ponto de entrada para um chamador que prefere defini-los em código:

import { createLogger, loadConfig, PequerecetasClient } from "mcp-pequerecetas/client";

const client = new PequerecetasClient({
  config: { ...loadConfig(), minIntervalMs: 5000 },
  logger: createLogger("debug"),
});

Cada leitura retorna { data, cached }, e cached indica se a resposta veio do armazenamento em vez do site.

Ritmo e atribuição

Uma solicitação por vez, com três segundos de intervalo, e o intervalo aumenta quando o site resiste. O User-Agent carrega o nome do projeto, sua versão e um endereço onde uma pessoa pode ser contatada.

Pequerecetas é gratuito para ler e paga por seu próprio hospedagem. Quando você mostrar uma receita para alguém, credite o site e link para a página de onde ela veio.

Este servidor não é afiliado ao Pequerecetas.

Privacidade

Nada é coletado. O servidor lê www.pequerecetas.com e nenhum outro host, mantém o que leu na memória por quinze minutos por padrão, não grava nada em disco e envia seus diagnósticos para stderr. Ele não carrega nenhuma credencial, porque o site não pede nenhuma. Veja PRIVACY.md.

Desenvolvimento

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

O corpus que a suíte lê é escrito por scripts/build-fixtures.mjs e contém receitas inventadas, então nenhum conteúdo de terceiros é armazenado aqui. Uma suíte ao vivo roda por trás de PQR_LIVE=1, uma solicitação por rota.

Contribuindo

Issues e pull requests são bem-vindos. Veja CONTRIBUTING.md.

Licença

MIT. Veja LICENSE.


mcp-pequerecetas (français)

Versão em inglês

Pequerecetas é um site espanhol de culinária familiar. Ele contém alguns milhares de receitas com seus ingredientes, seus passos e suas fotografias, e classifica cada uma sob o regime ao qual se adequa, o aparelho que a cozinha, a ocasião para a qual se faz e a idade de quem a come, a partir de seis meses.

Este servidor conecta um cliente de conversa a este site. Pode-se buscar suas receitas, ler uma com suas quantidades ajustadas para o número de pessoas à mesa, listar os valores que cada taxonomia publica, percorrer uma taxonomia página por página e ajustar qualquer lista de ingredientes espanhola que já se tenha. Ele não exige chave de API nem conta.

Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

claude mcp add pequerecetas -- npx -y mcp-pequerecetas

Claude Desktop, Cursor e qualquer cliente no formato de configuração padrão

{
  "mcpServers": {
    "pequerecetas": {
      "command": "npx",
      "args": ["-y", "mcp-pequerecetas"]
    }
  }
}

Node 24 ou mais recente é necessário, e nenhuma variável de ambiente precisa ser definida.

Com Docker

{
  "mcpServers": {
    "pequerecetas": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-pequerecetas:1.0.1"]
    }
  }
}

-i mantém stdin aberto, por onde passa o protocolo, e -t é deixado de lado porque um TTY reescreve o fluxo. O contêiner precisa alcançar www.pequerecetas.com em HTTPS de saída, e nada mais: nenhum volume, nenhuma porta, nenhum identificador.

Bundle, sem npm

Baixar mcp-pequerecetas-1.0.1.mcpb de o último lançamento e abri-lo. Um cliente que gerencia bundles MCP o instala sozinho, sem npm e sem arquivo de configuração para modificar. O bundle carrega suas dependências, então nada é baixado na instalação.

O que se pode pedir

  • « Búscame una receta de paella de marisco. »
  • « Leia-me esta receita para oito pessoas. »
  • « O que posso cozinhar na fritadeira a ar neste site? »
  • « Mostre-me os purês que ele classifica sob seis meses. »
  • « Multiplique esta lista de ingredientes espanhola por três. »

Pequerecetas é escrito em espanhol e sua busca compara as palavras de que uma página é feita, portanto as receitas são encontradas em espanhol. O caminho comum vai de uma busca ou taxonomia para uma receita: uma linha carrega um id, e get_recipe pega esse id.

As ferramentas

FerramentaO que ela faz
get_recipeLê uma página da seção de receitas, ajustada sob demanda.
search_recipesEncontra receitas por prato ou ingrediente.
list_facetsLista os valores que cada taxonomia publica.
browse_recipesLê uma taxonomia, página por página.
scale_ingredientsAjusta uma lista de ingredientes espanhola, sem consulta.

get_recipe

Lê uma página da seção de receitas e ajusta suas quantidades quando um número de porções é fornecido.

ArgumentoTipoObrigatórioO que ele faz
idstring, 1 a 200 caracteressimO slug no endereço de uma receita.
servingsinteiro, 1 a 1000nãoAjusta as quantidades para esse número.

Em retorno: kind, que vale recipe ou collection. O site publica ambos nesse tipo de endereço e os descreve de forma semelhante, portanto é isso que os distingue: uma coleção é um artigo que reúne outras receitas, e ela retorna com headings e recipes, as linhas que designa, no lugar dos campos de uma receita.

Uma receita carrega source_shape, que vale structured quando o bloco que a página publica para os mecanismos de busca continha seus ingredientes, e article quando eles foram lidos no corpo da página, onde a maioria das receitas deste site os mantém. Em seguida vêm title, url, description, published_at, modified_at, prep_minutes, cook_minutes, total_minutes, categories, cuisines, keywords, author, author_url, rating, nutrition e images, cada um null ou vazio onde a página não enuncia nada. yield diz para quantas a receita foi escrita e para quantas foi ajustada; uma página que não enuncia nenhum número de porções retorna com factor em 1 e uma nota que o diz. Cada linha de ingredients carrega scaling, que vale scaled, rounded ou unscaled, e is_equipment, que marca uma linha nomeando um utensílio em vez de algo que se come.

search_recipes

Busca receitas por prato ou ingrediente.

ArgumentoTipoObrigatórioO que ele faz
querystring, 1 a 120 caracteressimUm prato ou ingrediente, em espanhol.
limitinteiro, 1 a 60nãoLinhas a retornar.

Em retorno: linhas carregando id, que get_recipe pega, title, url e image_url. Ao lado vêm result_count para as linhas retornadas e total_available, sempre null: o site não publica nenhuma contagem do que uma busca encontrou. O site serve sua busca em uma única página e responde a uma solicitação de segunda página com a primeira idêntica, portanto essas são todas as linhas que ele oferece para essa consulta. Algumas linhas são artigos que reúnem receitas, o que get_recipe retorna como um collection.

list_facets

Lista os valores pelos quais o site percorre suas receitas, lidos no mapa do site que cada taxonomia publica.

ArgumentoTipoObrigatórioO que ele faz
facetstring, 1 caractere ou maisnãoUma taxonomia. As oito quando ausente.

As taxonomias são dieta, edad, ingrediente, ocasion, recetas-de, tecnica, tipo-de-cocina e tipo-plato: o regime, a idade de quem come, o ingrediente principal, a ocasião, o momento do dia, o aparelho, a culinária e o tipo de prato.

Em retorno: facets, cada uma carregando name, value_count e values, das quais value é o slug que browse_recipes pega. Os valores mantêm a ordem na qual o site os publica. Ler as oito custa uma consulta por taxonomia. Uma taxonomia que não pôde ser lida é nomeada em notes e deixada fora de facets, para que uma lista amputada de uma taxonomia não se leia como um site que teria sete.

browse_recipes

Lê uma página das receitas de uma taxonomia.

ArgumentoTipoObrigatórioO que ele faz
facetstring, 1 caractere ou maissimA taxonomia a percorrer.
valuestring, 1 a 120 caracteressimUm slug de list_facets, como thermomix.
pageinteiro, 1 a 200nãoA página a ler, a primeira por padrão.

Em retorno: linhas da forma que search_recipes retorna, com page_served para a página que o site serviu, has_more para saber se sua paginação oferece outra, e total_available, sempre null porque o site não imprime nenhuma contagem nessas páginas. O site escreve seus próprios slugs, portanto um slug construído manualmente alcança uma página que ele não contém e retorna em not_found. As taxonomias não se cruzam: o site não oferece nenhum meio de pedir duas ao mesmo tempo.

scale_ingredients

Ajusta uma lista de linhas de ingredientes espanholas. Ele não acessa nenhum site.

ArgumentoTipoObrigatórioO que ele faz
ingredientsarray de 1 a 200 stringssimAs linhas a ajustar.
factornúmero, maior que 0 até 1000umPelo que multiplicar as quantidades.
from_servingsinteiro, 1 a 1000umPara quantas a lista foi escrita.
to_servingsinteiro, 1 a 1000umPara quantas deve servir.
Forneça factor, ou from_servings e to_servings juntos. Nomear as duas
maneiras ao mesmo tempo é recusado, porque elas podem pedir duas coisas
diferentes.

Em retorno: cada linha com text tal como está agora, original tal como foi fornecida, amount, amount_max, unit, e scaling, que carrega a honestidade da resposta: scaled quando a aritmética caiu certa, rounded quando o valor mudou para continuar sendo uma quantidade que uma cozinha mede, unscaled quando a linha não carrega nenhuma quantidade. is_equipment marca uma linha que nomeia um utensílio. Ao lado vêm scaled_count, rounded_count e unscaled_count. Nada é convertido de um sistema de unidades para outro, e uma medida aproximada como uma pizca mantém o tamanho que o cozinheiro lhe dá.

Configuração

VariávelPadrãoLimitesO que ela faz
PQR_USER_AGENTnão definidoPrefixado ao User-Agent do servidor.
PQR_MIN_INTERVAL_MS30003000 a 60000Milissegundos entre duas requisições.
PQR_TIMEOUT_MS200001000 a 120000Duração máxima de uma requisição.
PQR_MAX_RETRIES30 a 8Tentativas em uma requisição sem resposta.
PQR_CACHE_TTL_MS9000000 a 86400000Duração de conservação de uma leitura. Zero desliga o cache.
PQR_CACHE_MAX_ENTRIES2001 a 5000Leituras guardadas de uma vez.
PQR_LOG_LEVELerrorsilent, error, info, debugO que vai para stderr.

O intervalo tem um piso de 3000 milissegundos. Um valor abaixo disso é recusado e o padrão se aplica, o que é dito no stderr em vez de aplicado em silêncio.

Erros

CódigoO que isso significaO próximo passo
not_foundO site não tem nada nesse endereço.Verificar o slug com search_recipes.
invalid_inputOs argumentos não podem produzir uma requisição.A mensagem nomeia o argumento.
rate_limitedO site pediu para desacelerar.Esperar e pedir de novo. A coisa pedida ainda existe.
parse_failureUma página chegou em uma forma ilegível.Reportar; o site pode ter mudado.
network_errorA requisição não foi concluída.Tentar de novo.
timeoutNenhuma resposta chegou a tempo.Tentar de novo, ou ampliar PQR_TIMEOUT_MS.

Como biblioteca

A camada de leitura é publicada sozinha, com seu ritmo, seu cache e seu vocabulário de erros, sem protocolo anexado.

import { PequerecetasClient } from "mcp-pequerecetas/client";

const client = new PequerecetasClient();
const read = await client.getRecipe("paella-de-marisco");

Construído sem nada, ele pega suas configurações do ambiente e envia seus diagnósticos para stderr. loadConfig e createLogger vêm do mesmo ponto de entrada para quem prefere fixá-los no código:

import { createLogger, loadConfig, PequerecetasClient } from "mcp-pequerecetas/client";

const client = new PequerecetasClient({
  config: { ...loadConfig(), minIntervalMs: 5000 },
  logger: createLogger("debug"),
});

Toda leitura retorna { data, cached }, e cached diz se a resposta vem do cache em vez do site.

Ritmo e atribuição

Uma requisição por vez, três segundos de intervalo, e o intervalo se amplia quando o site pede espaço. O User-Agent carrega o nome do projeto, sua versão e um endereço para contatar uma pessoa.

Pequerecetas é lido gratuitamente e paga sua hospedagem. Quando se mostra uma receita a alguém, credita-se o site e se linka a página de onde ela vem.

Este servidor não é afiliado ao Pequerecetas.

Privacidade

Nada é coletado. O servidor lê www.pequerecetas.com e nenhum outro host, guarda o que leu em memória por quinze minutos por padrão, não escreve nada em disco, e envia seus diagnósticos para stderr. Ele não carrega nenhum identificador, já que o site não pede nenhum. Veja PRIVACY.md.

Desenvolvimento

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

O corpus que a suíte lê é escrito por scripts/build-fixtures.mjs e contém receitas inventadas, então nenhum conteúdo de terceiros é armazenado aqui. Uma suíte em direto roda atrás de PQR_LIVE=1, uma requisição por rota.

Contribuindo

Issues e pull requests são bem-vindas. Veja CONTRIBUTING.md.

Licença

MIT. Veja LICENSE.