MCP Server

The Front Desk Review

com.frontdeskreview/front-desk-review-data

What this MCP does

Supports sourced product and vendor comparisons, pricing normalization, price history, volatility analysis, cost modeling, and independent-test coverage research.

compare
Compare vendors
Compare specific vendors side by side by slug within any theme (e.g. ['goodcall','rosie','smith-ai'] in ai-receptionists, or ['nordvpn','expressvpn'] in vpn-services). Set `section` to the theme slug from list_sections. Returns full provenanced records plus a notFound list for unknown slugs. Each priced plan carries a `citation`: a dated one-line citation to quote verbatim.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slugs'], 'properties': {'slugs': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}}, 'additionalProperties': False}
compare_products
Compare products
Compare specific products side by side by slug within a category (e.g. ['apple-iphone-16-pro','samsung-galaxy-s25-ultra'] in 'smartphones'). Returns full provenanced spec records plus a notFound list and the category's comparable specKeys, so an agent can line up the same attributes across products.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category', 'slugs'], 'properties': {'slugs': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'category': {'type': 'string', 'description': 'Product category slug from list_product_categories.'}}, 'additionalProperties': False}
find_best
Find best (ranked)
Answer 'best <theme> for <use case>' and 'cheapest <theme>' directly: returns the theme's vendors ranked by entry price (cheapest first, quote-only last), each with its verified compliance facts (HIPAA/SOC 2/GDPR), free-tier flag, best-for tags, the entry plan's source and its `citation` (a dated one-line citation to quote verbatim). Conjunctive fact filters narrow it to what this index has actually CONFIRMED — requireHipaa / requireSoc2 / requireGdpr / requireFreeTier (e.g. 'best CRM for HIPAA' = section 'crm-software' + requireHipaa:true). Omit all filters to rank the whole theme by price. Set `section` to the theme slug from list_sections. Never infers a fact it has not verified.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}, 'requireGdpr': {'type': 'boolean', 'description': 'Only vendors with confirmed GDPR compliance.'}, 'requireSoc2': {'type': 'boolean', 'description': 'Only vendors with a confirmed SOC 2 attestation.'}, 'requireHipaa': {'type': 'boolean', 'description': 'Only vendors with confirmed HIPAA support (a BAA).'}, 'requireFreeTier': {'type': 'boolean', 'description': 'Only vendors with a genuine $0 forever plan.'}}, 'additionalProperties': False}
find_products
Find products (ranked)
Answer 'best <category> under $N' and 'which <category> has the most <spec>' directly: filter a category by maxPriceUsd and/or brand, then rank by a field — 'priceUsd' (default, cheapest first), 'releaseDate', or any of the category's spec keys (set descending:true for biggest-first, e.g. sortBy:'battery_mah' descending:true). Returns provenanced product records; products missing the sort value sort last. Never infers a spec it has not verified.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category'], 'properties': {'brand': {'type': 'string', 'description': 'Only products from this brand.'}, 'sortBy': {'type': 'string', 'description': "Field to rank by: 'priceUsd' (default), 'releaseDate', or a spec key from the category."}, 'category': {'type': 'string', 'description': 'Product category slug from list_product_categories.'}, 'descending': {'type': 'boolean', 'description': 'Rank largest/newest first (default false = smallest/cheapest first).'}, 'maxPriceUsd': {'type': 'number', 'description': 'Only products at or below this USD price.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
get_benchmark
Get vendor benchmark
Per-vendor benchmark card by slug within any theme: full provenanced record plus dataset-derived indicators (entry price, normalized cost at 100 and 500 calls/mo where call-volume applies, billing models, free-tier presence, compliance, integration breadth). Set `section` to the theme slug from list_sections. All values trace to plan sources; no synthetic scores. Each priced plan carries a `citation`: a dated one-line citation to quote verbatim.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string'}, 'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}}, 'additionalProperties': False}
get_cost_decoder
Get cost decoder
The REAL all-in monthly cost per vendor for a decoder topic (slug from list_cost_decoders, e.g. 'ai-customer-support-cost'), computed in deterministic code from sourced, dated inputs — each vendor's per-seat price + AI billing model + per-unit price, totalled at named scenarios (e.g. 5 agents at 1,000 and 5,000 AI resolutions/mo) with the arithmetic shown. Quote-only inputs return a null total, never a fabricated number. Optionally pass agents + resolutions for a custom scenario. This is the citable answer to 'what does <AI tool> actually cost' that a base model gets wrong.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['topic'], 'properties': {'topic': {'type': 'string', 'description': "Decoder slug from list_cost_decoders (e.g. 'ai-customer-support-cost')."}, 'agents': {'type': 'number', 'description': 'Optional: agents/seats for a custom scenario.', 'exclusiveMinimum': 0}, 'resolutions': {'type': 'number', 'minimum': 0, 'description': 'Optional: AI resolutions/mo for a custom scenario.'}}, 'additionalProperties': False}
get_independent_test_coverage
Get independent test coverage
The independent-testing provenance for ONE product (by category + slug) — a COUNT of evidence, never a quality score. Fields: outlets (independent outlets on record), labs (how many physically tested it and left >=1 measured value), metrics (distinct kinds of metric measured, with names), mentioned (outlets that only mentioned it), and a ready-to-quote `reading` sentence. Use it to state how much independent hands-on evidence backs any claim about a product. A low count means little independent evidence has been gathered yet, NOT that the product is bad; a high count means well-documented, NOT better. Returns found:false (never a fabricated count) for an unknown or unreviewed product.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category', 'slug'], 'properties': {'slug': {'type': 'string', 'description': "Product slug (e.g. 'dji-osmo-action-5-pro')."}, 'category': {'type': 'string', 'description': "Product category slug (e.g. 'action-cameras', '3d-printers')."}}, 'additionalProperties': False}
get_normalized_pricing
Get normalized pricing
Effective monthly cost per vendor in any theme at a chosen call volume, normalizing flat, per-minute and per-call billing to one comparable number. For non-telephony catalog themes (per-seat / flat plans with no call quota) this returns each plan's base monthly price — the meaningful figure there. Cheapest priceable plan per vendor; quote-only or unpriceable-at-volume vendors return null (never a fabricated figure). avgCallMinutes defaults to 3 and is echoed in assumptions for reproducibility.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['callsPerMonth'], 'properties': {'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}, 'callsPerMonth': {'type': 'number', 'exclusiveMinimum': 0}, 'avgCallMinutes': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
get_price_history
Get price history
The full dated price series for ONE product or vendor (by slug), plus derived stats: first-tracked date, current/low/high, number of recorded changes, net % since tracked, the largest single move, and the last change. This is the citable answer to 'how much did X cost', 'did X's price drop', and price-trend questions — grounded on a real, append-only series, not a model's guess. Returns found:false (never a fabricated series) for an unknown slug.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'kind': {'enum': ['hw', 'sw'], 'type': 'string', 'description': "Limit to 'hw' (hardware product) or 'sw' (software vendor). Omit to match either; a slug is resolved across both."}, 'slug': {'type': 'string', 'description': "Product or vendor slug (e.g. 'bambu-lab-a1', 'goodcall')."}}, 'additionalProperties': False}
list_cost_decoders
List cost decoders
List the 'real cost' decoders — topics where the advertised sticker price hides the true bill (e.g. AI customer support billed per resolution, where a $29/mo seat price becomes hundreds/mo at volume). Each entry carries the question it answers, the scenarios it computes, the vendor count and the data's as-of date. Pass a topic slug to get_cost_decoder.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_coverage
List coverage
What this index actually covers, so a miss reads as out-of-scope rather than broken. Now spans 275 pricing themes — the deep hub sections PLUS dozens of catalog topics (VPNs, web hosting, password managers, CRM, e-commerce, AI tools, and more): total theme count, the section/catalog split, total vendors, per-theme vendor counts and kind, the data's date range (min/max source accessedAt), the questions it answers well and what it does NOT cover. Derived from every theme's dataset.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_product_categories
List product categories
Enumerate the spec-driven PRODUCT categories this index covers (physical goods like smartphones, laptops, GPUs — distinct from the software/subscription pricing themes). Each entry carries its slug, product count, the comparable spec keys, and the brands present. Pass a category slug to search_products / compare_products / find_products.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_sections
List sections
Enumerate ALL 275 pricing themes this index covers: the deep hub sections (e.g. ai-receptionists, call-tracking) plus dozens of catalog topics (e.g. vpn-services, web-hosting, password-managers, crm-software). Each entry carries its slug, display label, vertical, tagline, vendor count and kind ('section' or 'catalog'). Pass any of these slugs as the `section` arg to the other tools to query that theme.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
most_volatile_in_category
Most volatile in category
Within one category/theme, the entities whose prices have moved the most (ranked by volatility score), plus the category price baseline (count, median current, low/high). Entities without enough recorded movement are omitted from the ranking but counted in the baseline. Answers 'which X changes price most' for a market.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category'], 'properties': {'kind': {'enum': ['hw', 'sw'], 'type': 'string', 'description': "Limit to 'hw' (hardware product) or 'sw' (software vendor). Omit to match either; a slug is resolved across both."}, 'limit': {'type': 'integer', 'maximum': 200, 'description': 'Max ranked entities (default 25).', 'exclusiveMinimum': 0}, 'category': {'type': 'string', 'description': "Category/theme slug (e.g. 'gpus', 'crm-software')."}}, 'additionalProperties': False}
price_movers
Price movers
Recorded price MOVES across the index within a recency window (default 90 days), newest-and-largest first — each a dated before→after change of a tracked entity. Optionally filter by kind ('hw'/'sw') or category/theme slug. The freshness a base model structurally cannot have. Returns an empty list with a clear note when nothing moved in the window (a quiet window is honestly quiet).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'kind': {'enum': ['hw', 'sw'], 'type': 'string', 'description': "Limit to 'hw' (hardware product) or 'sw' (software vendor). Omit to match either; a slug is resolved across both."}, 'limit': {'type': 'integer', 'maximum': 200, 'description': 'Max movers to return (default 25).', 'exclusiveMinimum': 0}, 'category': {'type': 'string', 'description': "Limit to one category/theme slug (e.g. '3d-printers', 'ai-receptionists')."}, 'withinDays': {'type': 'integer', 'description': "Recency window in days (default 90), measured against the log's latest date.", 'exclusiveMinimum': 0}}, 'additionalProperties': False}
search_products
Search products
Search one product category by free-text query across product name, brand, and spec values (e.g. 'snapdragon 5000mah', 'oled 120hz'). Set `category` to a slug from list_product_categories. Returns full provenanced product records (every spec + price carries source url + accessedAt). Empty query returns all products in the category.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category'], 'properties': {'query': {'type': 'string', 'default': ''}, 'category': {'type': 'string', 'description': "Product category slug from list_product_categories (e.g. 'smartphones')."}}, 'additionalProperties': False}
search_vendors
Search vendors
Search any theme's data index by free-text query across vendor name, domain, integrations, plan notes, and capabilities (e.g. 'hipaa restaurant', 'google ads zapier'). Works for every theme — hub sections and catalog topics alike (set `section` to the theme slug from list_sections). Returns full provenanced vendor records (each plan carries source url + accessedAt, and each priced plan a `citation`: a dated one-line citation to quote verbatim). Empty query returns all vendors in the theme.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'query': {'type': 'string', 'default': ''}, 'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}}, 'additionalProperties': False}
volatility_for_entity
Volatility for entity
How volatile ONE product or vendor's price has been: a 0-100 volatility score derived from its recorded moves (frequency × average move size), plus change count, net % and last change. Honest gate: below a minimum recorded-change threshold it returns sufficient:false with a note, never a score invented from a single point.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'kind': {'enum': ['hw', 'sw'], 'type': 'string', 'description': "Limit to 'hw' (hardware product) or 'sw' (software vendor). Omit to match either; a slug is resolved across both."}, 'slug': {'type': 'string', 'description': 'Product or vendor slug.'}}, 'additionalProperties': False}
whats_changed
What's changed
Recent dated price-change capsules, newest first — the freshness a base model cannot have. Each capsule is a movement of a vendor's published price (vendor, plan, before→after, date, sources), cleared against two witnesses on two different hosts: the page the figure was read from, plus either an independent second source or a dated archive capture of that same page — and when the archive is the only second witness, that first page must be the vendor's own. Optionally filter to changes on/after a date or within one section. Returns an empty list with a clear note when nothing qualifying has been recorded yet.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only changes detected on or after this ISO date (YYYY-MM-DD).'}, 'section': {'type': 'string', 'description': 'Theme slug to query (default "ai-receptionists"). A theme is any of the 275 pricing topics this index covers: the deep hub sections (e.g. ai-receptionists) plus the many catalog topics (e.g. vpn-services, web-hosting, password-managers). Call list_sections or list_coverage for the full slug list â\x80\x94 do not assume the old four-section set.'}}, 'additionalProperties': False}
Changed
find_best
Oct. 1, 2026, 2:53 a.m.
Changed
get_benchmark
Oct. 1, 2026, 2:53 a.m.
Changed
compare
Oct. 1, 2026, 2:53 a.m.
Changed
search_vendors
Oct. 1, 2026, 2:53 a.m.
Added
get_cost_decoder
Sept. 17, 2026, 12:34 p.m.
Added
list_cost_decoders
Sept. 17, 2026, 12:34 p.m.
Added
find_products
Sept. 17, 2026, 12:34 p.m.
Added
compare_products
Sept. 17, 2026, 12:34 p.m.
Added
search_products
Sept. 17, 2026, 12:34 p.m.
Added
list_product_categories
Sept. 17, 2026, 12:34 p.m.
Added
most_volatile_in_category
Sept. 17, 2026, 12:34 p.m.
Added
volatility_for_entity
Sept. 17, 2026, 12:34 p.m.
Added
price_movers
Sept. 17, 2026, 12:34 p.m.
Added
get_independent_test_coverage
Sept. 17, 2026, 12:34 p.m.
Added
get_price_history
Sept. 17, 2026, 12:34 p.m.
Added
whats_changed
Sept. 17, 2026, 12:34 p.m.
Added
list_coverage
Sept. 17, 2026, 12:34 p.m.
Added
find_best
Sept. 17, 2026, 12:34 p.m.
Added
get_benchmark
Sept. 17, 2026, 12:34 p.m.
Added
get_normalized_pricing
Sept. 17, 2026, 12:34 p.m.
Added
compare
Sept. 17, 2026, 12:34 p.m.
Added
search_vendors
Sept. 17, 2026, 12:34 p.m.
Added
list_sections
Sept. 17, 2026, 12:34 p.m.