Pequerecetas
Leia receitas familiares espanholas do Pequerecetas e reescalone-as honestamente. Sem chave de API.
Documentação
mcp-pequerecetas
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.
Instalação
Instalação em um clique
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
| Ferramenta | O que faz |
|---|---|
get_recipe | Lê uma página da seção de receitas, redimensionada sob solicitação. |
search_recipes | Encontra receitas por prato ou por ingrediente. |
list_facets | Lista os valores que cada taxonomia publica. |
browse_recipes | Lê uma taxonomia, página por página. |
scale_ingredients | Redimensiona 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.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
id | string, 1 a 200 caracteres | sim | O slug no endereço de uma receita, como uma linha o carrega. |
servings | inteiro, 1 a 1000 | não | Redimensiona 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.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
query | string, 1 a 120 caracteres | sim | Um prato ou ingrediente, em espanhol. |
limit | inteiro, 1 a 60 | não | Linhas 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.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
facet | string, 1 caractere ou mais | não | Uma 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.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
facet | string, 1 caractere ou mais | sim | A taxonomia a navegar. |
value | string, 1 a 120 caracteres | sim | Um slug de list_facets, como thermomix. |
page | inteiro, 1 a 200 | não | Qual 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.
| Argumento | Tipo | Obrigatório | O que faz |
|---|---|---|---|
ingredients | array de 1 a 200 strings | sim | As linhas a redimensionar, como escritas. |
factor | número, maior que 0 até 1000 | um de | Pelo que multiplicar as quantidades. |
from_servings | inteiro, 1 a 1000 | um de | Para quantas a lista foi escrita. |
to_servings | inteiro, 1 a 1000 | um de | Para quantas deve servir. |
Dê 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ável | Padrão | Limites | O que faz |
|---|---|---|---|
PQR_USER_AGENT | não definido | Prefixado ao User-Agent próprio deste servidor. | |
PQR_MIN_INTERVAL_MS | 3000 | 3000 a 60000 | Milissegundos entre duas solicitações. |
PQR_TIMEOUT_MS | 20000 | 1000 a 120000 | Quanto tempo uma solicitação pode levar. |
PQR_MAX_RETRIES | 3 | 0 a 8 | Tentativas de uma solicitação que o site não respondeu. |
PQR_CACHE_TTL_MS | 900000 | 0 a 86400000 | Quanto tempo uma leitura é mantida. Zero desliga o armazenamento. |
PQR_CACHE_MAX_ENTRIES | 200 | 1 a 5000 | Leituras mantidas de uma vez. |
PQR_LOG_LEVEL | error | silent, error, info, debug | O 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ódigo | O que significa | O que fazer |
|---|---|---|
not_found | O site não contém nada nesse endereço. | Verifique o slug em relação a search_recipes. |
invalid_input | Os argumentos não podem gerar uma solicitação. | A mensagem nomeia o argumento. |
rate_limited | O site pediu que este cliente diminuísse o ritmo. | Aguarde e tente novamente. A coisa solicitada ainda existe. |
parse_failure | Uma página chegou em um formato que não pode ser lido. | Reporte; o site pode ter mudado. |
network_error | A solicitação não pôde ser concluída. | Tente novamente. |
timeout | Nenhuma 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)
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
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
| Ferramenta | O que ela faz |
|---|---|
get_recipe | Lê uma página da seção de receitas, ajustada sob demanda. |
search_recipes | Encontra receitas por prato ou ingrediente. |
list_facets | Lista os valores que cada taxonomia publica. |
browse_recipes | Lê uma taxonomia, página por página. |
scale_ingredients | Ajusta 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.
| Argumento | Tipo | Obrigatório | O que ele faz |
|---|---|---|---|
id | string, 1 a 200 caracteres | sim | O slug no endereço de uma receita. |
servings | inteiro, 1 a 1000 | não | Ajusta 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.
| Argumento | Tipo | Obrigatório | O que ele faz |
|---|---|---|---|
query | string, 1 a 120 caracteres | sim | Um prato ou ingrediente, em espanhol. |
limit | inteiro, 1 a 60 | não | Linhas 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.
| Argumento | Tipo | Obrigatório | O que ele faz |
|---|---|---|---|
facet | string, 1 caractere ou mais | não | Uma 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.
| Argumento | Tipo | Obrigatório | O que ele faz |
|---|---|---|---|
facet | string, 1 caractere ou mais | sim | A taxonomia a percorrer. |
value | string, 1 a 120 caracteres | sim | Um slug de list_facets, como thermomix. |
page | inteiro, 1 a 200 | não | A 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.
| Argumento | Tipo | Obrigatório | O que ele faz |
|---|---|---|---|
ingredients | array de 1 a 200 strings | sim | As linhas a ajustar. |
factor | número, maior que 0 até 1000 | um | Pelo que multiplicar as quantidades. |
from_servings | inteiro, 1 a 1000 | um | Para quantas a lista foi escrita. |
to_servings | inteiro, 1 a 1000 | um | Para 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ável | Padrão | Limites | O que ela faz |
|---|---|---|---|
PQR_USER_AGENT | não definido | Prefixado ao User-Agent do servidor. | |
PQR_MIN_INTERVAL_MS | 3000 | 3000 a 60000 | Milissegundos entre duas requisições. |
PQR_TIMEOUT_MS | 20000 | 1000 a 120000 | Duração máxima de uma requisição. |
PQR_MAX_RETRIES | 3 | 0 a 8 | Tentativas em uma requisição sem resposta. |
PQR_CACHE_TTL_MS | 900000 | 0 a 86400000 | Duração de conservação de uma leitura. Zero desliga o cache. |
PQR_CACHE_MAX_ENTRIES | 200 | 1 a 5000 | Leituras guardadas de uma vez. |
PQR_LOG_LEVEL | error | silent, error, info, debug | O 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ódigo | O que isso significa | O próximo passo |
|---|---|---|
not_found | O site não tem nada nesse endereço. | Verificar o slug com search_recipes. |
invalid_input | Os argumentos não podem produzir uma requisição. | A mensagem nomeia o argumento. |
rate_limited | O site pediu para desacelerar. | Esperar e pedir de novo. A coisa pedida ainda existe. |
parse_failure | Uma página chegou em uma forma ilegível. | Reportar; o site pode ter mudado. |
network_error | A requisição não foi concluída. | Tentar de novo. |
timeout | Nenhuma 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.