Skip to main content
Glama
laizaguedes

receitas-mcp-server

by laizaguedes

receitas-mcp-server

Servidor MCP (Model Context Protocol) em TypeScript + Node, com a stack atual de mercado:

  • @modelcontextprotocol/sdk — SDK oficial

  • TypeScript (ESM, NodeNext)

  • zod para validação de schemas das tools

  • transporte stdio (padrão para Claude Code, Cursor e Claude Desktop)

⚠️ Importante: um servidor MCP não é chamado direto pelo frontend (navegador). Ele é consumido por assistentes de IA (Claude Code, Cursor, Claude Desktop) ou por um backend que aja como cliente MCP — é o caso da API receitas-api (pasta irmã), que expõe esse MCP como REST para o frontend.

🗄️ Onde as receitas ficam guardadas

O storage é escolhido em tempo de execução (src/repository.ts):

  • Se as variáveis TRELLO_API_KEY, TRELLO_TOKEN e TRELLO_LIST_ID estiverem definidas → grava/lê cada receita como um card do Trello (src/trelloStore.ts).

  • Caso contrário → usa um arquivo JSON local data/receitas.json (src/store.ts), ótimo para desenvolvimento.

No Trello, cada receita vira um card na lista configurada: o nome do card é o nome da receita e a descrição guarda um bloco JSON (<!--receita:...-->) para reconstruir a receita fielmente. Configure as credenciais em .env (veja .env.example).

Variáveis de ambiente (.env)

Crie um arquivo .env na raiz de receitas-mcp-server com estas três variáveis. Os valores abaixo são fictícios — troque pelos seus.

# Chave de API do Trello — pegue em https://trello.com/app-key
# Formato: 32 caracteres hexadecimais.
TRELLO_API_KEY=a1b2c3d4e5f60718293a4b5c6d7e8f90

# Token do Trello — gere pelo link "Token" na mesma pagina do app-key.
# Formato: cadeia longa (~64+ caracteres).
TRELLO_TOKEN=ATTAa0000example1111token2222naoreal3333abcdef4444567890ghijkl

# ID da lista do Trello onde os cards de receita serao criados.
# Formato: 24 caracteres hexadecimais.
TRELLO_LIST_ID=6634f0a1b2c3d4e5f6a7b8c9

Variável

O que é

Como obter

TRELLO_API_KEY

Identifica seu app no Trello

https://trello.com/app-key

TRELLO_TOKEN

Autoriza acesso à sua conta

Link Token na página do app-key

TRELLO_LIST_ID

Lista onde as receitas viram cards

Abra o board com .json no fim da URL e procure o id da lista, ou GET https://api.trello.com/1/boards/{boardId}/lists?key=SUA_KEY&token=SEU_TOKEN

🔒 As três são obrigatórias juntas para ativar o Trello. Se qualquer uma faltar, o servidor cai automaticamente no storage JSON local. O .env está no .gitignore — nunca comite suas credenciais reais.


Related MCP server: cookwith-mcp

📖 Índice

  1. O que é isso

  2. Tools disponíveis

  3. Como este MCP foi criado (passo a passo)

  4. Como usar (passo a passo)

  5. Estrutura de pastas


O que é isso

MCP é um protocolo que permite a uma IA (Claude, Cursor, etc.) chamar funções e ler dados de uma fonte externa de forma padronizada. Aqui, a fonte externa é um catálogo de receitas. A IA conversa com este servidor por stdio (entrada/saída padrão), trocando mensagens no formato JSON-RPC 2.0.


Tools disponíveis

Tool

O que faz

listar_receitas

Lista receitas com filtros (categoria, dificuldade, ingrediente, busca)

buscar_receita

Detalhes completos de uma receita por id

adicionar_receita

Cadastra uma receita (persistida em data/receitas.json)

remover_receita

Remove uma receita por id

sugerir_por_ingredientes

Sugere receitas pelo que você tem em casa

Também expõe um resource receitas://catalogo com o catálogo completo em JSON.


Como este MCP foi criado (passo a passo)

Se você quiser recriar do zero (ou entender cada peça), foi exatamente esta a sequência:

Passo 1 — Criar a pasta e o package.json

Projeto Node em ESM ("type": "module"), com scripts de build/start e as dependências certas:

{
  "type": "module",
  "bin": { "receitas-mcp": "dist/index.js" },
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsx watch src/index.ts",
    "inspect": "npx @modelcontextprotocol/inspector node dist/index.js"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.19.1",
    "zod": "^3.25.76"
  },
  "devDependencies": {
    "@types/node": "^24.7.0",
    "tsx": "^4.20.6",
    "typescript": "^5.9.3"
  }
}
  • @modelcontextprotocol/sdk → o SDK oficial que implementa o protocolo.

  • zod → valida os argumentos que a IA envia para cada tool.

  • tsx → roda TypeScript direto em desenvolvimento (modo watch).

Passo 2 — Configurar o TypeScript (tsconfig.json)

O ponto crítico é usar module/moduleResolution = NodeNext, porque o SDK é ESM e os imports precisam terminar em .js:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "resolveJsonModule": true
  }
}

Passo 3 — Definir os dados e os schemas (src/types.ts)

Uma única fonte de verdade com zod. O schema serve para validar a entrada das tools e, ao mesmo tempo, gerar o tipo TypeScript (z.infer):

export const receitaSchema = z.object({
  id: z.string().regex(/^[a-z0-9-]+$/),
  nome: z.string().min(1),
  categoria: z.string().min(1),
  tempoPreparoMin: z.number().int().positive(),
  porcoes: z.number().int().positive(),
  dificuldade: z.enum(["facil", "medio", "dificil"]),
  ingredientes: z.array(z.string()).min(1),
  passos: z.array(z.string()).min(1),
});
export type Receita = z.infer<typeof receitaSchema>;

Passo 4 — Camada de dados (src/store.ts)

Um repositório simples que lê e grava o arquivo data/receitas.json. Isolar isso mantém o index.ts focado só no protocolo. Aqui ficam listar, obter, adicionar, remover e sugerirPorIngredientes.

Passo 5 — O servidor MCP (src/index.ts)

O coração. Cria o servidor, registra cada tool com seu schema e handler, registra o resource e conecta no transporte stdio:

const server = new McpServer({ name: "receitas-mcp-server", version: "1.0.0" });

server.registerTool(
  "listar_receitas",
  { title: "Listar receitas", description: "...", inputSchema: { categoria: z.string().optional() } },
  async ({ categoria }) => {
    const lista = await store.listar({ categoria });
    return { content: [{ type: "text", text: "..." }], structuredContent: { receitas: lista } };
  },
);

const transport = new StdioServerTransport();
await server.connect(transport);

🔑 Regra de ouro: o stdout é exclusivo do protocolo. Qualquer log seu tem que ir para stderr (console.error), senão você corrompe a comunicação com a IA.

Passo 6 — Instalar, compilar e testar

npm install     # baixa as dependências
npm run build   # compila src/ -> dist/

O teste de fumaça enviou 3 mensagens JSON-RPC pelo stdin (initializenotifications/initializedtools/list + uma tools/call) e confirmou que o servidor respondeu com as 5 tools e executou uma chamada real. ✅


Como usar (passo a passo)

1. Preparar o servidor (uma vez)

cd receitas-mcp-server
npm install
npm run build

Sempre rode npm run build de novo depois de editar qualquer arquivo em src/, pois a IA aponta para dist/index.js.

2. (Opcional) Testar sozinha com o Inspector

Abre uma interface web onde você vê e dispara as tools na mão:

npm run inspect

3. Conectar no Claude Code

Na pasta do frontend receitas, rode:

claude mcp add receitas -- node "C:/Users/laiza_g/Desktop/Laiza/cursos/cursos/aulaBOOTSTRAP4/receitas-mcp-server/dist/index.js"

Confira se conectou:

claude mcp list

4. Conectar no Cursor ou Claude Desktop

Adicione ao arquivo de configuração de MCP (.cursor/mcp.json no Cursor, ou claude_desktop_config.json no Claude Desktop):

{
  "mcpServers": {
    "receitas": {
      "command": "node",
      "args": [
        "C:/Users/laiza_g/Desktop/Laiza/cursos/cursos/aulaBOOTSTRAP4/receitas-mcp-server/dist/index.js"
      ]
    }
  }
}

Depois reinicie o Cursor/Claude Desktop.

5. Usar no dia a dia

Com o MCP conectado, é só pedir em linguagem natural para a IA. Exemplos:

  • "Liste as receitas de sobremesa fáceis." → chama listar_receitas

  • "Me mostra a receita do brigadeiro." → chama buscar_receita

  • "Tenho tomate e manjericão, o que posso fazer?" → chama sugerir_por_ingredientes

  • "Cadastra uma receita nova de bolo de cenoura." → chama adicionar_receita (grava no JSON)

A IA escolhe a tool certa sozinha, preenche os argumentos e te devolve o resultado.


Estrutura de pastas

receitas-mcp-server/
├── data/
│   └── receitas.json      # base local (fallback quando Trello nao configurado)
├── src/
│   ├── index.ts           # servidor MCP: tools + resources
│   ├── repository.ts      # interface + fabrica (escolhe Trello ou JSON)
│   ├── store.ts           # backend JSON local
│   ├── trelloStore.ts     # backend Trello (REST API)
│   ├── filtering.ts       # filtros e sugestao (funcoes puras compartilhadas)
│   └── types.ts           # schemas zod + tipos
├── .env.example           # credenciais do Trello
├── package.json
├── tsconfig.json
└── README.md

Available Tools

5 tools
adicionar_receitaAdicionar receitaA

Cadastra uma nova receita (persistida em data/receitas.json). Falha se o id ja existir.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
fonteNo
imagemNo
tituloYes
porcoesNo
caloriasNo
categoriaYes
descricaoNo
dificuldadeYes
modoPreparoYes
ingredientesYes
tempoPreparoNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that data is persisted to data/receitas.json and that the operation fails if the id already exists, which are important side-effect and error conditions. However, it does not mention success behavior, return values, or any permissions/authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two short sentences. The primary action verb 'Cadastra' appears first, and the additional sentence efficiently communicates the key failure condition. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a creation operation with 12 parameters, no annotations, and no output schema, yet the description provides only the core function and one error condition. It fails to convey essential context such as required vs. optional fields, default values for optional parameters, array structure for ingredientes/modoPreparo, or what happens on success. This is insufficient for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description adds no parameter-level semantics. It does not mention any of the 12 parameters, their formats, defaults, or relationships. The parameter names (e.g., titulo, ingredientes) are somewhat self-explanatory for a recipe domain, but the description itself provides no clarification or additional context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Cadastra uma nova receita' (Registers a new recipe), which is a specific verb+resource pair that clearly identifies the tool's function. It also distinguishes it from sibling tools like listar_receitas, buscar_receita, remover_receita, and sugerir_por_ingredientes, ensuring no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when a new recipe needs to be added, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. The note that it fails if the id already exists offers some situational guidance, but no alternative tools are mentioned, so guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

buscar_receitaBuscar receita por idA

Retorna todos os detalhes de uma receita a partir do seu id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesid da receita, ex.: brigadeiro

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states that the tool 'returns all details', which conveys a read-only operation and the scope of the response. It does not disclose error behavior for missing ids or the exact return structure, but for a simple retrieval this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the purpose ('Retorna todos os detalhes') and the target resource. Every word earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description sufficiently covers purpose and usage. The phrase 'todos os detalhes' gives an overview of return value, though it could be more specific about the response structure or behavior when the id does not exist. Overall, adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documentation covers 100% of the parameters (id) with a clear example ('brigadeiro'). The tool description merely echoes the schema by saying 'a partir do seu id', adding no extra semantic meaning. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Retorna' (returns) and identifies the resource 'receita' (recipe) with its id, clearly distinguishing it from sibling tools like listar_receitas, adicionar_receita, remover_receita, and sugerir_por_ingredientes. This is a focused single-recipe-by-id retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies clear usage: when you have a recipe id and need all its details. It does not explicitly contrast with listar_receitas or provide exclusions, but the context is unambiguous from the title and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listar_receitasListar receitasB

Lista as receitas disponiveis, com filtros opcionais por categoria, dificuldade, ingrediente ou busca livre.

ParametersJSON Schema
NameRequiredDescriptionDefault
buscaNoBusca livre por titulo, categoria ou ingrediente
categoriaNoEx.: Sobremesa, Doce, Salgado
dificuldadeNoEx.: Facil, Media, Dificil
ingredienteNoFiltra receitas que usam este ingrediente

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral disclosure burden. It only states the basic listing action and filter availability, but does not disclose read-only nature, permissions, pagination, limits, return format, or any other behavioral traits beyond the visible action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the primary action and lists optional filters. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the description covers the core listing and filter capability. However, given the absence of annotations and output schema, the description should provide more context about expected output, usage boundaries, or alternatives to be fully complete. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description merely restates the filter dimensions (category, difficulty, ingredient, free search) without adding new meaning or clarifying syntax, format, or usage nuances beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Lista' (lits) and the resource 'receitas' (recipes), indicating a listing operation with optional filters. It distinguishes from most siblings like 'adicionar_receita' and 'remover_receita', but does not explicitly differentiate from 'buscar_receita' given the 'busca livre' filter, which could overlap in purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like 'buscar_receita' or 'sugerir_por_ingredientes'. It only mentions optional filters without explaining scenarios where one tool would be preferred over another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remover_receitaRemover receitaA

Remove uma receita pelo id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesid da receita a remover

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral disclosure burden. It only states 'Remove' without revealing whether the deletion is permanent, requires permissions, or affects related data. For a destructive operation, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that front-loads the action and the required input. It contains no redundant words or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter and no output schema. The description adequately conveys the core operation, but it lacks any mention of success/failure behavior or irreversible consequences, which would be useful for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full coverage of the single parameter 'id' with a description ('id da receita a remover'). The tool description adds no additional semantic meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and resource ('receita') with the required identifier ('pelo id'). This clearly distinguishes it from sibling tools like 'listar_receitas' and 'adicionar_receita'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for deleting a recipe by id, but it does not explicitly state when to use it versus alternatives or provide exclusions. There is no mention of prerequisites like having a valid id or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sugerir_por_ingredientesSugerir receitas por ingredientesA

Dada uma lista de ingredientes disponiveis, sugere receitas ordenadas por quantos ingredientes combinam, mostrando o que falta.

ParametersJSON Schema
NameRequiredDescriptionDefault
ingredientesYesIngredientes que voce tem em casa

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the ordering logic and the fact that missing ingredients are shown. It does not state whether the operation is read-only, but the verb 'sugere' implies no side effects and no mutation. Adds meaningful behavioral context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the input condition and states the action and output. Every element earns its place, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool without an output schema, the description adequately explains input and output behavior. It could be more explicit about whether zero-match recipes are included and what fields are returned, but it is largely complete for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the parameter as 'Ingredientes que voce tem em casa' with type array of strings, so coverage is 100%. The description repeats the notion of available ingredients but adds no new parameter-level details, meriting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('sugere receitas') and the input (list of available ingredients), and describes the sorting behavior by match count and display of missing ingredients. This distinguishes it from sibling tools like listar_receitas and adicionar_receita.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the situation for use: when the user has a list of ingredients and wants recipe suggestions. It does not explicitly exclude other tools or name alternatives, which prevents a 5, but the context is clear enough for a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedadicionar_receita
    • First observedbuscar_receita
    • First observedlistar_receitas
    • First observedremover_receita
    • First observedsugerir_por_ingredientes

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clear and distinct purpose: listing, fetching details, adding, removing, and suggesting recipes. The overlap between listar and buscar is resolved by list returning a filtered collection while buscar returns a single full recipe.

Naming Consistency5/5

All tool names follow a consistent Portuguese verb_noun pattern: listar_receitas, buscar_receita, adicionar_receita, remover_receita, and sugerir_por_ingredientes. The pattern is uniform and predictable.

Tool Count5/5

With 5 tools, the server is well-scoped for a recipe management domain. Each tool covers a core operation without unnecessary redundancy.

Completeness4/5

The server covers list, get, create, and delete operations, but lacks an update tool for editing existing recipes. This is a minor gap that agents can work around by deleting and recreating, but it is not a fatal omission.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that transforms AI assistants into personal chefs by providing recipe recommendations and meal planning features based on the HowToCook repository.
    5
    3,486 npm
    773
    ISC
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that enables AI-powered recipe generation and transformation using natural language, supporting dietary restrictions, allergies, and nutritional goals.
    2
    5 npm
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.
    33 npm
    MIT