Formul.io MCP Server
Connect your recipes and the ingredient library to Claude, ChatGPT and any MCP-compatible assistant — and formulate in plain conversation.
https://api.formul.io/mcp What is the Formul.io MCP server?
MCP (Model Context Protocol) is an open standard that lets AI assistants call external tools. The Formul.io MCP server puts your saved recipes, your custom ingredients and the 10,000+ ingredient library — plus the same food-science engine behind our calculators — directly inside the conversation.
Connect once and ask an assistant to read a recipe, compute water activity and shelf life, run what-if simulations, diagnose problems, find substitutes, or organise recipes into collections — without leaving the chat. You stay in control: the assistant can only do what the scopes you grant allow, and destructive actions require explicit confirmation.
Tools the assistant gets
28 tools, grouped by what they do. Read-only tools are always safe; create, edit and delete tools are gated by the scopes you grant.
-
list_recipesFind and filter your saved recipes. -
get_recipeFull ingredient list and metrics for one recipe.
-
create_recipeAuthor and save a new formula from known ingredients, or clone an existing recipe. -
update_recipeEdit name, settings, tags or the full ingredient list in place — ingredient lines support an "excluded" flag to keep an ingredient listed but out of all calculations (e.g. infusions). -
import_recipeImport one external recipe the assistant has already structured: preview each ordered ingredient line, then atomically save its description, phases, line notes, optional process stages, and all source step-by-step instructions as recipe notes. -
delete_recipeDelete a recipe — requires confirmation.
-
start_importStart a reviewed import job for a raw or multi-recipe Excel/CSV/text/PDF/Word file (base64). The source language is detected automatically unless you provide an override. Returns a job to plan + preview. -
get_import_previewBounded dry-run preview with server-owned recipe readiness, exact whole-import totals, affected-recipe counts, up to 100 recipes/remediations per page and 5 candidates per item; nothing written. -
resolve_import_itemResolve one flagged item: map or create an ingredient, accept an estimate or omit an unconvertible line, acknowledge a partially-read file, or include/exclude a segment. Returns a stable plan receipt; re-fetch the preview with its job ID. -
commit_importLand the exact reviewed frozen plan by passing its expected_plan_id — stale previews are rejected; re-import remains idempotent.
-
search_ingredientsSearch your custom items + the global library. Returns composition, allergens and any mass left unaccounted by the recorded components; ask for the full view to add carbohydrates and the reference-data source. Falls back to USDA/CIQUAL reference foods when nothing matches. -
resolve_ingredientsMatch a whole list of recipe ingredient names to library ids in one call. -
find_substitutesRanked substitutes by composition, diet and flavour. -
create_ingredientAdd a custom ingredient with full composition, including measured total polyols and erythritol, plus other substances the macro fields cannot hold (acids, cocoa alkaloids, leavening salts) via components. The reply reports any mass still unaccounted. -
update_ingredientPatch only supplied fields of your custom ingredient; null resets a nullable value, so canonically derived fields may be recomputed; components replaces the whole other-substance map; unknown or protected fields are rejected.
-
analyze_recipeQuality score, diagnosed issues, rule checks and suggested fixes. -
get_recipe_metricsWater activity, shelf life, composition and nutrition. -
simulate_changesRun what-if scenarios without saving anything. Each scenario comes back as before/after deltas; name the metrics you care about to add them.
-
get_calculator_guideOptimal ranges, pro formulation rules and the settings schema per calculator; ask for a section to get the metric glossary or the process-graph template. Pass a product style (sorbet, sauce, truffle…) — the ranges differ sharply between them.
-
list_recipe_notesRead the caveats and tips saved on a recipe. -
save_recipe_noteSave a caveat, tip or rationale. -
delete_recipe_noteDelete a note — requires confirmation.
-
list_collectionsBrowse your collections or public ones. -
get_collectionA collection with its member recipes, plus your private project instructions and requirements. -
save_collectionCreate or update a collection, including its project instructions and requirements. -
delete_collectionDelete a collection — requires confirmation.
-
get_recipe_dagRead a recipe's multi-stage process graph, including source notes and chef-facing instructions on each stage. -
set_recipe_dagAuthor or replace the process graph, including source notes and chef-facing instructions on its stages.
Option A — Claude.ai web Recommended · no key
The easiest path. Claude.ai runs the whole OAuth flow for you.
- 1 Open claude.ai and go to Settings → Connectors.
- 2 Click Add custom connector.
- 3 Name it Formul.io and paste the Remote MCP server URL below. Leave OAuth Client ID and Secret blank — they are discovered automatically.
- 4 Click Add. Claude.ai redirects you to Formul.io to authorize.
- 5 Log in if prompted, review the requested permissions, and click Allow.
- 6 Start a new chat and ask Formul.io something — see the example prompts below.
https://api.formul.io/mcp api.formul.io is requesting access to your Formul.io account.
https://claude.ai/api/mcp/auth_callback - Run formulation calculations
- Read your recipes
- Create and modify your recipes
- Search ingredient database
- Create and modify ingredients
- Diagnose recipe issues
Option B — Claude Desktop API key
For Claude Desktop or any client that uses a static bearer token.
1. Create an API key
Log in to Formul.io, open Settings → Security, and create an API key. Pick only the permissions you need:
- Run formulation calculations
- Read your recipes
- Create and modify your recipes
- Search ingredient database
- Create and modify ingredients
- Diagnose recipe issues
2. Add it to your config
Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"formulio": {
"url": "https://api.formul.io/mcp",
"headers": {
"Authorization": "Bearer fio_YOUR_KEY_HERE"
}
}
}
} Restart Claude Desktop — the Formul.io tools appear in the tool list.
Option C — Custom agents & OAuth 2.1
For your own MCP client or programmatic access. Authenticate with an API key (Bearer fio_…) or an OAuth 2.1 access token.
Transport
POST https://api.formul.io/mcp GET https://api.formul.io/mcp OAuth 2.1 endpoints
Public-client PKCE (authorization_code). No client secret. Access tokens last 1 hour; refresh tokens rotate on use.
| Purpose | URL |
|---|---|
| Discovery (RFC 8414) | https://api.formul.io/.well-known/oauth-authorization-server |
| Authorization | https://app.formul.io/oauth/authorize |
| Token exchange | https://api.formul.io/api/v1/oauth/token |
| Client registration | https://api.formul.io/api/v1/oauth/register |
| Token revocation | https://api.formul.io/api/v1/oauth/revoke |
Quick start
# 1. Register your client once
curl -X POST https://api.formul.io/api/v1/oauth/register \
-H "Content-Type: application/json" \
-d '{
"client_name": "My App",
"redirect_uris": ["https://myapp.example.com/callback"],
"grant_types": ["authorization_code", "refresh_token"],
"scope": "calculate recipes:read ingredients:read"
}'
# -> { "client_id": "...", "client_secret": null }
# 2. Send the user to authorize (PKCE, S256)
https://app.formul.io/oauth/authorize
?client_id=YOUR_CLIENT_ID
&redirect_uri=https://myapp.example.com/callback
&response_type=code
&scope=calculate+recipes:read+ingredients:read
&code_challenge=BASE64URL(SHA256(code_verifier))
&code_challenge_method=S256
&state=RANDOM_STATE
# 3. Exchange the code for tokens
curl -X POST https://api.formul.io/api/v1/oauth/token \
-d "grant_type=authorization_code" \
-d "code=AUTH_CODE" \
-d "redirect_uri=https://myapp.example.com/callback" \
-d "client_id=YOUR_CLIENT_ID" \
-d "code_verifier=YOUR_VERIFIER"
# -> { "access_token": "...", "refresh_token": "...", "expires_in": 3600 }
# 4. Call the MCP server
curl -X POST https://api.formul.io/mcp \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' Scopes
Grant only what the assistant needs. Each tool requires a scope; without it the call is refused.
| Scope | Grants |
|---|---|
recipes:read | List and read recipes, collections, notes and process graphs. |
recipes:write | Create, edit and delete recipes, notes and collections; author process graphs. |
ingredients:read | Search the ingredient library and find substitutes. |
ingredients:write | Create custom ingredients. |
calculate | Run metrics and simulations, read calculator guides. |
diagnose | Analyse recipes — quality score, issues and fixes. |
Try these once connected
The assistant works against your own account.
Troubleshooting
Need help?
This page is the canonical documentation for the Formul.io MCP server. Still stuck? We read every message.