Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Certificate changed, valid to 2027-01-16
Live → Recently observed
Certificate changed, valid to 2027-01-14
Servers that share this record's repository now have records of their own: "ozerki-via-agentpay". Checks before this date include them.
Recently observed → Live
Live → Recently observed
Changed the definition of "check_dixy_live_cart" and "prepare_dixy_checkout"
Dixy-only live basket resolver.Call after secure Dixy sign-in and before quoting a price or using checkout wording.Passevery shopping-listitemas queryqueries plus optional preferredid: theexternalservercatalogconfirmsids.deliveryThemode,server searchesDiginetica candidatestheandselected
Changed the definition of "check_dixy_live_cart", "poll_dixy_call_auth", "prepare_dixy_checkout" and 1 more
⟨27 unchanged words⟩ id: the server confirms delivery mode, searchesup to fiveDiginetica candidatesper query,and retrieslive-cartalternativesitself.within a capped storefront-mutation budget. Never tell the owner to select products manually on dixy.ru. Preserve resolvedItems. Ifsometheslotsbudgetremainisunresolvedexhausted,broaden
Changed the definition of "check_dixy_live_cart", "get_product", "list_allowed_stores" and 4 more
Dixy-only livecart buyabilitybasketcheck.resolver. Call afterselecting candidatesecure Dixyproductssign-in and beforeanyquotingDixya price or using checkout wording.RequiresPassonlyeveryDixyshopping-list
Changed the definition of "get_choice_status", "get_faq", "get_ozerki_pickup_options" and 5 more
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Changed the definition of "check_dixy_live_cart", "poll_dixy_call_auth" and "prepare_dixy_checkout"
⟨10 unchanged words⟩ products and before any Dixy checkout wording. RequiresowneronlyauthDixy phone authorization, never AgentPay authorization. If dixySessionId is missing, call start_dixy_call_auth andapoll_dixy_call_auth,connectedthenDixypassaccount/context.the returned partner_session_id. It checks whether web product IDs can actually ⟨79 unchanged words⟩
Certificate recorded, valid to 2026-11-15
Authorization not required
First tool surface recorded: 8 tools (server version 0.2.4)
https://agentpay.shop/ap/mcp/ozerki (mcp_streamable_http) — from mcp_registry
Changed the definition of "begin_agent_link" and "create_purchase"
⟨44 unchanged words⟩ to paste ap_ from the cabinet. Never startOAuth.an authorization flow during setup.
Requires the owner's connection, but never OAuth: if there is no session, call begin_agent_link ⟨274 unchanged words⟩
Authorization not required
Changed the definition of "begin_agent_link", "create_purchase", "get_ozerki_pickup_options" and 3 more
StartAgentPay browser connect ONLY iftheMCP connector has no OAuth/Bearer yet (Auth: None hosts). If the host already supportsoptionalOAuthAgentPayonbrowsertheconnectconnector,onlydowhenNOTacallpersonalthis
Added "get_ozerki_pickup_options"; changed the definition of "prepare_ozerki_handoff" and "search_products" (33 tools before, 34 now)
Ozerki-only preflight and shared-cart handoff. Call only afterselectingfulfillmentOzerkiisgoodsIdagreeditemswithandtheafterowner.theForownerpickup,chose
Removed "get_dixy_fulfillment_options"; changed the definition of "check_dixy_live_cart", "prepare_dixy_checkout", "prepare_ozerki_handoff" and 1 more (34 tools before, 33 now)
Dixy-only live cart buyability check.First call get_dixy_fulfillment_options and make the owner choose delivery or pickup: assortments, restricted goods, delivery slots, store hours, and minimums differ. Then call thisCall after selecting candidate Dixy products and before any ⟨14 unchanged words⟩ web product IDs can actually be added forthe selectedastore/addressdelivery/pickupcontextaddress and returns canBuy/amount/cart signals. Dixyonline checkoutdelivery usually requires a 1000 RUB minimumorder for delivery and pickup;order; warn the owner before checkout if the basket ⟨52 unchanged words⟩
Added "get_dixy_fulfillment_options"; changed the definition of "check_dixy_live_cart", "prepare_dixy_checkout" and "start_dixy_call_auth" (33 tools before, 34 now)
Dixy-only live cart buyability check.CallFirst call get_dixy_fulfillment_options and make the owner choose delivery or pickup: assortments, restricted goods, delivery slots, store hours, and minimums differ. Then call this after selecting candidate Dixy products and before any ⟨14 unchanged words⟩ web product IDs can actually be added forathedelivery/pickupselectedaddressstore/address context and returns canBuy/amount/cart signals. Dixydeliveryonline checkout usually requires a 1000 RUB minimum
Authorization not required
Added "prepare_ozerki_handoff"; changed the definition of "prepare_dixy_checkout" (32 tools before, 33 now)
⟨99 unchanged words⟩ retry with clearExistingCart:true only after explicit approval. If order creation later returns action=showAuth / DIXY_REAUTH_REQUIRED, explain: the basket can still work, but creating the order requires refreshing Dixy login; start_dixy_call_auth, show the phone number/current time/expiry, then poll_dixy_call_auth after the owner says «Готово» and immediately retry checkout. If order creation returns DIXY_ANTIBOT_REQUIRED, explain plainly that Dixy showed a «Я не робот» check on server-side checkout, so AgentPay needs a user-side browser handoff or official partner checkout API/whitelist; do not claim an order/payment URL exists. Do not mention cookies/PHPSESSID to the owner. This does not create a Dixy order and ⟨54 unchanged words⟩
Ozerki-only preflight and shared-cart handoff. Call after selecting Ozerki goodsId items and after the owner chose delivery or pickup. It creates a fresh Ozerki basket session, checks live basket calculation, blocks delivery when prescription/Rx items are present, checks courier address serviceability/timeslots, checks darkstore/payment compatibility, and creates a public shared-cart link only if the flow is safe enough to hand to the user. This does NOT create the final Ozerki order and does NOT pay. The user opens the shared-cart link, presses Ozerki's own add-to-basket button, then finishe…
Authorization not required
Added "check_dixy_live_cart", "get_partner_purchase_context", "poll_dixy_call_auth" and 3 more; changed the definition of "begin_agent_link", "create_purchase", "get_recovery_guide" and 5 more (26 tools before, 32 now)
⟨22 unchanged words⟩ OAuth on the connector, do NOT callthis;this — the host must complete OAuth once and keep the token. Pass client: claude|codex|cursor|chatgpt|grok|terminal|other. No API key required. Open openUrlFIRST. Always giveso the ownerthe https://agentpay.su URL. pageUrlRu/openUrlRu are the same .su link for compatibility. MUST NOT rewrite agentpay.su to agentpay.shop.clicksSpeakРазрешить,sayToUserRuthenverbatim.poll_agent_link. Never invent keys. Never ask the owner to
Authorization not required
Changed the definition of "begin_agent_link", "create_purchase", "get_recovery_guide" and 2 more
⟨22 unchanged words⟩ OAuth on the connector, do NOT callthis —this; the host must complete OAuth once and keep the token. Pass client: claude|codex|cursor|chatgpt|grok|terminal|other. No API key required. Open openUrlFIRST —FIRST. Always give the owner the https://agentpay.su URL.TheypageUrlRu/openUrlRu areon VPN. Also mention https://agentpay.shop ifthetheysameopen.suitlinkwithoutfor
Certificate recorded, valid to 2026-11-15
Authorization not required
First tool surface recorded: 26 tools (server version 0.2.3)
Showing the latest 30 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨24 unchanged words⟩ Dixy session.","type":"string"},"fulfillment":{"description":"Requested receiving mode. Defaults to delivery. For pickup use the fixed demo shop address; never silently change modes.","enum":["delivery","pickup"],"type":"string"},"items":{"items":{"properties":{"id ⟨116 unchanged words⟩
⟨74 unchanged words⟩ Dixy session.","type":"string"},"fulfillment":{"description":"Same receiving mode confirmed in live-cart. Defaults to delivery; for pickup delivery.address must be the demo storeAddress.","enum":["delivery","pickup"],"type":"string"},"items":{"items":{"properties":{"id ⟨80 unchanged words⟩
⟨6 unchanged words⟩ after the owner completes it in the browser.Call withPrefer linkSessionId fromstart_dixy_call_auth.start_dixy_call_auth; attemptId and sessionId are accepted aliases for MCP hosts that rename opaque IDs. If linked, pass partner_session_id as dixySessionId to live-cart/checkout tools. Repeating this poll is safe and must not trigger another phone call. Never ask for a phone number in chat ⟨37 unchanged words⟩
{"additionalProperties":false,"properties":{"attemptId":{"description":"Alias of linkSessionId for hosts that rename opaque attempt identifiers.","type":"string"},"linkSessionId":{"description":"Opaque linkSessionId returned by start_dixy_call_auth (preferred).","type":"string"},"partner_session_id":{"description":"Already resolved Dixy partner session; accepted for idempotent retries.","type":"string"},"sessionId":{"description":"Optional. Agent-link sessionId from ⟨34 unchanged words⟩ has none).","type":"string"}},"required":["linkSessionId"],"type":"object"}
⟨108 unchanged words⟩ order creation later returns action=showAuth / DIXY_REAUTH_REQUIRED, use the fresh openUrl and linkSessionId included in that same error; call start_dixy_call_auth(forceNew:true)againonlyandifsharetheitsrecoverysecurelinkopenUrl;isneverabsent. Never ask for a phone number in chat. Pollwith linkSessionIdafter the owner completes the page, then ⟨108 unchanged words⟩
Createaor recover the secure Dixysign-in link.sign-in. Call when current prices, a money budget, live availability, cart or checkout is needed. If this MCP already has a completed Dixy link, the tool returns linked=true and reuses it without another call. Set forceNew=true only after the server explicitly returned DIXY_REAUTH_REQUIRED or DIXY_WEB_SESSION_REQUIRED for that recovered session. It takes no phonenumber andnumber.returnsWhen openUrl+islinkSessionId.returned,Open/shareshareopenUrlit immediately: the owner enters the phone and ⟨63 unchanged words⟩
{"additionalProperties":false,"properties":{"forceNew":{"description":"True only after an explicit Dixy session-expired/session-required server error; bypasses recovery of the old completed link.","type":"boolean"},"sessionId":{"description":"Optional. Agent-link sessionId from ⟨41 unchanged words⟩
{"additionalProperties":false,"properties":{"address":{"description":"User-visible delivery address; use with exact lat/lon","type":"string"},"dixySessionId":{"description":"partner_session_id returned by poll_dixy_call_auth. ⟨10 unchanged words⟩ {"properties":{"id":{"description":"DixyOptionalwebpreferred Diginetica/web productidid; the server retries alternatives if it is unavailable","type":"string"},"quantity":{"type":"number"},"query":{"description":"Natural-language item slot, for example «филе курицы»","type":"string"}},"required":["idquery"],"type":"object"},"type": ⟨81 unchanged words⟩
⟨47 unchanged words⟩ , catalogSyncedAt, priceSource (feed|live). Always includes an attributed url, AgentPay trackedUrl, and pick (whyRu + steps + settings). Whenever you give the owner a merchant product link, use trackedUrl, never reconstruct or replace it with url. Pass q as the owner's search phrase so ⟨62 unchanged words⟩
⟨47 unchanged words⟩ , «где можно потратить», «спецмагазин», «тестовый магазин». Set demoOnly=true when the owner explicitly asks about «демо-каталог» or test shops; then discuss only returned demo stores and never bring up Dixy/Ozerki. For «найди» / «сравни» / «подбери» call peek_stores ⟨60 unchanged words⟩
{"additionalProperties":false,"properties":{"demoOnly":{"description":"True only for an explicit demo/test-catalog request. Excludes live partner stores from the answer.","type":"boolean"},"need":{"description":"Optional topic to match ⟨57 unchanged words⟩
Pollathe secure Dixycall-authsign-inattemptlink after the ownersayscompletesoritclicksin«Готово».the browser. Call withthe attemptIdlinkSessionId from start_dixy_call_auth. Ifit returns waiting_call_confirm, tell the owner Dixy is still waiting and offer to retry. Iflinked, passthe returnedpartner_session_id as dixySessionId tofuture Dixylive-cart/checkout tools.This isNevertheaskonlyforauthorizationainphonethenumberdedicatedinDixychatMCP;and never requestAgentPaya separate platform authorization. If AGENTPAY_API_KEY required and you already have ⟨23 unchanged words⟩
{"additionalProperties":false,"properties":{"attemptIdlinkSessionId":{"type":"string"},"sessionId": ⟨42 unchanged words⟩ "type":"string"}},"required":["attemptIdlinkSessionId"],"type":"object"}
⟨108 unchanged words⟩ order creation later returns action=showAuth / DIXY_REAUTH_REQUIRED,explain: the basket cancallstillstart_dixy_call_authwork,againbutandcreatingsharetheitsordersecurerequiresopenUrl;refreshingneverDixyasklogin;forstart_dixy_call_auth,ashowphonethenumberphoneinnumber/currentchat.time/expiry,Pollthenwithpoll_dixy_call_authlinkSessionId after the ownersayscompletes«Готово»theandpage,immediatelythen retry checkout. If order creation returns DIXY_ANTIBOT_REQUIRED, ⟨101 unchanged words⟩
Search products in allowlisted AgentPay stores. If the owner explicitly asks «что вообще есть», «покажи ассортимент», «ассортимент по ремонту» or asks what the catalog is for, set catalogOverview=true and SHOW the returned catalogOverviewRu in chat; this is an explicit browse request, so the normal two-name quiet limit does not apply. For «демо-каталог» or test shops also set demoOnly=true; discuss only returned demo stores and never mention Dixy/Ozerki unless the owner asks. If this is the Ozerki MCP profile, ALWAYS call this tool for ⟨146 unchanged words⟩ specSummaryRu, compareHighlightRu — not stale training data. Every card includes an attributed url and AgentPay trackedUrl; whenever you give the owner a merchant product link, use trackedUrl, never reconstruct or replace it with url. Server returns preferredStoreRoutingRu + catalogSearchScopeRu: if the owner ⟨227 unchanged words⟩ this tool or get_product. Never call for thinking/advice.NeverOutside catalogOverview, never dump the result list. Never ask for a ⟨36 unchanged words⟩
{"additionalProperties":false,"properties":{"catalogOverview":{"description":"True when the owner explicitly asks to see or understand the assortment. Returns a grouped overview that should be shown in chat.","type":"boolean"},"demoOnly":{"description":"True for an explicit demo/test-catalog request. Excludes live partner stores such as Dixy and Ozerki.","type":"boolean"},"limit":{"description":"Max hits per store ⟨190 unchanged words⟩
Start Dixy web-session auth by phone call for the owner. Use only when the owner explicitly wantsCreatetoaconnectsecure Dixyin-agentsign-inandlink.provides/approvesCallthewhenDixycurrentaccountprices,phone.aReturnsmoneyconfirmationNumberbudget,attemptId,liveattemptCreatedAtavailability,attemptExpiresAt,cartandorattemptTtlSeconds.checkoutShowisconfirmationNumberneeded.formattedItastakesano phone number,tell theandownerreturnstheopenUrlcurrent+timelinkSessionId.andOpen/shareuntilopenUrlwhenimmediately: thecallownerattemptentersisthevalid,phone andexplain that if they missconfirms thewindow theDixyattemptcallmustonbethatrecreated.page,Ifso thehostphonesupportsneveranentersin-agentchat«Готово»orbutton,modelwirecontext.thatNeverbuttonasktothepoll_dixy_call_authownerwithtothetypereturnedorattemptId.approveThisadoesphonenotnumberexposeinDixychat.cookies/tokensThentopoll_dixy_call_auththewithmodel.linkSessionId. If AGENTPAY_API_KEY required and you already have sessionId ⟨22 unchanged words⟩
{"additionalProperties":false,"properties":{"phone":{"description":"Owner's Dixy account phone, e.g. +79776134508","type":"string"},"sessionId":{"description":"Optional. Agent-link sessionId from ⟨34 unchanged words⟩ has none).","type":"string"}},"required":["phone"],"type":"object"}
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
{"additionalProperties":false,"properties":{"dixySessionId":{"description":"partner_session_id returned by poll_dixy_call_auth. This is the opaque Dixy session.","type":"string"},"items":{"items":{"properties":{"id ⟨96 unchanged words⟩
⟨28 unchanged words⟩ waiting and offer to retry. If linked,thepassbackendtheencryptedreturnedthepartner_session_idweb-sessionasartifactdixySessionIdandto future Dixy live-cart/checkouttoolstools.canThisuseisit.the only authorization in the dedicated Dixy MCP; never request AgentPay authorization. If AGENTPAY_API_KEY required and you already have sessionId ⟨22 unchanged words⟩
⟨61 unchanged words⟩ ["address"],"type":"object"},"dixySessionId":{"description":"partner_session_id returned by poll_dixy_call_auth. This is the opaque Dixy session.","type":"string"},"items":{"items":{"properties":{"id ⟨80 unchanged words⟩
Requiresownertheauthowner's(connection, but never OAuth:orif there is no session, call begin_agent_link).and poll_agent_link first. Without it refuse and start browser connect — do not pretend the order went ⟨257 unchanged words⟩
Ozerki pickup-pointresolver.resolver for multi-brand Ozerki-network pharmacies. MUST be called before handoff when the owner ⟨18 unchanged words⟩ for pickup: pass the intended goodsId basket (include each product name so missingItems are human-readable) and near with at least city + metro/street/district (for example 'метро Белорусская, Москва'), or lat/lon. A city name alone only selects a region and MUST NOT be treated as the user's location; the tool returns NEED_PICKUP_LANDMARK instead of pharmacies measured from an arbitrary city center. If neither landmark nor coordinates are known, ask ⟨6 unchanged words⟩ metro/street/district; do not build a basket yet. Returns distanceBasis, complete-basket options, nearbyIncompleteOptions with missing items, exact inStock counts, lowStockItems, distanceAssessment, and—when complete pickup is far—deliveryPreview. Always quote inStock for the relevant items. If stockRisk=last_units or inStock<=3, explicitly say how many units remain and warn they may sell before the visit or checkout. For an exact-pharmacy question such as «есть ли препарат X в аптеке Y», set exactPharmacy=true and pass the exact branch address in near. Answer only from exactPharmacyResult with available and inStock; NEVER substitute another nearbymulti-brandpharmacy.Ozerki-networkIfpharmaciesmatched=false,whereaskeveryonerequestedshortquantityclarification for the network and full address. Always tell the owner which distanceBasis label was used and also offer delivery as an alternative. If distanceAssessment.requiresFulfillmentChoice iscurrentlytrue,inStockNEVERatsilentlythatchoose the distant complete pharmacy: show nearer incomplete points and missing products,includingthenstoreIdreport deliveryPreview in two stages—preliminary area/item availability near the landmark,brandand the need for an exact house to confirm the final zone,addressprice,hoursand timeslots. Never promise final delivery when canPromiseFinalDelivery=false. Then offer delivery,distancereplacements,andoritemexplicitavailability.consent to distant pickup. Treat all returned brands (Озерки, Доктор Столетов, Самсон-Фарма, МосАптека, Аптека.ру, etc.) as valid Ozerki partner pickup points.Present 1–3 nearest options and also offer delivery as an alternative; explain that delivery live-check needs the full address.Get the owner's explicit fulfillment/store choice BEFORE building ⟨49 unchanged words⟩
{"additionalProperties":false,"properties":{"exactPharmacy":{"description":"Set true only when the owner asks about one specific pharmacy; read exactPharmacyResult and never substitute a different nearby branch.","type":"boolean"},"items":{"items":{"properties":{"goodsId ⟨3 unchanged words⟩ "type":["string","number"]},"name":{"description":"Product name used to explain missing items at nearer pharmacies","type":"string"},"quantity":{"type":"number"}},"required ⟨23 unchanged words⟩ number"},"near":{"description":"User'slandmark,metro station, district, street, or exact pharmacy address, including city. A citywhennamepossiblealone is insufficient.","type":"string"},"regionId":{ ⟨61 unchanged words⟩
Get one ProductCard by product_id + store_id from an allowlisted store.Without ownerPublic/demoauth:catalogdemo/testneedscatalognoonly.authorization. For live stock and price on the owner's allowlist, connectfirstonly(if the owner asks for personal/live data: begin_agent_link/→OAuth)poll_agent_link, then call again. Returns merchant-synced price, inStock ⟨89 unchanged words⟩
Ozerki-only availability preflight andshared-carttracked basket handoff. Call only after fulfillment is agreed with ⟨35 unchanged words⟩ selection for the owner after handoff. This toolcreates a fresh Ozerki basket session,selects the agreed pharmacy, checks exact goodsId + quantity and payment compatibility there,andthencreatesreturnsahandoffUrl:publicnormallyshared-cartalinktrackedonlyextCartafterlink thatpoint is confirmed. This doesimportsNOTdirectlycreateinto thefinalordinary Ozerkiorder andbasket.doesWarnNOTthatpay.extCartThemergesownerwithmayanyneedexistingtobasketre-confirmand thealready-agreed pharmacyowneronmustOzerkicheckbecausetheshared-cartfinalcannotcontents.persistIfstoredirectselection.importThefails,firstuseshared-cartfallbackUrl,screenaistracked«Списокshared-cartтоваров»;link.theNeitherquantitylinkstepperpersistscanstoreshowselection,0sountilname theowneralready-checkedpressesaddresstheandredsay«ДобавитьOzerkiвmayкорзину»askbutton.toThatconfirmisitexpectedagain.andThismustdoesnotNOTbecreatedescribedtheasfinalanOzerkiemptyorderbasketandwhendoescanHandoff=true.NOT pay. If a line status is available_darkstore, handoff ⟨102 unchanged words⟩
⟨46 unchanged words⟩ no city or region from the owner meansglobalthecatalogglobal.xml feed (omit location and regionId); a named city/region ⟨28 unchanged words⟩ Never silently default an unknown location to Moscow.RegionalFeed availability is still preliminary: read attributes.availabilityScope, availabilityRegionRu ⟨350 unchanged words⟩
{"additionalProperties":false,"allOf":[{"if":{"properties":{"fulfillment":{"const":"pickup"}},"required":["fulfillment"]},"then":{"required":["storeId"]}}],"properties":{"address":{"additionalProperties":false,"properties":{" ⟨138 unchanged words⟩ :"string"},"storeId":{"description":"PickupRequiredpharmacy/storefor pickup: store idwhenexplicitlyselectedchosen by the owner from get_ozerki_pickup_options","type":["string","number"]} ⟨5 unchanged words⟩
Search products in allowlisted AgentPay stores. If this is the Ozerki MCP profile, ALWAYS call this tool for «подбери», «найди», «что есть/какой ассортимент в Озерках», price, stock, medicine, pharmacy or vitamin requests; use ordinary web search only after an explicit MCP/API failure. Ozerki geography is progressive: no city or region from the owner means global catalog (omit location and regionId); a named city/region means pass location and the server resolves the matching regional feed; a metro/street/district means use the candidates only to choose goods, then call get_ozerki_pickup_options for exact pharmacy stock. Never silently default an unknown location to Moscow. Regional availability is still preliminary: read attributes.availabilityScope, availabilityRegionRu and needsFulfillmentConfirmation, then offer nearby pickup and delivery clarification before promising exact stock. Without owner auth this hits the public demo ⟨329 unchanged words⟩
⟨10 unchanged words⟩ default 10)","type":"number"},"location":{"description":"Optional city or region explicitly named by the owner, for example Москва or Санкт-Петербург. Omit when geography is unknown. For metro/street/district, follow search with get_ozerki_pickup_options.","type":"string"},"need":{"description":"Alias of q — ⟨34 unchanged words⟩ string, not an address.","type":"string"},"regionId":{"description":"Optional explicit Ozerki region id. Omit unless known; location is preferred for a named city.","type":"number"},"search":{"description":"Alias of ⟨87 unchanged words⟩
Ozerki pickup-point resolver. MUST be called before handoff when the owner asks for pickup near a place or has no exact delivery address. An exact address is NOT required for pickup: pass the intended goodsId basket and near with at least city + metro/street/district (for example 'метро Белорусская, Москва'), or lat/lon. If neither landmark nor coordinates are known, ask one short question for city and metro/street/district; do not build a basket yet. Returns only nearby multi-brand Ozerki-network pharmacies where every requested quantity is currently inStock at that pharmacy, including store…
⟨94 unchanged words⟩ if already selected","type":"string"},"type":{"description":"Fulfillment mode chosen by the owner. Use delivery for courier delivery, pickup for self-pickup.","enum":["delivery","pickup"],"type":"string"}},"required":["items"],"type":"object"}
Dixy-only checkout preparation. Call only afterget_dixy_fulfillment_options,check_dixy_live_cart,and after the owner hasapprovedprovided/approved deliveryor pickupaddress details.The delivery object MUST include type=delivery or type=pickup.Uses the owner's connected Dixy web session to setstore/addressdeliverycontextstore/address, add/update cart lines, and return a real ⟨7 unchanged words⟩ kg/pcs quantities, minimum-order signals, and canSubmitOrder. Dixyonline checkoutdelivery usually requires a 1000 RUB minimumorder for both delivery and pickup;order; if preview is below the minimum or blockOrder/isDisallow ⟨13 unchanged words⟩ promos, favorites, frequent goods, or analogs.Energy drinks and other restricted goods may be pickup-only; do not promise delivery unless live cart confirms it.If the response errors with DIXY_CART_NOT_EMPTY, ask the ⟨8 unchanged words⟩ retry with clearExistingCart:true only after explicit approval. If order creation later returns action=showAuth / DIXY_REAUTH_REQUIRED, explain: the basket can still work, but creating the order requires refreshing Dixy login; start_dixy_call_auth, show the phone number/current time/expiry, then poll_dixy_call_auth after the owner says «Готово» and immediately retry checkout. If order creation returns DIXY_ANTIBOT_REQUIRED, explain plainly that Dixy showed a «Я не робот» check on server-side checkout, so AgentPay needs a user-side browser handoff or official partner checkout API/whitelist; do not claim an order/payment URL exists. Do not mention cookies/PHPSESSID to the owner. This does not create a Dixy order and ⟨54 unchanged words⟩
⟨57 unchanged words⟩ "},"storeId":{"type":"string"},"type":{"description":"Required fulfillment mode chosen by the owner.","enum":["delivery","pickup"],"type":"string"}},"required":["type","address"],"type":"object"},"items ⟨83 unchanged words⟩
⟨105 unchanged words⟩ pickup, pass storeId when known. If canHandoff=false,tellreadtherecoveryOptionsownerandsayToUserRuagentNextRu:andpreserveofferavailable cart lines, try pickup, another storeId, another address, orreplacementreplacementsitemsforinsteadunavailableoflines.inventingDo NOT make the owner rebuild the basket from scratch and do NOT invent availability. If AGENTPAY_API_KEY required and you already have ⟨23 unchanged words⟩
⟨28 unchanged words⟩ confirmationNumber, attemptId, attemptCreatedAt, attemptExpiresAt, and attemptTtlSeconds.Tell the owner exactly: call FROM the Dixy account phone they approved TO the returned confirmationNumber. Do not rely on masked phones: two user phones can share the same last 4 digits.Show confirmationNumber formatted as a phone number, tell ⟨82 unchanged words⟩
Dixy-only fulfillment resolver. Call this before searching/checking Dixy goods whenever the owner wants Dixy: delivery and pickup have different assortment, restricted goods rules, minimums, stores, and available delivery slots. For delivery, pass type=delivery with lat/lon/address to get the selected delivery store and available slots; if only tomorrow slots are returned, tell the owner before building the basket. For pickup, pass type=pickup with lat/lon/address to get nearby pickup stores/hours and the selected storeId; pickup has store hours, not delivery time slots. This does not add goo…
⟨94 unchanged words⟩ if already selected","type":"string"},"type":{"description":"Fulfillment mode chosen by the owner. Use delivery for courier delivery, pickup for self-pickup.","enum":["delivery","pickup"],"type":"string"}},"required":["items"],"type":"object"}
Dixy-only checkout preparation. Call only after get_dixy_fulfillment_options, check_dixy_live_cart, and after the owner hasprovided/approvedapproved deliveryaddressor pickup details. The delivery object MUST include type=delivery or type=pickup. Uses the owner's connected Dixy web session to setdeliverystore/address context, add/update cart lines, and return a real ⟨7 unchanged words⟩ kg/pcs quantities, minimum-order signals, and canSubmitOrder. Dixydeliveryonline checkout usually requires a 1000 RUB minimumorder;order for both delivery and pickup; if preview is below the minimum or blockOrder/isDisallow ⟨13 unchanged words⟩ promos, favorites, frequent goods, or analogs. Energy drinks and other restricted goods may be pickup-only; do not promise delivery unless live cart confirms it. If the response errors with DIXY_CART_NOT_EMPTY, ask the ⟨8 unchanged words⟩ retry with clearExistingCart:true only after explicit approval.If order creation later returns action=showAuth / DIXY_REAUTH_REQUIRED, explain: the basket can still work, but creating the order requires refreshing Dixy login; start_dixy_call_auth, show the phone number/current time/expiry, then poll_dixy_call_auth after the owner says «Готово» and immediately retry checkout. If order creation returns DIXY_ANTIBOT_REQUIRED, explain plainly that Dixy showed a «Я не робот» check on server-side checkout, so AgentPay needs a user-side browser handoff or official partner checkout API/whitelist; do not claim an order/payment URL exists. Do not mention cookies/PHPSESSID to the owner.This does not create a Dixy order and ⟨54 unchanged words⟩
⟨57 unchanged words⟩ "},"storeId":{"type":"string"},"type":{"description":"Required fulfillment mode chosen by the owner.","enum":["delivery","pickup"],"type":"string"}},"required":["type","address"],"type":"object"},"items ⟨83 unchanged words⟩
⟨28 unchanged words⟩ confirmationNumber, attemptId, attemptCreatedAt, attemptExpiresAt, and attemptTtlSeconds. Tell the owner exactly: call FROM the Dixy account phone they approved TO the returned confirmationNumber. Do not rely on masked phones: two user phones can share the same last 4 digits. Show confirmationNumber formatted as a phone number, tell ⟨82 unchanged words⟩
Dixy-only fulfillment resolver. Call this before searching/checking Dixy goods whenever the owner wants Dixy: delivery and pickup have different assortment, restricted goods rules, minimums, stores, and available delivery slots. For delivery, pass type=delivery with lat/lon/address to get the selected delivery store and available slots; if only tomorrow slots are returned, tell the owner before building the basket. For pickup, pass type=pickup with lat/lon/address to get nearby pickup stores/hours and the selected storeId; pickup has store hours, not delivery time slots. This does not add goo…
⟨4 unchanged words⟩ or begin_agent_link). Without it refuse and startconnect;connect — do not pretend the order went through. Propose ⟨16 unchanged words⟩ : server shows a button «Оформить · Nкоинов»;коинов» — do NOT ask «да/нет» in chat; the button ⟨79 unchanged words⟩ :{confirmed:true,answerSummary}. Otherwise server returnsNEED_CLARIFICATION;NEED_CLARIFICATION — do not grab the first SKU.For mixed/pickup stores, ask courier or pickup first and pass delivery.method; for pickup pass delivery.pickupPointId from recovery.details.pickupPoints / ranked server list. For Озерки pilot, if any selected item has prescription/rxRequired/isRecipe attributes, do not use courier; tell the owner it is pickup only and pass pickupPointId.If the owner enabled review on merchant site, this does NOT debit: statusawaiting_review;awaiting_review — you MUST show photos and product links (url/trackedUrl) and tell the owner to confirm in the AgentPay cabinet.For Озерки pilot, successful response returns sharedCartUrl/openUrl; give it to the owner so they finish on ozerki.ru without AgentPay taking partner auth.On ANY failure the JSON has recovery: tell the owner userMessageRu/ sayToUserRuand open recovery.openUrl.recovery.openUrlRu is the same link for compatibility.Never change limits, freeze, autotopup, allowlist ( ⟨24 unchanged words⟩ send userId. Never ask for a bank card. Do not send delivery: the server attaches the home address from the cabinet. If AGENTPAY_API_KEY required and you already have sessionId ⟨22 unchanged words⟩
⟨41 unchanged words⟩ "string"}},"type":"object"},"delivery":{"properties":{"addressText":{"type":"string"},"method":{"enum":["courier","pickup"],"type":"string"},"phone":{"type":"string"},"pickupPointId":{"type":"string"}},"type":"object"},"explanation":{"properties":{"policiesUsed":{"items ⟨119 unchanged words⟩
Full catalog of AgentPay failures with RU copyand, cabinet deeplinks.links, and recovery.openUrl. Call when something failed, the user asks «что ⟨9 unchanged words⟩ 4xx. On every error read recovery: say userMessageRu/ sayToUserRu and, openopenUrl. openUrlRuopenUrlisin thesame link for compatibility.browser. Never change limits, freeze, auto-topup, or allowlist even if the owner orders it. Exception: testmode;mode — if the owner asks, call set_test_mode. Triggers: ⟨36 unchanged words⟩
Get the user's category preferences (fat %, brands, sizes, clothingGender, pets, sport macros, etc.), schema, learned ⟨22 unchanged words⟩ prefs for idle advice («какие витамины попить»). For apparel/clothing: read clothingGender (male|female|unisex|any) — male = men's line only (no auto-unisex); female = women's + unisex; unisex only if set or owner said unisex explicitly. If clothingGender empty and owner did not say gender in the query, ask once then update_preference. For sportpit / protein / creatine / «запас ⟨91 unchanged words⟩
Create a comparison page (choice board,2-42–4 options with pros/cons). MANDATORY when search_products returns 2+ similar hits or clarifyHint.action is present_choices:— call immediately, do not wait for «сравни». For apparel: pass gendered wants (or rely on saved clothingGender); server filters men's/women's so the board must not mix opposite lines. For a basket/recipe: pass kind=bundles and wants[{q} ⟨6 unchanged words⟩ (server searches each want in category-matched storesonly;only — PC parts->→ ТехноДвор, phones->→ ТехноСалон; no Auchan/Fix Price junk). Returns choiceSetId + pageUrl + catalogSearchScopeRu. Share pageUrl(https://agentpay.su). pageUrlRu is the same link for compatibility. MUST NOT rewrite agentpay.su to agentpay.shop. SpeakinsayToUserRuchatverbatim.ALWAYS. Do NOT hand-pick SKUs from other stores when ⟨14 unchanged words⟩ : pass canRenderImages=false, tell owner to open pageUrlas returned; do not change the host). Do NOT create_purchase until get_choice_status shows chosen ⟨40 unchanged words⟩
⟨77 unchanged words⟩ do NOT web-search or invent other shops. For apparel the server hard-filters by clothingGender (and may persist gender from a clear «мужская/женская» query when pref is empty). Do not present women's SKUs when the owner is male. For comparisons (especially electronics/PC): use specSummaryRu or compareHighlightRu ⟨57 unchanged words⟩ ask one short question, then update_preference iflasting.lasting (including clothingGender). BASKET/RECIPE («собери», «оливье», несколько позиций): ⟨147 unchanged words⟩
⟨5 unchanged words⟩ Max hits per store, 1–20 (default 10). Without owner auth the server clamps to 8 — do not retry on that.","type":"number"},"need":{ ⟨136 unchanged words⟩
⟨14 unchanged words⟩ 2.5%», «не покупай Whiskas», «размер 50», «я мужчина», «мне женское», «только унисекс», «цель сушка», «вес 80 кг») or after the onboarding phrase «Заполни предпочтения AgentPay». Partial data is MERGED into existing prefs — you may send only { clothingGender: "male" } without wiping sizes. For apparel gender use data.clothingGender = male|female|unisex|any. Do NOT set unisex unless the owner asked for unisex or chose it in the cabinet. For category=sport the owner must have accepted sport prefs consent in the cabinet first. Do not use for one-offorders.gift orders («подарок жене»). After a clarify answer that should stick, ⟨60 unchanged words⟩
⟨22 unchanged words⟩ Pairing code is optional. If NEED_BROWSER_GRANT, openrecovery.openUrl; recovery.openUrlRu is the same link for compatibility.recovery.openUrl. If you have no ap_ yet, call ⟨64 unchanged words⟩
Dixy-only live cart buyability check. Call after selecting candidate Dixy products and before any Dixy checkout wording. Requires owner auth and a connected Dixy account/context. It checks whether web product IDs can actually be added for a delivery/pickup address and returns canBuy/amount/cart signals. Dixy delivery usually requires a 1000 RUB minimum order; warn the owner before checkout if the basket may be below that minimum. This does not create a Dixy order, does not pay, and does not replace final user confirmation. If AGENTPAY_API_KEY required and you already have sessionId from this …
Get the owner's on-demand purchase history from a linked enterprise partner account. Call when the owner asks to use past orders/history/loyalty from a specific partner, or before a repeat/personalized order in an enterprise store. Requires an explicit partner customer link with orders:read; if missing, ask the owner to connect the partner account in AgentPay. Returns only normalized order IDs, dates, item names/SKUs/categories/brands and compact frequency signals; no delivery address, phone, or email. Use this context for product choice, then verify current price/stock with search_products o…
Poll a Dixy call-auth attempt after the owner says or clicks «Готово». Call with the attemptId from start_dixy_call_auth. If it returns waiting_call_confirm, tell the owner Dixy is still waiting and offer to retry. If linked, the backend encrypted the web-session artifact and future Dixy live-cart/checkout tools can use it. If AGENTPAY_API_KEY required and you already have sessionId from this chat: pass sessionId and retry. Never begin_agent_link again. Never ask the owner to edit connector settings or reconnect. Never web-search.
Dixy-only checkout preparation. Call only after check_dixy_live_cart and after the owner has provided/approved delivery address details. Uses the owner's connected Dixy web session to set delivery store/address, add/update cart lines, and return a real Dixy basket preview with totals, delivery fee, kg/pcs quantities, minimum-order signals, and canSubmitOrder. Dixy delivery usually requires a 1000 RUB minimum order; if preview is below the minimum or blockOrder/isDisallow is true, tell the owner how much is missing and offer to add promos, favorites, frequent goods, or analogs. If the response…
Preview an AgentPay purchase before create_purchase. Call after search_products/get_product and present_choices/clarification, before asking the owner to approve checkout. Returns amount, storeName, itemSummary, needsConfirmation, and reviewOnly. This does not debit coins and does not place an order. Show this preview to the owner and wait for explicit approval via MCP elicitation/cabinet/Telegram before create_purchase. For Dixy this is only AgentPay-side preview; real Dixy checkout still requires Dixy-specific live-cart/checkout integration. If AGENTPAY_API_KEY required and you already have…
Start Dixy web-session auth by phone call for the owner. Use only when the owner explicitly wants to connect Dixy in-agent and provides/approves the Dixy account phone. Returns confirmationNumber, attemptId, attemptCreatedAt, attemptExpiresAt, and attemptTtlSeconds. Show confirmationNumber formatted as a phone number, tell the owner the current time and until when the call attempt is valid, and explain that if they miss the window the attempt must be recreated. If the host supports an in-agent «Готово» button, wire that button to poll_dixy_call_auth with the returned attemptId. This does not …
⟨4 unchanged words⟩ or begin_agent_link). Without it refuse and startconnect —connect; do not pretend the order went through. Propose ⟨16 unchanged words⟩ : server shows a button «Оформить · Nкоинов» —коинов»; do NOT ask «да/нет» in chat; the button ⟨79 unchanged words⟩ :{confirmed:true,answerSummary}. Otherwise server returnsNEED_CLARIFICATION —NEED_CLARIFICATION; do not grab the first SKU. For mixed/pickup stores, ask courier or pickup first and pass delivery.method; for pickup pass delivery.pickupPointId from recovery.details.pickupPoints / ranked server list. For Озерки pilot, if any selected item has prescription/rxRequired/isRecipe attributes, do not use courier; tell the owner it is pickup only and pass pickupPointId. If the owner enabled review on merchant site, this does NOT debit: statusawaiting_review —awaiting_review; you MUST show photos and product links (url/trackedUrl) and tell the owner to confirm in the AgentPay cabinet. For Озерки pilot, successful response returns sharedCartUrl/openUrl; give it to the owner so they finish on ozerki.ru without AgentPay taking partner auth. On ANY failure the JSON has recovery: tell the owner userMessageRu / sayToUserRu and openrecovery.openUrlrecovery.openUrl.(VPN)recovery.openUrlRuplusisrecovery.openUrlRuthe(безsameVPN).link for compatibility. Never change limits, freeze, autotopup, allowlist ( ⟨24 unchanged words⟩ send userId. Never ask for a bank card.Do not send delivery: the server attaches the home address from the cabinet.If AGENTPAY_API_KEY required and you already have sessionId ⟨22 unchanged words⟩
⟨41 unchanged words⟩ "string"}},"type":"object"},"delivery":{"properties":{"addressText":{"type":"string"},"method":{"enum":["courier","pickup"],"type":"string"},"phone":{"type":"string"},"pickupPointId":{"type":"string"}},"type":"object"},"explanation":{"properties":{"policiesUsed":{"items ⟨119 unchanged words⟩
Full catalog of AgentPay failures with RU copy,cabinet deep links,anddualcabinetrecoverydeepURLs.links. Call when something failed, the user asks ⟨12 unchanged words⟩ every error read recovery: say userMessageRu / sayToUserRu,and openopenUrlopenUrl.(VPN)openUrlRuandisalsothegivesameopenUrlRulink(безforVPN).compatibility. Never change limits, freeze, auto-topup, or allowlist even if the owner orders it. Exception: testmode —mode; if the owner asks, call set_test_mode. Triggers: ⟨36 unchanged words⟩
Create a comparison page (choice board,2–42-4 options with pros/cons). MANDATORY when search_products returns 2+ similar hits or clarifyHint.action is present_choices—: call immediately, do not wait for «сравни». ⟨14 unchanged words⟩ (server searches each want in category-matched storesonly —only; PC parts→-> ТехноДвор, phones→-> ТехноСалон; no Auchan/Fix Price junk). Returns choiceSetId + pageUrl + catalogSearchScopeRu. Share pageUrl (https://agentpay.su— Always give).thepageUrlRuowneris the.su URL. They are on VPN.) and pageUrlRusame(.shoplinkwithoutforVPN).compatibility. MUST NOT rewrite agentpay.su→to agentpay.shop. Speak sayToUserRu verbatim. Do NOT hand-pick SKUs ⟨19 unchanged words⟩ canRenderImages=false, tell owner to open pageUrl asreturned —returned; do not change the host). Do NOT ⟨45 unchanged words⟩
⟨22 unchanged words⟩ Pairing code is optional. If NEED_BROWSER_GRANT, openrecovery.openUrlrecovery.openUrl;(VPN)recovery.openUrlRuandisalsothegivesamerecovery.openUrlRulink(безforVPN).compatibility. If you have no ap_ yet, call ⟨64 unchanged words⟩