[{"slug":"ZV-2026-0119","server_name":"primitive.dev","severity":"breaking","title":"primitive.dev: Type of wait on awaitReply changed string → boolean.","summary":"[risky] Description of awaitReply changed (67% word delta). [risky] Optional field api_key was added to awaitReply; may shift model behaviour. [breaking] Type of wait on awaitReply changed string → boolean. [breaking] Enum value true removed from wait on awaitReply. [breaking] Enum value false removed from wait on awaitReply. [risky] Default of wait on awaitReply changed unset → true. [risky] Default of wait_timeout_ms on awaitReply changed unset → 30000. [safe] Description of createEmailAddress changed (22% word delta). [risky] Description of getAccount changed (65% word delta). [risky] Description of sendEmail changed (58% word delta).","changes":[{"kind":"description_changed","tool":"awaitReply","after":"Wait for the threaded reply to a sent email. Call this immediately after sendEmail or replyToEmail when you expect an answer. With only the sent email's id it long-polls for up to 30 seconds by default. Do not report that nobody replied or ask the user to check later until this call returns with no reply. Set wait=false only for a deliberate immediate poll. Matching uses reply threading, not a sender or subject guess.","before":"Get the threaded reply to a sent email — the canonical 'did they reply yet?' call. Pass the sent email's id (from a sendEmail response). With wait=true it long-polls up to wait_timeout_ms for the reply to arrive (synchronous agent-to-agent chat); with wait=false (default) it returns immediately with the reply if one has arrived, else reply=null. Matches on the reply's threading, not a from/subject guess.","detail":"Description of `awaitReply` changed (67% word delta).","severity":"risky","descriptionDelta":0.6708860759493671},{"kind":"input_property_added","path":"inputSchema.properties.api_key","tool":"awaitReply","after":{"type":"string","maxLength":200,"minLength":8,"description":"Primitive API key (prim_...). Only needed when this connection has no signed-in account: pass the api_key returned by createEmailAddress, unchanged, on every call for the rest of the conversation. Omit it when the user is signed in."},"detail":"Optional field `api_key` was added to `awaitReply`; may shift model behaviour.","severity":"risky"},{"kind":"input_type_changed","path":"inputSchema.properties.wait","tool":"awaitReply","after":"boolean","before":"string","detail":"Type of `wait` on `awaitReply` changed string → boolean.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.wait","tool":"awaitReply","before":"true","detail":"Enum value `true` removed from `wait` on `awaitReply`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.wait","tool":"awaitReply","before":"false","detail":"Enum value `false` removed from `wait` on `awaitReply`.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.wait","tool":"awaitReply","after":true,"detail":"Default of `wait` on `awaitReply` changed unset → true.","severity":"risky"},{"kind":"default_changed","path":"inputSchema.properties.wait_timeout_ms","tool":"awaitReply","after":30000,"detail":"Default of `wait_timeout_ms` on `awaitReply` changed unset → 30000.","severity":"risky"},{"kind":"description_changed","tool":"createEmailAddress","after":"Get this user's Primitive managed inbox domain, creating the account on first use: no signup form, no password, no email verification, no browser. CALL THIS FIRST whenever you do not already have a Primitive API key and the user wants to send or receive email, instead of telling them to sign up or visit a website. On first use the REST response's address field is a domain such as pink-ram.primitive.email, not a complete mailbox. When it is non-null, this MCP result also includes sender_address such as agent@pink-ram.primitive.email for use as sendEmail.requestBody.from. It also returns an api_key. IMPORTANT: pass that api_key as the `api_key` argument on every later Primitive tool call in this conversation, exactly as returned; those calls fail without it. If this user already has a domain, the result repeats it with existing_account: true. Report it as their existing managed inbox rather than announcing a new one, and calling again will not produce a different one. The result also carries an upgrade link the user can open whenever they want to attach this domain to a full account.","before":"Get this user's Primitive email address, creating the account on first use: no signup form, no password, no email verification, no browser. CALL THIS FIRST whenever you do not already have a Primitive API key and the user wants to send or receive email, instead of telling them to sign up or visit a website. On first use it returns a new address and an api_key, and the account can send and receive mail immediately. IMPORTANT: pass the returned api_key as the `api_key` argument on every later Primitive tool call in this conversation, exactly as returned; those calls fail without it. If this user already has an address, the result repeats that same address with existing_account: true and NO api_key. Report it as their existing address rather than announcing a new one, and calling again will not produce a different one. The result also carries an upgrade link the user can open whenever they want to attach this address to a full account, keeping the same address.","detail":"Description of `createEmailAddress` changed (22% word delta).","severity":"safe","descriptionDelta":0.22499999999999998},{"kind":"description_changed","tool":"getAccount","after":"Use this when you need the authenticated Primitive account summary, including plan, onboarding state, and managed inbox domain. managed_inbox_address is a domain, not a complete mailbox. When it is non-null, this MCP result also includes sender_address, such as agent@pink-ram.primitive.email, for use as sendEmail.requestBody.from.","before":"Use this when you need the authenticated Primitive account summary, including email, plan, onboarding state, and webhook secret rotation time.","detail":"Description of `getAccount` changed (65% word delta).","severity":"risky","descriptionDelta":0.6521739130434783},{"kind":"description_changed","tool":"sendEmail","after":"Use this when the user has confirmed a new outbound email. Sends real email through Primitive's relay and can wait for the first SMTP delivery outcome, or schedule the send for a future time with scheduled_at. IMPORTANT: `from` is YOUR OWN complete mailbox address, never the recipient's. Use sender_address from createEmailAddress or getAccount for a managed inbox. AFTER sending, if you expect an answer, immediately call awaitReply with the returned id and wait for it, rather than telling the user the message was sent and stopping. Most agent mailboxes answer within seconds, and the answer is usually the thing the user actually asked you for.","before":"Use this when the user has confirmed a new outbound email. Sends real email through Primitive's relay and can wait for the first SMTP delivery outcome, or schedule the send for a future time with scheduled_at.","detail":"Description of `sendEmail` changed (58% word delta).","severity":"risky","descriptionDelta":0.5789473684210527}],"published_at":"2026-08-17T22:11:39.954Z"}]