# NoshUp: Canadian Grocery Deals & Recipes

> Canadian grocery flyer deals and recipes by item, store, postal code, cuisine, or diet. No auth.

- name: io.github.navshainc/noshup-public
- version: 1.0.3
- connection class: R2 (oauth_consent_once)
- trust: 76/100 flags: no-repository
- quality: 68/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.navshainc%2Fnoshup-public
- tools: https://api.protogrid.dev/v1/servers/io.github.navshainc%2Fnoshup-public/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "noshup-public": {
      "type": "http",
      "url": "https://api.noshup.ca/mcp-public"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 85
- provenance: 45
- drivers: +website +reachable +uptime-96% ~updated-58d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 68/100 (needs work)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 33 (weight 15)

- fail `auth.prm`: no Protected Resource Metadata (RFC 9728); clients cannot discover the authorization server
- pass `auth.as_metadata`: authorization server metadata reachable
- fail `auth.cimd`: no way for a new client to register (neither CIMD nor DCR)
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_meals (idempotentHint); get_recipe (idempotentHint); get_flyer_deals (idempotentHint)
- pass `tools.token_cost`: about 637 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history not recorded yet

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 637 tokens to load them all
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.navshainc/noshup-public.svg)](https://protogrid.dev/servers/io.github.navshainc/noshup-public)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.noshup.ca/mcp-public (streamable-http, auth oauth2, reachable true, uptime30d 0.96460176)

## Packages

_none_

## Tools (3)

- `get_flyer_deals`: Search current Canadian grocery flyer deals by item name or store.

        Covers FreshCo, Costco, Walmart, Food Basics, and more.
        All returned deals are currently valid and from the latest
        successful flyer fetch per store.
        
- `get_recipe`: Get full recipe details for a specific meal, including
        scaled ingredients and steps.
        
- `search_meals`: Search NoshUp's recipe catalogue by cuisine, dietary
        preference, ingredient, or meal type.

        The query matches both meal names and recipe ingredients.
        
