Skip to main content
AI Integration · MCP

Formul.io MCP Server

Connect your recipes and the ingredient library to Claude, ChatGPT and any MCP-compatible assistant — and formulate in plain conversation.

MCP endpoint
https://api.formul.io/mcp
Speaks MCP protocol versions 2024-11-05 through 2026-07-28 — including the stateless per-request model and server/discover — with interactive result widgets (MCP Apps) in Claude and ChatGPT and built-in guidance prompts.

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.

Find & read recipes
  • list_recipes
    Find and filter your saved recipes.
  • get_recipe
    Full ingredient list and metrics for one recipe.
Create & edit recipes
  • create_recipe
    Author and save a new formula from known ingredients, or clone an existing recipe.
  • update_recipe
    Edit 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_recipe
    Import 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_recipe
    Delete a recipe — requires confirmation.
Reviewed recipe import (sponsored allowance)
  • start_import
    Start 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_preview
    Bounded 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_item
    Resolve 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_import
    Land the exact reviewed frozen plan by passing its expected_plan_id — stale previews are rejected; re-import remains idempotent.
Ingredients
  • search_ingredients
    Search 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_ingredients
    Match a whole list of recipe ingredient names to library ids in one call.
  • find_substitutes
    Ranked substitutes by composition, diet and flavour.
  • create_ingredient
    Add 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_ingredient
    Patch 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.
Analysis & metrics
  • analyze_recipe
    Quality score, diagnosed issues, rule checks and suggested fixes.
  • get_recipe_metrics
    Water activity, shelf life, composition and nutrition.
  • simulate_changes
    Run what-if scenarios without saving anything. Each scenario comes back as before/after deltas; name the metrics you care about to add them.
Reference
  • get_calculator_guide
    Optimal 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.
Notes
  • list_recipe_notes
    Read the caveats and tips saved on a recipe.
  • save_recipe_note
    Save a caveat, tip or rationale.
  • delete_recipe_note
    Delete a note — requires confirmation.
Collections
  • list_collections
    Browse your collections or public ones.
  • get_collection
    A collection with its member recipes, plus your private project instructions and requirements.
  • save_collection
    Create or update a collection, including its project instructions and requirements.
  • delete_collection
    Delete a collection — requires confirmation.
Process graph (DAG)
  • get_recipe_dag
    Read a recipe's multi-stage process graph, including source notes and chef-facing instructions on each stage.
  • set_recipe_dag
    Author 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. 1 Open claude.ai and go to Settings → Connectors.
  2. 2 Click Add custom connector.
  3. 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. 4 Click Add. Claude.ai redirects you to Formul.io to authorize.
  5. 5 Log in if prompted, review the requested permissions, and click Allow.
  6. 6 Start a new chat and ask Formul.io something — see the example prompts below.
MCP endpoint
https://api.formul.io/mcp
Preview
Authorize Access

api.formul.io is requesting access to your Formul.io account.

Tokens will be sent to
https://claude.ai/api/mcp/auth_callback
Requested permissions
  • Run formulation calculations
  • Read your recipes
  • Create and modify your recipes
  • Search ingredient database
  • Create and modify ingredients
  • Diagnose recipe issues
Deny Allow
What the Formul.io authorization screen looks like — review the permissions, then Allow.

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
Copy the key immediately — it is shown only once.

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
JSON-RPC 2.0 over POST
GET https://api.formul.io/mcp
Unauthenticated server info

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.

What recipes do I have, and which has the shortest shelf life?
Diagnose my dark chocolate ganache and suggest how to improve its shelf life.
What's the water activity and sugar/fat split of my salted caramel?
Simulate raising the glucose in my ganache to 120 g — how does water activity change?
Find a vegan substitute for the cream in my recipe.
Create a free account

Troubleshooting

The assistant connected but shows no tools.
Make sure authorization finished and you granted at least one scope. In Claude.ai, remove and re-add the connector; for an API key, confirm it has the permissions you need.
After authorizing, the browser doesn't return to my app.
For custom OAuth clients the redirect_uri must exactly match one you registered during client registration — including any trailing slash.
I'm getting rate-limited.
Free accounts get 1,000 tool calls per day and 100 per minute. Pro accounts get 20,000 per day and 120 per minute. Each call counts once. Normal conversations never come close to either tier — only a sweep across your whole library is worth spreading out.
The assistant won't delete a recipe or note.
That is deliberate. delete_recipe, delete_collection and delete_recipe_note require an explicit confirmation so nothing is removed by accident — tell the assistant to confirm.
I can't connect at all.
MCP access is governed by a global availability switch and may be briefly turned off for maintenance. Try again later, or email [email protected].

Need help?

This page is the canonical documentation for the Formul.io MCP server. Still stuck? We read every message.