Epicure MCP Server
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., "@Epicure MCP ServerWhat ingredients pair with mango?"
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.
Epicure MCP Server
Public, anonymous, read-only Model Context Protocol (MCP) server for the Epicure ingredient-embedding model.
The server is stateless and deterministic: every tool call is a pure function of the request arguments plus the bundled artefacts. There are no external model calls, no embedding fallback, and no user state.
Designed for Azure Container Apps deployment with a replica cap to bound spend.
Logging and analytics
Each tool call produces one structured JSON log line containing the tool name, the call arguments, a truncated preview of the result (max 4 KB), the latency, success flag, and a hashed client IP (SHA-256 with a salt that rotates at UTC midnight and never leaves the running replica). Raw IPs are never stored or logged. Logs are forwarded to the deployment operator's log store (Azure Log Analytics by default) for aggregate usage analytics only.
Tools
Category | Tool | Description |
Ported |
| Project two ingredients onto a named axis and compare. |
Ported |
| Overall cosine affinity (300-d) between two ingredients. |
Ported |
| Cluster + bridge graph computed in-process from the bundled embeddings. |
Ported |
| Which axes correlate with each other. |
Ported |
| Cosine to each cuisine direction. |
Novel |
| Top-k cosine neighbours. |
Novel |
| Unified SLERP toward a direction, mode, or ingredient. |
Novel |
| Catalogue of valid |
Novel |
| Residualised ICA factor catalogue (Claude-labelled poles). |
Novel |
| Signed projection onto an ICA factor. |
Novel |
| Pareto frontier on (proximity, pole-projection). |
Novel |
| Which named GMM mode the ingredient lives in. |
Novel |
| Precomputed UMAP |
Local development
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Build the data bundle from a local epicure-data checkout
python scripts/build_data.py --source-repo /path/to/epicure-data --out-dir data
python scripts/verify_data.py --data-dir data
# Run server
python -m epicure_mcp.server
# Smoke-test
curl http://localhost:8080/healthzEndpoints:
Path | Method | Description |
| GET | Liveness probe (does not load the bundle). |
| POST | Streamable HTTP MCP JSON-RPC endpoint. |
Environment variables
Var | Default | Description |
|
| Bundled-artefact directory. |
|
| Bind address. |
|
| Bind port. |
|
| Token-bucket refill rate. |
|
| Token-bucket capacity. |
|
| Reported in the MCP |
The server is fully self-contained: there is no upstream API call.
find_pairings runs the graph algorithm locally against the bundled
embeddings + ingredient metadata.
Bundled data
The data/ directory is committed to this repo (~13 MB) so the
server is fully self-contained: clone, build, deploy. No external data
checkout required.
File | Source | Size |
| epicure-data: | ~10 MB |
| epicure-data payload | ~75 KB |
| epicure-data payload | ~100 KB |
| epicure-data payload | ~70 KB |
|
| ~75 KB |
|
| ~2 MB |
| computed (38 axes) | ~55 KB |
| computed (20 unit vectors) | ~25 KB |
| computed (150 unit vectors) | ~180 KB |
| computed (1,790 x 2) | ~55 KB |
Refreshing the bundle when the model changes
When a new epicure-data training run lands, regenerate the bundle from
a local checkout and commit the diff:
python scripts/build_data.py --source-repo /path/to/epicure-data --out-dir data
python scripts/verify_data.py --data-dir data
git add data/ && git commit -m "data: refresh bundle from <run-id>"Azure Container Apps deployment
One-time setup
You need the Azure CLI installed and an authenticated session:
# Install az (Ubuntu/Debian)
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az login
az account set --subscription "<your-sub-id>"
# Provision RG + ACR + ACA env + container app + GitHub OIDC federation
./scripts/azure_setup.shThe script prints the GitHub Actions secrets / variables you must set on the repo for the deploy workflow to function.
Continuous deployment
.github/workflows/deploy.yml runs on every push to main:
Checks out the repo (the data bundle is already inside it).
Builds & pushes the Docker image to ACR via OIDC.
Calls
az containerapp updateand waits for the new revision to answer/healthz.
Scaling and rate limit
--max-replicas 3puts a hard cap on burst spend.--min-replicas 0allows scale-to-zero (cold start ~3-5 s while the bundle loads).The in-process token bucket limits each client IP to 60 req/min with a burst of 10. Limits drift across replicas; precision is bounded by the replica cap.
Connecting clients
Once deployed, the MCP endpoint is https://<aca-fqdn>/mcp.
Claude.ai
Add a custom MCP server in Settings -> Integrations -> Add custom:
Name: Epicure
URL : https://<aca-fqdn>/mcp
Auth: NoneCursor
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"epicure": {
"transport": "streamable-http",
"url": "https://<aca-fqdn>/mcp"
}
}
}ChatGPT (custom GPT)
Use Actions with the OpenAPI schema generated from the MCP tools/list
response.
License
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/KAIKAKU-AI/epicure-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server