Molecular Pairing Tool (MCP Modernist)
The MCP Modernist tool drives all molecular pairing analysis in this project. It is reliable, but several output behaviors are easy to misread and have produced wrong conclusions in the past. This page documents the correct workflow and the known traps. For the flavor combinations themselves, see Flavor Pairing.
Workflow
Section titled “Workflow”Verify IDs first (verbose)
Always resolve ingredient IDs with search_ingredients(query, verbose=true) before any pairing call. IDs are lowercased, sometimes compressed (darkchocolate, corn_grain for popcorn), and a wrong ID throws rather than guessing. Verbose also returns the compound count — your first signal of indexing depth.
Run pairings or dish analysis
find_pairings(id, verbose=true) for one-to-many; assemble the full ingredient set for a dish graph via generate_dish_png / create_share_link.
Read intersections only from verbose output
See the warning below. Non-verbose shared arrays are not pairwise intersections.
Critical caveat: verbose vs non-verbose
Section titled “Critical caveat: verbose vs non-verbose”Interpreting results
Section titled “Interpreting results”Similarity score
Section titled “Similarity score”The sim score reflects whole-profile overlap (closer to a cosine over compound vectors), not the count of shared compounds. Two ingredients can share a single high-impact compound and still score low, or share many low-impact compounds and score moderate.
Sparse-indexing ingredients
Section titled “Sparse-indexing ingredients”Some ingredients have shallow compound lists and will systematically under-pair.
| Ingredient | Compounds | Implication |
|---|---|---|
| Dark chocolate | 13 | Pairs almost entirely on Maillard/roasted compounds (pyrazines, furfural, guaiacol) + benzaldehyde + vanillin. Under-reads fruit affinities. |
| Banana | 43 | Broad ester/floral profile; strongest kin are other fruits. |
| Vanilla | 41 | Broad; functions as a connector across spice, fruit, and roasted families. |
Indirect bridges and keystone ingredients
Section titled “Indirect bridges and keystone ingredients”A dish does not need every pair to overlap. The structurally important question is whether a keystone ingredient touches the otherwise-disconnected poles.
Worked example — dark chocolate + banana + vanilla:
| Pair | Verbose overlap | Strength |
|---|---|---|
| Banana ↔ dark chocolate | benzaldehyde (+ phenylacetaldehyde) | Weak (1–2 compounds) |
| Banana ↔ vanilla | 2-phenylethanol, farnesol, 2-phenylethyl acetate | Moderate |
| Vanilla ↔ dark chocolate | vanillin (+ guaiacol) | Keystone link |
The two flavor poles barely connect directly; vanilla is the only ingredient touching both, so it is load-bearing, not decorative. When two target ingredients show a weak direct overlap, look for (or add) a keystone before concluding the pairing fails. This is exactly the structure behind the Dark Chocolate Banana Cake Gelato.
Technique-created bridges
Section titled “Technique-created bridges”Compound sets are not static across preparation. Browning, toasting, and caramelization generate Maillard compounds (furfural, pyrazines, guaiacol) that did not exist in the raw ingredient. A raw ingredient that under-pairs with a roasted one may pair strongly once caramelized. The tool indexes the named ingredient state; reason explicitly about what your process adds.
Parsing notes
Section titled “Parsing notes”Verbose find_pairings and search_ingredients in current sessions return native JSON objects directly (no text wrapper). If a call instead returns a text-wrapped payload (raw[0]['text']), json.loads the inner text. Confirm the shape per tool rather than assuming a single pattern.
Methodology reference. Update when tool behavior changes.