protogrid

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

email-spam-tester

R0· no sign-in

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

v1.0.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality79good
Trust91of 100
Uptime, 30 days100%
Latency p50399 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "email-spam-tester": {
      "type": "http",
      "url": "https://email-spam-tester.com/mcp"
    }
  }
}
claude mcp add --transport http email-spam-tester https://email-spam-tester.com/mcp
[mcp_servers.email-spam-tester]
url = "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
    }
  }
}
{
  "mcpServers": {
    "email-spam-tester": {
      "type": "http",
      "url": "https://email-spam-tester.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=email-spam-tester&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vZW1haWwtc3BhbS10ZXN0ZXIuY29tL21jcCJ9"
}
{
  "servers": {
    "email-spam-tester": {
      "type": "http",
      "url": "https://email-spam-tester.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "email-spam-tester": {
      "httpUrl": "https://email-spam-tester.com/mcp"
    }
  }
}
extensions:
  "email-spam-tester":
    enabled: true
    name: "email-spam-tester"
    type: streamable_http
    uri: "https://email-spam-tester.com/mcp"
    timeout: 300

Quality 79 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene100 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations4 of 4 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 1,050 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes19 tool changes in 30 days
  • fail
    stability.rug_pull2 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

4 tools, about 1,050 tokens to load them all · tool set 746e3fc86a4c · tools last changed 2026-10-12 · checked 2026-10-19 19:33 UTC

Tool changes

  • get_message_sourcechangeddescription, input schema
    before

    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, or to find the confirmation link in a welcome letter.

    after · 53% of words in common

    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.

  • get_reportchangeddescription, input schema, output schemameaning changed
    before

    Read a report by its slug without waiting, with provider placement so far. Works for one-hour tests and for letters in the person's series mailboxes.

    after · 39% of words in common

    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.

  • wait_for_reportchangedoutput schema
  • get_test_addresschangedoutput schema
  • close_series_mailboxremoved

    Stop collecting letters at a permanent mailbox. Only when the person asks. Letters that arrive afterwards are dropped unread. Reports already made stay until they expire, and opening a mailbox for the same domain again brings the same address back.

  • write_fix_planremoved

    Ask for the AI verdict and fix plan of one letter in a series mailbox. Letters in a series are checked automatically, but the AI plan is written only on request. It takes about a minute; get_report shows it when ready. One-hour tests get their plan automatically and do not need this.

  • get_series_lettersremoved

    The letters a permanent mailbox received, newest first, with their scores and the problems that recur across the series.

  • list_series_mailboxesremoved

    The person's permanent mailboxes, with how many letters each received.

  • open_series_mailboxremoved

    A permanent address that checks every letter sent to it, for a series. For mail that comes as a sequence rather than one draft: sign the address up to the person's own newsletter, welcome series or shop, or add it to a campaign's recipient list, and every letter that arrives gets the full check. The address stays the same for this domain; asking again returns it. Letters are private to this ChatGPT user; read them with get_series_letters.

  • get_test_addresschangedinput schema

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 91 / 100

provenance80
liveness100
freshness85
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% ~updated-32d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://email-spam-tester.com/mcp streamable-httpnoneyes100%399 ms2026-07-282026-10-19

Tools (4)

get_message_sourceread-onlyThe 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.
get_reportread-onlyRead 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.
get_test_addressReserve 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.
wait_for_reportread-onlyWait 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.serg-tanichev/email-spam-tester",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json",
  "remotes": [
    {
      "url": "https://email-spam-tester.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.0",
  "repository": {
    "url": "https://github.com/serg-tanichev/email-spam-tester-mcp",
    "source": "github"
  },
  "description": "Test an email before it goes out: a disposable address, 41 checks with RFC citations, a fix plan."
}