Skip to content

Gaurmon MCP server

com.gaurmon/gaurmongaurmon.comstreamable-httpv1.0.1Scanned

Toronto grocery prices for your agent: flyer deals, shelf prices, and the flyer behind each one.

15 tools: 2 can delete or cancel things, 1 do something that can't be undone, 6 change things and 6 only read.

Tools: 2 delete, 1 irreversible, 6 write, 6 read.
  • Reads private data · 1
  • Reads text others write · 1
  • Can send data out · 0
  • 1 finding

Sign-in required, OAuth metadata published. Remote posture

With Anlyon

2 tools here can delete or cancel things and 1 does something that can't be undone. Govern them.

  • Anlyon lists the tools and adopts none.
  • Each tool you adopt gets approvals and receipts.
  • Your agent never holds the key.
Govern this server →

A tool your agent calls directly is not routed through Anlyon and is not governed by it. anlyon.dev only lists and labels, and these labels are the same either way.

What the Gaurmon MCP server can do

The Gaurmon MCP server is published by gaurmon.com, a domain the MCP Registry verified. It has 15 tools. It can delete or cancel things (2 tools: update_list and update_meals), do things that cannot be undone, such as sending, paying or publishing (record_purchases) and create or change data (6 tools: locate, coverage, stores_near, shelf_prices and 2 more). 6 tools only read.

1 tool reads private data (get_savings); 1 tool brings in text other people can write (get_savings).

The fixed checks matched 1 finding (annotation-conflict). Each one comes with the text it matched.

Its remote endpoint asks for sign-in and publishes OAuth metadata.

Last scanned Nov 5, 2026, version 1.0.1.

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

15 tools

Deletes or cancels 2Claude Code: deny
  • update_listAdd items to, remove items from, or tick items on the user's grocery list by hand (at most 100 items; an item already on the list isn't added twice, but one there only for a meal b…No findings

    Why it is in this group

    • The name "update_list" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Add items to, remove items from, or tick items on the user's grocery list by hand (at most 100 items; an item already on the list isn't added twice, but one there only for a meal becomes wanted by hand too). Give an amount for each item so it's costed right. Use item ids from get_list. `clear: "checked"` removes ticked items after a shop; `clear: "all"` empties the list and its meals. For a meal's ingredients use update_meals instead, so they stay linked. Returns the list like get_list. After a shop, offer to record what was bought with record_purchases.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • update_mealsAdd, remove, replace or edit the meals behind the user's grocery list; their ingredients go on and off the list to match, in one transaction.No findings

    Why it is in this group

    • The name "update_meals" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Add, remove, replace or edit the meals behind the user's grocery list; their ingredients go on and off the list to match, in one transaction. Send a whole plan at once with `add` (at most 21 meals, 40 ingredients each, amounts in any unit). Shared ingredients are combined where units allow. Removing a meal lowers what's needed of shared items and removes items no other meal needs, but never items added by hand; ticked items stay, marked noLongerNeeded. `replace` swaps a meal for another in one step. Returns the list like get_list plus `change` (items added and removed, estimate before and after) and `undo`: the update_meals arguments that reverse it.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Can't be undone 1Claude Code: ask
  • record_purchasesAdd a receipt to the user's savings record: one row per line (generic item, quantity, unit, paidMinor in cents, optional offerId from search_offers).No findings

    Why it is in this group

    • The name "record_purchases" says "purchase": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Add a receipt to the user's savings record: one row per line (generic item, quantity, unit, paidMinor in cents, optional offerId from search_offers). Each line is stored with its price range around the store that day (cheapest, typical, priciest) and returns savings vs each plus the percentile; negative savings (paid above typical) are kept. Lines on a thin range are shown but not totalled. Each line has `basis` (what it was compared with) or `notCounted` (why not) and a plain `summary`; the receipt has a `summary`, `method` and `methodUrl` (how savings are counted, an estimate compared with typical prices nearby) to pass on to the user. Append-only and idempotent: reuse `operationId` to retry safely; to fix a purchase, record a new one with `supersedesPurchaseId`.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Changes things 6Claude Code: ask
  • coverageBanners, current flyer weeks, store counts and known gaps (e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Banners, current flyer weeks, store counts and known gaps (e.g. FreshCo store locations unknown; shelf prices No Frills only, with Statistics Canada Ontario averages as a labelled fallback). Free. Call it before telling a user something isn't on sale.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • locatePlace a Canadian postal code, FSA or lat,lng as coordinates.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Place a Canadian postal code, FSA or lat,lng as coordinates. Free. Use it to check a location before searching.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • price_historyAn item's observed unit-price range (min, median, max per kg, L or item) by flyer week (Thursday to Wednesday), from flyer offers and shelf prices near a place, plus `longRun`: the…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    An item's observed unit-price range (min, median, max per kg, L or item) by flyer week (Thursday to Wednesday), from flyer offers and shelf prices near a place, plus `longRun`: the Statistics Canada monthly average unit price for the item since 2017 (Ontario, else Canada), with its 1- and 5-year change. `weeksKnown` says how many weeks Gaurmon has: its history started with the Oct 29 2026 flyer week and grows by one each Thursday, so say so when it's short, and say `longRun` is a provincial average, not a store price.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • price_rangeWhere a price sits: the cheapest, typical (median) and priciest qualified unit price for the same item across stores near a place on a day (flyer offers valid that day, shelf price…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Where a price sits: the cheapest, typical (median) and priciest qualified unit price for the same item across stores near a place on a day (flyer offers valid that day, shelf prices read within a week), how many prices each rests on, and `status` ranged | thin_range | unranged. Give quantity, unit and paidMinor to get the percentile and savings for a price. Use it before a purchase to say what a fair price is; record_purchases stores the same numbers.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • shelf_pricesRegular (non-flyer) prices for staples, for items not on sale this week.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Regular (non-flyer) prices for staples, for items not on sale this week. Store shelf prices are No Frills only for now. One row per product; `proxy: true` means the price was read at another branch of the banner. Each row carries `baseline`, the Statistics Canada Ontario average for that kind of item when there is one, and `vsOntarioAveragePct`. When no store price exists (e.g. Food Basics, FreshCo), `hits` is empty and `fallback` holds only the StatCan averages: say they are provincial averages, not what a store charges.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • stores_nearStores within a radius, nearest first, each with every flyer it runs this week and how many offers each flyer has.1 finding

    Why it is in this group

    • The name "stores_near" says "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "stores_near" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "stores_near" says "store": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Stores within a radius, nearest first, each with every flyer it runs this week and how many offers each flyer has.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 6Show 6 read-only tools
  • account_statusThe user's Gaurmon plan: trial days left, or the paid plan and when it renews.No findings

    Why it is in this group

    • The name "account_status" says "status": a word for reading.
    Description, as the server wrote it
    The user's Gaurmon plan: trial days left, or the paid plan and when it renews. Free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_itemsFor each item, the best comparable flyer offer at each banner near a place (priced offers first, the item itself by name, then lowest unit price), plus per-banner totals.No findings

    Why it is in this group

    • The name "compare_items" says "compare": a word for reading.
    Description, as the server wrote it
    For each item, the best comparable flyer offer at each banner near a place (priced offers first, the item itself by name, then lowest unit price), plus per-banner totals. Items with no flyer offer come back null: try shelf_prices for those.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_listThe user's grocery list and the meals behind it, kept by Gaurmon so they're the same in every agent and device.No findings

    Why it is in this group

    • The name "get_list" says "get": a word for reading.
    Description, as the server wrote it
    The user's grocery list and the meals behind it, kept by Gaurmon so they're the same in every agent and device. Each item is costed near a place for the amount needed (its own amount plus its meals'), from the cheapest flyer offer or everyday shelf price: by weight, by whole packages, multibuys per item; `price.how` says how and `approximate` when the size isn't comparable. `stops` groups items by store (at most `maxStores`, only `preferBanners` when set). `meals` lists each meal's ingredients and cost share; `mealIds` on an item says which meals need it. Unpriced items aren't counted in `totals`. Ids are for update_list and update_meals. Which stores to visit, and when, is yours to suggest.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_offer_evidenceThe flyer crop an offer was read from (as an image), with its page, dates and banner.No findings

    Why it is in this group

    • The name "get_offer_evidence" says "get": a word for reading.
    Description, as the server wrote it
    The flyer crop an offer was read from (as an image), with its page, dates and banner. Use it to show the user, or for a price match at the till.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_savingsThe running savings record, as estimates compared with typical prices nearby: the headline `vsTypical` (paid vs the typical, median price of the same items around the store on the …Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_savings" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "table": it reads databases.
    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    The running savings record, as estimates compared with typical prices nearby: the headline `vsTypical` (paid vs the typical, median price of the same items around the store on the same days; positive = under typical), `vsCheapest` (left on the table) and `vsPriciest`, totals by flyer week and by month, the best and worst lines, every line with the prices behind it, `summary` (lead with this: what was compared, what wasn't and why), `shareable`, one sentence the user can post, and `method` with `methodUrl`, a short plain explanation of how savings are counted and where it's published, to give the user when they ask. Totals count ranged lines only; thin and unranged lines are counted separately. Free, including after the trial.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_offersThis week's flyer offers for item words, an aisle, or deals near a place: give at least one of `query`, `aisle` or `near`.No findings

    Why it is in this group

    • The name "search_offers" says "search": a word for reading.
    Description, as the server wrote it
    This week's flyer offers for item words, an aisle, or deals near a place: give at least one of `query`, `aisle` or `near`. Each row has a comparable unit price (per kg, L or item), dates, the nearest store carrying it, and an offerId for get_offer_evidence. At most 50 rows a call; use `aisle` and `unit` filters and `fields` to keep answers small.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data1
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write1
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Sign-in required, OAuth metadata published

Looked at Nov 3, 2026, 01:18 UTC, unchanged since Nov 3, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
401
tools/list served without credentials
no
Tools that change things, listed without credentials
0
Protocol version
not observed
WWW-Authenticate on 401
yes
resource_metadata in WWW-Authenticate
https://www.gaurmon.com/.well-known/oauth-protected-resource/api/mcp
RFC 9728 protected resource metadata
https://www.gaurmon.com/.well-known/oauth-protected-resource/api/mcp
Authorization servers
https://clerk.gaurmon.com
Legacy HTTP+SSE transport
no
Dynamic client registration
no
Client ID metadata documents
yes

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "stores_near" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "stores_near" says "store": a word for a change.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http gaurmon https://www.gaurmon.com/api/mcp
claude mcp add --transport http gaurmon https://www.gaurmon.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__gaurmon__account_status",
      "mcp__gaurmon__search_offers",
      "mcp__gaurmon__compare_items",
      "mcp__gaurmon__get_offer_evidence",
      "mcp__gaurmon__get_savings",
      "mcp__gaurmon__get_list"
    ],
    "ask": [
      "mcp__gaurmon__locate",
      "mcp__gaurmon__coverage",
      "mcp__gaurmon__stores_near",
      "mcp__gaurmon__shelf_prices",
      "mcp__gaurmon__price_range",
      "mcp__gaurmon__record_purchases",
      "mcp__gaurmon__price_history"
    ],
    "deny": [
      "mcp__gaurmon__update_list",
      "mcp__gaurmon__update_meals"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as gaurmon. Review it before you use it.

Capability tags behind 1 rule
  • mcp__gaurmon__get_savings private-data, untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/com.gaurmon/gaurmon/verify?hash=2e7377cb6197fb2c5f76e92aaf3081aa1ac1681f2753589c1887741f0b3a6f76" | jq -e '.changed == false'

Pinned hash 2e7377cb6197, from Nov 5, 2026, 16:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/com.gaurmon/gaurmon/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.gaurmon/gaurmon
[![anlyon.dev](https://anlyon.dev/badge/com.gaurmon/gaurmon.svg)](https://anlyon.dev/servers/com.gaurmon/gaurmon)

Source: MCP Registry. Synced Nov 5, 2026, 16:17 UTC.

Gaurmon MCP server: questions and answers

Answered from the scan above, not from the publisher's description.

Is the Gaurmon MCP server safe?

No scan can promise that. What its definitions show: 15 tools, 9 of which can change, send or delete something, and 1 finding from fixed checks. Allow the reads, ask before each change, and deny the deletes; the permissions block on this page does that.

Can the Gaurmon MCP server delete data?

Yes. 2 tools can delete, cancel or revoke something: update_list and update_meals.

Can the Gaurmon MCP server do things that cannot be undone?

Yes. 1 tool can send, pay, publish or merge: record_purchases.

What tools does the Gaurmon MCP server have?

15 tools: 2 destructive, 1 irreversible, 6 write, 6 read. update_list, update_meals, record_purchases, locate, coverage, stores_near, shelf_prices, price_range and 7 more.

Does the Gaurmon MCP server need sign-in or OAuth?

Yes. Its remote endpoint answered 401 without credentials, and it publishes OAuth protected resource metadata (RFC 9728).

Does the Gaurmon MCP server send data to outside services?

None of its tools sends, posts or publishes, or takes a recipient, channel or URL.

Has the Gaurmon MCP server changed its tools?

Not since anlyon.dev started tracking it. Last scanned Nov 5, 2026.