JENNi Shop Local
Search local-shop and ship-to-home products by US ZIP and get a JENNi checkout link.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"shop-local": {
"url": "https://shop.jennipro.com/mcp"
}
}
}Remote-Endpunkte
https://shop.jennipro.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (5)
🟢search_catalog(query, zip, market, limit)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What the shopper wants, e.g. \"running shoes\"."
},
"zip": {
"type": "string",
"description": "5-digit US ZIP code the shopper is in, e.g. 78205."
},
"market": {
"type": "string",
"description": "Market key, e.g. san-antonio-tx. Used when no zip is given."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Products to return (default 10)."
}
},
"required": [
"query"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"location": {
"type": [
"string",
"null"
],
"description": "The place searched around; null for none."
},
"delivers_here": {
"type": [
"string",
"null"
],
"description": "The market we deliver in at that location; null when we deliver in none."
},
"store_id": {
"type": [
"string",
"null"
],
"description": "The one shop searched; null for all shops."
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"title": {
"type": "string"
},
"brand": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "Headline price in USD; null when none is held."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"description": {
"type": [
"string",
"null"
],
"description": "The merchant's own description (get_product only)."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured."
},
"size": {
"type": [
"string",
"null"
],
"description": "Size of the variant product_id names; null when it has none."
},
"color": {
"type": [
"string",
"null"
],
"description": "Colour of the variant product_id names; null when it has none."
},
"variants": {
"type": "array",
"description": "Buyable size/colour variants. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all.",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"size": {
"type": [
"string",
"null"
]
},
"color": {
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page opened on this variant."
}
},
"required": [
"product_id"
]
}
},
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": [
"string",
"null"
],
"description": "The exact variant this shop holds."
},
"store_id": {
"type": "string"
},
"store_name": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"distance_miles": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "USD, e.g. \"$12.50\". Null when we hold no current price."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"is_eligible_search": {
"type": "boolean"
},
"is_eligible_checkout": {
"type": "boolean",
"description": "True: this offer can be ordered through JENNi; call start_checkout with it when the shopper wants to buy. start_checkout and the checkout page re-check the offer and say why if it can no longer be ordered, so do not ask the shopper to confirm stock or hours first. False: do not send the shopper to checkout for this offer. Nothing is charged until the shopper places the order on the checkout page."
},
"fulfillment": {
"type": "string",
"enum": [
"pickup",
"local_delivery",
"ship_to_home",
"concierge",
"in_store_only"
],
"description": "`local_delivery`: delivered from the shop. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."
},
"availability": {
"type": [
"string",
"null"
],
"enum": [
"in_stock",
"out_of_stock",
null
],
"description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Do not call it in or out of stock; when is_eligible_checkout is true it can still be ordered."
},
"shelf_observed_at": {
"type": [
"string",
"null"
],
"description": "When the shelf was last read. Null means never."
},
"note": {
"type": "string",
"description": "The disclosure a shopper sees for this shop; relay it."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page for this exact offer."
}
},
"required": [
"store_id",
"is_eligible_search",
"is_eligible_checkout",
"fulfillment",
"availability"
]
}
},
"offer_count": {
"type": "integer",
"description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all."
}
},
"required": [
"product_id",
"title",
"offers"
]
}
}
},
"required": [
"query",
"products"
]
}🟢find_stores(name, zip, market, limit)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Shop name or part of it, e.g. \"Cheeky Monkey\"."
},
"zip": {
"type": "string",
"description": "5-digit US ZIP code: searches the shops within 15 miles of it first, then the national list. Pass it for any shop outside San Antonio."
},
"market": {
"type": "string",
"description": "Market key, e.g. san-antonio-tx. Used when no zip is given."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Shops to return (default 10)."
}
},
"required": [
"name"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"location": {
"type": [
"string",
"null"
]
},
"partial": {
"type": "boolean",
"description": "True when not every listed shop could be compared."
},
"next_step": {
"type": "string",
"description": "Present when no shop matched."
},
"stores": {
"type": "array",
"items": {
"type": "object",
"properties": {
"store_id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"distance_miles": {
"type": [
"number",
"null"
]
},
"url": {
"type": [
"string",
"null"
],
"description": "The shop's page on the storefront."
},
"alias_store_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Other store ids JENNi folded into this same physical shop. Display only; refer to the shop by store_id."
}
},
"required": [
"store_id",
"name",
"address",
"distance_miles",
"url"
]
}
}
},
"required": [
"name",
"stores",
"partial"
]
}🟢get_product(product_id, zip, market)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"zip": {
"type": "string",
"description": "5-digit US ZIP code, for local prices and distances."
},
"market": {
"type": "string",
"description": "Market key, e.g. san-antonio-tx. Used when no zip is given."
}
},
"required": [
"product_id"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"product": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"title": {
"type": "string"
},
"brand": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "Headline price in USD; null when none is held."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"description": {
"type": [
"string",
"null"
],
"description": "The merchant's own description (get_product only)."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured."
},
"size": {
"type": [
"string",
"null"
],
"description": "Size of the variant product_id names; null when it has none."
},
"color": {
"type": [
"string",
"null"
],
"description": "Colour of the variant product_id names; null when it has none."
},
"variants": {
"type": "array",
"description": "Buyable size/colour variants. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all.",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"size": {
"type": [
"string",
"null"
]
},
"color": {
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page opened on this variant."
}
},
"required": [
"product_id"
]
}
},
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": [
"string",
"null"
],
"description": "The exact variant this shop holds."
},
"store_id": {
"type": "string"
},
"store_name": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"distance_miles": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "USD, e.g. \"$12.50\". Null when we hold no current price."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"is_eligible_search": {
"type": "boolean"
},
"is_eligible_checkout": {
"type": "boolean",
"description": "True: this offer can be ordered through JENNi; call start_checkout with it when the shopper wants to buy. start_checkout and the checkout page re-check the offer and say why if it can no longer be ordered, so do not ask the shopper to confirm stock or hours first. False: do not send the shopper to checkout for this offer. Nothing is charged until the shopper places the order on the checkout page."
},
"fulfillment": {
"type": "string",
"enum": [
"pickup",
"local_delivery",
"ship_to_home",
"concierge",
"in_store_only"
],
"description": "`local_delivery`: delivered from the shop. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."
},
"availability": {
"type": [
"string",
"null"
],
"enum": [
"in_stock",
"out_of_stock",
null
],
"description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Do not call it in or out of stock; when is_eligible_checkout is true it can still be ordered."
},
"shelf_observed_at": {
"type": [
"string",
"null"
],
"description": "When the shelf was last read. Null means never."
},
"note": {
"type": "string",
"description": "The disclosure a shopper sees for this shop; relay it."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page for this exact offer."
}
},
"required": [
"store_id",
"is_eligible_search",
"is_eligible_checkout",
"fulfillment",
"availability"
]
}
},
"offer_count": {
"type": "integer",
"description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all."
}
},
"required": [
"product_id",
"title",
"offers"
]
}
},
"required": [
"product"
]
}🟢start_checkout(product_id, store_id, quantity, fulfillment_mode, zip)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"description": "The exact item: a variant's product_id when it has variants."
},
"store_id": {
"type": "string",
"description": "Optional. store_id of an offer with is_eligible_checkout true, or a concierge offer. Omit it and JENNi picks the best orderable offer for the ZIP."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99,
"description": "How many (default 1)."
},
"fulfillment_mode": {
"type": "string",
"enum": [
"local_delivery",
"ship_to_home"
],
"description": "Retain the mode chosen from get_buying_options."
},
"zip": {
"type": "string",
"description": "5-digit US ZIP code the order is delivered to, e.g. 78205."
}
},
"required": [
"product_id",
"zip",
"quantity",
"fulfillment_mode"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"basket",
"concierge_request"
]
},
"checkout_url": {
"type": "string"
},
"item": {
"type": "string"
},
"store_name": {
"type": [
"string",
"null"
]
},
"unit_price": {
"type": [
"string",
"null"
],
"description": "The shelf price the page shows; checkout states the total."
},
"quantity": {
"type": "integer"
},
"next_step": {
"type": "string"
}
},
"required": [
"kind",
"checkout_url",
"next_step"
]
}🟢get_buying_options(product_id, zip, quantity, fulfillment_mode)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"maxLength": 128
},
"zip": {
"type": "string",
"pattern": "^[0-9]{5}$"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"fulfillment_mode": {
"type": "string",
"enum": [
"local_delivery",
"ship_to_home"
]
}
},
"required": [
"product_id",
"zip",
"quantity",
"fulfillment_mode"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"product": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"title": {
"type": "string"
},
"brand": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "Headline price in USD; null when none is held."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"description": {
"type": [
"string",
"null"
],
"description": "The merchant's own description (get_product only)."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured."
},
"size": {
"type": [
"string",
"null"
],
"description": "Size of the variant product_id names; null when it has none."
},
"color": {
"type": [
"string",
"null"
],
"description": "Colour of the variant product_id names; null when it has none."
},
"variants": {
"type": "array",
"description": "Buyable size/colour variants. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all.",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string"
},
"size": {
"type": [
"string",
"null"
]
},
"color": {
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page opened on this variant."
}
},
"required": [
"product_id"
]
}
},
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": [
"string",
"null"
],
"description": "The exact variant this shop holds."
},
"store_id": {
"type": "string"
},
"store_name": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"distance_miles": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"string",
"null"
],
"description": "USD, e.g. \"$12.50\". Null when we hold no current price."
},
"shelf_price": {
"type": [
"string",
"null"
],
"description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
},
"is_eligible_search": {
"type": "boolean"
},
"is_eligible_checkout": {
"type": "boolean",
"description": "True: this offer can be ordered through JENNi; call start_checkout with it when the shopper wants to buy. start_checkout and the checkout page re-check the offer and say why if it can no longer be ordered, so do not ask the shopper to confirm stock or hours first. False: do not send the shopper to checkout for this offer. Nothing is charged until the shopper places the order on the checkout page."
},
"fulfillment": {
"type": "string",
"enum": [
"pickup",
"local_delivery",
"ship_to_home",
"concierge",
"in_store_only"
],
"description": "`local_delivery`: delivered from the shop. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."
},
"availability": {
"type": [
"string",
"null"
],
"enum": [
"in_stock",
"out_of_stock",
null
],
"description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Do not call it in or out of stock; when is_eligible_checkout is true it can still be ordered."
},
"shelf_observed_at": {
"type": [
"string",
"null"
],
"description": "When the shelf was last read. Null means never."
},
"note": {
"type": "string",
"description": "The disclosure a shopper sees for this shop; relay it."
},
"url": {
"type": [
"string",
"null"
],
"description": "Storefront page for this exact offer."
}
},
"required": [
"store_id",
"is_eligible_search",
"is_eligible_checkout",
"fulfillment",
"availability"
]
}
},
"offer_count": {
"type": "integer",
"description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all."
}
},
"required": [
"product_id",
"title",
"offers"
]
},
"requested_context": {
"type": "object",
"required": [
"product_id",
"postal_code",
"quantity",
"fulfillment_mode"
],
"properties": {
"product_id": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"fulfillment_mode": {
"type": "string",
"enum": [
"local_delivery",
"ship_to_home"
]
}
}
}
},
"required": [
"product",
"requested_context"
]
}Community
Nachweis