{"id":65236,"plugin_id":"plugin_asdk_app_6a8d9699480c8191b355912591c99178","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-27T06:06:42.883Z","digest":"91814ea702c12fa3a9032bdeac17fd6ed2cdb7bed570e14538a7a172a4463b8d","against":null,"payload":{"description":"Send a test of one email template to addresses the user chooses, and report what happened. Use when the user asks to test, preview or send a sample of an email template to themselves or a colleague. Checks the template's sender and subject, confirms the recipients before sending, and refuses to send to an empty recipient list or to addresses the user did not give.","included_files":[],"name":"email-test-send","skill_md_contents":"---\nname: email-test-send\ndescription: Send a test of one email template to addresses the user chooses, and report what happened. Use when the user asks to test, preview or send a sample of an email template to themselves or a colleague. Checks the template's sender and subject, confirms the recipients before sending, and refuses to send to an empty recipient list or to addresses the user did not give.\nmetadata:\n  version: 1.0.2\n  status: beta\n  author: brevo\n---\n# Email test send\n\nSend a test of one email template to the addresses the user chooses, and report what\nhappened. A test is a real email: it goes only to addresses the user gave you.\n\n| Step | Tool |\n|---|---|\n| Read the template | `templates_get_smtp_template` |\n| Send the test | `templates_send_test_template` |\n\nIf either tool is missing from your tool list, say that the user's Brevo connection doesn't\noffer test sends yet, and stop.\n\n## Brevo connection rules\n\n- Every Brevo call goes through the Brevo MCP server's tools. The user's connection carries\n  their authentication (OAuth). **Never ask for an API key, never ask the user to paste a key\n  into the chat, and never put a key in a file or command.**\n- If a tool returns 401 or 403, ask the user to reconnect Brevo in their agent's settings.\n- If a tool a step needs is missing from your tool list, stop that step and say that the\n  user's Brevo connection doesn't offer it (connections can differ). Don't improvise with\n  other tools. Writing HTML never needs a tool; offer it, and the steps to finish in Brevo.\n- On a sub-account, pass `subaccount_id` on every call: every Brevo tool takes it per call,\n  and a call without it acts on the main account.\n- Show a tool's error message as returned, after a plain-language summary. Don't invent a\n  cause the tool didn't give.\n\n## Where this skill comes from\n\n- You already have this skill: it is in your context, whether installed, from the plugin, uploaded\n  or fetched with `get_brevo_guide`. Don't call `get_brevo_guide` for it again in this\n  conversation.\n- To have it without a tool call next time, install it once: the Brevo plugin from\n  `getbrevo/brevo-skills`, `npx skills add getbrevo/brevo-skills`, or, with a shell, the Brevo CLI\n  (`npm i -g @getbrevo/cli`, then `brevo skill install`). `brevo skill check` lists copies that are\n  behind.\n- Once per conversation, call `list_brevo_guides` with `installed` set to the version in the\n  `metadata` of each Brevo skill you have. For a `stale` one, follow its `update` hint.\n- If you don't have the skill, call `get_brevo_guide` with its name: it returns the current text.\n\n## Working rules for every step\n\n- Follow the steps in order. Don't skip, merge or reorder them, and don't add steps this skill\n  doesn't have.\n- Use only the tools this skill names, with the arguments it describes. Never invent a tool, a\n  parameter, an ID or an email address; ask the user instead, one question at a time.\n- Before anything is created, changed or sent, say in plain words what will happen and wait for\n  the user's yes. A yes covers only what you described.\n- Read each Brevo object once per conversation and reuse it. Re-read only after something\n  changed it.\n- Report a result only from what the tool returned. If a call failed or returned nothing,\n  say so; never describe it as done.\n- Reply in the user's language, and keep names, IDs and addresses exactly as Brevo shows them.\n\n## 1. Find the template\n\nUse the template ID from the previous step if there is one (for example a template just\ncreated from HTML). Otherwise ask the user which template, by name or ID.\n\nCall `templates_get_smtp_template` with the ID and check, before sending anything:\n\n- **Sender:** the template needs a sender email and name. If it has none, stop and ask the\n  user to set one on the template in Brevo (**Edit** → sender), then try again.\n- **Subject:** if it's empty, tell the user the test will arrive without a subject, and ask\n  whether to go on.\n\nTell the user, in one line, which template you are about to send (its name and subject).\n\n## 2. Confirm the recipients\n\n- Ask which address or addresses to send the test to. Suggest the user's own address; never\n  pick an address yourself, and never send to an address that came from the template,\n  a contact list or a file.\n- Keep it to a few addresses. The account can send **50 test emails a day** (10 a day on an\n  account that isn't validated yet).\n- Each recipient must already be a **contact** in the account. Brevo refuses addresses it\n  doesn't know.\n\nConfirm before sending: \"I'll send a test of *<template name>* to *<addresses>*. Go ahead?\"\n\n## 3. Send\n\nCall `templates_send_test_template` with the template ID and the confirmed addresses as the\nrecipient list. Never send with an empty recipient list: Brevo then sends to the whole test\nlist of the account.\n\n## 4. Report\n\n**Sent:** tell the user it's on its way, and to check their inbox (and the spam folder).\nPersonalization tags such as `{{ contact.FIRSTNAME }}` show the recipient contact's own\nvalues, or appear empty when the contact has none.\n\n**Refused:** explain it in plain words, then show the message as returned.\n\n| Response | Meaning | Tell the user |\n|---|---|---|\n| 400 with `unexistingEmails` | Those addresses aren't contacts | Add them as contacts in Brevo, or use another address |\n| 400 with `withoutListEmails` | Those contacts aren't in any list | Add them to a list (for example a test list), then retry |\n| 400 with `blackListedEmails` | Those contacts are blocklisted | Use another address, or unblock the contact in Brevo |\n| 402 | No credits left, or the 10-a-day limit of an unvalidated account | Wait until tomorrow, or validate the account |\n| 403 | The 50-a-day limit, an unvalidated account, or no sender linked to the template | Wait until tomorrow, or set the template's sender |\n| 404 | The template doesn't exist | Check the template ID |\n\nDon't retry a refused send in a loop: one retry at most, after the user fixed the cause.\n\n## Output rules\n\n- Do one thing per request: create one template, one campaign, one list. Never create a\n  second object to \"fix\" the first without the user's go-ahead.\n- Don't paste large inputs or outputs (HTML, design JSON, full reports) into the chat\n  unless the user asks. Summarize them.\n- Describe problems by what the user sees (\"the 'Shop the sale' button\"), never by\n  selectors, block types or internal field names.\n- Always end with the object's name, its ID, a link to it in Brevo, and what the user\n  still has to do there.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}