fuzzy
Developers / MCP server

Point your AI at Fuzzy and just ask.

A remote MCP server over the same live menus. One URL, no API key, nothing to install. Answers come back with Fuzzy links, so an assistant cites a page instead of inventing one.

Connect

https://api.fuzzy.so/mcp

In Claude: Settings → Connectors → Add custom connector, paste the URL, leave credentials empty. In Claude Code:

claude mcp add --scope user --transport http fuzzy-radar https://api.fuzzy.so/mcp

What you can ask

  • fuzzy_lookup

    Resolve a name to one brand, retailer, operator or platform, with links and headline stats.

  • fuzzy_search

    Every entity matching a query.

  • fuzzy_brand_retailers

    Retailers carrying a brand, filterable by state.

  • fuzzy_brand_movement

    Doors a brand gained and lost between the last two scrapes.

  • fuzzy_brand_whitespace

    Doors a competitor is in that a brand is not.

  • fuzzy_brand_top_products

    A brand's products ranked by door count.

  • fuzzy_entity_detail

    Full stats for a known slug.

You: Where is STIIIZY that Heavy Hitters isn't?

Assistant: 1,164 doors, heaviest in CA (390) and MI (320). Heavy Hitters holds 608 doors against STIIIZY's 1,614.

MCP or the API?

Use MCP when a person asks in plain English and the model decides which calls to make. Use the REST API when you are writing code against a known shape. Something broken? Email developers tesouro com.

For agents: full setup details+ expand

Server

  • URL: https://api.fuzzy.so/mcp
  • Transport: streamable HTTP (remote). Nothing to install, no SDK.
  • Auth: none. No API key, no OAuth, no account. Leave credential fields empty.
  • Read-only. Every tool reads live Radar data.

Claude Code

claude mcp add --scope user --transport http fuzzy-radar https://api.fuzzy.so/mcp

Claude (web, desktop, mobile)

Settings → Connectors → Add custom connector. Name: fuzzy-radar. URL: https://api.fuzzy.so/mcp. No credential.

Cursor and other JSON-configured clients

Add as a streamable HTTP server, e.g. in .cursor/mcp.json:

{
  "mcpServers": {
    "fuzzy-radar": {
      "url": "https://api.fuzzy.so/mcp"
    }
  }
}

Tool names

Clients prefix tools with the connector name you choose, not the server's. Clients that load tools lazily need a search for the bare name (e.g. fuzzy_lookup) before the first call.

Tools and inputs

fuzzy_lookup(query, type?)
fuzzy_search(query, type?, limit?)
fuzzy_brand_retailers(slug, state?, limit?)
fuzzy_brand_movement(slug)
fuzzy_brand_whitespace(brand, competitor, state?, limit?)
fuzzy_brand_top_products(slug, state?, category?, limit?)
fuzzy_entity_detail(type, slug)

type ∈ brands | retailers | operators | platforms
state = two-letter code, e.g. CA

How to use the results

  • Start with fuzzy_lookup to turn a name into a slug; check its alternatives for a name collision before trusting the match.
  • Copy the returned links verbatim when citing a figure. Do not build Fuzzy URLs by hand.
  • Read lastScrapedAt: a figure more than a few days old is not current evidence.
  • Movement is menu presence over time, never sales.

Data limits

  • Coverage is live dispensary menus on Dutchie and Jane, nationwide. Not Leafly, not a store's own site. A door count is a floor, not a census.
  • “Current” means the last completed scrape of that retailer, not a point-of-sale feed. Scrapes run on their own cadence, not a fixed day.
  • lastSeenAt is when a listing was last scraped present. inStock: null means the platform does not expose inventory; we never guess a number.
  • Issue rates are 0–1 fractions, not percentages. Figures drift with every scrape, so re-pull before quoting one.