Skip to main content
Glama
chrischall

groupon-mcp

by chrischall

groupon-mcp

CI npm license

MCP server for Groupon — search and browse local, goods, and travel deals from Claude via natural language, and add deals to your signed-in Groupon cart once you confirm.

This project was developed and is maintained by AI. Use at your own discretion.

Tools

Tool

What it does

Needs sign-in

groupon_search_deals

Search or browse a city's deals

no

groupon_get_deal

One deal's detail, including each option's id and price

no

groupon_list_categories

Groupon's category taxonomy

no

groupon_healthcheck

One live request to Groupon, reporting what failed if anything did

no

groupon_view_cart

The items in your Groupon cart

yes

groupon_purchase

Add a deal option to your cart (after you confirm) and return the checkout URL

yes

groupon_clear_cart

Remove every item from your cart (after you confirm)

yes

The deal reads use Groupon's public consumer endpoint with no API key or account. The cart tools act on your signed-in Groupon account through its session cookie (see below). groupon_purchase cannot place an order: Groupon's checkout is native Apple/Google Pay, card or PayPal, so you complete payment yourself at the checkout URL.

Related MCP server: Groupon MCP Server

Setup

Add the server to your .mcp.json:

{
  "mcpServers": {
    "groupon": {
      "command": "npx",
      "args": ["-y", "groupon-mcp"]
    }
  }
}

Cart sign-in (optional)

Reading deals needs no account. The cart tools (groupon_view_cart, groupon_purchase, groupon_clear_cart) use your signed-in groupon.com session, which the server picks up from your browser through the ContextMint Bridge extension:

  1. Install ContextMint Bridge from its releases page. Chrome: download the Chrome zip, unzip it, and load it unpacked at chrome://extensions (Developer mode). Safari isn't available yet (it will ship inside the ContextMint app, which has no public download), so use Chrome for now.

    ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer; fetchproxy's own README (https://github.com/chrischall/fetchproxy#extension) points to it. Its source is public at https://github.com/nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

  2. Sign in at groupon.com in that browser. The first cart call lifts the session cookie; approve the request in the extension when asked.

For local dev without the extension, set GROUPON_SESSION_COOKIE (see .env.example); set GROUPON_DISABLE_FETCHPROXY=1 to turn the browser path off. The cookie authorizes changes to your cart, so treat it like a password. The cart tools only send it to an https://*.groupon.com endpoint, and refuse a GROUPON_GRAPHQL_URL override pointing anywhere else.

Environment

All optional; they mirror the .mcpb manifest's settings (the MCP_CONFIRM_* family is under Confirmations).

variable

default

GROUPON_SESSION_COOKIE

unset

Full Cookie header from a signed-in www.groupon.com request, for the cart tools only. Leave unset to have the bridge pick up your session. Treat it like a password.

GROUPON_DISABLE_FETCHPROXY

unset

1 turns the browser-bridge path off; the cart tools then rely on GROUPON_SESSION_COOKIE.

GROUPON_GRAPHQL_URL

https://www.groupon.com/mobilenextapi/graphql

GraphQL endpoint override. The cart tools refuse any override that is not an https://*.groupon.com URL.

GROUPON_CACHE_TTL

60

Response-cache TTL for reads, in seconds (0 = off). Raise it if you hit rate limits.

FETCHPROXY_WS_PORT

37149

Concentrator port the ContextMint Bridge connects to. Every MCP on one machine shares it, so move it for all of them or none.

FETCHPROXY_WS_HOST

127.0.0.1

Bridge bind interface, a literal IP only. Keep on loopback; it exists for hosted deployments in their own network namespace.

FETCHPROXY_IDENTITY_DIR

~/.fetchproxy/identity/

Absolute path for the bridge's long-term identity keypair.

Confirmations

The cart writes (groupon_purchase, groupon_clear_cart) ask you to confirm before they change anything. A client that can show a confirmation prompt (Claude Code) shows one, unless the server sets MCP_CONFIRM_ELICITATION=off. Elsewhere, the first call changes nothing and returns a preview plus a confirmToken, and only a repeat call with that token proceeds. The token is tied to exactly what was previewed: if the deal's price, the chosen option or quantity, or the cart's contents change between the two calls, the write is refused and a fresh preview is returned. groupon_purchase's preview also shows how many of that option are already in your cart, since Groupon may set the line to the new quantity rather than add to it. It still only fills the cart; you complete payment yourself at the checkout URL. groupon_clear_cart removes only the cart's line items, and accepts the previewed optionIds back as expectedOptionIds so it refuses if the cart has changed; if a removal fails partway it says which items were and were not removed.

variable

default

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as on, with a warning on stderr.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

random per process

Signing key; set it only if tokens must survive a server restart.

Development

npm install
npm run build   # tsc + esbuild bundle → dist/
npm test        # tsc typecheck + vitest

See CLAUDE.md for architecture, conventions, and gotchas.

License

MIT

Available Tools

7 tools
groupon_clear_cartA
Destructive

Remove ALL items from your signed-in Groupon cart. Once confirmed it removes every line item and re-reads the cart to verify it is empty. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
expectedOptionIdsNoThe optionIds the preview listed. When given, the clear is refused if the cart's line items are no longer exactly these (in any order).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already flag destructiveHint=true and openWorldHint=true, the description adds real context beyond them: the confirmation gate, the preview/confirmToken two-phase protocol, and the post-clear re-read that verifies the cart is empty. That is precisely the behavioral detail an agent needs before invoking a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the operation and then the confirmation mechanics; nothing is redundant. The final sentence is dense and slightly overstuffed with protocol detail, which keeps it just shy of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter destructive tool with no output schema and annotations that already cover the safety profile, the description supplies everything missing: what gets destroyed, the confirmation requirement, the fallback mechanics, and post-condition verification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself fully documents both parameters, so the baseline is 3. The description earns an extra point by explaining the flow that gives those parameters meaning: phase 1 returns a preview plus confirmToken, and only a repeat call with the token proceeds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Remove ALL items from your signed-in Groupon cart') and scopes the operation explicitly to every line item. This cleanly separates it from groupon_view_cart (read) and groupon_purchase (checkout) without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the operating context clearly (signed-in cart, all-items removal, user must confirm first) and describes the two-step fallback flow. It never explicitly names an alternative sibling or a when-not-to-use condition, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_get_dealA
Read-only

Fetch a single Groupon deal by its permalink slug (or full deal URL). Returns the slim projection by default (title, subtitle, merchant, price, rating, division, url, and every option's id/title/price/isSoldOut — pass an option id to groupon_purchase); set view="full" for Groupon's whole record.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection; "full" returns Groupon's whole records.
dealIdYesDeal permalink slug (e.g. "enset-productions-and-ventures-3") OR a full Groupon deal URL — the last path segment is used.
optionIdNoOptional deal option id to focus on.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description adds real value by disclosing the default response shape and enumerating the fields returned, plus what view="full" changes — return behavior the annotations don't cover. It omits auth/rate-limit and error behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, with response-shape details following. Dense parentheticals make the middle heavy, but every sentence carries information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so describing the returned projection is essential and the description does it. Identifier formats and view modes are covered for this 3-param tool. Missing only failure behavior for bad slugs/URLs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond restating the schema by tying optionId to a downstream action (groupon_purchase) and by describing what the default view actually yields, adding workflow meaning the schema fields alone don't convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (a single Groupon deal) plus the accepted identifier forms (permalink slug or full URL). This clearly separates it from groupon_search_deals, which would be the plural/discovery counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description routes forward by noting an option id can be passed to groupon_purchase, which is useful workflow context. However, it never states when to use this tool versus groupon_search_deals (i.e. only when you already hold a slug/URL), leaving the primary selection decision implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_healthcheckVerify credentials and upstream reachabilityA
Read-onlyIdempotent

Resolves the credential the way real tools do, then makes one authenticated request to www.groupon.com. Reports which source supplied the credential, whether www.groupon.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a www.groupon.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description still adds meaningful behavior: it enumerates what the report contains (credential source, acceptance, round-trip time, plain-English hint) and adds the security-relevant guarantee that the credential itself is never returned. The three-way error taxonomy ('no credential' vs 'rejected' vs 'upstream problem') is exactly the kind of context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it does and back-loaded with when to call it, which is good ordering. Three sentences is reasonable, though 'www.groupon.com' is repeated three times and could be stated once, making it slightly heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of describing the return value, and it does so precisely (source of credential, acceptance, RTT, hint). No parameters to document and annotations cover safety, so nothing an agent needs before calling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly avoids inventing parameter behavior for a no-arg tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource: it resolves the credential and makes one authenticated request to www.groupon.com, then reports the diagnostic result. This is unmistakably distinct from the sibling tools (cart, deal, search, purchase), which are all user-facing commerce operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Call this when a real tool fails and you want to know which hop broke.' That clearly frames it as a diagnostic path rather than a normal-operation tool. It stops short of naming which sibling to try instead or stating not to call it in the happy path, so not quite a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_list_categoriesA
Read-only

Fetch Groupon's category taxonomy tree. Returns a slim {title, url, children} tree by default; set view="full" for Groupon's whole payload.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection; "full" returns Groupon's whole records.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), so the bar is lower, and the description adds meaningful return-shape context: a {title, url, children} tree by default versus Groupon's full payload under view='full'. It does not mention rate limits, auth, or pagination, but a read-only public lookup needs little more.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the default/setting distinction immediately following; no filler, and the most decision-relevant fact arrives first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully sketches the compact return shape ({title, url, children}) and contrasts it with the full payload, which is what an agent needs to pick a view. Minor gaps remain about how deep or large the tree can be, but nothing essential is missing for a single-parameter lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enum values are already thoroughly documented in the schema, so the baseline is 3. The description's remark that view='full' yields Groupon's whole payload restates the schema semantics rather than adding new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch Groupon's category taxonomy tree') and pins the scope to a taxonomy rather than deals or carts, which cleanly separates it from every sibling. An agent can identify this as the taxonomy-lookup tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the tool's obvious function; there is no explicit 'use this before searching by category' or when-not guidance, even though sibling groupon_search_deals likely consumes category identifiers. The view guidance is parameter advice, not usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_purchaseA
Destructive

Add a Groupon deal option to your cart, ready for checkout. Once confirmed it adds the item, re-reads the cart to verify the line quantity, and returns the checkout URL for YOU to complete payment. It CANNOT place the order — Groupon checkout is native Apple/Google Pay, card, or PayPal. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
dealIdYesDeal permalink slug (e.g. "versailles-massage-bar-1") OR a full Groupon deal URL — the last path segment is used.
isGiftNoMark the line item as a gift.
optionIdNoWhich deal option to buy (an option id from groupon_get_deal). Required when the deal has more than one option; may be omitted for a single-option deal.
quantityNoHow many to add (1-10, default 1).
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish a mutating, destructive, open-world operation; the description goes well beyond by disclosing the post-add cart re-read/quantity verification, the returned checkout URL, the payment boundary, and the full two-step confirmation/confirmToken fallback tied to MCP_CONFIRM_MODE. This is unusually rich operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the primary action and scope before the confirmation mechanics, and every sentence carries distinct information. It is dense and slightly long, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly supplies the return contract (checkout URL) and the verification behavior. An agent has enough to call it correctly, including the confirmation protocol. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so all five parameters are documented in the schema. The description's confirmToken/MCP_CONFIRM_MODE sentence largely restates what the schema's confirmToken field already explains, adding little new syntax or constraint detail beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Add a Groupon deal option to your cart') and immediately bounds the scope with 'ready for checkout' and 'CANNOT place the order'. This clearly separates it from siblings like groupon_view_cart, groupon_get_deal, and groupon_clear_cart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong when-to-use context (cart-adding before checkout) and explicit when-not (cannot place the order; payment is native Apple/Google Pay, card, or PayPal). It also routes to groupon_get_deal by referencing option ids, though it never explicitly names a sibling tool for that lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_search_dealsA
Read-only

Search or browse Groupon deals for a city (division). Pass query for a free-text search (e.g. "massage", "pizza"); omit it for a plain category/city browse. Returns slim deal summaries by default; set view="full" for Groupon's whole cards.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection; "full" returns Groupon's whole records.
limitNoMaximum number of deals to return (1-100).
queryNoFree-text search term (e.g. "massage", "pizza"). Omit for a plain category/city browse.
offsetNoNumber of deals to skip for pagination (0-based).
divisionNoGroupon city slug, e.g. new-york, chicago, syracuse.new-york

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description usefully notes the default response is slim summaries and that view="full" returns whole cards, but that largely restates the schema's own `view` description and adds no auth, rate-limit, or pagination-limit context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the query branch, then the return shape. No filler and every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly summarizes what comes back (slim deal summaries vs full cards). Pagination offset/limit defaults live in the schema, so the only minor gap is what a 'deal summary' actually contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds value by framing the query/omit branch as a search-vs-browse semantic and by giving concrete query and division examples. The compact/full explanation duplicates the schema rather than extending it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Search or browse Groupon deals for a city (division)'. The dual mode (free-text search vs category/city browse) plus city scoping clearly separates it from groupon_get_deal (single deal) and groupon_list_categories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to pass `query` (free-text search) and when to omit it (plain category/city browse), which is a real branch decision. It does not, however, mention siblings such as groupon_get_deal for full deal detail or any preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groupon_view_cartA
Read-only

View the items currently in your signed-in Groupon cart. Requires a Groupon session (GROUPON_SESSION_COOKIE, or the fetchproxy browser bridge signed into groupon.com).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description bears less burden. It adds valuable behavioral context beyond annotations by specifying the authentication requirement (GROUPON_SESSION_COOKIE or fetchproxy browser bridge), which is critical for an agent to anticipate failures when no session exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The primary purpose is front-loaded, and the second sentence adds a necessary operational constraint. Every phrase contributes meaning, and the length is proportional to the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool, the description covers everything an agent needs: what it does, what it operates on, and the required session context. No output schema exists, but a cart-view operation's expected response (cart items) is reasonably inferable, and no other operational details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to explain about arguments. The schema fully covers the empty parameter set, and the description appropriately focuses on behavior and prerequisites rather than inventing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('View') and resource ('items currently in your signed-in Groupon cart'), making the tool's function immediately clear. It also naturally distinguishes itself from siblings like groupon_purchase and groupon_clear_cart by focusing on viewing rather than modifying the cart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool applies—when a user wants to inspect their current cart—and states the prerequisite session requirement. It doesn't explicitly name alternatives or exclusion conditions, but the purpose is unambiguous given the sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.1.8
    • Changedgroupon_clear_cart1 field changed
      • addedInput schema / properties / expectedOptionIds
        Added value: +{
        +  "description": "The optionIds the preview listed. When given, the clear is refused if the cart's line items are no longer exactly these (in any order).",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedgroupon_get_deal1 field changed
      • changedInput schema / properties / view / description
        Previous value: -"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records."New value: +"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection; \"full\" returns Groupon's whole records."
    • Changedgroupon_list_categories1 field changed
      • changedInput schema / properties / view / description
        Previous value: -"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records."New value: +"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection; \"full\" returns Groupon's whole records."
    • Changedgroupon_purchase2 fields changed
      • changedInput schema / properties / quantity / description
        Previous value: -"How many to add (default 1)."New value: +"How many to add (1-10, default 1)."
      • changedInput schema / properties / quantity / maximum
        Previous value: -9007199254740991New value: +10
    • Changedgroupon_search_deals1 field changed
      • changedInput schema / properties / view / description
        Previous value: -"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records."New value: +"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection; \"full\" returns Groupon's whole records."
  2. 2 tool updatesv1.1.1
    • Changedgroupon_clear_cart2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedgroupon_purchase2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
  3. 1 tool updatev1.0.2
    • Changedgroupon_purchase1 field changed
      • changedInput schema / properties / optionId / description
        Previous value: -"Which deal option to buy (an option id from groupon_get_deal). Defaults to the first option."New value: +"Which deal option to buy (an option id from groupon_get_deal). Required when the deal has more than one option; may be omitted for a single-option deal."
  4. 7 tool updatesv0.4.0
    • Changedgroupon_clear_cart1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_get_deal1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_list_categories1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_purchase1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_search_deals1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroupon_view_cart1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  5. 3 tool updatesv0.3.0
    • Changedgroupon_get_deal2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "default": false,
        -  "description": "Return a slim projection instead of the full deal.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedgroupon_list_categories2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "default": false,
        -  "description": "Return a slim {title, url, children} tree instead of the full taxonomy payload.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedgroupon_search_deals2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "default": false,
        -  "description": "Return slim deal summaries instead of full cards (recommended for browsing).",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Groupon's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  6. 7 tool updatesv0.1.2
    • First observedgroupon_clear_cart
    • First observedgroupon_get_deal
    • First observedgroupon_healthcheck
    • First observedgroupon_list_categories
    • First observedgroupon_purchase
    • First observedgroupon_search_deals
    • First observedgroupon_view_cart

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource and action: search vs. single-deal fetch, cart view vs. cart clear vs. purchase, taxonomy listing, and a diagnostic. The boundary between search_deals and list_categories is clarified by the descriptions (free-text/option browse vs. raw taxonomy tree), so an agent can select reliably.

Naming Consistency5/5

All seven tools share the groupon_ prefix followed by a consistent verb_noun pattern (search_deals, get_deal, list_categories, purchase, clear_cart, view_cart, healthcheck). No mixed casing or divergent verb styles.

Tool Count5/5

Seven tools is well-scoped for a deals/browsing-plus-cart server. Each tool earns its place (browse, detail, taxonomy, purchase, cart view/clear, health), with no redundant or filler entries.

Completeness4/5

Core lifecycle is covered: discovery (search/deal/categories), cart read (view_cart), cart write (purchase, clear_cart), and diagnostics. The main gap is granular cart editing—no remove-single-item or quantity-update—but clear-all plus re-add lets agents work around it.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A Model Context Protocol server that aggregates and compares deals from multiple sources including Slickdeals, RapidAPI marketplace, and web scraping, enabling users to search, filter, and compare deals through a chat interface.
    6
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides MCP tools for discovering Groupon-style deals (search, get, compare) for customers, and additionally merchant intelligence tools (category insights, market gaps, price positioning) for logged-in merchants.
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that acts as a shopping assistant, enabling product search, comparison, deal finding, and price history tracking via Hound web search.
    6
    MIT