# Recipe Plugin Portable [Agent Plugins](https://agent-plugins.org/) package for publicly available recipes. It exposes `search_recipes(query, limit)` and `get_recipe(url)` MCP tools through a read-only, anonymous recipe provider. The currently configured provider is Chefkoch. `search_recipes` uses its public search endpoint, does not apply a PLUS filter, and returns compact result cards. Where supplied by Chefkoch, each card includes its subtitle as `description` and a CDN `image_url` derived from its image template; no recipe detail pages are fetched. `get_recipe` currently accepts only HTTPS URLs on `chefkoch.de` and returns a normalized recipe document. Neither tool sends credentials, creates persistent browser state, or attempts to bypass access controls. Results can include recipes marked as PLUS, but the plugin never authenticates to access restricted content. ## Layout - `plugin.json` and `mcp.json` are the Agent Plugins v1 package metadata. - `.codex-plugin/plugin.json` and `.mcp.json` are Codex companion metadata generated by the plugin scaffold. - `assets/branding/` contains the marketplace-ready Recipe Plugin icon and its size exports. - `src/recipe_plugin/chefkoch.py` implements anonymous Chefkoch access. - `src/recipe_plugin/recipe_jsonld.py` decodes Schema.org and Nuxt recipe data. ## Run locally ```powershell python -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install -e .[dev] recipe-mcp ``` The streamable HTTP endpoint is exposed at `http://localhost:8000/mcp` by the MCP Python SDK. Test it with the MCP Inspector: ```powershell npx @modelcontextprotocol/inspector ``` Select **Streamable HTTP** and connect to `http://localhost:8000/mcp`. ## Container image Build and run a local image (the local Docker Desktop architecture): ```powershell docker build -t recipe-mcp:local . docker run --rm -p 8001:8001 recipe-mcp:local ``` The MCP endpoint is then available at `http://localhost:8001/mcp`. For the Kubernetes cluster, publish a multi-platform image so its ARM64 nodes pull the correct image automatically. Replace `REGISTRY/recipe-mcp:TAG` with the cluster's container registry and immutable image tag: ```powershell docker buildx build --platform linux/amd64,linux/arm64 --tag REGISTRY/recipe-mcp:TAG --push . ``` To test the ARM64 image locally through Docker Desktop emulation before publishing: ```powershell docker buildx build --platform linux/arm64 --load --tag recipe-mcp:arm64-test . docker run --rm --platform linux/arm64 -p 8001:8001 recipe-mcp:arm64-test ``` The image runs as an unprivileged `recipe` user and listens on all interfaces at port `8001`. Put it behind a Kubernetes Service and TLS-enabled Ingress that routes the public `/mcp` path to port `8001`. Outside the container, the server retains its loopback-only default; override `RECIPE_MCP_HOST` and `RECIPE_MCP_PORT` only when needed. The packaged MCP configuration uses the non-routable placeholder endpoint `https://recipes.example.test/mcp`. Configure the deployed endpoint only in the deployment or marketplace environment that requires it.