cookidoo-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cookidoo-mcpsearch for vegetarian recipes with pasta"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cookidoo-mcp
An MCP server for Cookidoo, built with NestJS. It exposes a Cookidoo account (recipes, shopping list, subscription) to AI tools (Claude, IDEs, agents, …) as a set of MCP tools.
The Cookidoo client is a TypeScript rewrite of the Python
cookidoo-api library. This first
migration covers the core: authentication, account info, recipe search &
details, and shopping-list management.
Architecture
The project follows the same DDD + CQRS + Hexagonal layout as
gardenia-api:
src/
core/
config/ env validation + Cookidoo config (env-var credentials)
mcp/ shared MCP transport (Streamable HTTP) + tool discovery
contexts/
cookidoo/
domain/ types, the ICookidooClient port, exceptions
application/ CQRS commands & queries (dispatch to the port)
infrastructure/ CookidooHttpClient — the TS rewrite of cookidoo-api
transport/mcp/ MCP tools + Zod input schemas
app.module.ts
main.tsTransport: Streamable HTTP (stateless) at
POST /api/mcp.GET/DELETEreturn405(no sessions). A freshMcpServeris built per request.Tools live in
contexts/cookidoo/transport/mcp/and only dispatch Commands/Queries through the CQRS bus — never call the client directly.The client (
CookidooHttpClient) is a singleton behind theCOOKIDOO_CLIENTport. It logs in lazily via the Cookidoo OAuth2 cookie flow and transparently re-authenticates on a401.
Related MCP server: cookwith-mcp
Configuration
Credentials and localization come from environment variables (see
.env.example):
Variable | Required | Default | Description |
| yes | — | Cookidoo account email |
| yes | — | Cookidoo account password |
| no |
| Localization country code |
| no |
| Localization language |
| no |
| Localization base URL |
| no | — | Path to persist the session across restarts (see below) |
| no |
| Set to |
| no |
| HTTP port |
| no | — | OpenTelemetry traces + metrics + logs (OTLP); all disabled together when unset |
| no |
| Service name reported on exported traces/metrics/logs |
| no |
| Trace sampling ratio ( |
| no |
| Metric export interval in milliseconds |
| no |
| Minimum Winston log level ( |
Logging
src/support/logging/ wires up structured logging via @sisques-labs/nestjs-kit's
createSharedWinstonLoggerOptions (winston + nest-winston under the hood,
same as the org's other services). main.ts installs it as Nest's app-wide
logger, so every existing Logger.log(...)/Logger.error(...) call is
routed through it automatically. Colorized console output plus JSON
daily-rotating file logs (logs/, gitignored) are always on; when
OTEL_EXPORTER_OTLP_ENDPOINT is set, every log line is also forwarded via
OTLP alongside traces/metrics, correlated with the active span.
OpenTelemetry
src/telemetry.ts bootstraps the OpenTelemetry Node SDK ahead of every other
import in src/main.ts, so HTTP/Express auto-instrumentation can patch those
modules before Nest requires them. It stays disabled until
OTEL_EXPORTER_OTLP_ENDPOINT is set. When enabled, src/core/observability/
also wraps the CQRS command/query buses so every dispatch gets a trace span
plus duration/count metrics, with no per-handler wiring required, and every
Winston log line is forwarded too (see Logging above).
Session persistence
By default the session lives only in memory: a fresh start logs in again. Set
COOKIDOO_COOKIE_FILE to a writable path and the client restores the session
from it on startup and rewrites it after every successful login, so restarts
reuse the existing session (an expired one self-heals on the next 401). The
file holds session cookies — treat it like a credential and keep it out of
version control.
Running
Local (pnpm)
pnpm install
cp .env.example .env # then fill in your credentials
pnpm dev # watch mode
# or
pnpm build && pnpm prodDocker
docker build -t cookidoo-mcp .With an env file:
cp .env.example .env # then fill in your credentials
docker run --rm -p 3000:3000 --env-file .env cookidoo-mcpOr pass variables directly:
docker run --rm -p 3000:3000 \
-e COOKIDOO_EMAIL=your@email.com \
-e COOKIDOO_PASSWORD=your-password \
cookidoo-mcpOptional localization and port overrides work the same way (-e PORT=3010,
-e COOKIDOO_COUNTRY_CODE=es, etc.).
If you set a custom PORT, map the same port on the host and in the container
(e.g. -p 3010:3010 when PORT=3010).
The MCP endpoint is then available at http://localhost:3000/api/mcp (or your
custom port). A liveness probe is exposed at GET /api/health (handy for
Docker/orchestrator health checks).
Cursor
Cookidoo credentials live in the server .env — Cursor only needs the HTTP
endpoint. The server must be running (pnpm dev or pnpm prod) before Cursor
connects.
Copy
.cursor/mcp.json.exampleto.cursor/mcp.json.If you changed
PORTin.env, update the URL port to match (default3000).Restart Cursor (Settings → Tools & MCP should list cookidoo).
Authentication is handled by the NestJS process via COOKIDOO_EMAIL /
COOKIDOO_PASSWORD; do not put Cookidoo credentials in mcp.json.
Tools
Tool | Kind | Description |
| query | Account public profile |
| query | Active subscription (or null) |
| query | Search the recipe catalogue with filters |
| query | Full details of a recipe by id |
| query | Recipes on the shopping list |
| query | Ingredient items on the shopping list |
| query | Free-text items on the shopping list |
| command | Add recipes' ingredients to the list |
| command | Remove recipes' ingredients from the list |
| command | Add free-text items to the list |
| command | Remove free-text items from the list |
| command | Empty the shopping list |
| command | Mark ingredient items as bought/owned |
| command | Mark free-text items as bought/owned |
| command | Rename free-text items |
| command | Add custom recipes' ingredients to the list |
| command | Remove custom recipes' ingredients from the list |
| query | Recipes planned on the meal-planner calendar for a week |
| command | Add recipes to the meal-planner calendar on a day |
| command | Remove a recipe from the meal-planner calendar on a day |
| command | Add custom recipes to the calendar on a day |
| command | Remove a custom recipe from the calendar on a day |
| query | All user-created (custom) recipes |
| query | Full details of a custom recipe by id |
| command | Create a custom recipe from an existing recipe |
| command | Delete a custom recipe |
| query | Total managed collections / pages |
| query | A page of managed collections |
| command | Subscribe to a managed collection |
| command | Unsubscribe from a managed collection |
| query | Total custom collections / pages |
| query | A page of custom collections |
| command | Create a custom collection |
| command | Delete a custom collection |
| command | Add recipes to a custom collection |
| command | Remove a recipe from a custom collection |
Adding a tool
Add a Zod input schema under
transport/mcp/schemas/.Add a Command/Query (+ handler) under
application/that dispatches to theICookidooClientport; extend the port +CookidooHttpClientif the underlying Cookidoo endpoint isn't wired yet.Add the tool under
transport/mcp/tools/, tagged with@McpTool(), and register it in theMCP_TOOLSarray ofcookidoo.module.ts.
Migration status
The migration now covers the full upstream cookidoo-api surface: account,
recipe search & details, shopping list (incl. ownership/edit), the meal-planning
calendar, custom recipes, collections (managed/custom) and session persistence
(save_cookies / load_cookies, here as the optional COOKIDOO_COOKIE_FILE).
License
Licensed under the GNU General Public License v3.0 — © Sisques Labs.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that transforms AI assistants into personal chefs by providing recipe recommendations and meal planning features based on the HowToCook repository.54,479752ISC
- AlicenseBqualityDmaintenanceAn MCP server that enables AI-powered recipe generation and transformation using natural language, supporting dietary restrictions, allergies, and nutritional goals.217MIT
- Alicense-qualityFmaintenanceMCP 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.67MIT
- Flicense-qualityBmaintenanceDocker-hosted MCP server for Mealie that enables AI agents to read cookbooks, extract recipes, translate them if needed, store them in Mealie, and verify the results.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sisques-labs/cookidoo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server