inbound-guard
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@inbound-guardcheck message.eml for cold outreach"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
inbound-guard
Is this email automated cold outreach? A score, a verdict and the reasons.
npx @analyzemail/inbound-guard message.emlMost businesses do not send cold email. They receive it, more of it every month, written and followed up by software that never gets tired. inbound-guard reads an incoming message and says whether it was sent the way cold outreach is sent: from a spare domain, through a sequencing tool, in a series of nudges. A CLI for mail rules and scripts, an MCP server for the agent that reads your inbox, and a library for everything else.
Zero dependencies. Nothing about your mail leaves your machine.
What it looks at
Signal | How | Points |
Sequencing tool | Links, tracking images or headers from Instantly, Smartlead, lemlist, Apollo, Outreach, Salesloft, HubSpot Sales, Mailshake, Reply.io, Woodpecker, Yesware, Mixmax, GMass, QuickMail, Saleshandy, Klenty or Snov.io | +40 |
Hidden tracking image | A 1x1 or invisible image, when no known tool was found | +15 |
Look-alike sending domain | The sender's domain website redirects to another company's domain, and contains its name ( | +30 |
Domain redirects elsewhere | The website redirects to an unrelated domain | +20 |
New domain | Registered under 30 days ago (+25), 90 days (+20) or a year (+10), from public RDAP records | +10 to +25 |
Replies go elsewhere |
| +15 |
Fake reply | A | +20 |
Unfilled merge field |
| +25 |
Sales sequence wording | "just bumping this", "circling back", "worth a quick chat?", "15 minutes", "who is the right person" | +8 each, up to +24 |
Not one of your contacts | With | +10 |
Known contact | With | -50 |
Newsletter or mailing list |
| -30 |
The score is the sum, from 0 to 100. 60 or more is cold, 35 to 59 is likely cold, below that is not cold.
Related MCP server: sabit-mcp
Example
$ npx @analyzemail/inbound-guard message.eml
COLD score 100
From dana@getacme.io
Subject Quick question about your onboarding
Sent with a sequencing tool lemlist +40
New domain getacme.io registered 23 days ago +25
Look-alike sending domain getacme.io redirects to acme.com +30
Replies go to another domain sent from getacme.io, replies to acme.com +15
Sales sequence wording "Worth a quick chat", "15 minutes", "I came across your" +24A whole mailbox export:
$ npx @analyzemail/inbound-guard inbox.mbox --offline
cold 79 dana@getacme.io Quick question about your onboarding
not_cold 8 priya@example.com Re: Q4 budget
cold 69 jordan@trynorthwind.com Re: {{company}} partnership
not_cold 0 news@bigpaper.com This week — the news
4 messages: 2 cold, 0 likely cold, 2 not coldOptions
--contacts <file> Addresses or domains you already deal with, one per line.
--offline Skip the domain age and website lookups.
--fail-on <level> Exit 1 at this verdict or worse: cold (default) or likely.
--json Machine-readable output.
--no-colour Plain text.Input is a .eml file, an mbox export, or a message on standard input (-).
Exit code 0 means not cold, 1 means cold, 2 means it could not run. So it fits a mail
rule or a procmail/sieve pipe:
inbound-guard - --fail-on likely < message.eml || mv message.eml cold/For agents: MCP server
npx @analyzemail/inbound-guard mcp{
"mcpServers": {
"inbound-guard": { "command": "npx", "args": ["-y", "@analyzemail/inbound-guard", "mcp"] }
}
}One tool, check_message: the raw message or the path of a .eml file, and optionally
the person's contacts. It tells the agent not to reply on the person's behalf to a cold
message, and to show a likely one to the person with the reasons.
Library
import { checkMessage } from '@analyzemail/inbound-guard'
const result = await checkMessage(rawMessage, { contacts: ['acme.com'] })
// { verdict, score, signals: [{ code, label, detail, weight }], from, subject, domain, notes }What it does not do
It does not move or delete mail. It gives a verdict; your rule or your agent decides what happens next.
It does not send your mail anywhere. Messages are read on your machine. The only
network requests are the sending domain's RDAP record (via rdap.org,
or INBOUND_GUARD_RDAP_URL) and its home page, to see where it redirects. --offline
turns both off. A lookup that fails counts for nothing.
It does not judge the offer. A cold message can be one you want. The score says how a message was sent, not whether it is worth reading.
It is not a spam or phishing filter. That is your mail provider's job. inbound-guard is for the outreach that gets past it.
It cannot see custom tracking domains. Most sequencing tools let a sender use their own tracking domain. The hidden-image and domain checks catch many of those; not all.
Related
Analyzemail: the other direction too. Verify a list before you send to it, by API or MCP server.
send-guard and loop-breaker, from our partner AskEleven: checks for agents that send.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Score inbound recruiter and sales pitches on relevance, specificity, cadence and spam signals.
Email intelligence for agents: MX, SPF/DKIM/DMARC, disposable/role checks, and a 0-100 score.
Cold email API for AI agents: connect mailboxes, warm up, run campaigns and handle replies.
Email validation for AI assistants: verdict, risk score, evidence. Free: 100 checks a month.
Related MCP Servers
- AlicenseAqualityDmaintenance▎ Check an email before an AI agent sends it: send / ask a human / block — with machine reason codes and prompt-injection detection.22MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to verify email addresses through a multi-signal probabilistic pipeline, returning confidence scores and honest statuses (safe/risky/invalid/unknown) with evidence.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to assess cold-email deliverability by checking sending domains' SPF/DKIM/DMARC/MX configuration and scanning subject/body copy for spam-triggering patterns, with scores and risk levels. Runs locally over stdio without SaaS signup or API keys.-
- AlicenseNot gradedqualityCmaintenanceChecks a message thread before an agent replies, returning a keep/review/fail verdict with the reasons behind it so replies to autoresponders, bounces, or other bots are stopped. Also classifies single messages and, with a ledger, records sent and received messages across channels and threads to catch loops that span conversations.MIT