Skip to main content
Glama
andrewchmr

mxprobe

MX Probe

Email verification for AI agents. One call returns send, hold or kill for an address, with the reason. Signup and credits happen by API too, so an outreach agent can provision itself. No form, no CAPTCHA, no dashboard.

npx mxprobe check hello@example.com          # free DNS tier, local, no key
npx mxprobe check --hosted hello@example.com # survivors go to the hosted SMTP probe
claude mcp add mxprobe -- npx -y mxprobe mcp # the MCP server
{
  "email": "hello@example.com",
  "action": "send",
  "verdict": "OK",
  "reason": "mailbox accepted by aspmx.l.google.com",
  "checks": { "syntax": true, "mx": "aspmx.l.google.com", "smtp": "accepted", "catch_all": false }
}

action is send, hold or kill; verdict is OK, WEAK or DEAD. A hold never becomes a kill on a refusal, a greylist or a catch-all. Only a 5xx that names the mailbox kills.

Layout

Path

What

packages/core

The engine: DNS tier, SMTP probe, the verdict contract and the API's wire types. Zero dependencies.

packages/cli

`npx mxprobe check

server

The hosted API: node:http + node:sqlite, Stripe Checkout, Resend, Telegram.

site

The landing page, static.

deploy

Caddyfile, systemd units, the install script and the runbook.

Related MCP server: Email Verifier MCP Server

Develop

Everything is TypeScript (strict, ESM). Each package compiles its src/ to dist/ with tsc -b; the published packages ship dist/ only. mxprobe and the server import mxprobe-core through the workspace link to its dist/, so pnpm build at the root (which runs the packages in dependency order) must come before a single package's test or typecheck. Tests are .ts files that Node runs directly with its built-in type stripping.

pnpm install
pnpm build                      # tsc -b in each package, core first
pnpm test                       # builds, then: fake resolver, fake SMTP server, in-memory SQLite. No network.
pnpm typecheck                  # the sources and the tests, without emitting
pnpm test:live                  # the DNS tier against the real network
pnpm check a@b.com              # the CLI from this checkout
cp server/.env.example server/.env && pnpm dev:server

Node 22.18 or newer (24 recommended) to develop and to run the tests; the compiled engine and CLI run on Node 20, the server on 22.13 or newer (node:sqlite).

Pricing

100 checks free at signup, then 9 USD per 10,000, one payment, credits never expire. Addresses are logged for 24 hours for debugging and then deleted.

MIT.

Available Tools

5 tools
balanceCredits leftA
Read-onlyIdempotent

How many hosted checks are left on the configured API key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the description only needs to add contextual behavior. It adds that the balance is scoped to the configured API key and counts hosted checks, but says nothing about response shape or failure cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the core function and contains no redundant filler. It is concise without sacrificing the key detail about API-key scoping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only balance check, the description gives enough to know when and why to call it, and annotations cover the safety profile. It does not describe the exact return representation, but the 'how many' wording strongly implies a numeric count.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so no parameter documentation is required. The description usefully clarifies that the API key is configured externally rather than passed as input, supporting the no-parameter design.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (remaining hosted checks) and scope (configured API key), and the interrogative form clearly signals a read-only quota query. This distinguishes it from siblings such as buy_credits and verify_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit 'use when' statement or mention of alternatives; the intended context (checking remaining quota) must be inferred from the resource type and sibling tools. The usage context is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

buy_creditsBuy creditsA

Get a Stripe Checkout link for more hosted checks: 9 USD per 10,000, one payment, credits never expire. Open the link to pay; credits land on the key when Stripe confirms.

ParametersJSON Schema
NameRequiredDescriptionDefault
packsNoHow many packs of 10,000 (default 1)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark readOnlyHint=false (write operation) and openWorldHint=true (external effects). The description discloses the external Stripe payment flow and the delayed credit delivery upon confirmation, which adds valuable context beyond the annotations. It does not cover failure scenarios or refunds, but it adequately explains the primary side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no fluff. The action is stated first, followed by the commercial details and the payment-confirmation flow. Every clause contributes to the agent's understanding of how to invoke the tool and what to expect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema and annotations covering safety, the description is nearly complete. It explains the action, pricing, and the confirmation mechanism. It stops short of explicitly stating the return value (the checkout URL) and handling failures, but these are minor gaps given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'packs' is fully described in the schema (coverage 100%), with default and range. The description adds the cost per pack ($9 per 10,000) and clarifies that a payment is one-time and credits never expire, giving the agent useful pricing context to help with user requests. This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Get a Stripe Checkout link'), the resource (hosted checks credits), and even key commercial terms. It is clearly distinct from siblings like signup, verify_email, verify_batch, and balance, which deal with identity and account state rather than purchasing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly communicates when to use this tool: when the user needs more hosted-check credits. It doesn't explicitly contrast with alternatives, but the tool's purpose is self-evident given sibling names, and the description includes the cost per pack and the payment flow, which clarifies its role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signupCreate an MX Probe API keyA

Sign up with an email address. Returns an API key with 100 free checks and saves it locally for the other tools. The key is also mailed to the address. One key per address.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesThe operator's email address, where the key is mailed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses real behavioral details beyond the annotations: it creates a key, saves it locally, emails the key, includes a 100-free-check quota, and enforces one key per address. This gives an agent a strong sense of side effects and constraints. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the primary return value. Each sentence adds a distinct useful detail: returns a key, saves it locally, and the one-per-address constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers the return value, side effects, quota, and a uniqueness constraint. Nothing critical is missing for an agent to correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a bit of context by noting the key is mailed to the given address, but it does not meaningfully extend the schema's explanation of the email parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Sign up'), the resource (email address), and the outcome (returns an API key with 100 free checks). It also explains that the key is saved locally, which distinguishes it from the sibling verification and billing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this is the setup step for the other tools: 'saves it locally for the other tools' tells an agent when this should be used. It does not explicitly say when not to use it or name alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_batchVerify a list of email addressesA
Read-onlyIdempotent

Check up to 500 addresses in one call. Each result is { email, action, verdict, reason, checks }. action is send | hold | kill: send means go ahead, hold means send only with a fallback in hand (catch-all, forwarder, greylisted or refused probe), kill means never send (no mail server, or the mailbox does not exist). checks.smtp is skipped on the free DNS tier; the hosted tier probes the mailbox. DNS kills cost nothing; with a key the survivors go to the hosted probe at 1 credit each.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailsYesThe addresses to check
hostedNoProbe mailboxes on the hosted tier (default: yes when a key is configured)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: it explains the send/hold/kill action taxonomy, the difference between DNS-tier and hosted-tier behavior, and the credit cost model. This is exactly the contextual information an agent needs to predict side effects and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the key capacity limit, followed by the result shape and action meanings, then cost mechanics. Every sentence earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description still covers the result shape, each action value, tier behavior, and cost implications. This is enough for an agent to select and call the tool correctly without additional lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining what hosted probing entails, how free tier skips checks.smtp, and that max 500 addresses applies per call, enriching the semantic understanding beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Check up to 500 addresses in one call.' It clearly positions this as the batch variant of email verification, distinguishing it from the single-address sibling verify_email by the batch size and result format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates batch use with a 500-address limit, giving the agent context for when this tool is appropriate. It does not explicitly name verify_email or state when not to use it, so it falls just short of fully explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_emailVerify one email addressA
Read-onlyIdempotent

Check whether an email address can receive mail before sending to it. Each result is { email, action, verdict, reason, checks }. action is send | hold | kill: send means go ahead, hold means send only with a fallback in hand (catch-all, forwarder, greylisted or refused probe), kill means never send (no mail server, or the mailbox does not exist). checks.smtp is skipped on the free DNS tier; the hosted tier probes the mailbox. Uses the hosted SMTP probe (1 credit) when an API key is configured and hosted is not false; otherwise the free local DNS tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesThe address to check
hostedNoProbe the mailbox on the hosted tier (default: yes when a key is configured)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description goes beyond annotations by detailing the result shape, the meaning of each action value, the behavior of checks.smtp across tiers, and the credit cost of the hosted SMTP probe. This gives the agent a rich understanding of side effects and tier-dependent behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: core purpose, result format, action semantics, tier behavior, and credit cost are all covered. It is front-loaded with the primary use case and flows logically into operational details without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description fully documents the return shape and the meaning of each action. It also covers tier selection, credit cost, and default behavior. An agent has everything needed to call the tool correctly and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds meaningful context for the 'hosted' parameter by explaining when the hosted SMTP probe is used, when the free DNS tier is used, and that it costs 1 credit. This is useful information beyond the schema's simple boolean description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Check whether an email address can receive mail before sending to it.' It clearly identifies the tool's purpose and differentiates it from siblings like verify_batch by focusing on a single email address and providing a concrete decision outcome (send/hold/kill).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool ('before sending to it') and explains the hosted versus free DNS tier behavior. It does not explicitly name alternatives or state when not to use it, but the singular-versus-batch distinction with verify_batch is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.2.4
    • First observedbalance
    • First observedbuy_credits
    • First observedsignup
    • First observedverify_batch
    • First observedverify_email

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: signup creates an account, verify_email checks a single address, verify_batch checks up to 500 at once, balance queries credits, and buy_credits handles payment. The overlap between single and batch verification is well-delineated by their descriptions, leaving no ambiguity.

Naming Consistency4/5

Most names follow a consistent verb_noun pattern (verify_email, verify_batch, buy_credits) and all use snake_case. 'signup' is a slight deviation as a compound verb/noun, and 'balance' is a plain noun, breaking the pattern. Still, the style is uniform and predictable.

Tool Count5/5

Five tools is well-scoped for an email verification service, covering account creation, verification (single and batch), balance checking, and credit purchasing. Each tool serves a necessary function without bloat or redundancy.

Completeness4/5

The set covers the core lifecycle: account setup, verification, credit management, and purchasing. Minor gaps like account deletion or key revocation exist, but they are not essential to the primary use case and can be handled externally.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to verify email addresses in real-time, checking syntax, DNS, MX records, and SMTP handshake, returning verdicts and deliverability scores without sending actual emails.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables MCP agents to verify email addresses using prepaid credits, with balance checks and receipt retrieval via a Streamable HTTP endpoint.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to send transactional email, authenticate sending domains, track delivery, and diagnose deliverability issues programmatically.
    13
    224 npm
    MIT