Wikibooks Cookbook

Pesquise no Wikibooks Cookbook, leia uma receita e redimensione-a para qualquer número de porções.

Documentação

mcp-wikibooks-cookbook

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

O Cookbook é a coleção de receitas do Wikibooks em inglês, um projeto da Wikimedia. Milhares de receitas são escritas e mantidas lá de forma aberta, cada uma com seus ingredientes, os equipamentos necessários, seus passos, as dicas e variações que seus autores adicionaram e as categorias em que se enquadra: uma culinária, um tipo de prato, um ingrediente principal. As páginas são publicadas sob a licença Creative Commons Atribuição-CompartilhaIgual 4.0.

Este servidor conecta um cliente de chat a essa coleção. Você pode pesquisar as receitas por prato ou por ingrediente, listá-las por culinária, tipo de prato ou ingrediente principal, ler uma com os ingredientes redimensionados para o número de pessoas à sua mesa e redimensionar qualquer lista de ingredientes sua. Ele não precisa de chave de API nem de conta.

Versão francesa


Instalação

Instalação com um clique

Install in Cursor Install in VS Code

Claude Code

claude mcp add wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

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

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

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

Com Docker

{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-wikibooks-cookbook:2.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 api.wikimedia.org e nada mais: sem volume, sem porta, sem credencial.

Pacote, sem npm

Baixe mcp-wikibooks-cookbook-2.0.1.mcpb de a versão 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

  • "Encontre uma receita de carbonara no Cookbook."
  • "Leia para seis pessoas em vez de quatro."
  • "Quais sopas tailandesas a coleção possui?"
  • "Quais receitas são feitas com lentilha?"
  • "Redimensione esta lista de ingredientes por 2,5 para mim."

O caminho comum vai de uma pesquisa a uma leitura: uma linha carrega um id, a chave da página, e get_recipe usa essa chave.

Ferramentas

FerramentaO que faz
search_recipesEncontra receitas por prato ou por ingrediente.
get_recipeLê uma receita, redimensionada para um número de porções sob solicitação.
scale_ingredientsRedimensiona qualquer lista de ingredientes, sem solicitação ao wiki.
list_recipesLista receitas por culinária, tipo de prato ou ingrediente principal.

search_recipes

Pesquisa o Cookbook, seja em todo o texto das páginas ou apenas nos títulos.

ArgumentoTipoObrigatórioO que faz
querystring, de 1 a 300 caracteressimUm prato, como carbonara, ou um ingrediente, como guanciale.
searchtext ou title, padrão textnãotext lê a página inteira; title corresponde apenas ao nome da página.
limitinteiro, de 1 a 50, padrão 10nãoLinhas a serem retornadas.

Em retorno: linhas com id, a chave da página que get_recipe usa; title; url; image_url; description, o resumo curto que o wiki mantém para uma página; e excerpt, a passagem correspondente com a marcação de destaque removida. Cada uma das três últimas é null quando a pesquisa não ofereceu nenhuma. total_available é sempre null: a rota de pesquisa não publica total nem paginação, então result_count conta as linhas que esta chamada retornou.

get_recipe

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

ArgumentoTipoObrigatórioO que faz
idstring, de 1 a 300 caracteressimA chave da página, como Cookbook:Spaghetti_alla_Carbonara.
servingsinteiro, de 1 a 500nãoRedimensiona os ingredientes para este número de porções.
max_description_charsinteiro, de 100 a 20000, padrão 1200nãoQuanto do texto da página deve ser retornado.

Em retorno: title, url, ingredients, equipment, steps, tips para as notas e variações que a página publica, prep_minutes, cook_minutes, total_minutes, time_text nas próprias palavras da página, time_phases, category e categories para cada categoria em que a página se enquadra. Um valor que a página não informa é null. id nomeia a página que foi lida, que difere da chave solicitada após um redirecionamento, e redirected_from então nomeia a chave que levou até lá. yield informa para o que a receita foi escrita e para o que foi redimensionada, e cada ingrediente carrega scaling, lendo scaled, rounded ou unscaled.

scale_ingredients

Aplica a mesma aritmética a qualquer lista de linhas de ingredientes, sem solicitação ao wiki.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 100 strings, até 300 caracteressimAs linhas a redimensionar.
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 redimensionado no formato que get_recipe retorna, e scaled_count, rounded_count e unscaled_count.

list_recipes

Lista receitas ao longo das categorias em que o Cookbook as arquiva. Os argumentos se combinam, e a resposta informa qual pesquisa foi construída a partir deles.

ArgumentoTipoObrigatórioO que faz
cuisinestring, até 80 caracteresnãoUma culinária ou um país, como Italian ou Thai.
dish_typestring, até 80 caracteresnãoUm tipo de prato, como soup, dessert ou bread.
main_ingredientstring, até 80 caracteresnãoO ingrediente no qual uma receita se baseia.
limitinteiro, de 1 a 50, padrão 15nãoLinhas a serem retornadas.

Em retorno: as linhas que search_recipes retorna, com query nomeando a pesquisa que este servidor construiu a partir dos argumentos, e cada argumento ecoado de volta ou null quando foi omitido.

Redimensionando as quantidades

Uma quantidade é expressa na unidade que lhe convém, então uma linha pode voltar em uma unidade diferente da que a receita usou: 200 g multiplicados por vinte leem 4 kg.

O quão finamente um ingrediente pode ser dividido depende do que ele é. Um pão pode ser cortado 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 redimensionada então se afasta um pouco das proporções da original. A linha carrega rounded, e sua nota informa o que foi feito.

Os valores são a aritmética deste servidor, então diga que foram recalculados quando você os exibir. Uma receita cuja página não informa número de porções não pode ser adaptada a um número de pessoas, e a resposta informa isso.

Licença e atribuição

As páginas do Cookbook são publicadas sob Creative Commons Atribuição-CompartilhaIgual 4.0. Repetir uma receita significa creditar o Wikibooks e a página de onde ela veio, e compartilhar o que for construído sobre ela sob a mesma licença. get_recipe retorna tanto license quanto a página url, então uma resposta carrega o crédito consigo.

Configuração

Toda variável é opcional. Defina-as no bloco env da configuração do seu cliente.

VariávelPadrãoO que faz
WB_USER_AGENTa identidade do projetoNomeia seu aplicativo para a Wikimedia, com um endereço onde uma pessoa pode ser contatada.
WB_MIN_INTERVAL_MS1000Intervalo entre duas solicitações, de 500 a 60000.
WB_TIMEOUT_MS20000Prazo para uma solicitação, de 1000 a 120000.
WB_MAX_RETRIES3Tentativas após uma falha transitória, de 0 a 8.
WB_CACHE_TTL_MS900000Por quanto tempo uma página permanece na memória, de 0 a 86400000.
WB_CACHE_MAX_ENTRIES200Páginas mantidas na memória de uma vez, de 1 a 5000.
WB_LOG_LEVELerrorsilent, error, info ou debug, escrito em stderr.

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

Erros

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

CódigoO que aconteceuO que fazer
not_foundO wiki respondeu e não contém essa página.Verifique a chave da página com search_recipes.
invalid_inputOs argumentos foram recusados antes de qualquer requisição ser enviada.Leia a mensagem, que nomeia o argumento.
rate_limitedA Wikimedia 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.Aumente WB_TIMEOUT_MS, ou peça menos linhas.

Como biblioteca

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

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search e getRecipe cada um responde a { data, cached }, e lançam um erro carregando um dos seis códigos. O intervalo 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 entre elas, e o intervalo de meio 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.

As leituras vão para api.wikimedia.org, o host que a Wikimedia documenta e mantém para desenvolvedores. Cada resultado carrega o endereço da página de onde foi lido, e a licença sob a qual é publicado.

Este servidor MCP é um projeto não oficial, sem afiliação com a Wikimedia ou com a comunidade Wikibooks.

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.wikimedia.org 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 serviço.

Contribuindo

Bugs, perguntas e ideias pertencem ao 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 para o código próprio deste servidor, veja LICENSE. As páginas do Cookbook pertencem aos seus autores e à comunidade Wikibooks, sob CC BY-SA 4.0.


mcp-wikibooks-cookbook (français)

Versão em inglês

O Cookbook é a coleção de receitas dos Wikibooks anglófonos, um projeto Wikimedia. Milhares de receitas são escritas e mantidas abertamente, cada uma com seus ingredientes, o equipamento que exige, seus passos, as dicas e variantes que seus autores adicionaram, e as categorias sob as quais se classifica: uma cozinha, um tipo de prato, um ingrediente principal. As páginas são publicadas sob Creative Commons Atribuição-CompartilhaIgual 4.0.

Este servidor conecta um cliente de conversa a essa coleção. Pode-se buscar receitas por prato ou ingrediente, listá-las por cozinha, tipo de prato ou ingrediente principal, ler uma com seus ingredientes adaptados ao número de convivas, e adaptar qualquer lista de ingredientes. 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 wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

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

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

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

Com Docker

{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-wikibooks-cookbook:2.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 api.wikimedia.org, e nada mais: nenhum volume, nenhuma porta, nenhuma credencial.

Bundle, sem npm

Baixe mcp-wikibooks-cookbook-2.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, portanto nada é baixado na instalação.

O que se pode pedir

  • « Encontre-me uma receita de carbonara no Cookbook. »
  • « Leia-a para seis pessoas em vez de quatro. »
  • « Quais sopas tailandesas a coleção contém? »
  • « Quais receitas são baseadas em lentilhas? »
  • « Multiplique esta lista de ingredientes por 2,5. »

O caminho comum vai de uma busca a uma leitura: uma linha carrega um id, a chave da página, e get_recipe retoma essa chave.

As ferramentas

FerramentaO que faz
search_recipesEncontra receitas por prato ou ingrediente.
get_recipeLê uma receita, adaptada a um número de porções sob demanda.
scale_ingredientsAdapta qualquer lista de ingredientes, sem consulta ao wiki.
list_recipesLista receitas por cozinha, tipo de prato ou ingrediente principal.

search_recipes

Busca no Cookbook, seja em todo o texto de suas páginas, seja apenas em seus títulos.

ArgumentoTipoObrigatórioO que faz
querystring, 1 a 300 caracteressimUm prato, como carbonara, ou um ingrediente, como guanciale.
searchtext ou title, padrão textnãotext lê a página inteira; title corresponde apenas ao nome da página.
limitinteiro, 1 a 50, padrão 10nãoLinhas a servir.

Em retorno: linhas carregando id, a chave da página que get_recipe retoma; title; url; image_url; description, a breve glosa que o wiki mantém para uma página; e excerpt, o trecho correspondente sem sua marcação de destaque. Cada um dos três últimos vale null onde a busca não propôs nenhum. total_available vale sempre null: a rota de busca não publica nem total nem paginação, portanto result_count conta as linhas renderizadas por esta chamada.

get_recipe

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

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 300 caracteressimA chave da página, como Cookbook:Spaghetti_alla_Carbonara.
servingsinteiro, 1 a 500nãoAdapta os ingredientes a esse número de porções.
max_description_charsinteiro, 100 a 20000, padrão 1200nãoA quantidade de prosa da página a servir.

Em retorno: title, url, ingredients, equipment, steps, tips para as notas e variantes que a página publica, prep_minutes, cook_minutes, total_minutes, time_text nos termos da página, time_phases, category e categories para cada categoria sob a qual a página se classifica. Um número que a página não indica vale null. id nomeia a página que foi lida, que difere da chave solicitada após um redirecionamento, e redirected_from nomeia então a chave que levou a ela. yield diz para quantas porções a receita é escrita e para quantas foi adaptada, e cada ingrediente carrega scaling, valendo scaled, rounded ou unscaled.

scale_ingredients

Aplica a mesma aritmética a qualquer lista de ingredientes, sem consulta ao wiki.

ArgumentoTipoObrigatórioO que faz
ingredientsarray de 1 a 100 strings, até 300 caracteressimAs linhas a adaptar.
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.

list_recipes

Lista receitas segundo as categorias sob as quais o Cookbook as classifica. Os argumentos se combinam, e a resposta diz qual busca foi construída a partir deles.

ArgumentoTipoObrigatórioO que faz
cuisinestring, até 80 caracteresnãoUma cozinha ou um país, como Italian ou Thai.
dish_typestring, até 80 caracteresnãoUm tipo de prato, como soup, dessert ou bread.
main_ingredientstring, até 80 caracteresnãoO ingrediente sobre o qual uma receita é baseada.
limitinteiro, 1 a 50, padrão 15nãoLinhas a servir.

Em retorno: as linhas que search_recipes retorna, com query que nomeia a busca construída por este servidor a partir dos argumentos, e cada argumento repetido ou null onde foi omitido.

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 dão 4 kg. A fineza com que um ingrediente é cortado depende de sua natureza. Um pão se corta em dois, em três ou em quatro; um ovo não se divide. Uma quantidade que fica entre os dois é então arredondada, e a receita adaptada se afasta um pouco das proporções da original. A linha traz rounded, e sua nota diz o que foi feito.

Os números são a aritmética deste servidor, então diga que eles foram recalculados quando você os mostra. 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.

A licença e a atribuição

As páginas do Cookbook são publicadas sob Creative Commons Atribuição-CompartilhaIgual 4.0. Reutilizar uma receita exige creditar a Wikibooks e a página de onde ela vem, e compartilhar o que se constrói sobre ela sob a mesma licença. get_recipe devolve ao mesmo tempo license e a url da página, então uma resposta carrega o crédito com ela.

Configuração

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

VariávelPadrãoO que ela faz
WB_USER_AGENTa identidade do projetoNomeia seu aplicativo junto à Wikimedia, com um endereço para contato com uma pessoa.
WB_MIN_INTERVAL_MS1000Intervalo entre duas requisições, de 500 a 60000.
WB_TIMEOUT_MS20000Tempo limite de uma requisição, de 1000 a 120000.
WB_MAX_RETRIES3Tentativas após uma falha temporária, de 0 a 8.
WB_CACHE_TTL_MS900000Duração durante a qual uma página permanece na memória, de 0 a 86400000.
WB_CACHE_MAX_ENTRIES200Páginas mantidas na memória por vez, de 1 a 5000.
WB_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 carrega 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 wiki respondeu e não tem essa página.Verifique a chave da página com search_recipes.
invalid_inputOs argumentos foram recusados antes de qualquer requisição.Leia a mensagem, que nomeia o argumento.
rate_limitedA Wikimedia pede que este cliente desacelere.Aguarde os segundos indicados e chame novamente com os mesmos argumentos. A receita continua 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.Aumente WB_TIMEOUT_MS, ou peça menos linhas.

Como biblioteca

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

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search e getRecipe respondem cada um { data, cached }, e levantam 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 saem uma a uma com pelo menos um segundo entre elas, e o intervalo mínimo de meio segundo vale independentemente da configuração. O User-Agent sempre termina com a identidade do projeto e um endereço para contato com uma pessoa.

As leituras vão para api.wikimedia.org, o host que a Wikimedia documenta e mantém para desenvolvedores. Cada resultado traz o endereço da página de onde foi lido e a licença sob a qual ela é publicada.

Este MCP é um projeto não oficial, sem afiliação à Wikimedia nem à comunidade Wikibooks.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao seu autor. Ele roda na sua máquina, anexa apenas api.wikimedia.org, mantém suas respostas na memória enquanto roda e não grava 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 serviço.

Contribuir

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

Licença

MIT para o código deste servidor, veja LICENSE. As páginas do Cookbook pertencem aos seus autores e à comunidade Wikibooks, sob CC BY-SA 4.0.