Search / io.github.ni-c/smtp-mcp
SMTP
L0· runs locallyMCP server that sends mail over SMTP, gated behind an allowlist and a human confirmation
v0.2.0 · active · repository · website · descriptor JSON · versions
Search / io.github.ni-c/smtp-mcp
L0· runs locallyMCP server that sends mail over SMTP, gated behind an allowlist and a human confirmation
v0.2.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"smtp-mcp": {
"command": "npx",
"args": [
"-y",
"@ni-c/[email protected]"
],
"env": {
"SMTP_HOST": "${SMTP_HOST}",
"SMTP_USER": "${SMTP_USER}",
"SMTP_PASSWORD": "${SMTP_PASSWORD}",
"SMTP_FROM": "${SMTP_FROM}"
}
}
}
}claude mcp add smtp-mcp -e "SMTP_HOST=${SMTP_HOST}" -e "SMTP_USER=${SMTP_USER}" -e "SMTP_PASSWORD=${SMTP_PASSWORD}" -e "SMTP_FROM=${SMTP_FROM}" -- npx -y @ni-c/[email protected][mcp_servers.smtp-mcp]
command = "npx"
args = ["-y", "@ni-c/[email protected]"]
env = { "SMTP_HOST" = "${SMTP_HOST}", "SMTP_USER" = "${SMTP_USER}", "SMTP_PASSWORD" = "${SMTP_PASSWORD}", "SMTP_FROM" = "${SMTP_FROM}" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"smtp-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@ni-c/[email protected]"
],
"enabled": true,
"environment": {
"SMTP_HOST": "{env:SMTP_HOST}",
"SMTP_USER": "{env:SMTP_USER}",
"SMTP_PASSWORD": "{env:SMTP_PASSWORD}",
"SMTP_FROM": "{env:SMTP_FROM}"
}
}
}
}{
"mcpServers": {
"smtp-mcp": {
"command": "npx",
"args": [
"-y",
"@ni-c/[email protected]"
],
"env": {
"SMTP_HOST": "${SMTP_HOST}",
"SMTP_USER": "${SMTP_USER}",
"SMTP_PASSWORD": "${SMTP_PASSWORD}",
"SMTP_FROM": "${SMTP_FROM}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=smtp-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBuaS1jL3NtdHAtbWNwQDAuMi4wIl0sImVudiI6eyJTTVRQX0hPU1QiOiIke1NNVFBfSE9TVH0iLCJTTVRQX1VTRVIiOiIke1NNVFBfVVNFUn0iLCJTTVRQX1BBU1NXT1JEIjoiJHtTTVRQX1BBU1NXT1JEfSIsIlNNVFBfRlJPTSI6IiR7U01UUF9GUk9NfSJ9fQ%3D%3D"
}{
"servers": {
"smtp-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@ni-c/[email protected]"
],
"env": {
"SMTP_HOST": "${SMTP_HOST}",
"SMTP_USER": "${SMTP_USER}",
"SMTP_PASSWORD": "${SMTP_PASSWORD}",
"SMTP_FROM": "${SMTP_FROM}"
}
}
}
}{
"mcpServers": {
"smtp-mcp": {
"command": "npx",
"args": [
"-y",
"@ni-c/[email protected]"
],
"env": {
"SMTP_HOST": "${SMTP_HOST}",
"SMTP_USER": "${SMTP_USER}",
"SMTP_PASSWORD": "${SMTP_PASSWORD}",
"SMTP_FROM": "${SMTP_FROM}"
}
}
}
}extensions:
"smtp-mcp":
enabled: true
name: "smtp-mcp"
type: stdio
cmd: "npx"
args:
- "-y"
- "@ni-c/[email protected]"
envs:
"SMTP_HOST": "${SMTP_HOST}"
"SMTP_USER": "${SMTP_USER}"
"SMTP_PASSWORD": "${SMTP_PASSWORD}"
"SMTP_FROM": "${SMTP_FROM}"
timeout: 300
Placeholders to fill from your own secret store: ${SMTP_PASSWORD}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns2 advisories to act on (malicious, or rated high or critical with a fix available): GHSA-prgh-xp8r-p3m5 in [email protected] (direct, fixed in 10.0.5), GHSA-v53p-9fqp-m79j in [email protected] (direct, fixed in 10.0.6); 3 more of lower severity or without a fixdeps.mcp_sdk_version@modelcontextprotocol/server 2.1.0, no known advisorydeps.resolvable@ni-c/[email protected] resolved: 8 packagesNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
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.
+repository +namespace-matches-repo +website ~liveness-unmeasured ~updated-43d-ago -unpinned-packages(1)
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
@ni-c/[email protected] npm7 dependencies, resolved · MCP SDK @modelcontextprotocol/server 2.1.0 · advisories checked 2026-10-19
| advisory | severity | package | fixed in |
|---|---|---|---|
| GHSA-prgh-xp8r-p3m5Nodemailer addressparser: O(n^2) on comment-joined addresses enables a remote DoS (reachable via mailparser) | high | [email protected]direct | fixed in 10.0.5 |
| GHSA-v53p-9fqp-m79jNodemailer: Quadratic backtracking in the addressparser free-text fallback allows remote denial of service | high | [email protected]direct | fixed in 10.0.6 |
| GHSA-6vj9-mwq6-2f5vNodemailer: Process-global DNS cache reuses TLS `servername` across transports, enabling cross-tenant SMTP credential disclosure | moderate | [email protected]direct | fixed in 10.0.2 |
| GHSA-8vvx-rff5-p5rqNodemailer: Nested structured recipient arrays bypass the parser depth limit and cause stack exhaustion DoS | moderate | [email protected]direct | fixed in 10.0.2 |
| GHSA-g57g-f23g-4646Nodemailer: Quoted local-part can produce malformed envelope recipient through RFC 5322 comment parsing | moderate | [email protected]direct | fixed in 10.0.9 |
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
@ni-c/smtp-mcp | npm | 0.2.0 | – | SMTP_PASSWORD |
ghcr.io/ni-c/smtp-mcp:0.2.0 | oci | unpinned | – | SMTP_PASSWORD |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
And 13 more from this publisher.
{
"name": "io.github.ni-c/smtp-mcp",
"title": "SMTP",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "0.2.0",
"packages": [
{
"version": "0.2.0",
"transport": {
"type": "stdio"
},
"identifier": "@ni-c/smtp-mcp",
"registryType": "npm",
"environmentVariables": [
{
"name": "SMTP_HOST",
"format": "string",
"isRequired": true,
"description": "Hostname of the SMTP server, e.g. smtp.example.net."
},
{
"name": "SMTP_PORT",
"format": "number",
"description": "Port. Defaults to 587 for starttls, 465 for implicit, 25 for none."
},
{
"name": "SMTP_TLS",
"format": "string",
"description": "starttls (default), implicit or none. STARTTLS is required, never opportunistic."
},
{
"name": "SMTP_USER",
"format": "string",
"isRequired": true,
"description": "Username for SMTP authentication."
},
{
"name": "SMTP_PASSWORD",
"format": "string",
"isSecret": true,
"isRequired": true,
"description": "Password or app-specific password for SMTP authentication."
},
{
"name": "SMTP_FROM",
"format": "string",
"isRequired": true,
"description": "The only sender this server will use, e.g. \"Name <[email protected]>\". There is no from parameter."
},
{
"name": "SMTP_REPLY_TO",
"format": "string",
"description": "Reply-To header on every message, e.g. \"Team <[email protected]>\". Unset means no Reply-To header and replies go to SMTP_FROM. There is no reply_to parameter."
},
{
"name": "SMTP_ALLOW_SEND",
"format": "boolean",
"description": "Set to \"true\" to register the sending tools. Defaults to false: the server cannot send until it is set."
},
{
"name": "SMTP_ALLOWED_RECIPIENTS",
"format": "string",
"description": "Comma-separated addresses and @domains this server may write to. Required with SMTP_ALLOW_SEND=true; \"*\" allows any."
},
{
"name": "SMTP_MAX_RECIPIENTS",
"format": "number",
"description": "Maximum distinct recipients across To, Cc and Bcc in one message. Default 10."
},
{
"name": "SMTP_MAX_SENDS_PER_HOUR",
"format": "number",
"description": "Sliding hourly cap on messages sent. Default 20."
},
{
"name": "SMTP_MAX_MESSAGE_BYTES",
"format": "number",
"description": "Maximum size of the composed message. Default 10485760."
},
{
"name": "SMTP_MAX_ATTACHMENT_BYTES",
"format": "number",
"description": "Maximum size of a single attachment. Default 5242880."
},
{
"name": "SMTP_ATTACHMENT_DIR",
"format": "string",
"description": "Directory attachments are read from. Unset means attachments are unavailable."
},
{
"name": "SMTP_ATTACHMENT_TYPES",
"format": "string",
"description": "Comma-separated content types that may be attached. Defaults to a document and image allowlist."
},
{
"name": "SMTP_SIGNATURE",
"format": "string",
"description": "Text appended below the standard signature delimiter of every message."
},
{
"name": "SMTP_AUDIT_LOG",
"format": "string",
"description": "File the audit lines are appended to, in addition to stderr."
},
{
"name": "SMTP_ALLOW_TOOLS",
"format": "string",
"description": "Comma-separated tool names, a prefix with one trailing *, or \"essential\" for the curated preset."
},
{
"name": "SMTP_DENY_TOOLS",
"format": "string",
"description": "Comma-separated tool names or prefixes to remove, applied after SMTP_ALLOW_TOOLS."
},
{
"name": "SMTP_INSECURE_TLS",
"format": "boolean",
"description": "Set to \"true\" to accept self-signed certificates. Prefer a proper internal CA."
}
]
},
{
"transport": {
"type": "stdio"
},
"identifier": "ghcr.io/ni-c/smtp-mcp:0.2.0",
"registryType": "oci",
"environmentVariables": [
{
"name": "SMTP_HOST",
"format": "string",
"isRequired": true,
"description": "Hostname of the SMTP server, e.g. smtp.example.net."
},
{
"name": "SMTP_PORT",
"format": "number",
"description": "Port. Defaults to 587 for starttls, 465 for implicit, 25 for none."
},
{
"name": "SMTP_TLS",
"format": "string",
"description": "starttls (default), implicit or none. STARTTLS is required, never opportunistic."
},
{
"name": "SMTP_USER",
"format": "string",
"isRequired": true,
"description": "Username for SMTP authentication."
},
{
"name": "SMTP_PASSWORD",
"format": "string",
"isSecret": true,
"isRequired": true,
"description": "Password or app-specific password for SMTP authentication."
},
{
"name": "SMTP_FROM",
"format": "string",
"isRequired": true,
"description": "The only sender this server will use, e.g. \"Name <[email protected]>\". There is no from parameter."
},
{
"name": "SMTP_REPLY_TO",
"format": "string",
"description": "Reply-To header on every message, e.g. \"Team <[email protected]>\". Unset means no Reply-To header and replies go to SMTP_FROM. There is no reply_to parameter."
},
{
"name": "SMTP_ALLOW_SEND",
"format": "boolean",
"description": "Set to \"true\" to register the sending tools. Defaults to false: the server cannot send until it is set."
},
{
"name": "SMTP_ALLOWED_RECIPIENTS",
"format": "string",
"description": "Comma-separated addresses and @domains this server may write to. Required with SMTP_ALLOW_SEND=true; \"*\" allows any."
},
{
"name": "SMTP_MAX_RECIPIENTS",
"format": "number",
"description": "Maximum distinct recipients across To, Cc and Bcc in one message. Default 10."
},
{
"name": "SMTP_MAX_SENDS_PER_HOUR",
"format": "number",
"description": "Sliding hourly cap on messages sent. Default 20."
},
{
"name": "SMTP_MAX_MESSAGE_BYTES",
"format": "number",
"description": "Maximum size of the composed message. Default 10485760."
},
{
"name": "SMTP_MAX_ATTACHMENT_BYTES",
"format": "number",
"description": "Maximum size of a single attachment. Default 5242880."
},
{
"name": "SMTP_ATTACHMENT_DIR",
"format": "string",
"description": "Directory attachments are read from. Unset means attachments are unavailable."
},
{
"name": "SMTP_ATTACHMENT_TYPES",
"format": "string",
"description": "Comma-separated content types that may be attached. Defaults to a document and image allowlist."
},
{
"name": "SMTP_SIGNATURE",
"format": "string",
"description": "Text appended below the standard signature delimiter of every message."
},
{
"name": "SMTP_AUDIT_LOG",
"format": "string",
"description": "File the audit lines are appended to, in addition to stderr."
},
{
"name": "SMTP_ALLOW_TOOLS",
"format": "string",
"description": "Comma-separated tool names, a prefix with one trailing *, or \"essential\" for the curated preset."
},
{
"name": "SMTP_DENY_TOOLS",
"format": "string",
"description": "Comma-separated tool names or prefixes to remove, applied after SMTP_ALLOW_TOOLS."
},
{
"name": "SMTP_INSECURE_TLS",
"format": "boolean",
"description": "Set to \"true\" to accept self-signed certificates. Prefer a proper internal CA."
}
]
}
],
"repository": {
"url": "https://github.com/ni-c/smtp-mcp",
"source": "github"
},
"websiteUrl": "https://smtp-mcp.ni-c.de",
"description": "MCP server that sends mail over SMTP, gated behind an allowlist and a human confirmation"
}