maillog
v0.1.0
Published
Node.js SDK and MCP server for the Maillog email API
Maintainers
Readme
maillog
Node SDK and MCP server for the Maillog email API.
Install
npm install maillogGet a key without an account
curl -X POST https://api.maillog.nl/v1/keys/sandbox \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'The key it returns may only send to that address and expires after 24 hours. For your own domains, sign up at https://maillog.nl/signup.
Send
import { Maillog } from "maillog";
const maillog = new Maillog(process.env.MAILLOG_API_KEY);
const { id } = await maillog.emails.send({
from: "Acme <[email protected]>",
to: ["[email protected]"],
subject: "hello",
html: "<p>it works</p>",
});emails.sendBatch(emails) takes 1 to 100 at a time. emails.list({ limit, offset, status })
returns what was sent, with delivery status and open/click counts.
Errors
Failures throw MaillogError with .status and .body, so a 422 from validation
and a 403 from an expired key can be handled apart.
import { MaillogError } from "maillog";
try {
await maillog.emails.send(params);
} catch (err) {
if (err instanceof MaillogError && err.status === 422) {
// body carries errors[] with the offending field
}
}There is no retry logic, on purpose: a client that silently resends produces duplicate mail, and only you know whether that is acceptable.
MCP server
The package ships an MCP server so an assistant can send mail directly.
claude mcp add maillog --env MAILLOG_API_KEY=ma_xxx -- npx -y maillog-mcpTools: send_email, list_emails.
Options
new Maillog(apiKey, {
baseUrl: "http://localhost:3086", // default https://api.maillog.nl
timeoutMs: 30_000,
});Develop
npm run build # tsc to dist/
node --test src/*.test.tsMIT.
