Run the loop
Get a test address, send templates/digest.html to it, fix what fails and test again.
First run done. Working through the two failures now.
OpenCode
Add a remote entry to opencode.json. Whatever model you run gets a real delivery to check instead of a guess about your HTML.
42 checks · No key · No account
OpenCode lets you swap models freely, and the tools stay the same whichever one you pick. The report comes back as fields and evidence, so the model has no web page to scrape.
/mcpget_test_addressReserves a one-hour address. With placement switched on, you also get a list of mailboxes at different providers.
wait_for_reportHolds until the checks finish, then returns the scores, the failed and warned checks with their evidence, and the fix plan.
get_reportReads an existing report by its slug, including how far the folder check has got.
get_message_sourceReturns the email as it arrived, headers in wire order, for an hour after delivery.
In the project root, or in your global OpenCode config.
https://email-spam-tester.com/mcp{ "$schema": "https://opencode.ai/config.json", "mcp": { "email-spam-tester": { "type": "remote", "url": "https://email-spam-tester.com/mcp", "enabled": true } }}Run the loop
Get a test address, send templates/digest.html to it, fix what fails and test again.
First run done. Working through the two failures now.
Plain summary
Summarise this report for someone who has never heard of DKIM: [report link]
Your email is signed, but the signature belongs to your provider.
Pick the first fix
Which single fix in this report moves the score most? Show me the change.
The DMARC record. Here is the TXT value.
Whatever model you run gets
the same 42 checks.
About half of the checks read what the sending platform adds: the DKIM signature, the path through its servers, the unsubscribe headers. Pasted text has none of those, so the model would be guessing.
What you send to the test address. The raw message stays for an hour after it arrives and then only the report remains, at a link anyone with the slug can open. Test mail you would be fine showing a colleague, and read the privacy policy for the rest.
Yes. It is the same analysis and the same report page, so a run from a chat can be compared with one from the home page.
OpenCode tries OAuth when a server answers 401. This one takes no sign in, so you can leave it out.
It works with any model that can call tools.
Set enabled to false in that project's opencode.json.