Free, read-only JSON access to 7,000+ cocktail recipes with exact measures, method, glass, garnish and a picture — in 36 languages. No key, no sign-up. The same data that renders the site.
https://24cocktails.comhttps://24cocktails.com/mcp (Streamable HTTP)| Endpoint | What it returns |
|---|---|
GET /api/v1/search?q=negroni | Recipes whose name or ingredients match the words. Filters: base (gin, vodka, rum, whiskey, tequila, brandy, other, na), method, glass, cat (classic, sour, long, strong, tiki, hot, quick…), limit ≤ 50, offset. |
GET /api/v1/recipe/{slug} | One recipe in full: ingredients with amounts and millilitres, steps, glass, ice, garnish, strength, difficulty, page URL and picture (an AI-generated illustration). |
GET /api/v1/by-ingredients?have=gin,campari,sweet vermouth | What can be mixed from the bottles listed — can_make and one_away (with the missing bottle). Brand names and Russian work. |
GET /api/v1/random?base=rum | A random recipe, optionally within a base spirit or category. |
Every endpoint takes lang — an ISO 639-1 code for names, steps and the page link: en (default), ru, es, de, fr, it, pt, ja, zh and the rest of the 36. Responses are JSON with CORS enabled, so a browser page can call them directly.
curl "https://24cocktails.com/api/v1/recipe/negroni?lang=en"
{
"slug": "negroni",
"name": "Negroni",
"base": "gin", "abv": 24, "difficulty": 1,
"method": "Stir", "glass": "Rocks", "ice": "Cubes", "garnish": "Orange",
"prep_minutes": 3,
"ingredients": [
{"name": "Gin", "amount": "30 ml", "ml": 30, "key": "gin", "optional": false},
{"name": "Campari", "amount": "30 ml", "ml": 30, "key": "campari", "optional": false},
{"name": "Sweet vermouth", "amount": "30 ml", "ml": 30, "key": "sweet_vermouth", "optional": false}
],
"steps": ["Fill the glass with ice.", "Pour and stir."],
"url": "https://24cocktails.com/cocktail/negroni?utm_source=ai&utm_medium=api",
"photo": "https://24cocktails.com/photo_web/negroni.jpg",
"attribution": "24cocktails.com"
}
The same catalogue as an MCP server over Streamable HTTP, stateless, no auth. Tools: search_cocktails, get_recipe, cocktails_by_ingredients, random_cocktail. Every tool is annotated read-only, idempotent and closed-world: it reads the catalogue and touches nothing else.
claude mcp add --transport http 24cocktails https://24cocktails.com/mcp
{
"mcpServers": {
"24cocktails": { "type": "http", "url": "https://24cocktails.com/mcp" }
}
}
curl -X POST https://24cocktails.com/mcp \
-H "Content-Type: application/json" -H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"cocktails_by_ingredients",
"arguments":{"ingredients":["gin","campari","sweet vermouth"]}}}'
For a custom GPT, add an Action and import the schema from https://24cocktails.com/api/v1/openapi.json. Authentication: none. Privacy policy: https://24cocktails.com/privacy.html. Any agent framework that reads OpenAPI (LangChain, Semantic Kernel, Vertex AI extensions) works the same way.
The short version; the full Terms of Use and the support page apply to the API, the MCP server and every assistant built on them.
url field — the recipe page, not the home page. The catalogue is corrected against sources, so a linked answer stays right when a recipe is revised.429. Need more, or a bulk export? Use /llms/recipes.jsonl (one recipe per line) or write to us.slug is stable.A recipe has a stable slug, a base spirit, a strength in abv percent, a method_key (shake, stir, build, blend, muddle, layer), a glass_key (rocks, coupe, highball, wine, shot, other), categories, ingredients with the amount as printed and a millilitre value where one exists, and ordered steps. The key of an ingredient is the slug of its encyclopedia entry. Photos are 900×900 JPEG under /photo_web/{slug}.jpg.