{"id":"email-addresses-extract","version":"1.0.0","description":"Extract the unique email addresses (RFC 5322 addr-spec subset) from text, normalized, in first-seen order.","supported_operations":["extract email addresses from text","find all email addresses in a document","list unique emails mentioned in a message","pull contact emails out of pasted text","deduplicate email addresses found in text","harvest addr-spec mailboxes from an email header","חילוץ כתובות אימייל מטקסט"],"unsupported_operations":["parse display names or RFC 5322 mailbox/group syntax","check whether an address can receive mail (DNS, MX or SMTP lookup)","extract addresses with comments, domain literals or internationalized (U-label) domains","apply provider-specific rules such as removing dots or +tags"],"semantics":["A candidate is a dot-atom local-part, \"@\", and a domain of at least two ASCII LDH labels (RFC 5322 3.4.1 with the RFC 5321 4.1.2 Domain rule); non-ASCII local-part characters are limited to Unicode letters, marks and numbers (RFC 6531 3.3 subset).","Scanning is left to right and non-overlapping: the local-part is the maximal atext/\".\" run before each \"@\", the domain is the maximal letter/digit/hyphen/\".\" run after it, and trailing dots are treated as punctuation.","A candidate is skipped, never shortened or repaired, when any rule fails: local-part over 64 octets, label over 63, address over 254 (RFC 5321 4.5.3.1), all-numeric top-level label, \"@\", \"\\\" or URL userinfo before it, \"@\" or a non-ASCII letter/mark/number right after it.","Leading local-part symbols are dropped only when they form a symmetric wrapper (' ` * _ ~ or { }) that closes right after the domain; otherwise a symbol-led local-part is skipped. Quoted-string local-parts are never extracted from prose.","Each address is normalized like email-address-normalize: local-part NFC with case preserved, domain lowercased. Duplicates are merged on the normalized form, so local-parts that differ in case stay distinct (RFC 5321 2.4).","Message-ID values share the addr-spec syntax and are returned when they match; no header context is used. Unicode classes and NFC come from the runtime Unicode version.","More than 65536 UTF-8 bytes of text, or more than 256 accepted occurrences, is limit_exceeded; empty text returns no addresses."],"limits":{"max_text_bytes":65536,"max_occurrences":256},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","description":"Free text to scan (at most 65536 UTF-8 bytes)."}}},"output_schema":{"type":"object","additionalProperties":false,"required":["addresses","unique_count","occurrence_count"],"properties":{"addresses":{"type":"array","maxItems":256,"items":{"type":"string","minLength":5,"maxLength":254}},"unique_count":{"type":"integer","minimum":0,"maximum":256},"occurrence_count":{"type":"integer","minimum":0,"maximum":256}}},"examples":[{"input":{"text":"To: Mary Smith <mary@x.test>, jdoe@example.org, Who? <one@y.test>"},"output":{"addresses":["mary@x.test","jdoe@example.org","one@y.test"],"unique_count":3,"occurrence_count":3}},{"input":{"text":"Write to 'Ops@Example.COM' or ops@example.com; Smith@example.com is not smith@example.com."},"output":{"addresses":["Ops@example.com","ops@example.com","Smith@example.com","smith@example.com"],"unique_count":4,"occurrence_count":4}}],"execute_url":"/v1/tools/email-addresses-extract/versions/1.0.0/execute"}