Skip to content

io.github.serg-tanichev/email-spam-tester

by serg-tanichev · remote · no sign-in to list tools · v1.0.0 · published by GitHub user serg-tanichev

Test an email before it goes out: a disposable address, 41 checks with RFC citations, a fix plan.

Changes · 1

4 tools: 1 change things and 3 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http email-spam-tester https://email-spam-tester.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "get_test_address" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "get_test_address" says "get": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

4 tools

Changes things 1Claude Code: ask
  • get_test_addressReserve a single-use address to send a draft email to, for a full check.1 finding

    Why it is in this group

    • The name "get_test_address" says "get": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "get_test_address" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "get_test_address" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Reserve a single-use address to send a draft email to, for a full check. Returns the address and the URL its report will appear at. The address accepts exactly one message and expires after an hour. The email has to be sent by the person, from the platform or mailbox they really send from: half the checks read what that platform adds. The report covers 42 checks (SPF, DKIM, DMARC, reverse DNS, TLS, blocklists, content, links, the Gmail and Yahoo bulk-sender rules) and a plan of what to fix. lang is decided now because the message arrives minutes later over SMTP, which carries no hint of who is waiting for it. What wait_for_report returns quotes check lines in English whatever it is set to; the person following report_url sees their own language.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Get a test address
Only reads 3Claude Code: allow
  • get_message_sourceThe message exactly as it was received: headers, both bodies, source.No findings

    Why it is in this group

    • The name "get_message_source" says "get": a word for reading.
    Description, as the server wrote it
    The message exactly as it was received: headers, both bodies, source. Useful when a finding points at a header and the agent needs to see what it actually sent rather than what it believes it sent. The message is kept for an hour after it arrives and then deleted; within that hour anyone with the slug can read it. After that only the report remains.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Read the received message
  • get_reportRead a report by its slug without waiting, with provider placement so far.No findings

    Why it is in this group

    • The name "get_report" says "get": a word for reading.
    Description, as the server wrote it
    Read a report by its slug without waiting, with provider placement so far. The report stays at its link for good and anyone with the link can read it: the checks, the score, the fix plan, and the subject and sender of the email.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Read a report
  • wait_for_reportWait until the message arrives and has been analysed, then summarise it.No findings

    Why it is in this group

    • The name "wait_for_report" says "wait": a word for reading.
    Description, as the server wrote it
    Wait until the message arrives and has been analysed, then summarise it. Call it after the email has been sent to the address from get_test_address. Blocks rather than returning "not ready yet": an agent told to poll writes a sleep loop and usually gives up before the analysis finishes. Provider placement keeps filling in for up to 30 minutes after the report; get_report reads the latest.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Wait for the report

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http email-spam-tester https://email-spam-tester.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__email-spam-tester__wait_for_report",
      "mcp__email-spam-tester__get_report",
      "mcp__email-spam-tester__get_message_source"
    ],
    "ask": [
      "mcp__email-spam-tester__get_test_address"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as email-spam-tester. Review it before you use it.