Tilslut en AI-assistent (MCP)

Appen kører en MCP-server, så en AI-assistent kan gennemgå din opsætning, oprette og oversætte e-mail-layouts, administrere dine HTTP-anmodninger og rydde op i dit mediebibliotek direkte, i stedet for at du skal kopiere konfigurationen frem og tilbage.

Nyttige ting, den kan: udarbejde et marketinglayout med dine fodtekster, oversætte et layout til alle de sprog, du sælger på, kontrollere, hvilke e-mail-layouts der henviser til en hemmelighed, der snart skal skiftes ud, finde alle uploadede billeder, som ingen længere bruger, forklare, hvorfor gårsdagens udsendelser mislykkedes, eller oprette en ny HTTP-anmodning ud fra dokumentationen til en tredjeparts-API.

Endepunkt

text
POST https://shopify.workflow-transactional-email.app/api/mcp

Transporten foregår via Streamable HTTP. Godkendelsen sker med den samme bearer-nøgle som i REST-API’et - se Godkendelse og API-nøgler.

Tilslutning

Fanen »MCP« på appens udviklerside genererer en kommando, der er klar til at blive kopieret, hvor din URL og nøgle allerede er udfyldt, til Claude, Claude Desktop, Cursor, VS Code og Gemini CLI. Brug den i stedet for at indtaste den manuelt.

I Claude Code ser kommandoen således ud:

bash
claude mcp add --transport http flow-transactional-email \
  https://shopify.workflow-transactional-email.app/api/mcp \
  --header "Authorization: Bearer fak_your_key_here"

For redaktører, der bruger en JSON-konfiguration, ser strukturen således ud:

~/.cursor/mcp.jsonjson
{
  "mcpServers": {
    "flow-transactional-email": {
      "url": "https://shopify.workflow-transactional-email.app/api/mcp",
      "headers": {
        "Authorization": "Bearer fak_your_key_here"
      }
    }
  }
}

Tilgængelige værktøjer

Værktøjssættet afspejler din nøgles niveau. En skrivebeskyttet nøgle bliver ikke blot afvist, når den forsøger at kalde et skriveværktøj - den kan slet ikke se det pågældende værktøj på listen, så en assistent kan ikke overtales til at forsøge det.

Læs (15 værktøjer)

E-mail-formater: list_email_templates, get_email_template, get_layout_schema, list_template_translations, list_template_versions, get_template_version. list_email_templates accepterer q, category (transactional eller marketing), page og limit.

Afsendere af e-mails: list_smtp_configs, list_senders

Hemmeligheder: list_secret_keys (kun navne)

HTTP-anmodninger: list_http_requests, get_http_request

Medier: list_files (indtast usage: true for at se, hvilke billeder der stadig henviser til den enkelte fil)

Historik: list_history (filtrer efter status, herunder SKIPPED for markedsførings-e-mails, hvor alle modtagere havde afmeldt sig), get_history_entry, get_stats

Læsning og skrivning (tilføjer 12)

E-mail-skabeloner: create_email_template, update_email_template, delete_email_template

Sprog: set_template_translation, delete_template_translation, promote_template_translation

Versioner: restore_template_version, restore_template_github_version

HTTP-anmodninger: create_http_request, update_http_request, delete_http_request

Medie: delete_file

Læs, skriv og udfør (tilføjer 1)

test_http_request - udfører en konfigureret HTTP-anmodning mod det egentlige mål.

Udarbejdelse af plantegninger med en assistent

Bed assistenten om først at læse get_layout_schema: Her beskrives det visuelle designformat med standardindstillingerne for hver blok, den Liquid-kode, du kan bruge, samt de begrænsninger, der genereres af selve builderen. Derefter tager create_email_template en name, en subject og en bodyDesign (visuel, standard) eller en HTML-body (tekst). Layoutet vises straks i appen, og alle ændringer gemmes i versionshistorikken, så alt, hvad en assistent foretager sig, kan fortrydes.

To felter bestemmer, hvordan et layout fungerer i en e-mail:

  • category: transactional (standard) eller marketing. Et marketinglayout udelader modtagere, der har afmeldt sig, og indeholder et afmeldingslink samt en sidefod; se Markedsførings-e-mails og afmeldinger.
  • marketingTexts: fodtekstene fra et marketinglayout i stedet for butikkens fra Indstillinger, { unsubscribeText, unsubscribeLinkLabel, companyDetails }, alle felter er valgfrie; null betyder teksterne fra Indstillinger. Afmeldingssætningen skal indeholde {{ unsubscribe_link }} eller {{ unsubscribe_url }}.

set_template_translation opretter eller erstatter et sprog med det fuldt oversatte indhold. For et tekstlayout kan det også indeholde attachments (a list = dette sprogs egne filer, null = layoutets, omitted = uændret), og for et marketinglayout marketingTexts for det pågældende sprog oven på layoutets. promote_template_translation gør et sprog til layoutets hovedsprog; de to bytter plads, så intet går tabt.

Et godt første ønske:

"Læs layoutskemaet, og oversæt derefter mit layout 'Ordre afsendt' til tysk og fransk. Bevar alle Liquid-tags og URL'er nøjagtigt, som de er."

Hver eneste skrivning kontrolleres på samme måde som en gemning i appen: Liquid skal analysere dataene, filerne skal være dine egne, og værktøjet angiver det felt, hvor der opstod en fejl.

Oprydning i mediebiblioteket

Det er en god opgave for en assistent. Bed den om at lave en liste over dine filer med angivelse af, hvor de bruges, og slet derefter dem, som ingen henviser til:

"Vis en liste over mine uploadede filer med oplysninger om, hvor de bruges, og fortæl mig, hvilke der ikke bruges til noget. Slet derefter disse."

delete_file afvises med en 409-fejl, hvis der stadig er et e-mail-layout eller en forudindstillet top- eller bundtekst, der henviser til filen, og afvisningen angiver, hvad der bruger den - så assistenten kan ikke fjerne et logo, som en aktiv e-mail stadig har brug for, selvom du beder den om det.

Hvad assistenten aldrig kan se

Der findes bevidst intet værktøj, der returnerer en hemmelig værdi, et SMTP-brugernavn eller -adgangskode eller et login-token til en postkasse. list_secret_keys returnerer udelukkende navne.

Det er netop pointen med designet: Du kan bede en assistent om at skrive en HTTP-anmodning, der autentificerer sig hos din betalingsudbyder, og den vil henvise korrekt til {{ secrets.stripeApiKey }}, uden at selve nøglen nogensinde kommer ind i modellens kontekst.

Historikken, der returneres via MCP, maskeres på nøjagtig samme måde som via REST. Det samme forbehold gælder - maskeringen omfatter feltnavne og værdimønstre, og felter med fritekst kan stadig indeholde personoplysninger i kommunikationen. Tænk over dette, inden du retter en assistent mod et stort historikinterval.