# JENNi Shop Local

> Search local-shop and ship-to-home products by US ZIP and get a JENNi checkout link.

- name: com.jennipro.shop/shop-local
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 89/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.jennipro.shop%2Fshop-local
- tools: https://api.protogrid.dev/v1/servers/com.jennipro.shop%2Fshop-local/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "shop-local": {
      "type": "http",
      "url": "https://shop.jennipro.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-1d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

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

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (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`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,463 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 recorded for 1 of the 7 days needed

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

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

- tools: 5, about 1,463 tokens to load them all
- tool set hash: 60dad8f4b88a5416ca18ed19a3d33900
- tools last changed: 2026-10-20T21:41:05.177Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.jennipro.shop/shop-local.svg)](https://protogrid.dev/servers/com.jennipro.shop/shop-local)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `get_buying_options` changed (outputSchema)
- 2026-10-20 `start_checkout` changed (description, inputSchema)
  - before: Call when the shopper has chosen to buy: the exact product_id (a variant's when it has sizes or colours), the store_id of an offer with is_eligible_checkout true or fulfillment concierge, a quantity and their ZIP. Re-checks the offer at that quantity and returns checkout_url: JENNi checkout with that item added to the shopper's basket, where they enter email, name, address and card and see delivery, tax and the total; nothing is charged until they place the order. For a concierge offer it returns a product page handoff, where the shopper sets quantity and the page checks request availability. This handoff does not create a durable quote, reserve stock or purchase anything. After get_buying_options retain its exact quantity, ZIP and fulfillment_mode.
  - after: Call when the shopper has chosen to buy: the exact product_id (a variant's when it has sizes or colours), the store_id of an offer with is_eligible_checkout true (concierge included) or omit store_id and JENNi picks the best orderable offer for the ZIP, a quantity and their ZIP. Re-checks the offer at that quantity and returns checkout_url: JENNi checkout with that item added to the shopper's basket, where they enter email, name, address and card and see delivery, tax and the total; nothing is charged until they place the order. Give the shopper checkout_url. After get_buying_options retain its exact quantity, ZIP and fulfillment_mode.
- 2026-10-20 `get_product` changed (description, outputSchema)
  - before: One product by the product_id search_catalog returned: the merchant's description and every shop's offer. Read-only. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns.
  - after: One product by the product_id search_catalog returned: the merchant's description and every shop's offer. Read-only. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns or omit store_id and JENNi picks the best orderable offer for the ZIP.
- 2026-10-20 `find_stores` changed (description)
  - before: Only when the shopper names a specific shop; for anything they want to buy, use search_catalog. Read-only shop directory by name. A listing proves no stock, price, delivery or checkout eligibility. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout for direct checkout. An offer explicitly marked fulfillment concierge may also use start_checkout for a hosted request handoff even when that flag is false. Retain the exact buying context. A handoff does not reserve stock, create a durable quote or complete a purchase.
  - after: Only when the shopper names a specific shop; for anything they want to buy, use search_catalog. Read-only shop directory by name. A listing proves no stock, price, delivery or checkout eligibility. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout (or omit store_id and JENNi picks the best orderable offer for the ZIP) for direct checkout (fulfillment concierge included: JENNi collects and delivers it). Retain the exact buying context. Give the shopper the checkout_url; nothing is charged until they place the order.
- 2026-10-20 `search_catalog` changed (description, outputSchema)
  - before: Search products across the United States for any 5-digit US ZIP code (local delivery near physical shops plus nationwide ship-to-home fallback) or a served market (e.g. san-antonio-tx). Read-only. Returns products, the shops that hold them and, per offer, whether it can be ordered through JENNi. To buy, give the shopper the url: they pick size/colour and check out as a guest, no account. Each product lists at most 5 offers, orderable ones first; call get_product for all of them. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns.
  - after: Search products across the United States for any 5-digit US ZIP code (local delivery near physical shops plus nationwide ship-to-home fallback) or a served market (e.g. san-antonio-tx). Read-only. Returns products, the shops that hold them and, per offer, whether it can be ordered through JENNi. To buy, give the shopper the url: they pick size/colour and check out as a guest, no account. Each product lists at most 5 offers, orderable ones first; call get_product for all of them. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns or omit store_id and JENNi picks the best orderable offer for the ZIP.
- 2026-10-20 `get_product` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Complete canonical product facts, read-only. Nullable titles, empty images/offers and unknown stock remain visible. Discovery never authorizes checkout; completion is unavailable. Store filters are rejected; postal context never filters facts. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout for direct checkout. An offer explicitly marked fulfillment concierge may also use start_checkout for a hosted request handoff even when that flag is false. Retain the exact buying context. A handoff does not reserve stock, create a durable quote or complete a purchase.
  - after: One product by the product_id search_catalog returned: the merchant's description and every shop's offer. Read-only. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns.
- 2026-10-20 `find_stores` changed (title, description, outputSchema)
  - before: Read-only shop directory by name. A listing proves no stock, price, delivery or checkout eligibility. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout for direct checkout. An offer explicitly marked fulfillment concierge may also use start_checkout for a hosted request handoff even when that flag is false. Retain the exact buying context. A handoff does not reserve stock, create a durable quote or complete a purchase.
  - after: Only when the shopper names a specific shop; for anything they want to buy, use search_catalog. Read-only shop directory by name. A listing proves no stock, price, delivery or checkout eligibility. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout for direct checkout. An offer explicitly marked fulfillment concierge may also use start_checkout for a hosted request handoff even when that flag is false. Retain the exact buying context. A handoff does not reserve stock, create a durable quote or complete a purchase.
- 2026-10-20 `search_catalog` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Complete canonical product facts, read-only. Nullable titles, empty images/offers and unknown stock remain visible. Discovery never authorizes checkout; completion is unavailable. Store filters are rejected; postal context never filters facts. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout for direct checkout. An offer explicitly marked fulfillment concierge may also use start_checkout for a hosted request handoff even when that flag is false. Retain the exact buying context. A handoff does not reserve stock, create a durable quote or complete a purchase.
  - after: Search products across the United States for any 5-digit US ZIP code (local delivery near physical shops plus nationwide ship-to-home fallback) or a served market (e.g. san-antonio-tx). Read-only. Returns products, the shops that hold them and, per offer, whether it can be ordered through JENNi. To buy, give the shopper the url: they pick size/colour and check out as a guest, no account. Each product lists at most 5 offers, orderable ones first; call get_product for all of them. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns.
- 2026-10-20 `find_stores` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/com.jennipro.shop%2Fshop-local/changes

## Remotes

- https://shop.jennipro.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (5)

- `find_stores`: Only when the shopper names a specific shop; for anything they want to buy, use search_catalog. Read-only shop directory by name. A listing proves no stock, price, delivery or checkout eligibility. Use search_catalog for product facts without store filters; it does not verify stock, price or delivery. Then call get_buying_options with the exact product_id, zip, quantity and fulfillment_mode. After the buyer chooses a returned offer with is_eligible_checkout true, use its store_id with start_checkout (or omit store_id and JENNi picks the best orderable offer for the ZIP) for direct checkout (fulfillment concierge included: JENNi collects and delivers it). Retain the exact buying context. Give the shopper the checkout_url; nothing is charged until they place the order.
- `get_buying_options`: Read verified buying options for the exact product, destination, quantity and fulfillment mode. Empty offers mean no options verified for this request, not that the product does not exist. Choose an eligible store, then start_checkout with the same context; the buyer approves and pays in hosted checkout.
- `get_product`: One product by the product_id search_catalog returned: the merchant's description and every shop's offer. Read-only. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns or omit store_id and JENNi picks the best orderable offer for the ZIP.
- `search_catalog`: Search products across the United States for any 5-digit US ZIP code (local delivery near physical shops plus nationwide ship-to-home fallback) or a served market (e.g. san-antonio-tx). Read-only. Returns products, the shops that hold them and, per offer, whether it can be ordered through JENNi. To buy, give the shopper the url: they pick size/colour and check out as a guest, no account. Each product lists at most 5 offers, orderable ones first; call get_product for all of them. Before start_checkout, call get_buying_options with the exact product_id (a variant's product_id when it has sizes or colours), zip, quantity and fulfillment_mode, and use a store_id it returns or omit store_id and JENNi picks the best orderable offer for the ZIP.
- `start_checkout`: Call when the shopper has chosen to buy: the exact product_id (a variant's when it has sizes or colours), the store_id of an offer with is_eligible_checkout true (concierge included) or omit store_id and JENNi picks the best orderable offer for the ZIP, a quantity and their ZIP. Re-checks the offer at that quantity and returns checkout_url: JENNi checkout with that item added to the shopper's basket, where they enter email, name, address and card and see delivery, tax and the total; nothing is charged until they place the order. Give the shopper checkout_url. After get_buying_options retain its exact quantity, ZIP and fulfillment_mode.
