This server cannot read the HTML part it just sent, so every HTML send is unverifiable #33
Labels
No labels
waiting-on-julian
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
jlxq0/jmap-mcp#33
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
v0.2.19gavesend_emailabody_html. Nothing in this server can then tell whether the part arrived, so the sender is the one party unable to check its own output.Measured by Lucy on a real briefing with both bodies populated, and confirmed here from the source:
The read path is structurally incapable of seeing it.
Email/getatsrc/mcp.rs:1283asks forhtmlBodyis not among them and only text body values are fetched.ReadEmailResulthas nobody_html.All three tools return the same values for a correct two-part message and for a message that only ever had text.
list_attachmentsis empty in both cases,read_emailhas no field that would differ,get_email_headerscarries noContent-Type. So there is no instrument here that can distinguish success from a dropped part, which is the up-answering-and-useless shape rather than a missing feature.Julian's eyes are currently the only reading that exists, and asking him costs a glance every time.
The fix
read_emailreturningbody_htmlwhen present, orget_email_headerscarryingContent-Type. Either turns a guess into a value; the first is the more useful because it also lets an agent read HTML mail it receives.Acceptance
A test that would have caught this: send-path output fed to the read path, asserting the HTML survives. Not a test asserting the field exists.
Found by Lucy, who measured it on her own sent copy rather than reporting that the send returned success.
Next up. Triaged 2026-08-31: this is one of three I would take before anything else in my repositories.
It cost real time on 2026-08-29 and 30, in three separate confusions that all looked like different faults.
Lucy sent Julian a styled newsletter on 2026-08-29 and nobody here could confirm the HTML part survived, because
read_email,get_email_headersandlist_attachmentsreturn identical values for a correct two-part message and for one that only ever had text. His eyes were the only instrument.That is now live rather than theoretical: he is asking for briefings in a proper design, and every one of them is unverifiable from this side.
Correcting the note above: this issue is directly implicated in a rejection, and I said it was not.
On 2026-08-29 Julian rejected two of Lucy's briefing emails:
Two HTML briefings went out, he found both unacceptable, and nobody on this side could read what had actually been sent. The correction round that followed was run blind, which is what this issue is about.
I had confused that with a separate pair of rejections, the Brevo campaign and the paste sheet, which are a different system and which this issue does not touch.
So there are two reasons and they are stronger together: it is implicated in a rejection that already happened, and it recurs on every styled briefing while being invisible from this side.
read_email,get_email_headersandlist_attachmentsreturn identical values for a correct two-part message and for one that only ever had text.First of the three, on that ordering.