{
  "serverInfo": {
    "name": "mailalign",
    "title": "MailAlign",
    "version": "0.1.2"
  },
  "description": "Analyze raw email headers: From/Return-Path/Reply-To/DKIM alignment, SPF/DKIM/DMARC/ARC verdicts, Received hops with delays and public IPs, plain-English findings. No network lookups; header text never stored. Anonymous: about 30 checks per minute per IP; free key: about 100 per month.",
  "homepage": "https://mailalign.mike-tusa.workers.dev/",
  "contact": {
    "email": "digitalpromohub.support@gmail.com"
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://mailalign.mike-tusa.workers.dev/mcp"
  },
  "protocolVersions": [
    "2026-07-28",
    "2025-11-25",
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "authentication": {
    "required": false,
    "schemes": [
      "bearer",
      "x-api-key"
    ],
    "keyUrl": "https://mailalign.mike-tusa.workers.dev/#key"
  },
  "instructions": "MailAlign analyzes raw email headers that the user pastes: From / Return-Path / Reply-To / DKIM d= domain alignment (relaxed and strict), the SPF, DKIM, DMARC and ARC verdicts recorded in Authentication-Results and ARC headers, and the Received hop chain with per-hop delays and public IPs, with plain-English findings. Call analyze_headers with the full header block (from \"Show original\" in Gmail or \"View source\" in Outlook/Apple Mail). It makes no network or DNS lookups and does not verify signatures; it reports what the receiving servers recorded. Input is limited to 65536 bytes. Header text is not stored or logged. Anonymous use is limited to about 30 checks per minute per IP plus a shared daily pool. A free API key (POST /api/keys, no sign-up) gives 100 analyses per month; send it as Authorization: Bearer <key> or X-Api-Key.",
  "tools": [
    {
      "name": "analyze_headers",
      "title": "Analyze email headers",
      "description": "Analyze pasted raw email headers. Reports From / Return-Path / Reply-To / DKIM d= alignment (relaxed and strict), SPF / DKIM / DMARC / ARC verdicts as recorded by the receiving servers (Authentication-Results, ARC-*), the Received hop chain oldest first with per-hop delays and public IPs, and plain-English findings with severity and what each means or how to fix it. Makes no network or DNS calls and does not verify signatures. Header text is not stored. Read-only. Same engine as the MailAlign JSON API (POST /api/analyze).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "headers": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60000,
            "description": "The full raw header block of one email, e.g. \"Received: from ...\nAuthentication-Results: ...\nFrom: ...\". A body after the first blank line is ignored."
          },
          "include_raw": {
            "type": "boolean",
            "default": false,
            "description": "Also return the full /api/analyze JSON (all findings and hops) in structuredContent.raw."
          }
        },
        "required": [
          "headers"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "verdict": {
            "type": "string",
            "enum": [
              "pass",
              "review",
              "fail",
              "unknown"
            ]
          },
          "fromDomain": {
            "type": "string"
          },
          "spf": {
            "type": "string"
          },
          "dkim": {
            "type": "string"
          },
          "dmarc": {
            "type": "string"
          },
          "arc": {
            "type": "string"
          },
          "dkimAligned": {
            "type": "object",
            "properties": {
              "strict": {
                "type": "boolean"
              },
              "relaxed": {
                "type": "boolean"
              }
            },
            "required": [
              "strict",
              "relaxed"
            ]
          },
          "spfAligned": {
            "type": "object",
            "properties": {
              "strict": {
                "type": "boolean"
              },
              "relaxed": {
                "type": "boolean"
              }
            },
            "required": [
              "strict",
              "relaxed"
            ]
          },
          "hops": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "hop": {
                  "type": "number"
                },
                "from": {
                  "type": "string"
                },
                "by": {
                  "type": "string"
                },
                "ip": {
                  "type": "string"
                },
                "ipScope": {
                  "type": "string"
                },
                "timestamp": {
                  "type": "string"
                },
                "delaySeconds": {
                  "type": "number"
                }
              },
              "required": [
                "hop"
              ]
            }
          },
          "hopsOmitted": {
            "type": "number"
          },
          "totalDelaySeconds": {
            "type": "number"
          },
          "publicIps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "findings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "severity": {
                  "type": "string",
                  "enum": [
                    "critical",
                    "warning",
                    "info",
                    "ok"
                  ]
                },
                "code": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "severity",
                "code",
                "title",
                "detail"
              ]
            }
          },
          "findingsOmitted": {
            "type": "number"
          },
          "version": {
            "type": "string"
          },
          "raw": {
            "type": "object",
            "description": "Full /api/analyze response (only when include_raw is true)"
          }
        },
        "required": [
          "verdict",
          "findings",
          "hops",
          "version"
        ]
      },
      "annotations": {
        "title": "Analyze email headers",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}