# Taste Finder: agent guide

Give a keyword (category, product or brand) and it extracts sensory and emotional words from related searches, SERPs, AI Overviews and People Also Ask, groups them into taste tribes and saves a report. Product planners and marketers use it to choose product language and messages. Data comes from ListeningMind DaaS and Maistro lmpipe for Korea, the US and Japan. Reports can be compared.

## Connect
- MCP: `https://daas-taste.listeningmind.ai/mcp` (Streamable HTTP). Start with `app_guide`.
- Browser agents: tools are registered on every page through WebMCP (`document.modelContext`).
- REST: `https://daas-taste.listeningmind.ai/.well-known/openapi.json`

## Approval
- read and action tools run at once.
- run and delete tools need a person's approval. Over MCP the tool returns `confirm_url`; show it to the person, then call `confirmation_status` with the token until state is done.
- In the browser the page shows the person a confirm box.

## Workflow
1. `list_reports` (read): Check for an existing report of the same keyword first.
2. `get_input_hint` (read): Check the keyword's domain and similar saved reports instantly.
3. `get_meaning_hint` (run): If the word may have several meanings, check its meaning and direction.
4. `explore_seeds` (run): Step 1: get seed topic candidates and choose them.
5. `analyze_taste` (run): Step 2: run the analysis after the person confirms (spends credits).
6. `get_report` (read): Read the report, in another language if needed.
7. `compare_reports` (action): Compare tastes across reports.
8. `download_report` (read): Get an HTML file for sharing.
9. `archive_reports` (action): Star reports to keep.
10. `delete_reports` (delete): Delete reports no longer needed.

## Inputs
Keyword (required), market (kr/us/jp), language (ko/en/ja). Seed topics chosen in step 1 (up to 4) and extra seeds typed in, and whether to collect the search journey (extra credits).

## Outputs
HTML taste report (taste tribes, sensory and emotional vocabulary, market facts, evidence sentences, search journey if chosen), downloadable HTML, comparison report of 2-4 reports.

## Cost and time
From the app docs (unit prices measured 2026-09): one analysis is roughly a few hundred Data API credits (keyword info 10, about 30 per SERP, keyword plus seeds plus 4-12 second-hop queries) plus one Maistro lmpipe analysis (price depends on contract). The search journey option adds 330 or more. Step 1 seed candidates cost little (about 1 credit per candidate). Time: step 1 takes 20-60 seconds, analysis about a minute (longer with much data). Viewing, language switch, comparison and lexicon curation cost 0.

## Limits
Markets kr, us, jp; languages ko, en, ja. The analysis is one synchronous GET that can take over a minute, beyond the 50-second wait; if it times out, find the new /r/{id} with list_reports a little later. Duplicate runs of the same keyword are not blocked, so check history first. Japan and the US have no demographic data. There is no JSON list API; find reports via /r/{id} links in the home HTML. Quality tools change the shared lexicon used by every report; use them only when a curator asks. No authentication.

## Method (how the analysis works)
1. Step 1: collect search topics strongly related to the keyword, with volume and class, and choose up to 4 seeds.
2. Step 2: collect search data, SERPs, AI Overviews and People Also Ask for the keyword and seeds, widening second-hop queries automatically when results are thin.
3. Extract sensory and emotional words using the shared lexicon.
4. Group consumers into taste tribes, add market facts and evidence sentences, and save the report.
5. Optionally compare 2-4 saved reports.

## Reading the result
- TRIBES is the core: each taste tribe has a name, what it wants and avoids, female and male share, age and evidence.
- The sensory and emotional vocabulary is the language people use when choosing; use it for product language and messages.
- Evidence sentences and market facts show where each tribe comes from; Japan and the US have no demographic data.
- A comparison report of 2-4 reports shows how tastes differ between keywords or markets.

## Requests this app answers well
- Which sensory and emotional words do people use when choosing whisky
- Split coffee bean buyers in the US into taste tribes and list what each wants and avoids
- Compare the perfume taste reports for Korea and Japan
- Find consumer language for our new product's message in search data

## Continue in another app
- [Brand Naming Agent](https://daas-naming.listeningmind.ai/llms.txt) (MCP `https://daas-naming.listeningmind.ai/mcp`): When you are naming a product or brand for this taste. Carry: The top tribe's sensory and emotional words for the description, tone and required word, plus the category keyword.
- [ICSS](https://daas-icss.listeningmind.ai/llms.txt) (MCP `https://daas-icss.listeningmind.ai/mcp`): When you want to test messages built from these words with a synthetic panel. Carry: The keyword and market, and survey options written from each tribe's wants and avoids.

## Using the screens (browser agents)
- `describe_screen`: menus, tabs, fields and buttons of the current screen, and what the page is for
- `go_to`: open a menu or page of this app by its label or path
- `fill_field`: type a value into a field by its label (never presses run; runs go through the run tools, which ask the person)
- `read_this_page`: the text and ids of what the person is looking at

## The ListeningMind apps (same account, same tools, call any of them)
Each app has `/mcp`, `/llms.txt`, `/agents.md` and WebMCP on its pages. `family_apps` and `recommend_app` return this list with addresses.
- [ACO](https://daas-aco.listeningmind.ai/llms.txt): Diagnoses whether a product detail page can be cited by AI answers and used by shopping agents (MCP `https://daas-aco.listeningmind.ai/mcp`)
- [AOO](https://daas-aoo.listeningmind.ai/llms.txt): Measures whether AI agents can get real tasks done on a website (MCP `https://daas-aoo.listeningmind.ai/mcp`)
- [Brand Finder](https://daas-brand.listeningmind.ai/llms.txt): Which brands lead search by generation or field, and what their brand assets are (MCP `https://daas-brand.listeningmind.ai/mcp`)
- [Brand Naming Agent](https://daas-naming.listeningmind.ai/llms.txt): Creates and checks brand name candidates grounded in search data (MCP `https://daas-naming.listeningmind.ai/mcp`)
- [Brand Wiki](https://daas-wiki.listeningmind.ai/llms.txt): Turns a brand website into the entities, wiki pages and evidence AI assistants read (MCP `https://daas-wiki.listeningmind.ai/mcp`)
- [CEP Finder](https://daas-cep.listeningmind.ai/llms.txt): In which situations do people start looking for this category (category entry point map) (MCP `https://daas-cep.listeningmind.ai/mcp`)
- [Creative Finder](https://daas-creative.listeningmind.ai/llms.txt): Finds purchase situations (CEP) in search data and drafts a creative, an image and a video for each (MCP `https://daas-creative.listeningmind.ai/mcp`)
- [Demand Forecast](https://daas-forecast.listeningmind.ai/llms.txt): What category demand looks like in the next 3-6 months and when to launch or campaign (MCP `https://daas-forecast.listeningmind.ai/mcp`)
- [Funnel Leak Finder](https://daas-funnel.listeningmind.ai/llms.txt): Where category search journeys leak to competitors (MCP `https://daas-funnel.listeningmind.ai/mcp`)
- [GEO Audit](https://daas-geo.listeningmind.ai/llms.txt): Checks whether a web page is ready to be read and cited by search engines and AI answer engines (MCP `https://daas-geo.listeningmind.ai/mcp`)
- [ICSS](https://daas-icss.listeningmind.ai/llms.txt): Synthetic consumer panel conditioned on search intent, for surveys and FGDs (MCP `https://daas-icss.listeningmind.ai/mcp`)
- [Intent KG](https://daas-intent.listeningmind.ai/llms.txt): What people look for about a topic, why, and how they choose (Intent Knowledge Graph) (MCP `https://daas-intent.listeningmind.ai/mcp`)
- [Prompt Builder](https://daas-prompt.listeningmind.ai/llms.txt): Finds what consumers ask AI and builds managed brand prompts with AI visibility (MCP `https://daas-prompt.listeningmind.ai/mcp`)
- [Pulse Finder](https://daas-pulse.listeningmind.ai/llms.txt): What is rising in search for a gender and age segment right now (MCP `https://daas-pulse.listeningmind.ai/mcp`)
- [Smart Store Suite](https://daas-store.listeningmind.ai/llms.txt): Which Smart Store products to grow, and how to rewrite their titles and detail pages in searchers' words (MCP `https://daas-store.listeningmind.ai/mcp`)
- [ListeningMind Data API](https://daas.listeningmind.ai/llms.txt): the search data behind every app (MCP `https://daas.listeningmind.ai/mcp`) · [glossary](https://daas.listeningmind.ai/en/glossary) · [all apps](https://daas.listeningmind.ai/en/apps)

## All tools
### get_input_hint
Instant advice for a keyword before analysis, from the lexicon, domain detection and saved reports only (no external calls): matching domain and taste cards, similar saved reports, and whether a meaning check is worthwhile (resolve flag). Returns JSON {items, resolve, base}. Read only, free. Usually followed by: get_meaning_hint, explore_seeds.
`GET /hint`
- `q` (required): Keyword being typed (first 60 characters are used).
- `locale`: Market whose search data is used: kr, us or jp. Default follows lang (ko->kr, en->us, ja->jp).
- `lang`: Page and report language.

### get_meaning_hint
Second-stage hint: explains what the keyword means, which domain cards it is read with, which directions to analyze (this product only, brand line, whole category) and which other meanings to filter out. Uses the CEP Finder meaning resolver (one LLM call, cached one day per keyword and market; the same call the analysis makes later). Spends ListeningMind Data API credits or paid model calls. Over MCP a person approves it first (you get a confirm link); in the browser the page asks the person. Cost: one grounded model call (about USD 0.04, about 0.5 Lima) when the keyword's meaning is not cached; 0 when cached. The analysis reuses it.. Time: usually 15-40 seconds when not cached.
`GET /hint`
- `q` (required): Keyword (or the base keyword returned by get_input_hint).
- `locale`: Market whose search data is used: kr, us or jp. Default follows lang (ko->kr, en->us, ja->jp).
- `lang`: Page and report language.
- `stage` (required): Must be '2'.

### explore_seeds
Step 1 of the UI: collects up to 26 strongly related search topics for the keyword with volume, class and flags (meme, AI Overview, no demographic data), pre-checks the recommended ones, and returns an HTML page with that seed set. Read the checked candidates (inputs named s) to pass as s to analyze_taste. Spends a small number of Data API credits. Spends ListeningMind Data API credits or paid model calls. Over MCP a person approves it first (you get a confirm link); in the browser the page asks the person. Cost: about 170 Data API credits (about 2 Lima): related-keyword lookup, 1 credit per candidate for volumes, 10 credits per top candidate, sometimes one SERP (about 30). Time: 20-60 seconds. Usually followed by: analyze_taste.
`GET /explore`
- `q` (required): Keyword to analyze: a category, product or brand, e.g. '향수', 'whisky', 'Lexus RX350'.
- `locale`: Market whose search data is used: kr, us or jp. Default follows lang (ko->kr, en->us, ja->jp).
- `lang`: Page and report language.

### analyze_taste
Step 2: collects search data, SERPs and AI Overviews for the keyword and up to 4 seeds, extracts sensory and emotional vocabulary, groups consumers into taste tribes and saves a report. Runs synchronously and answers with a redirect to the new report /r/{id}; the HTML report is returned. Spends Data API credits and one Maistro lmpipe analysis call; ask the person before calling. Spends ListeningMind Data API credits or paid model calls. Over MCP a person approves it first (you get a confirm link); in the browser the page asks the person. Cost: usually 250-400 Data API credits, about 5 Lima (keyword info 10, about 30 per SERP for the keyword, seeds and 4-12 second-hop queries), plus 330 or more with journey=1 (about 4.5 Lima more), plus one grounded model call for the meaning check when it is not already cached (about USD 0.04). Time: about 1 minute, longer for keywords with much data. Usually followed by: get_report.
`GET /analyze`
- `q` (required): Keyword to analyze: a category, product or brand, e.g. '향수', 'whisky', 'Lexus RX350'.
- `locale`: Market whose search data, SERPs and AI Overviews are collected. If omitted it follows lang (ko->kr, en->us, ja->jp). Japan and the US have no demographic data.
- `lang`: Report language. It is also sent as the language of the lmpipe analysis, so it can change extracted text, not only labels; a saved report can still be re-rendered in another language with get_report.
- `s`: Seed topics chosen on the explore page (checkboxes named s; recommended ones are pre-checked), sent as repeated s= parameters. Seeds add related items and second-hop SERP queries, widening the tribes. The keyword itself is ignored if repeated. s plus extra are de-duplicated and cut to 4. Empty: the analysis runs on the keyword alone (the UI 'skip' link).
- `extra`: Extra seeds typed by the person, separated by commas (also 、 or ，), e.g. 'pinot noir, 몬테스 알파'. Appended after s, then the list is cut to 4.
- `journey`: '1' also collects the search journey (path_finder, 12 steps): alternatives weighed and entry paths appear in the report. Costs 330 or more extra credits.
- `comp`: Competitor brands to add to the Brand x Taste table (up to 3). One extra search result page ('brand + keyword') is collected per brand, about 1.2 Lima in total.

### get_report
Returns a saved taste report (HTML): taste tribes, sensory vocabulary, emotions, market facts and evidence. lang re-renders it in another language at no cost. For a comparison report, base and who switch the counting view. Read only, free. Usually followed by: download_report, compare_reports.
`GET /r/{run_id}`
- `run_id` (required): Report id (6-20 hex chars), as in /r/{run_id}.
- `lang`: Optional. Re-render in this language.
- `base`: Comparison reports only: count sentences mentioning the subject (subj) or all collected (all).
- `who`: Comparison reports only: all speakers or consumers only (voice).

### download_report
Returns the report as an HTML file attachment. Read only, free.
`GET /r/{run_id}/download`
- `run_id` (required): Report id (6-20 hex chars), as in /r/{run_id}.
- `lang`: Optional. Render in this language.

### list_reports
Returns the home page HTML, which contains the report history (keyword, seeds, market, time, archived flag, links /r/{id}). By default it shows the market of the page language; hist=all shows all markets. There is no JSON list endpoint. The landing page no longer lists anyone's runs; use list_history for the signed-in member's own runs. Read only, free.
`GET /`
- `lang`: Page and report language.
- `hist`: Optional. 'all' shows reports of all markets.

### list_history
The signed-in member's own runs (taste analyses and comparison reports) across every market, newest first, as an HTML page with links to each report. Sign-in required; other members' runs are not shown. Read only, free.
`GET /history`
- `lang`: Page language.

### compare_reports
Creates and saves a comparison report of 2 to 4 saved full reports (each must have its model saved; very old reports cannot be compared) and returns it. No credits. Changes saved data in the app; no credits. Usually followed by: get_report.
`GET /compare`
- `ids` (required): 2-4 report ids separated by commas, e.g. 'a1b2c3d4e5f6,0f1e2d3c4b5a'.
- `lang`: Page and report language.

### archive_reports
Marks or unmarks reports as archived (starred). Archived reports always stay visible in the history regardless of the list limit. Returns {ok, n}. Changes saved data in the app; no credits.
`POST /archive`
- `ids` (required): Report ids.
- `on`: true archives, false removes the mark.

### delete_reports
Permanently deletes up to 50 reports and their saved models. Returns {ok, removed} where removed counts deleted files. Deletes data. A person approves it first.
`POST /delete`
- `ids` (required): Report ids (6-20 hex chars).

### get_lexicon
Returns the lexicon page: sensory and emotion vocabulary per domain and auto-learning status of candidate words. Read only, free.
`GET /lexicon`
- `lang`: Page and report language.

### get_quality_review
Curator page listing candidate sensory words of a domain with examples and counts; each row carries tok, dom, lc and ns needed by review_word. Read only, free. Usually followed by: review_word.
`GET /quality/review`
- `dom`: Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `lang`: Page and report language.

### get_quality_audit
Curator page to check whether sampled evidence sentences were assigned correctly; each row carries the key needed by mark_evidence. Read only, free. Usually followed by: mark_evidence.
`GET /quality/audit`
- `dom`: Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `lang`: Page and report language.

### get_quality_cards
Curator page with generated taste cards of a domain and the recompute button; each row carries dom and fid needed by decide_card. Read only, free. Usually followed by: decide_card, recompute_reports.
`GET /quality/cards`
- `dom`: Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `lang`: Page and report language.

### review_word
Approves, rejects or marks as situation word (ctx, kept out of the lexicon) one candidate word. Changes the shared lexicon used by all future reports. Returns {ok}. Changes saved data in the app; no credits.
`POST /quality/word`
- `tok` (required): Candidate word.
- `dom` (required): Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `lc`: Market of the word.
- `ns`: lex for sensory words, emo for emotion words.
- `action` (required): Decision.
- `fam`: Optional taste family to file the word under when approving.

### mark_evidence
Records whether one sampled evidence assignment is correct, used for the precision figure on the quality dashboard. Returns {ok}. Changes saved data in the app; no credits.
`POST /quality/mark`
- `dom` (required): Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `key` (required): Sample key from the audit page.
- `ok`: true if correct, false if wrong.
- `note`: Optional note (up to 200 characters).

### decide_card
Approves, rejects or saves edits of a generated taste card (name and layer). Changes shared cards used by reports. Returns {ok}. Changes saved data in the app; no credits.
`POST /quality/card`
- `dom` (required): Domain id of the sensory lexicon (as shown in the domain selector on the quality pages and on /lexicon).
- `fid` (required): Card (family) id from the cards page.
- `action` (required): Decision.
- `ko`: Optional Korean card name.
- `layer`: Optional layer of the card.

### recompute_reports
Recomputes saved reports from their stored raw data with the current lexicon and cards, without new data calls: up to 50 reports of a domain, or up to 50 stale reports when dom is omitted. Overwrites those reports. Returns {ok, done, total}. Changes saved data in the app; no credits. Cost: free (no credits). Time: can take minutes for 50 reports.
`POST /quality/recompute`
- `dom`: Optional domain id. Omit to recompute stale reports.

### get_report_robots
Returns whether search engines may index this report page (index or noindex), and why: a company member's run or one set by hand is index; a customer's run, and any run that is still going, failed or came back empty, is noindex. Read only; no credits. Read only, free.
`GET /_lm/report-robots/{run_id}`
- `run_id` (required): The report's run id: the id in the report address (for ACO the project id, or project~step).

