{"serverId":"mcp-registry/io.grabmail/mcp","tools":[{"name":"create_inbox","fixed":{"name":"create_inbox","description":"Invent a fresh, unused disposable email address you can give out immediately. Nothing is created or reserved server-side — an address exists as soon as mail arrives at it — so this never fails and needs no account. Public domains: grabmail.io, mixozia.com, linqmail.com. With a paid key sent as Authorization: Bearer, a premium-pool domain from list_domains works too.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Which domain to use: a public domain (grabmail.io, mixozia.com, linqmail.com), or, with a paid key, one of the premium-pool domains returned by list_domains. Defaults to grabmail.io."},"prefix":{"type":"string","maxLength":40,"description":"Optional readable prefix; a random suffix is added so it stays unique."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a disposable inbox"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":234,"tokensAfter":234},{"name":"delete_message","fixed":{"name":"delete_message","description":"Remove a message now rather than waiting for it to expire. Idempotent.","inputSchema":{"type":"object","required":["address","id"],"properties":{"id":{"type":"string"},"address":{"type":"string","description":"The full address, e.g. something@grabmail.io"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"list_domains","fixed":{"name":"list_domains","description":"The public domains anyone may use. A domain of your own needs no account or key either — just an MX record pointing here. These public domains are on disposable-mail blocklists; if a form rejects them, see the premium pool noted in the result. With a paid key sent as Authorization: Bearer, the result also lists the premium-pool domain names.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List the public domains"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"list_messages","fixed":{"name":"list_messages","description":"Everything waiting at an address, newest first. Returns immediately, including when the mailbox is empty — use wait_for_message if you are expecting something that has not arrived yet.","inputSchema":{"type":"object","required":["address"],"properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1},"before":{"type":"string","description":"Cursor from a previous call, to read older messages."},"address":{"type":"string","description":"The full address, e.g. something@grabmail.io"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List the messages at an address"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"read_message","fixed":{"name":"read_message","description":"The full message: sender, subject, plain text, HTML and any attachments. This is where a confirmation code or a sign-in link will be. Read `text`: when the sender shipped HTML only, as most transactional mail does, it holds a plain-text rendering of that HTML rather than nothing, with link targets and image alt text kept.","inputSchema":{"type":"object","required":["address","id"],"properties":{"id":{"type":"string","description":"The message id from list_messages or wait_for_message."},"address":{"type":"string","description":"The full address, e.g. something@grabmail.io"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Read one message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":181,"tokensAfter":181}],"toolsChanged":5,"tokensSaved":0,"todo":[{"tool":"delete_message","params":["id"]},{"tool":"list_messages","params":["limit"]},{"tool":"wait_for_message","params":["timeout_seconds"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}