{
  "language": "en",
  "name": "Email Checker MCP",
  "version": "1.0.0",
  "description": "Model Context Protocol (MCP) server for email and domain verification. Integrate with Cursor, Claude Desktop, and other MCP-compatible AI agents.",
  "documentationUrl": "https://verify-email.app/api-documentation",
  "serverUrl": "https://api.verify-email.app/mcp",
  "docsEndpoint": "https://api.verify-email.app/mcp/docs",
  "authentication": {
    "type": "header",
    "headerName": "X-API-Key",
    "description": "Your API key from the verify-email.app dashboard. Required for all MCP tool calls.",
    "getApiKeyUrl": "https://verify-email.app/dashboard"
  },
  "tools": [
    {
      "name": "verify_email",
      "description": "Full email verification including syntax, MX, SMTP, disposable, privacy, and deliverability checks. Returns valid, block, disposable, privacy, deliverable, domain, and remaining_credits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address to verify (e.g. user@example.com)"
          }
        },
        "required": [
          "email"
        ]
      },
      "creditsPerCall": 1,
      "mapsToApi": "GET /v1/verify?input={email}"
    },
    {
      "name": "verify_domain",
      "description": "Full domain verification including MX records, disposable, privacy, and catch-all detection. Returns valid, block, disposable, privacy, domain, catch_all, mx_found, and remaining_credits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain to verify (e.g. example.com)"
          }
        },
        "required": [
          "domain"
        ]
      },
      "creditsPerCall": 1,
      "mapsToApi": "GET /v1/verify?input={domain}"
    },
    {
      "name": "check_deliverability",
      "description": "Fast deliverability-only check using MX and SMTP verification without external API calls. Returns valid, deliverable, mx_found, catch_all, email_address, and remaining_credits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address to check deliverability"
          }
        },
        "required": [
          "email"
        ]
      },
      "creditsPerCall": 1,
      "mapsToApi": "GET /v1/verify/deliverable?input={email}"
    },
    {
      "name": "verify_batch",
      "description": "Batch verification for up to 100 emails or domains in a single request. Returns results array and remaining_credits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "inputs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of email addresses or domains (max 100)"
          }
        },
        "required": [
          "inputs"
        ]
      },
      "creditsPerCall": "1 per item",
      "mapsToApi": "POST /v1/verify/batch with body { inputs: string[] }"
    },
    {
      "name": "validate_email_syntax",
      "description": "Quick local syntax validation against RFC 5322. No network calls; does not consume credits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address to validate syntactically"
          }
        },
        "required": [
          "email"
        ]
      },
      "creditsPerCall": 0,
      "mapsToApi": "Local validation only"
    }
  ],
  "responseFields": {
    "valid": "Email/domain passes basic validation (format, deliverability). Do not use for blacklist/whitelist decisions.",
    "block": "Recommendation to block. Use this for blacklist/whitelist: blacklist → true; whitelist → false; not in whitelist (when enabled) → true.",
    "disposable": "True if the address is temporary or disposable.",
    "privacy": "True if the mail server uses an alias or forwarder.",
    "applePrivateEmail": "True if the email is an Apple Private Relay address.",
    "deliverable": "True if the mailbox exists and can receive mail.",
    "domain": "The domain part of the email or the verified domain.",
    "email_address": "The normalized email address (email verification only).",
    "catch_all": "True if the domain accepts all addresses regardless of recipient.",
    "mx_found": "True if the domain has valid MX records.",
    "remaining_credits": "API credits remaining for your account.",
    "error": "Error message when verification fails."
  },
  "errorResponses": {
    "401": "Invalid or missing X-API-Key.",
    "400": "Bad request (e.g. invalid input format, empty batch).",
    "429": "Rate limit or credit limit exceeded.",
    "503": "Service temporarily unavailable."
  },
  "integration": {
    "cursor": {
      "configPath": ".cursor/mcp.json",
      "example": {
        "mcpServers": {
          "email-checker": {
            "url": "https://api.verify-email.app/mcp",
            "headers": {
              "X-API-Key": "your-api-key"
            }
          }
        }
      }
    },
    "claudeDesktop": {
      "configPath": "Claude Desktop config (varies by OS)",
      "example": {
        "mcpServers": {
          "email-checker": {
            "url": "https://api.verify-email.app/mcp",
            "headers": {
              "X-API-Key": "your-api-key"
            }
          }
        }
      }
    }
  },
  "apiEndpoints": [
    {
      "method": "GET",
      "path": "/v1/verify",
      "description": "Single email or domain verification"
    },
    {
      "method": "POST",
      "path": "/v1/verify/batch",
      "description": "Batch verification (max 100)"
    },
    {
      "method": "GET",
      "path": "/v1/verify/deliverable",
      "description": "Deliverability-only check"
    }
  ]
}