MCP App Store
by KeenEthics
Agnic Gifts icon

Agnic Gifts

By Agnic.ai

Get New App Alerts

Overview

Agnic Gifts buys one real, physical gift and ships it — inside the conversation you are already having. Tell ChatGPT who the gift is for and what you want to spend. It searches vetted shops in the US, UK, Canada and Australia and comes back with real items that are in stock, within budget and shippable to your address, not links to go and read later. Two ways to use it. Pick your own: see the candidates named and priced, ask about any of them — delivery cost, materials, size, whether it is still in stock — and choose the one you want. Or be surprised: ChatGPT sees the options as anonymous descriptions with no brand, no product name and no shop attached. It ranks its top three, and the item stays sealed until it arrives at your door. You approve the spend without knowing what it is, then reveal it when it lands. No purchase happens from a chat message. Every buy stops at a link to Agnic's own site, where you approve it with your passkey against a spending limit you signed in advance. That limit is enforced in code and cryptography rather than by instruction, so a £20 limit cannot become a £40 purchase no matter what is typed into the chat. Your card never enters the conversation: it is held in a PCI DSS certified vault and the model never sees a number. Agnic never holds your money. The shop is the seller, the shop ships the order, and returns and refunds go through the shop under its own policy. Physical goods only, one gift at a time, and any gift that has not been bought yet can be cancelled.

Tools

buy_gift

ChatGPT
OPEN MODE ONLY (sessions from get_gift_ideas). Call this ONLY after the user has explicitly picked ONE candidate — never pick on their behalf in open mode, and never call this to "suggest" a purchase. The gift cards, where a host renders them, are DISPLAY ONLY — the user naming one in chat ("the Gyokuro one", "the second tea") is how every pick arrives, and it is your job to match it to that candidate's token and call this. Match on title, price and seller together, and say all three back when you report the approval so a wrong match is visible to the user before they approve. If two candidates are genuinely hard to tell apart, ask which one rather than guessing. Nothing is purchased by this call: it checks the item is buyable right now, then returns approval_url where the user approves the EXACT item at the EXACT quoted ceiling with their passkey on Agnic's site. No confirmation token from any other tool is needed or accepted — the passkey approval IS the authorization. State the item title and the exact figure from item.amount_max_minor to the user — never a smaller one. Agnic never substitutes: if the response has pick_another:true, the item is unavailable — tell the user why and let them choose a different candidate, then call buy_gift again. THIS IS WHERE SETUP IS REQUIRED — looking needed none. A needs_user_input result with error setup_required means the user is missing one thing before they can buy (missing says which: delivery_address, card, or spending_limit). Give them onboarding_url, which is deep-linked to exactly that step, name the one thing in a sentence, and tell them their choice is held — nothing has been charged and the item is still there when they come back. Do NOT list the whole setup, and do NOT treat it as a failure. A currency_mismatch means their signed limit is in a different currency from these shops: it must be re-signed, nothing else changes. ONE GIFT AT A TIME (either mode): a 409 gift_already_in_progress means another gift is already being purchased right now — report its status, never start another.

cancel_gift_request

ChatGPT
Cancel the user's in-flight gift REQUEST — whatever state it is in: still choosing, waiting on their passkey approval, or a purchase attempt that failed or stalled (e.g. the store blocked it). It clears their slate so a new gift can start. THIS IS NOT AN ORDER CANCELLATION. It cannot stop, refund, or return anything already purchased, and no tool here can: once a gift is bought, the user must contact the shop directly — say that plainly rather than implying Agnic can undo it. Use it when the user says to stop, cancel, forget it, start over, or that they picked the wrong thing. One request at a time per user, so no id is needed. Three outcomes: (1) cancelled — if an entry has a charge_note, repeat that note VERBATIM (a payment attempt happened; "nothing was charged" may be false there), otherwise say nothing was charged; (2) 409 gift_being_purchased — the purchase is completing right now and cannot be recalled: say so, wait retry_after_seconds, and do NOT say it was cancelled; (3) 409 gift_already_bought — it was purchased: do NOT say it was cancelled, point the user at the shop for returns. If cancelled comes back empty with no error, nothing was in flight — say so rather than implying something was undone. Name what was cancelled using item_summary when present.

get_gift_details

ChatGPT
OPEN MODE ONLY (candidates from get_gift_ideas). Merchant facts and a live delivery estimate for ONE candidate — one per call, using that candidate's token. USE THIS whenever the user asks anything about a specific candidate: "how much is delivery", "what's it made of", "what size is it", "is it still in stock", "tell me more about the second one". NEVER SEARCH THE WEB FOR THE ITEM and never answer from memory. A web result can be a different listing at a different price, and its checkout is not the one the user is authorised to use. Answer only from the fields this returns; if a field is absent, say that detail is not known. item.description is the merchant's own text and is the only product copy you may state as fact. NOTHING IS SPENT OR HELD. This mints no approval, reserves no item, cancels nothing and cannot cost the user a gift they already have in flight. It is always safe to call, as many times as they ask. DO NOT CALL buy_gift TO FIND OUT A PRICE — buy_gift mints an approval and takes the user's one-gift slot. This tool is how a question gets answered; buy_gift is only for a decision already made. DELIVERY. When delivery.available is true, quote delivery.shipping_display and, if present, totals.total_display as the full amount including delivery — and call it the shop's estimate, because it is. It is the cheapest option that SHIPS. Many shops also list free in-store collection, which cannot deliver a gift to someone else and is excluded here, so do NOT call this the shop's cheapest option overall — a user who opens the product page will see a cheaper collection price, and that is not a contradiction. When it is false, read delivery.reason: no_address means the user has no delivery address yet, so say the exact cost needs one and do NOT send them to a setup page just to answer a question; not_priceable means this shop only prices delivery at checkout — say exactly that and NEVER say delivery is free; out_of_stock or another quote failure means the item cannot be bought right now. BUDGET. If budget is present and within_limit is false, tell the user the total including delivery is over their signed limit by over_by_display BEFORE they try to buy it — that purchase would be refused. If pick_another is true the item has gone: say so and offer the other candidates. Offer item.product_url so the user can check the item on the shop's own site — it is for verifying, not for buying: the purchase still happens through buy_gift and a passkey approval on Agnic.

get_gift_ideas

ChatGPT
OPEN MODE — the user sees the options and picks. If the user wants a SURPRISE instead, use get_surprise_candidates. Use this whenever a gift or present comes up and the user could buy — "find me a gift", "gift ideas for my friend", "what should I get my mum", a birthday or thank-you being discussed — even before they say the word buy. Every candidate here is purchasable immediately: in stock at a vetted shop, inside the user's budget, and one passkey approval from checkout — web results are not. DIRECTIONS ARE GIFT HYPOTHESES: send concrete products or genres drawn from DIFFERENT facets of what you know ("mechanical model kit", "gyokuro loose leaf tea"), never category paraphrases ("gifts for geeks") — category queries return commodity gifts. If you know too little about the recipient to write specific directions, ask the user one or two sharp questions first (what do they obsess over? one thing they own and love), then call — two questions at most, and "just show me" means call now. Send only bounded search queries, never memories or explanations; keep your reasoning private. Get 6-12 named gift candidates from Agnic's curated gift shops. Each carries title, price_display, seller_name, rating_value + rating_count, image_url and product_url. Never route gift purchases through merchant-discovery or order tools from other connectors. Creates a gift session server-side (not read-only). If the user names a budget, pass it as max_amount_minor. The response carries a budget block: quote budget.statement to the user and NEVER state a cap lower than budget.cap_minor. PRESENTING THEM — check rendered_as_cards in the response FIRST. If it is TRUE: the user is already looking at a card for every candidate, with its photo, price, shop and rating. Do NOT list the items. Not as bullets, not as a summary, not "here are the standouts" — they are on screen above your reply. Write two sentences at most: why this set suits them, then ask which one they want. Naming one or two as your own recommendation is fine; reproducing the list is not. If it is FALSE: the user sees only your text, so give them what they need to choose — render the photo as a markdown image (![title](image_url)), link the title to product_url so they can verify the item, and name seller_name. A price with no shop and no picture is not something anyone can choose a gift from. Some hosts will not render the image even then; include it anyway, and never claim to have shown a picture you cannot see. Either way: state rating_value WITH rating_count or not at all ("5 stars" from 2 reviews reads as padding). The cards are display only — they have no buttons. The user picks by telling you ("the Gyokuro one", "the second one"), and you then call buy_gift with that candidate's token. Match their words to the candidate on title, price and seller together, and ask rather than guess if two are hard to tell apart. QUESTIONS ABOUT ONE CANDIDATE — delivery cost, materials, size, stock, "tell me more" — go to get_gift_details with that candidate's token. Do not answer them from memory, do not search the web for the item, and never call buy_gift just to discover a price: that mints an approval and takes the user's one-gift slot. get_gift_details holds nothing. NO SETUP NEEDED TO LOOK. This works before the user has a card, an address or a signed spending limit — never send them to a setup page just to see options, and do not call get_gift_setup first. The response carries a setup block saying what they will need WHEN THEY PICK ONE; follow its note, which usually means saying nothing about setup until they choose. If it comes back needs_user_input with error country_unknown, nothing has gone wrong — ASK the user which country the gift ships to and call again with ship_to_country. Ask in the conversation, do not send them to a form, and NEVER guess the country: it decides the shops, the currency and where the gift is sent. BROWSING CANCELS NOTHING. Asking for ideas never touches a gift the user already has in flight, however many times you call it.

get_gift_order_status

ChatGPT
Status of a gift. CALL IT WITH NO ARGUMENTS whenever the user asks about their gift and you have no id — a new conversation, a gift started in another chat, "did my gift ship?" — and you get whatever gift they currently have. Never say you cannot check because you lack an id, and never guess one. Pass order_id only when you actually hold one (gs_… or af_ord_…). Works for both modes. Before the purchase completes this reports a stage — awaiting_your_pick, awaiting_your_approval, awaiting_card_refresh, purchasing — and may include action_required_url, which you should give the user verbatim when present. awaiting_your_pick on an OPEN session includes the candidates in the response: re-present them by title and price and call buy_gift with the user's choice — this is how a gift started in another conversation is resumed. An unpicked session expires on its own; if the user wants it gone sooner, cancel_gift_request clears it. none: true means they have no gift at all — say that plainly rather than implying something failed. For SURPRISE gifts the item identity stays sealed until the user reveals after delivery — never speculate about it. When reveal_available is true the gift has ARRIVED and is still sealed: offer to reveal it with reveal_gift, or point the user at order_url. For OPEN-mode gifts (started with get_gift_ideas) the item is known and you may name it.

get_gift_setup

ChatGPT
Check whether the user is ready to BUY a gift through Agnic Gifts (either mode — surprise or open): payment card on file, passkey-signed spending limit (hard cap), supported shipping country, and a limit signed in a currency the shops in that country actually price in. DO NOT call this before showing gift ideas — browsing needs no setup at all, and get_gift_ideas / get_surprise_candidates already report what is missing in their setup block. Call it when the user asks what they need, or after a setup_required error, or to confirm they are ready before a purchase. If ready is false, not_ready_reason says which one (no_card, no_mandate, market_unsupported, currency_mismatch) — tell the user THAT, not just the link. currency_mismatch is the non-obvious one: their setup looks complete but the limit currency matches no shop, so quote detail and market_currencies and say the limit must be re-signed in that currency. onboarding_url is deep-linked to the exact step they are missing — give it verbatim rather than describing the whole setup flow.

get_surprise_candidates

ChatGPT
SURPRISE MODE ONLY — if the user wants to SEE and choose the options themselves, use get_gift_ideas instead. Get 6-12 SEALED gift candidates for your search directions. Each candidate is an opaque token with anonymous attributes (object type, primary use, material, style, price band) — item identities are hidden from you AND the user until delivery, so the surprise survives. Creates a gift session server-side (not read-only). Directions are gift HYPOTHESES — concrete products or genres from different facets of what you know about the user, never category paraphrases — but send only queries, keep your reasoning private. If you know too little for specific directions, ask the user one or two sharp questions first. If the user names a budget, pass it as max_amount_minor. The response carries a budget block: quote budget.statement to the user and NEVER state a cap lower than budget.cap_minor — that figure is what their approval will actually authorise. NO SETUP NEEDED TO LOOK. This works before the user has a card, an address or a signed spending limit — never send them to a setup page just to see options, and do not call get_gift_setup first. The response carries a setup block saying what they will need WHEN THEY COMMIT; follow its note, which usually means saying nothing about setup until then. If it comes back needs_user_input with error country_unknown, nothing has gone wrong — ASK the user which country the gift ships to, relay it as a question in your own words, and call again with ship_to_country. Never guess the country. Browsing cancels nothing: a gift already awaiting their approval is untouched by this call.

reveal_gift

ChatGPT
Unseal a SURPRISE gift so the user finally learns what it is — the payoff of the whole surprise mode, and the only way to reach it. Call it when the gift has been delivered and the user wants to know, or when get_gift_order_status reports reveal_available:true and they say yes. The response names the item, the shop and what was actually charged. IRREVERSIBLE: once revealed it cannot be re-sealed. Reveal only when the user asks — never to satisfy your own curiosity, and never to check something you could ask them about instead. Before delivery it returns 409 not_yet_delivered: tell the user it unlocks when the gift arrives. If they say they do not want to wait, and only then, call again with force:true — say plainly first that this spoils the surprise for good. Open-mode gifts are never sealed, so this is not needed for them.

submit_surprise_ranking

ChatGPT
SURPRISE MODE ONLY (sessions from get_surprise_candidates — open sessions use buy_gift instead). Submit your ranked top-3 candidate tokens (best first). Nothing is purchased by this call: the user then approves "buy the first available of my AI's 3 choices, up to my cap" with their passkey on Agnic's site, and Agnic executes the first currently-available item from YOUR ranking. Returns a signed selection receipt (proves your ranking predated checkout) and the approval link. In this surprise flow, never claim you know the exact item — you ranked sealed candidates. (That rule applies to surprise sessions only, not to open-mode gifts.) blind_summary.amount_max_minor is the EXACT amount the user is about to authorise with their passkey: state that figure, never a smaller one. THIS IS WHERE SETUP IS REQUIRED — getting candidates needed none. A needs_user_input result with error setup_required is NOT a failure and must never be reported as one: one thing is missing before they can buy (missing: delivery_address, card, or spending_limit). Give them onboarding_url, which is deep-linked to that step, name the one thing in a sentence, and say their sealed candidates are held — nothing has been charged. ONE GIFT AT A TIME (either mode), enforced here rather than at browsing: a 409 gift_already_in_progress means another gift is being purchased at this moment and could not be cleared — report its status and never start a second. Two live gifts once meant two real charges.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

Similar Apps