Portable Agent Plugins package for cooking recipes. The initial provider is a mock adapter: it reads one Schema.org Recipe JSON document per file and exposes it through search_recipes(query, limit) and get_recipe(url) MCP tools.
search_recipes matches all query terms case-insensitively across recipe names, descriptions, categories, cuisines, keywords, and ingredients. It returns concise result cards containing each recipe's name, description, URL, image, category, and cuisine; use get_recipe with a result URL for the complete Schema.org document.
plugin.jsonandmcp.jsonare the Agent Plugins v1 package metadata..codex-plugin/plugin.jsonand.mcp.jsonare Codex companion metadata generated by the plugin scaffold.assets/branding/contains the marketplace-ready Recipe Plugin icon and its size exports.src/recipe_plugin/data/is the mock provider's JSON-file repository.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .[dev]
recipe-mcpThe streamable HTTP endpoint is exposed at http://localhost:8000/mcp by the MCP Python SDK. Test it with the MCP Inspector:
npx @modelcontextprotocol/inspectorSelect Streamable HTTP and connect to http://localhost:8000/mcp.
Build and run a local image (the local Docker Desktop architecture):
docker build -t recipe-mcp:local .
docker run --rm -p 8001:8001 recipe-mcp:localThe 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:
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:
docker buildx build --platform linux/arm64 --load --tag recipe-mcp:arm64-test .
docker run --rm --platform linux/arm64 -p 8001:8001 recipe-mcp:arm64-testThe 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 mock endpoint
https://recipes.example.test/mcp. Configure a real endpoint only in the
deployment or marketplace environment that requires it.