Ptitchef

Pesquise receitas do Ptitchef, leia uma e reescalone para qualquer número de porções. Sem chave de API.

Documentação

mcp-ptitchef

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

Ptitchef é um site de culinária francês onde cozinheiros caseiros publicam suas receitas. Cada uma traz seus ingredientes, seus passos, frequentemente fotografados um a um, seus tempos de preparo e cozimento, seu custo, seus valores nutricionais e as avaliações deixadas pelos leitores. O site arquiva suas receitas em uma árvore de famílias de ingredientes e publica muitas delas em vários idiomas.

Este servidor conecta um cliente de chat a esse site. Você pode percorrer a árvore de categorias, pesquisar receitas por prato ou ingrediente, navegar por uma categoria ou por uma das listas fixas do site, perguntar o que pode ser feito com o que está na geladeira, ler uma receita com seus ingredientes reajustados para o número de pessoas à sua mesa e descobrir os outros idiomas em que uma receita foi publicada. Ele não exige chave de API nem conta.

Versão em francês


Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

claude mcp add ptitchef -- npx -y mcp-ptitchef

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

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

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

Com Docker

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

-i mantém o stdin aberto, que é por onde o protocolo trafega, e -t fica de fora porque um TTY reescreve o fluxo. O contêiner precisa de HTTPS de saída para www.ptitchef.com, e nada mais: sem volume, sem porta, sem credencial.

Pacote, sem npm

Baixe mcp-ptitchef-1.0.1.mcpb de o lançamento mais recente e abra-o. Um cliente que suporte 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

  • « Qu'est-ce que Ptitchef a comme recettes de chou kale ? »
  • "O que posso cozinhar com abobrinha, feta e hortelã?"
  • "Leia para mim esse gratinado para oito pessoas."
  • "Mostre-me as receitas mais bem avaliadas do site."
  • "Essa receita também é publicada em espanhol?"

Ptitchef é um site francês, então suas receitas são encontradas em francês. O caminho comum vai de uma listagem a uma receita: uma linha carrega um id, e get_recipe recebe esse id.

Ferramentas

FerramentaO que ela faz
list_categoriesPercorre a árvore de famílias de ingredientes sob as quais o site arquiva.
search_recipesEncontra receitas por prato ou ingrediente.
browse_recipesLê uma página de categoria por página, ou uma lista fixa.
search_by_ingredientsResponde o que pode ser feito com o que um cozinheiro já tem.
get_recipeLê uma receita, reajustada para um número de porções sob pedido.
scale_ingredientsReajusta qualquer lista de ingredientes, sem pedido ao site.
get_recipe_translationsLista os outros idiomas em que uma receita foi publicada.

Comece em list_categories. O site fornece os endereços corretos, o que evita construir um manualmente: um endereço construído assim cai na página inicial do site.

list_categories

Lê a árvore sob a qual o site arquiva suas receitas. Chamado sem argumento, ele retorna as famílias; passe o slug de uma família de volta como family para ler o que ela contém.

ArgumentoTipoObrigatórioO que faz
familystring, 1 a 80 caracteresnãoO slug de uma família, para ler as categorias sob ela.
limitinteiro, 1 a 200, padrão 20nãoLinhas a servir.

Em retorno: linhas carregando slug, que volta como family ou como category; title na própria redação do site; url; description, que é null onde a página não traz nenhuma; e sample_children para as categorias um nível abaixo.

search_recipes

Pesquisa as receitas por um prato ou ingrediente.

ArgumentoTipoObrigatórioO que faz
querystring, 1 a 120 caracteressimUm prato ou ingrediente, em francês.
limitinteiro, 1 a 100, padrão 20nãoLinhas a servir.

Em retorno: results, linhas carregando id, title, url, image_url, rating, rating_count e review_count, um contador para o qual a página não imprime nada por ser null. O envelope diz como o site respondeu: kindcategory quando a resposta veio de uma página de categoria própria, cujo total_available conta toda aquela categoria, e free_text quando o site respondeu em seus próprios termos em uma única página, onde o total conta as linhas servidas. Esses dois totais contam coisas diferentes. kind também lê guide para um tópico escrito à mão pelo site, onde as linhas carregam um nome e um endereço e nenhum total existe. Junto vêm result_count, rows_seen, page, single_page e url. Uma listagem marcada como single_page cujo total excede rows_seen tem um restante que o site conta e não serve.

browse_recipes

Lê uma página de categoria por página, ou uma das listas fixas do site.

ArgumentoTipoObrigatórioO que faz
categorystring, 1 a 120 caracteresnãoUm slug de categoria, como list_categories o publicou.
listinglatest, top_rated ou most_viewednãoUma lista fixa, lida em vez de uma categoria.
pageinteiro, 1 a 1000nãoA página de uma categoria a ler. Uma lista fixa tem uma página.
limitinteiro, 1 a 100, padrão 20nãoLinhas a servir.

Em retorno: o envelope search_recipes retorna, com kind lendo category, standing ou topic. page é a página que o site serviu, que é a primeira novamente quando a página pedida está além da última.

search_by_ingredients

Responde o que pode ser feito com os ingredientes que um cozinheiro já tem.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 5 strings, 1 a 60 caracteressimOs ingredientes disponíveis, em francês.
limitinteiro, 1 a 100, padrão 20nãoLinhas a servir.

Em retorno: o envelope que as outras listagens retornam, com kind lendo fridge. O site faz a correspondência em seu próprio vocabulário, então um ingrediente que ele escreve de forma diferente estreita a resposta em vez de ampliá-la.

get_recipe

Lê uma receita completa e reajusta seus ingredientes quando um número de porções é fornecido.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 300 caracteressimO id de uma linha de uma pesquisa ou listagem.
servingsinteiro, 1 a 500nãoReajusta os ingredientes para este número de porções.

Em retorno: title, url, description, image_url, category, cuisine, difficulty na própria redação do site, author, published, modified, rating, rating_count, review_count, prep_minutes, cook_minutes, total_minutes, nutrition como publicado para o tamanho de porção que ele nomeia, estimated_cost, keywords, faq e translations, cada null onde a página não declara nada. steps carrega o método uma linha por passo, e illustrated_steps os mesmos passos com a fotografia que o site tirou de cada um. yield diz para o que a receita foi escrita e para o que foi reajustada. Cada ingrediente carrega scaling, que lê scaled, rounded ou unscaled: leia-o antes de citar uma quantidade, já que rounded foi movido para permanecer utilizável em uma cozinha.

scale_ingredients

Aplica a mesma aritmética a qualquer lista de linhas de ingredientes em francês, sem pedido ao site.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 100 strings, até 300 caracteressimAs linhas a reajustar, em francês.
factornúmero, acima de 0 e até 100um de doisO multiplicador a aplicar.
from_servingsnúmero, acima de 0 e até 500um de doisPara quantas porções a lista foi escrita.
to_servingsnúmero, acima de 0 e até 500um de doisQuantas porções são desejadas.

Passe factor, ou o par from_servings e to_servings.

Em retorno: o factor usado, o ingredients reajustado na forma get_recipe retorna, e scaled_count, rounded_count e unscaled_count.

get_recipe_translations

Lista os outros idiomas em que uma receita foi publicada, usando o pareamento que o site publica ele mesmo.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 300 caracteressimO id de uma linha de uma pesquisa ou listagem.

Em retorno: translations, cada um carregando a tag language que o site publica e o url daquela versão, com translation_count e o url da página francesa de onde foram lidos.

Reajustando as quantidades

Uma quantidade é declarada na unidade que lhe convém, então uma linha pode voltar em uma unidade diferente daquela que a receita usou: 200 g multiplicado por vinte lê 4 kg.

O quão finamente um ingrediente pode ser dividido depende do que ele é. Uma baguete pode ser cortada em dois, em três ou em quatro; um ovo não pode ser repartido. Uma quantidade que cai entre os dois é arredondada, e a receita reajustada então se afasta um pouco das proporções do original. A linha carrega rounded, e seu note diz o que foi feito. As figuras são a aritmética deste servidor, então diga que foram recalculadas quando você as exibe. Uma receita cuja página não informa número de porções não pode ser adaptada para um número de pessoas, e a resposta diz isso.

Configuração

Todas as variáveis são opcionais. Defina-as no bloco env da configuração do seu cliente.

VariávelPadrãoO que faz
PTC_USER_AGENTa identidade do projetoNomeia seu aplicativo para o site, com um endereço onde uma pessoa pode ser contatada.
PTC_MIN_INTERVAL_MS1500Intervalo entre duas requisições, de 1000 a 60000.
PTC_TIMEOUT_MS20000Prazo para uma requisição, de 1000 a 120000.
PTC_MAX_RETRIES3Tentativas após uma falha transitória, de 0 a 8.
PTC_CACHE_TTL_MS900000Quanto tempo uma página permanece na memória, de 0 a 86400000.
PTC_CACHE_MAX_ENTRIES200Páginas mantidas na memória de uma vez, de 1 a 5000.
PTC_MAX_BODY_BYTES8000000A maior resposta lida por completo, de 100000 a 64000000.
PTC_BUDGET_MS60000O tempo que uma leitura deve aguardar uma resposta, incluindo novas tentativas e esperas, de 5000 a 600000.
PTC_LOG_LEVELerrorsilent, error, info ou debug, escrito em stderr.

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

Erros

Toda falha carrega um de seis códigos, uma mensagem e, quando ajuda, uma dica indicando o próximo passo.

CódigoO que aconteceuO que fazer
not_foundO site respondeu e não contém tal receita ou página.Verifique o slug com list_categories, ou o id com uma busca.
invalid_inputOs argumentos foram recusados antes de qualquer requisição sair.Leia a mensagem, que nomeia o argumento.
rate_limitedO site pediu que este cliente diminuísse o ritmo.Aguarde o número de segundos que a dica indica e chame novamente com os mesmos argumentos. A receita ainda está lá.
parse_failureA página carregou e o conteúdo esperado estava ausente.Reporte em o rastreador de problemas.
network_errorA requisição não foi concluída.Tente novamente em breve.
timeoutA requisição passou do prazo ou do orçamento.Aumente PTC_TIMEOUT_MS ou PTC_BUDGET_MS, ou peça menos linhas.

Como biblioteca

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

import { PtitchefClient } from "mcp-ptitchef/client";

const client = new PtitchefClient();
const { data, cached } = await client.listCategories();
console.log(data.results.length, cached);

listCategories, searchRecipes, browseRecipes, searchByIngredients e getRecipe cada um responde { data, cached }, e lançam um erro carregando um dos seis códigos. O intervalo mínimo entre duas requisições também se aplica aqui.

Ritmo e atribuição

As requisições saem uma de cada vez com pelo menos um segundo e meio entre elas, e o mínimo de um segundo se mantém 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.

Todo resultado carrega o endereço da página de onde foi lido, e source nomeia o site. Receitas, títulos e categorias pertencem ao Ptitchef e aos cozinheiros que os escreveram.

Este servidor MCP é um projeto não oficial, sem afiliação com o Ptitchef.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda na sua máquina, contata www.ptitchef.com e nada mais, mantém suas respostas na memória enquanto roda e não grava nada em disco. 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

Os 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 uma issue primeiro ajuda a concordar sobre a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. As receitas pertencem ao Ptitchef e aos seus autores.


mcp-ptitchef (francês)

Versão em inglês

Ptitchef é um site de culinária francês onde cozinheiros publicam suas receitas. Cada uma dá seus ingredientes, seus passos, frequentemente fotografados um a um, seus tempos de preparo e cozimento, seu custo, seus valores nutricionais e as notas deixadas por seus leitores. O site classifica suas receitas em uma árvore de famílias de ingredientes e publica muitas em vários idiomas.

Este servidor conecta um cliente de conversa a este site. Pode-se percorrer a árvore das categorias, buscar receitas por prato ou por ingrediente, ler uma categoria ou uma das listas permanentes do site, perguntar o que se pode fazer com o que há na geladeira, ler uma receita com seus ingredientes adaptados ao número de convidados e encontrar os outros idiomas nos quais uma receita foi publicada. Nenhuma chave de API, nenhuma conta.

Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

claude mcp add ptitchef -- npx -y mcp-ptitchef

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

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

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

Com Docker

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

-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 www.ptitchef.com, e nada mais: nenhum volume, nenhuma porta, nenhum identificador.

Bundle, sem npm

Baixe mcp-ptitchef-1.0.1.mcpb de a última publicação e abra-o. 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

  • « O que o Ptitchef tem como receitas de couve kale? »
  • « O que posso cozinhar com abobrinhas, feta e hortelã? »
  • « Leia este gratinado para oito pessoas. »
  • « Mostre-me as receitas mais bem avaliadas do site. »
  • « Esta receita também existe em espanhol? »

Ptitchef é um site francês, então suas receitas são encontradas em francês. O caminho comum vai de uma lista a uma receita: uma linha carrega um id, e get_recipe retoma esse identificador.

As ferramentas

FerramentaO que faz
list_categoriesPercorre a árvore das famílias de ingredientes do site.
search_recipesEncontra receitas por prato ou por ingrediente.
browse_recipesLê uma categoria página por página, ou uma lista permanente.
search_by_ingredientsResponde com o que se pode fazer com o que um cozinheiro já tem.
get_recipeLê uma receita, adaptada a um número de porções sob demanda.
scale_ingredientsAdapta qualquer lista de ingredientes, sem requisição ao site.
get_recipe_translationsLista os outros idiomas nos quais uma receita foi publicada.

Comece por list_categories. O site dá os endereços corretos, o que evita construir um manualmente: um endereço construído assim leva à página inicial do site.

list_categories

Lê a árvore sob a qual o site classifica suas receitas. Chamado sem argumento, ele retorna as famílias; forneça novamente o slug de uma família em family para ler o que ela contém.

ArgumentoTipoObrigatórioO que faz
familystring, 1 a 80 caracteresnãoO slug de uma família, para ler as categorias abaixo.
limitinteiro, 1 a 200, padrão 20nãoLinhas a servir.

Em retorno: linhas carregando slug, que se fornece novamente em family ou em category ; title nos termos do site ; url ; description, null onde a página não as carrega ; e sample_children para as categorias do nível inferior.

search_recipes

Busca receitas por prato ou por ingrediente.

ArgumentoTipoObrigatórioO que faz
querystring, 1 a 120 caracteressimUm prato ou ingrediente, em francês.
limitinteiro, 1 a 100, padrão 20nãoLinhas a servir.

Em retorno: results, linhas carregando id, title, url, image_url, rating, rating_count e review_count, um contador que a página não imprime valendo null. O envelope diz como o site respondeu: kind vale category quando a resposta vem de uma página de categoria, cujo total_available conta toda a categoria, e free_text quando o site respondeu à sua maneira em uma única página, onde o total conta as linhas servidas. Esses dois totais contam coisas diferentes. kind também vale guide para um dossiê que o site escreveu manualmente, onde as linhas carregam um nome e um endereço sem que nenhum total exista. Vêm também result_count, rows_seen, page, single_page e url. Uma lista marcada single_page cujo total excede rows_seen tem um resto que o site conta e não serve.

browse_recipes

Lê uma categoria página por página, ou uma das listas permanentes do site.

ArgumentoTipoObrigatórioO que faz
categorystring, 1 a 120 caracteresnãoUm slug de categoria, publicado por list_categories.
listinglatest, top_rated ou most_viewednãoUma lista permanente, lida no lugar de uma categoria.
pageinteiro, 1 a 1000nãoA página da categoria a ser lida. Uma lista permanente tem apenas uma.
limitinteiro, 1 a 100, padrão 20nãoLinhas a serem servidas.

Em retorno: o envelope que search_recipes retorna, com kind valendo category, standing ou topic. page é a página que o site serviu, que é a primeira novamente quando a página solicitada ultrapassa a última.

search_by_ingredients

Responde com o que se pode fazer com os ingredientes que um cozinheiro já tem.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 5 strings, 1 a 60 caracteressimOs ingredientes disponíveis, em francês.
limitinteiro, 1 a 100, padrão 20nãoLinhas a serem servidas.

Em retorno: o envelope das outras listas, com kind valendo fridge. O site faz corresponder seu próprio vocabulário, portanto um ingrediente que ele escreve de outra forma restringe a resposta em vez de ampliá-la.

get_recipe

Lê uma receita inteira e adapta seus ingredientes quando um número de porções é fornecido.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 300 caracteressimO id de uma linha de pesquisa ou de lista.
servingsinteiro, 1 a 500nãoAdapta os ingredientes para esse número de porções.

Em retorno: title, url, description, image_url, category, cuisine, difficulty nos termos do site, author, published, modified, rating, rating_count, review_count, prep_minutes, cook_minutes, total_minutes, nutrition tal como publicada para a porção que ela nomeia, estimated_cost, keywords, faq e translations, cada um null onde a página não indica nada. steps traz o método uma linha por etapa, e illustrated_steps as mesmas etapas com a fotografia que o site tirou de cada uma. yield diz para o que a receita foi escrita e para o que foi adaptada. Cada ingrediente traz scaling, que vale scaled, rounded ou unscaled: leia-o antes de citar uma quantidade, rounded tendo sido movida para permanecer utilizável na cozinha.

scale_ingredients

Aplica a mesma aritmética a qualquer lista de ingredientes em francês, sem consulta ao site.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 100 strings, até 300 caracteressimAs linhas a adaptar, em francês.
factornúmero, acima de 0 até 100um dos doisO multiplicador a aplicar.
from_servingsnúmero, acima de 0 até 500um dos doisO número de porções da lista original.
to_servingsnúmero, acima de 0 até 500um dos doisO número de porções desejado.

Passe factor, ou o par from_servings e to_servings.

Em retorno: o factor usado, os ingredients adaptados na forma que get_recipe retorna, e scaled_count, rounded_count e unscaled_count.

get_recipe_translations

Lista os outros idiomas nos quais uma receita foi publicada, com base no pareamento que o próprio site publica.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 300 caracteressimO id de uma linha de pesquisa ou de lista.

Em retorno: translations, cada uma trazendo o rótulo language que o site publica e o url dessa versão, com translation_count e o url da página francesa de onde foram lidas.

A adaptação das quantidades

Uma quantidade é expressa na unidade que lhe convém. Após a adaptação, uma linha pode, portanto, aparecer em outra unidade que não a da receita: 200 g multiplicados por vinte resultam em 4 kg.

A fineza com que um ingrediente é cortado depende de sua natureza. Uma baguete se corta em dois, em três ou em quatro; um ovo não se divide. Uma quantidade que cai entre os dois é, portanto, arredondada, e a receita adaptada se afasta então um pouco das proporções da original. A linha traz rounded, e sua note diz o que foi feito.

Os números são a aritmética deste servidor, portanto diga que foram recalculados quando você os mostrar. Uma receita cuja página não indica nenhum número de porções não pode ser ajustada para um número de convidados, e a resposta diz isso.

Configuração

Cada variável é opcional. Elas são definidas no bloco env da configuração do cliente.

VariávelPadrãoO que faz
PTC_USER_AGENTa identidade do projetoNomeia seu aplicativo junto ao site, com um endereço para contatar uma pessoa.
PTC_MIN_INTERVAL_MS1500Intervalo entre duas requisições, de 1000 a 60000.
PTC_TIMEOUT_MS20000Tempo limite de uma requisição, de 1000 a 120000.
PTC_MAX_RETRIES3Tentativas após uma falha temporária, de 0 a 8.
PTC_CACHE_TTL_MS900000Duração durante a qual uma página permanece em memória, de 0 a 86400000.
PTC_CACHE_MAX_ENTRIES200Páginas mantidas em memória por vez, de 1 a 5000.
PTC_MAX_BODY_BYTES8000000A maior resposta lida por inteiro, de 100000 a 64000000.
PTC_BUDGET_MS60000O tempo no qual uma leitura deve retornar uma resposta, incluindo repetições e esperas, de 5000 a 600000.
PTC_LOG_LEVELerrorsilent, error, info ou debug, escrito na saída de erro.

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

Erros

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

CódigoO que aconteceuO que fazer
not_foundO site respondeu e não tem nem esta receita nem esta página.Verifique o slug com list_categories, ou o identificador com uma pesquisa.
invalid_inputOs argumentos foram recusados antes de qualquer requisição.Leia a mensagem, que nomeia o argumento.
rate_limitedO site pede que este cliente desacelere.Aguarde os segundos indicados e chame novamente com os mesmos argumentos. A receita ainda está lá.
parse_failureA página carregou e o conteúdo esperado está ausente.Reporte em o rastreador de incidentes.
network_errorA requisição não foi concluída.Tente novamente em breve.
timeoutA requisição excedeu seu tempo limite ou seu orçamento.Aumente PTC_TIMEOUT_MS ou PTC_BUDGET_MS, ou peça menos linhas.

Como biblioteca

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

import { PtitchefClient } from "mcp-ptitchef/client";

const client = new PtitchefClient();
const { data, cached } = await client.listCategories();
console.log(data.results.length, cached);

listCategories, searchRecipes, browseRecipes, searchByIngredients e getRecipe respondem cada um { data, cached }, e lançam um erro com um dos seis códigos. O intervalo mínimo entre duas requisições também se aplica aqui.

Ritmo e atribuição

As requisições partem uma a uma com pelo menos um segundo e meio entre elas, e o intervalo mínimo de um segundo se mantém independentemente da configuração. O User-Agent sempre termina com a identidade do projeto e um endereço para contatar uma pessoa.

Cada resultado traz o endereço da página de onde foi lido, e source nomeia o site. As receitas, os títulos e as categorias pertencem à Ptitchef e aos cozinheiros que as escreveram.

Este MCP é um projeto não oficial, sem afiliação à Ptitchef.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda na sua máquina, contata apenas www.ptitchef.com, mantém suas respostas em memória enquanto roda e não escreve nada no disco. PRIVACY.md diz o que uma requisição carrega e quais ajustes mudam 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

Anomalias, perguntas e ideias têm seu lugar em o rastreador de incidentes. As propostas de modificação são bem-vindas; abrir um ticket primeiro ajuda a concordar sobre a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. As receitas pertencem à Ptitchef e aos seus autores.