Email Spam Tester

OpenCode

OpenCode, with a real mail server to test against

Add a remote entry to opencode.json. Whatever model you run gets a real delivery to check instead of a guess about your HTML.

Copy the config

42 checks · No key · No account

Four tools arrive with the connection

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.

OpenCode
/mcp
  • get_test_address

    Reserves a one-hour address. With placement switched on, you also get a list of mailboxes at different providers.

  • wait_for_report

    Holds until the checks finish, then returns the scores, the failed and warned checks with their evidence, and the fix plan.

  • get_report

    Reads an existing report by its slug, including how far the folder check has got.

  • get_message_source

    Returns the email as it arrived, headers in wire order, for an hour after delivery.

Add it to opencode.json

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    }  }}

What to ask

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.

Questions

Why does it want a real email instead of pasted text?

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 can the server see?

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.

Is the score the same as on the website?

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.

Why is there an oauth setting in the OpenCode docs?

OpenCode tries OAuth when a server answers 401. This one takes no sign in, so you can leave it out.

Does it work with local models?

It works with any model that can call tools.

Can I switch it off for one project?

Set enabled to false in that project's opencode.json.

Send one real email and read what came back

Copy the config