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.
4 tools: 1 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnget_test_address
The server marks "get_test_address" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "get_test_address" says "get": a word for reading.
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.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "get_test_address" says "get": a word for reading.
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.
