MCP: úkoly a vrácení změn
Nástroje MCP pro nástěnku úkolů a pro deník změn, ze kterého jde vrátit zápis kteréhokoli nástroje: oprávnění, potvrzení, důsledky a parametry.
Nástěnka úkolů obchodu i se seznamem členů týmu pro přiřazení a deník změn, které zapsaly nástroje. Vracení změn potřebuje oprávnění undo:write, proto ho k zápisovým klíčům přidávejte vždycky.
Nástroje volá klient přes server MCP na doméně obchodu, například https://muj-eshop.cz/api/mcp, a v odpovědi na tools/list dostane jen ty, na jejichž oprávnění klíč dosáhne. Jak server mluví, kdy se ptá člověka a jak se změny vracejí, popisuje článek MCP server.
U každého nástroje stojí oprávnění, které chce, jestli se server před provedením zeptá člověka a kudy, jestli volání strhne kredity obchodu nebo peníze z karty, co vrací pro deník změn a jakou větu o důsledku člověk v potvrzení uvidí. Všechno z toho se vyhodnocuje z téhož kódu, podle kterého se server rozhoduje. Popisy parametrů jsou převzaté ze schématu, které server posílá v tools/list; kde se v něm text obrací přímo k modelu, je tady převedený do vykání. Povinnost parametru platí uvnitř objektu, ve kterém parametr leží.
Před zápisem, který přepisuje nebo maže, před útratou kreditů nebo platbou kartou a před hledáním mimo obchod se server ptá člověka a do té doby neprovede nic. Nejdřív použije schválení, které pro totéž volání se stejnými hodnotami už v administraci leží schválené. Jinak se zeptá formulářem, když ho klient deklaruje a politika akce ho dovoluje; formulář potvrzuje ten, kdo drží klíč, takže před ukradeným klíčem takové potvrzení nechrání. Otázka ve formuláři nese pod nadpisem „Co se změní“ tytéž řádky jako stránka schválení. Klient s elicitací URL dostane odkaz na stránku schválení v administraci a klient bez elicitace odmítnutí approval_required s odkazem v _meta; po schválení volání zopakuje se stejnými hodnotami. Na stránce schválení rozhoduje jen přihlášený člověk, kterého u každé akce jmenuje odrážka Potvrzení přes MCP, a účet podpory SHOPZI nikdy. Když politika nedovoluje nic, co klient umí, přijde odmítnutí confirmation_required a neprovede se nic. Výsledek potvrzeného volání nese v _meta["cz.shopzi/confirmation"] údaj, že akci potvrdil člověk a kde (form nebo approval), a v obsahu českou větu pro model, u placené akce i s cenou a zůstatkem kreditů z dotazu. Na otázku formulářem je 15 minut, schválení na stránce platí 60 minut, pokud u akce není uvedeno jinak.
Zápisové nástroje vracejí v poli change_id ID záznamu v deníku změn; co pole u kterého nástroje nese, říká jeho odrážka Deník změn. Změnu z deníku vrací shopzi_undo_change podle jejího druhu: obnoví předchozí hodnoty, u skladu zapíše vyrovnávací pohyb, u běžné ceny zapíše návrat do 30denní historie cen (nic z ní nemaže) a změnu, která už opustila obchod nebo stála peníze (odeslaný e-mail, stržené kredity, platbu kartou), odmítne s vysvětlením.
shopzi_list_tasks
Vrátí nástěnku úkolů s filtrem podle sloupce, priority, řešitele (me jen v panelu Agenta, none nepřiřazené, nebo ID člena týmu) a hledaného textu. S includeTeam: true přidá seznam členů týmu (ID, jméno, role) pro přiřazení úkolu.
- Oprávnění:
tasks:read, u klíče „Úkoly a seznam členů týmu (čtení)“. - Druh: čtení (
readOnlyHint). - Potvrzení přes MCP: ne.
- Kredity a platba kartou: ne.
shopzi_list_tasks: parametry
status(jedna z hodnottodo,in_progress,reviewadone; nepovinný): Filtr sloupce nástěnky.priority(jedna z hodnotlow,medium,highaurgent; nepovinný): Filtr priority: low | medium | high | urgent.search(text; nepovinný): Hledá v názvu a popisu úkolu.assignedTo(text; nepovinný): Řešitel: me | none nebo ID člena. me = přihlášený (jen v panelu Agenta), none = nepřiřazené.includeTeam(truenebofalse; nepovinný): true = vrátí iteampro přiřazení úkolu.limit(celé číslo od 1 do 100, výchozí25; nepovinný): Počet položek na stránku, 1 až 100. Velká stránka se do jedné odpovědi nemusí vejít a nástroj ji pak odmítne, což stojí krok navíc: berte jen tolik položek, kolik na odpověď opravdu potřebujete.offset(celé číslo od 0 do 100000, výchozí0; nepovinný): Kolik položek přeskočit. 0 = první stránka.
shopzi_manage_task
Založí, upraví (včetně přiřazení člena týmu ze seznamu, který vrací shopzi_list_tasks) nebo smaže úkol na nástěnce. Všechny tři operace jde vrátit a smazaný úkol se vrátí se stejným ID.
- Oprávnění:
tasks:write, u klíče „Úkoly (zápis)“. - Druh: zápis, který umí přepsat nebo smazat existující data (
destructiveHint). - Potvrzení přes MCP: podle
operation, viz seznam níž. - Kredity a platba kartou: ne.
- Deník změn: výsledek nese
change_id. ID záznamu v deníku. Předejte ho doshopzi_undo_change.
shopzi_manage_task: operace
create(založit)- Potvrzení přes MCP: ne.
update(upravit)- Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
approval_required. Na stránce schválení rozhoduje vlastník nebo manažer obchodu.
- Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
delete(smazat)- Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
approval_required. Na stránce schválení rozhoduje vlastník nebo manažer obchodu.
- Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
shopzi_manage_task: parametry
operation(jedna z hodnotcreate,updateadelete; povinný): Co s úkolem:createzaloží nový,updatezmění pole,deleteho smaže.taskId(text; nepovinný): ID úkolu zshopzi_list_tasks. Jen proupdateadelete; ucreatese neposílá.fields(objekt; nepovinný): Pole úkolu. Ucreatepovinné a stitle, uupdatejen pole ke změně, udeletese neposílá.fields.title(text; nepovinný): Název úkolu, max 200 znaků.fields.description(text nebonull; nepovinný)fields.status(jedna z hodnottodo,in_progress,reviewadone; nepovinný): Sloupec nástěnky.fields.priority(jedna z hodnotlow,medium,highaurgent; nepovinný)fields.assignedToId(UUID nebonull; nepovinný): ID člena zeshopzi_list_tasks(includeTeam), null = nepřiřazeno.fields.dueAt(text nebonull; nepovinný): Termín v ISO tvaru, nebo null.idempotencyKey(text, 1 až 200 znaků; nepovinný): Klíč idempotence. Stejný klíč = stejný zápis: opakované volání vrátí původní výsledek a NEZAPÍŠE podruhé. Použijte vlastní náhodný řetězec pro každou zamýšlenou změnu; při opakování po chybě sítě pošlete tentýž.
shopzi_list_changes
Vrátí deník změn, které v obchodě zapsaly nástroje, od nejnovějších i s tím, jestli už je někdo vrátil, s filtrem podle stavu, druhu položky a jedné konkrétní položky. Odtud je change_id pro shopzi_undo_change.
- Oprávnění:
undo:write, u klíče „Vrácení změn agenta (zápis)“. - Druh: čtení (
readOnlyHint). - Potvrzení přes MCP: ne.
- Kredity a platba kartou: ne.
shopzi_list_changes: parametry
status(jedna z hodnotapplied,reversed,failedapending; nepovinný): Filtr stavu. Vrátit lze jenapplied.entityType(jedna z hodnotappearance,attribute,attribute_definition_order,attribute_definition_snapshot,attribute_preset_batch,bank_payment,bank_payment_queue,blog_category,blog_post,blog_post_entity,builder_page,business_hours,campaign,category,category_order,category_snapshot,category_tree,comgate_request,company_identity,contact_identity,contact_message_archive,custom_domain,customer,customer_b2b,discount_bulk_status,discount_code,discount_code_snapshot,feed_categories,feed_channel,feed_overrides,import_job_accept,info_panel_order,info_panel_snapshot,invoice_email,invoice_paid,legal_documents,media,onboarding_state,order_billing,order_fulfillment,order_payment,order_quotation,order_status,page,page_blocks,popup,product,product_ai_run_cancel,product_ai_run_regenerate,product_ai_run_revert,product_ai_run_start,product_attributes,product_bulk_status,product_bundle,product_categories,product_links,product_media,product_modifiers,product_page_content,product_sample_purge,product_translations,product_variants,product_vat,purchase_order,return_approval,return_claim,return_restock,return_shipment,return_status,review,search_facet,search_pin,search_redirect,search_synonym,segment,seo_audit_run,settings,shipping_method,shop_launch,site_gate,size_guide_order,size_guide_snapshot,stock_movement,stocktake,stocktake_item,storage_usage,storefront_layout,subscription_plan,supplier,supplier_price_list,task,task_snapshot,url_redirect,variant_cost,vendor,vendor_brand_import,vendor_snapshot,wholesale_priceawholesale_terms; nepovinný): Filtr podle toho, čeho se změna týkala.entityId(text; nepovinný): Jen změny jedné konkrétní položky.limit(celé číslo od 1 do 100, výchozí25; nepovinný): Počet položek na stránku, 1 až 100. Velká stránka se do jedné odpovědi nemusí vejít a nástroj ji pak odmítne, což stojí krok navíc: berte jen tolik položek, kolik na odpověď opravdu potřebujete.offset(celé číslo od 0 do 100000, výchozí0; nepovinný): Kolik položek přeskočit. 0 = první stránka.
shopzi_undo_change
Vrátí jednu změnu z deníku: obnoví předchozí hodnoty, založenou položku smaže a u skladu zapíše vyrovnávací pohyb. Když položku mezitím někdo upravil, vrácení odmítne a vypíše, která pole se změnila.
-
Oprávnění:
undo:write, u klíče „Vrácení změn agenta (zápis)“. -
Druh: zápis, který umí přepsat nebo smazat existující data (
destructiveHint). -
Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
approval_required. Na stránce schválení rozhoduje vlastník nebo manažer obchodu. -
Kredity a platba kartou: ne.
-
Deník změn: výsledek nese
change_id. -
Věta o důsledku, kterou člověk uvidí v potvrzení:
Vrácení přepíše to, co je v obchodě teď. Když od té změny někdo položku upravil, nástroj to raději odmítne.
shopzi_undo_change: parametry
changeId(text; povinný):change_idzeshopzi_list_changesnebo z odpovědi zápisového nástroje.