{
  "slug": "io-github-ni-c-smtp-mcp",
  "name": "io.github.ni-c/smtp-mcp",
  "title": "SMTP",
  "description": "MCP server that sends mail over SMTP, gated behind an allowlist and a human confirmation",
  "version": "0.2.0",
  "publishedAt": "2026-09-07T18:06:20.626217Z",
  "updatedAt": "2026-09-07T18:06:20.626217Z",
  "repoUrl": "https://github.com/ni-c/smtp-mcp",
  "websiteUrl": "https://smtp-mcp.ni-c.de",
  "namespace": {
    "type": "github",
    "owner": "ni-c"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@ni-c/smtp-mcp",
      "version": "0.2.0",
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "oci",
      "identifier": "ghcr.io/ni-c/smtp-mcp:0.2.0",
      "version": null,
      "transport": "stdio",
      "runtimeHint": null
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "SMTP_HOST",
      "isSecret": false,
      "isRequired": true,
      "description": "Hostname of the SMTP server, e.g. smtp.example.net."
    },
    {
      "name": "SMTP_PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Port. Defaults to 587 for starttls, 465 for implicit, 25 for none."
    },
    {
      "name": "SMTP_TLS",
      "isSecret": false,
      "isRequired": false,
      "description": "starttls (default), implicit or none. STARTTLS is required, never opportunistic."
    },
    {
      "name": "SMTP_USER",
      "isSecret": false,
      "isRequired": true,
      "description": "Username for SMTP authentication."
    },
    {
      "name": "SMTP_PASSWORD",
      "isSecret": true,
      "isRequired": true,
      "description": "Password or app-specific password for SMTP authentication."
    },
    {
      "name": "SMTP_FROM",
      "isSecret": false,
      "isRequired": true,
      "description": "The only sender this server will use, e.g. \"Name <person@example.net>\". There is no from parameter."
    },
    {
      "name": "SMTP_REPLY_TO",
      "isSecret": false,
      "isRequired": false,
      "description": "Reply-To header on every message, e.g. \"Team <team@example.net>\". Unset means no Reply-To header and replies go to SMTP_FROM. There is no reply_to parameter."
    },
    {
      "name": "SMTP_ALLOW_SEND",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to \"true\" to register the sending tools. Defaults to false: the server cannot send until it is set."
    },
    {
      "name": "SMTP_ALLOWED_RECIPIENTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated addresses and @domains this server may write to. Required with SMTP_ALLOW_SEND=true; \"*\" allows any."
    },
    {
      "name": "SMTP_MAX_RECIPIENTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum distinct recipients across To, Cc and Bcc in one message. Default 10."
    },
    {
      "name": "SMTP_MAX_SENDS_PER_HOUR",
      "isSecret": false,
      "isRequired": false,
      "description": "Sliding hourly cap on messages sent. Default 20."
    },
    {
      "name": "SMTP_MAX_MESSAGE_BYTES",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum size of the composed message. Default 10485760."
    },
    {
      "name": "SMTP_MAX_ATTACHMENT_BYTES",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum size of a single attachment. Default 5242880."
    },
    {
      "name": "SMTP_ATTACHMENT_DIR",
      "isSecret": false,
      "isRequired": false,
      "description": "Directory attachments are read from. Unset means attachments are unavailable."
    },
    {
      "name": "SMTP_ATTACHMENT_TYPES",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated content types that may be attached. Defaults to a document and image allowlist."
    },
    {
      "name": "SMTP_SIGNATURE",
      "isSecret": false,
      "isRequired": false,
      "description": "Text appended below the standard signature delimiter of every message."
    },
    {
      "name": "SMTP_AUDIT_LOG",
      "isSecret": false,
      "isRequired": false,
      "description": "File the audit lines are appended to, in addition to stderr."
    },
    {
      "name": "SMTP_ALLOW_TOOLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated tool names, a prefix with one trailing *, or \"essential\" for the curated preset."
    },
    {
      "name": "SMTP_DENY_TOOLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated tool names or prefixes to remove, applied after SMTP_ALLOW_TOOLS."
    },
    {
      "name": "SMTP_INSECURE_TLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to \"true\" to accept self-signed certificates. Prefer a proper internal CA."
    }
  ],
  "category": "communication",
  "subcategory": "email",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/ni-c/smtp-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "info",
      "detail": "Asks for 1 secret: SMTP_PASSWORD"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account ni-c"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "@ni-c/smtp-mcp@0.2.0 runs nothing at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 46 files in @ni-c/smtp-mcp@0.2.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "warn",
      "detail": "Tells an AI reviewer the code is safe (dist/server.js: \"…d then say what stands in * the way. A model that believes this server is harmless is a model that will * not stop to won…\"). Read the context: a security tool may quote these on purpose."
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"smtp-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ni-c/smtp-mcp@0.2.0\"\n      ],\n      \"env\": {\n        \"SMTP_HOST\": \"<your value>\",\n        \"SMTP_USER\": \"<your value>\",\n        \"SMTP_PASSWORD\": \"<your value>\",\n        \"SMTP_FROM\": \"<your value>\"\n      }\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"smtp-mcp\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"-e\",\n        \"SMTP_HOST\",\n        \"-e\",\n        \"SMTP_USER\",\n        \"-e\",\n        \"SMTP_PASSWORD\",\n        \"-e\",\n        \"SMTP_FROM\",\n        \"ghcr.io/ni-c/smtp-mcp:0.2.0\"\n      ],\n      \"env\": {\n        \"SMTP_HOST\": \"<your value>\",\n        \"SMTP_USER\": \"<your value>\",\n        \"SMTP_PASSWORD\": \"<your value>\",\n        \"SMTP_FROM\": \"<your value>\"\n      }\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 0,
  "archived": false,
  "pushedAt": "2026-10-27T14:14:45Z",
  "health": {
    "score": 56,
    "parts": {
      "popularity": 0.17685812916001656,
      "activity": 1,
      "issues": null,
      "security": 0.8
    },
    "fail": 0,
    "warn": 1,
    "raw": {
      "stars": 0,
      "forks": 0,
      "downloads": 74,
      "hn": null,
      "issuesOpen": 0,
      "issuesClosed": 0,
      "prsMerged": 46,
      "commits90": 104,
      "release": "2026-09-07T18:02:45Z",
      "pushed": "2026-10-27T14:14:45Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:42:38.200Z"
  }
}
