Epicure MCP Server

Epicure MCP Server

Public, anonymous, read-only MCP server for the Epicure ingredient-embedding model, offering tools for ingredient pairings, flavor profiling, and culinary exploration via cosine similarity and other embedding analyses.

Category
Visit Server

README

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 compare_on_axis Project two ingredients onto a named axis and compare.
Ported pairing_score Overall cosine affinity (300-d) between two ingredients.
Ported find_pairings Cluster + bridge graph computed in-process from the bundled embeddings.
Ported flavour_correlations Which axes correlate with each other.
Ported cultural_profile Cosine to each cuisine direction.
Novel neighbors Top-k cosine neighbours.
Novel morph Unified SLERP toward a direction, mode, or ingredient.
Novel list_targets Catalogue of valid morph targets + angle_deg primer.
Novel list_factors Residualised ICA factor catalogue (Claude-labelled poles).
Novel ingredient_on_factor Signed projection onto an ICA factor.
Novel pareto_navigate Pareto frontier on (proximity, pole-projection).
Novel closest_mode Which named GMM mode the ingredient lives in.
Novel where_on_atlas Precomputed UMAP (x, y) + nearest-in-2D peers.

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/healthz

Endpoints:

Path Method Description
/healthz GET Liveness probe (does not load the bundle).
/mcp POST Streamable HTTP MCP JSON-RPC endpoint.

Environment variables

Var Default Description
EPICURE_DATA_DIR <repo>/data Bundled-artefact directory.
HOST 0.0.0.0 Bind address.
PORT 8080 Bind port.
RATE_LIMIT_PER_MINUTE 60 Token-bucket refill rate.
RATE_LIMIT_BURST 10 Token-bucket capacity.
MCP_SERVER_NAME epicure Reported in the MCP initialize response.

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
embeddings.csv epicure-data: deploy/payload/embeddings.csv ~10 MB
ingredient_list.csv epicure-data payload ~75 KB
ingredient_tags.csv epicure-data payload ~100 KB
consolidated_nodes.csv epicure-data payload ~70 KB
factor_labels_ica_cooc.json application/paper/results/ ~75 KB
mode_explorer_cooc.json application/exploratory/results/ ~2 MB
supervised_directions.npz computed (38 axes) ~55 KB
factor_dirs_ica_n20.npy computed (20 unit vectors) ~25 KB
mode_poles_cooc.npy computed (150 unit vectors) ~180 KB
umap_coords.csv 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.sh

The 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:

  1. Checks out the repo (the data bundle is already inside it).
  2. Builds & pushes the Docker image to ACR via OIDC.
  3. Calls az containerapp update and waits for the new revision to answer /healthz.

Scaling and rate limit

  • --max-replicas 3 puts a hard cap on burst spend.
  • --min-replicas 0 allows 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: None

Cursor

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

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured