AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Per-field confidence and evidence on every value. Line items that return every row. Re-parse mail you already received. An n8n node with the schema editor inside n8n.
Developer toolsJavaScript · HTMLGitHub @fstandhartingerOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Inbound email to structured JSON, with a real SPF, DKIM and DMARC verdict on every message.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Send an email to an address you were given. Get it back as structured JSON — with a
real SPF, DKIM and DMARC verdict on the message.
Not "we scraped the body with a regex": MailMint runs its own inbound SMTP server, so
it sees the envelope and the raw RFC822 bytes, and can verify the DKIM signature over
the body it actually received. Every parse result carries
auth: { spf, dkim, dmarc, spam_score }, and when a check cannot be evaluated it says
none rather than guessing.
As an API — nothing to install, nothing stored:Read the full README ↗Send an email to an address you were given. Get it back as structured JSON — with a real SPF, DKIM and DMARC verdict on the message.
Not "we scraped the body with a regex": MailMint runs its own inbound SMTP server, so
it sees the envelope and the raw RFC822 bytes, and can verify the DKIM signature over
the body it actually received. Every parse result carries
auth: { spf, dkim, dmarc, spam_score }, and when a check cannot be evaluated it says
none rather than guessing.
As an API — nothing to install, nothing stored:
curl -X POST https://mailmint.app.mintapis.com/v1/parse \
-H "Authorization: Bearer $MAILMINT_KEY" -H 'content-type: application/json' \
-d '{"subject":"Invoice INV-7781","text":"Amount due: 1,284.00 EUR\nDue date: 2026-09-30",
"schema":[{"name":"amount_due","type":"number","description":"Total amount due"}]}'
As an inbound address: sign up at mailmint.app.mintapis.com, and the address on your dashboard is live immediately. Mail sent to it is received, authenticated and parsed.
In n8n: npm i n8n-nodes-mailmint in ~/.n8n/nodes, or Settings → Community Nodes.
There is a finished workflow to import rather than build —
Screen invoice emails and hold the doubtful ones for review,
twelve annotated nodes with both failure paths wired.
Live, with a free signup and working parsing API. The original service inventory below dates from 2026-08-30, with later publication updates. Production SMTP intake, attachment downloads, schema versioning, re-parsing and quota behavior were checked again on 2026-09-08 using our own temporary QA account.
| Piece | State |
|---|---|
| Hosted service | https://mailmint.app.mintapis.com — sign up, no card, no confirmation mail |
| Public inbound address | Yes. mx.smooth-operator.online points at the server; an invoice mailed to a fresh account's address came back parsed, with its SPF/DKIM/DMARC verdicts |
packages/api — REST API, webhooks, dashboard | Live. POST /v1/parse takes a message you already have and stores nothing |
packages/smtpd — inbound SMTP server | Live on port 25 with STARTTLS; sees the envelope and the raw RFC822 bytes |
packages/parser — RFC822 → canonical JSON | Complete against the contract, tested |
packages/n8n-node — n8n-nodes-mailmint | Published: npm i n8n-nodes-mailmint, zero runtime dependencies, npm provenance attestation |
| Billing | Live. Free is 300 parsed emails a month; Starter $9, Pro $29, Scale $99 through Stripe Checkout |
| SMTP TLS certificate | Inbound SMTP on mx.smooth-operator.online port 25 offers STARTTLS with a certificate for mx.smooth-operator.online issued by Let's Encrypt; chain verified (openssl verify code 0) on 2026-09-25 |
| n8n verification | Published 1 September 2026. n8n Cloud and self-hosted n8n can install version 0.1.3, the current npm release, from n8n's verified registry (read back from api.n8n.io on 2026-10-06; 0.1.2 is still listed there as an earlier version) |
| Paying customers | No independently verified paying MailMint customer is claimed here. Our QA accounts and Stripe test-mode payments are not customer adoption |
Technical acceptance and customer adoption are different facts. Controlled tests exercise the service; they do not establish sales or certify every customer setup. Receiving and downloading PDF/image attachments also does not imply that attachment text extraction or OCR is wired into the hosted parsing pipeline.
The public status page is at https://mailmint.app.mintapis.com/status. MailMint comes with no service level agreement: no uptime is guaranteed and no uptime percentage is published. The application, its database and the inbound mail server run on a single Hetzner server in Finland (EU).
Every path — webhook body, GET /v1/messages/:id, the n8n node's output — returns the
same shape. docs/CONTRACT.md is the frozen definition and the thing every package is
written against.
{
"id": "msg_01JQ8Z3K4M5N6P7Q8R9S",
"mailbox": { "address": "[email protected]", "name": "Invoices" },
"received_at": "2026-08-25T09:14:03.221Z",
"envelope": { "from": "[email protected]", "to": ["[email protected]"] },
"auth": { "spf": "pass", "dkim": "pass", "dmarc": "pass", "spam_score": 0.4 },
"tables": [ { "source": "html", "headers": ["Item","Qty","Amount"],
"records": [ { "Item": "Widget", "Qty": "3", "Amount": "$27.00" } ] } ],
"detected": { "type": "invoice", "amounts": [ { "value": 31.50, "currency": "USD" } ] }
}
Three layers, deliberately separated: the envelope and authentication are facts from the
protocol; tables and detected are deterministic extraction from the body; anything
schema-driven on top is labelled and carries confidence flags. A flagged message is
still delivered — needs_review goes true, nothing is silently dropped.
Monorepo, npm workspaces.
packages/parser/ pure library — RFC822 to the canonical JSON above
packages/smtpd/ the inbound SMTP server; zero runtime dependencies
packages/api/ REST API, webhook delivery, dashboard (Express + Postgres)
packages/intake/ IMAP polling and provider connectors, for hosts that own the MX
packages/docs/ attachment extraction — PDF text and tables, OCR
packages/n8n-node/ published separately as n8n-nodes-mailmint, zero runtime deps
docs/CONTRACT.md the frozen contract. Read this before changing anything
ops/ what it created, what it costs, and how to tear it down
npm install
npm test -w packages/parser
npm test -w packages/smtpd
docs/CONTRACT.md is the single source of truth. docs/COMPETITORS.md is the honest
comparison against the parsers that already exist, written before this one was built.
Run by one person. Issues are read.