Skip to main content
Glama
Michaelzag
by Michaelzag
email_parsing.py2.64 kB
""" Email address and domain parsing utilities for smart MCP tool handling """ import re from typing import Union, List, Tuple from migadu_mcp.config import get_config def parse_email_target(target: Union[str, List[str]]) -> List[Tuple[str, str]]: """Parse email target(s) into (domain, local_part) tuples with smart domain resolution. Args: target: Single email/local_part or list of emails/local_parts Returns: List of (domain, local_part) tuples Raises: ValueError: If domain cannot be determined Examples: parse_email_target("april") -> [("default-domain.com", "april")] parse_email_target("april@company.com") -> [("company.com", "april")] parse_email_target(["april", "bob@other.com"]) -> [("default-domain.com", "april"), ("other.com", "bob")] """ if isinstance(target, str): targets = [target] else: targets = target result = [] default_domain = None for item in targets: if "@" in item: # Full email address provided local_part, domain = item.split("@", 1) result.append((domain, local_part)) else: # Local part only - need default domain if default_domain is None: config = get_config() default_domain = config.get_default_domain() if not default_domain: raise ValueError( f"No domain specified for '{item}' and MIGADU_DOMAIN not configured. " "Either provide full email addresses (user@domain.com) or set MIGADU_DOMAIN environment variable." ) result.append((default_domain, item)) return result def format_email_address(domain: str, local_part: str) -> str: """Format domain and local_part into full email address""" return f"{local_part}@{domain}" def validate_email_format(email: str) -> bool: """Basic email format validation""" email_pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" return bool(re.match(email_pattern, email)) def extract_domains(targets: List[Tuple[str, str]]) -> List[str]: """Extract unique domains from parsed targets""" return list(set(domain for domain, _ in targets)) def group_by_domain(targets: List[Tuple[str, str]]) -> dict[str, List[str]]: """Group targets by domain for batch operations""" grouped: dict[str, List[str]] = {} for domain, local_part in targets: if domain not in grouped: grouped[domain] = [] grouped[domain].append(local_part) return grouped

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Michaelzag/migadu-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server