# Email — canonical payload contracts

Validate and inspect email addresses (syntax, MX via dig, disposable, role). Does not send mail.

**Service id:** `email`  
**Docs:** [https://mcp.glc-rag.hu/guide/email](https://mcp.glc-rag.hu/guide/email)  
**Markdown docs:** [https://mcp.glc-rag.hu/guide/email.md](https://mcp.glc-rag.hu/guide/email.md)  
**MCP resource:** `docs://email/payload`

POST `https://mcp.glc-rag.hu/mcp`. Values below are **type slots** from the live input schema (e.g. `<string, required>`), not example data. Fill them from the user task.

RPC result wrapper: `result.structuredContent` is the object in **Output schema**. `result.isError` mirrors `structuredContent.is_error`.

## `email_normalize`

Normalize email (lowercase, IDNA domain). Optional Gmail dot/+ strip flags.

**Required arguments:** `email`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_normalize",
    "arguments": {
      "email": "<string, required>",
      "gmail_dots": "<boolean, optional, default False>",
      "strip_plus": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    },
    "gmail_dots": {
      "type": "boolean",
      "default": false
    },
    "strip_plus": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "normalized": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_validate`

Syntax/sanity validation only (no DNS).

**Required arguments:** `email`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_validate",
    "arguments": {
      "email": "<string, required>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "result": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_domain_check`

Domain label/IDN check; optional A/AAAA resolve via dig.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_domain_check",
    "arguments": {
      "email": "<string, optional>",
      "domain": "<string, optional>",
      "resolve_a": "<boolean, optional, default False>",
      "timeout_ms": "<integer, optional, default 2000, minimum 500, maximum 5000>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    },
    "domain": {
      "type": "string",
      "description": "Domain only (if email omitted)"
    },
    "resolve_a": {
      "type": "boolean",
      "default": false
    },
    "timeout_ms": {
      "type": "integer",
      "minimum": 500,
      "maximum": 5000,
      "default": 2000
    }
  },
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "result": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_mx_check`

MX lookup via Linux dig (A/AAAA fallback). No SMTP.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_mx_check",
    "arguments": {
      "email": "<string, optional>",
      "domain": "<string, optional>",
      "timeout_ms": "<integer, optional, default 2000, minimum 500, maximum 5000>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    },
    "domain": {
      "type": "string"
    },
    "timeout_ms": {
      "type": "integer",
      "minimum": 500,
      "maximum": 5000,
      "default": 2000
    }
  },
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "result": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_disposable_check`

Check local disposable/temp email domain list.

**Required arguments:** `email`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_disposable_check",
    "arguments": {
      "email": "<string, required>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "result": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_role_detect`

Detect role/shared local-parts (admin, noreply, support, …).

**Required arguments:** `email`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_role_detect",
    "arguments": {
      "email": "<string, required>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to inspect"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "result": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `email_status`

Email service health: dig path, list sizes, DNS limits.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "email_status",
    "arguments": {}
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    }
  },
  "additionalProperties": true,
  "required": [
    "ok"
  ]
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```
