{"serverId":"mcp-registry/io.github.minutemailco/mcp-server","tools":[{"name":"archived.delete","fixed":{"name":"archived_delete","description":"Permanently delete an archived mailbox.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"mailboxId":{"type":"string","description":"Archived mailbox ID"}}},"annotations":{"title":"Delete archived mailbox","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete archived mailbox"},"changes":[{"kind":"name","detail":"Renamed \"archived.delete\" → \"archived_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"archived.get","fixed":{"name":"archived_get","description":"Fetch a single archived mailbox by ID.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"mailboxId":{"type":"string","description":"Archived mailbox ID"}}},"annotations":{"title":"Get archived mailbox","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get archived mailbox"},"changes":[{"kind":"name","detail":"Renamed \"archived.get\" → \"archived_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"archived.list","fixed":{"name":"archived_list","description":"List the tenant's archived (expired but recoverable) mailboxes.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List archived mailboxes","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List archived mailboxes"},"changes":[{"kind":"name","detail":"Renamed \"archived.list\" → \"archived_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":43,"tokensAfter":43},{"name":"archived.reactivate","fixed":{"name":"archived_reactivate","description":"Reactivate an archived mailbox back to active state.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"expiresIn":{"type":"integer","description":"New lifetime in minutes, 1-60. Optional."},"mailboxId":{"type":"string","description":"Archived mailbox ID"}}},"annotations":{"title":"Reactivate archived mailbox","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Reactivate archived mailbox"},"changes":[{"kind":"name","detail":"Renamed \"archived.reactivate\" → \"archived_reactivate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"attachments.add","fixed":{"name":"attachments_add","description":"Attach a file to a test-injected email (base64 payload).","inputSchema":{"type":"object","required":["mailboxId","mailId","filename","data"],"properties":{"data":{"type":"string","description":"File contents, standard base64"},"mailId":{"type":"string","description":"Mail ID"},"filename":{"type":"string","description":"Attachment file name"},"expiresIn":{"type":"integer","description":"Attachment lifetime in minutes (>=1). Optional."},"mailboxId":{"type":"string","description":"Mailbox ID"},"sizeBytes":{"type":"integer","description":"Expected size in bytes. Optional; validated against the decoded data when set."},"contentType":{"type":"string","description":"MIME type, defaults to application/octet-stream"}}},"annotations":{"title":"Add attachment","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Add attachment"},"changes":[{"kind":"name","detail":"Renamed \"attachments.add\" → \"attachments_add\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"attachments.delete","fixed":{"name":"attachments_delete","description":"Delete a single attachment.","inputSchema":{"type":"object","required":["mailboxId","mailId","attachmentId"],"properties":{"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"},"attachmentId":{"type":"string","description":"Attachment ID"}}},"annotations":{"title":"Delete attachment","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete attachment"},"changes":[{"kind":"name","detail":"Renamed \"attachments.delete\" → \"attachments_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"attachments.delete_bulk","fixed":{"name":"attachments_delete_bulk","description":"Delete several attachments of one email at once.","inputSchema":{"type":"object","required":["mailboxId","mailId","ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Attachment IDs to delete"},"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Bulk delete attachments","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Bulk delete attachments"},"changes":[{"kind":"name","detail":"Renamed \"attachments.delete_bulk\" → \"attachments_delete_bulk\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"attachments.get","fixed":{"name":"attachments_get","description":"Download an attachment. The file contents are returned base64-encoded in the JSON \"data\" field.","inputSchema":{"type":"object","required":["mailboxId","mailId","attachmentId"],"properties":{"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"},"attachmentId":{"type":"string","description":"Attachment ID"}}},"annotations":{"title":"Get attachment","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get attachment"},"changes":[{"kind":"name","detail":"Renamed \"attachments.get\" → \"attachments_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"attachments.list","fixed":{"name":"attachments_list","description":"List the attachments of an email (metadata only).","inputSchema":{"type":"object","required":["mailboxId","mailId"],"properties":{"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"List attachments","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List attachments"},"changes":[{"kind":"name","detail":"Renamed \"attachments.list\" → \"attachments_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"domains.delete","fixed":{"name":"domains_delete","description":"Delete a registered custom domain.","inputSchema":{"type":"object","required":["domainId"],"properties":{"domainId":{"type":"string","description":"Domain ID"}}},"annotations":{"title":"Delete domain","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete domain"},"changes":[{"kind":"name","detail":"Renamed \"domains.delete\" → \"domains_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":57,"tokensAfter":57},{"name":"domains.list","fixed":{"name":"domains_list","description":"List the tenant's custom domains with their DNS verification status.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List domains","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List domains"},"changes":[{"kind":"name","detail":"Renamed \"domains.list\" → \"domains_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":44,"tokensAfter":44},{"name":"domains.register","fixed":{"name":"domains_register","description":"Register a new custom domain. DNS records (TXT token + MX) must then be added before verification can succeed.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Domain name, e.g. mail.example.com"}}},"annotations":{"title":"Register domain","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Register domain"},"changes":[{"kind":"name","detail":"Renamed \"domains.register\" → \"domains_register\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"domains.verify","fixed":{"name":"domains_verify","description":"Trigger DNS verification (TXT + MX) of a registered domain.","inputSchema":{"type":"object","required":["domainId"],"properties":{"domainId":{"type":"string","description":"Domain ID"}}},"annotations":{"title":"Verify domain","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Verify domain"},"changes":[{"kind":"name","detail":"Renamed \"domains.verify\" → \"domains_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":64,"tokensAfter":64},{"name":"identities.create","fixed":{"name":"identities_create","description":"Create a mock identity bound to a mailbox for OAuth flow testing.","inputSchema":{"type":"object","required":["clientId","mailboxAddress"],"properties":{"name":{"type":"string","description":"Display name. Optional."},"claims":{"type":"object","description":"Custom claims (e.g. role, plan) merged into the ID token and userinfo. Custom-provider clients only — rejected for google/github/apple/facebook. Optional.","additionalProperties":{"type":"string"}},"clientId":{"type":"string","description":"OAuth client ID the identity belongs to"},"username":{"type":"string","description":"Identity username. Optional."},"avatarUrl":{"type":"string","description":"Avatar URL. Optional."},"emailVerified":{"type":"boolean","description":"Value of the email_verified claim issued for this identity. Optional."},"mailboxAddress":{"type":"string","description":"Mailbox address the identity is linked to (must exist)"}}},"annotations":{"title":"Create identity","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Create identity"},"changes":[{"kind":"name","detail":"Renamed \"identities.create\" → \"identities_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":266,"tokensAfter":266},{"name":"identities.delete","fixed":{"name":"identities_delete","description":"Delete a mock identity.","inputSchema":{"type":"object","required":["identityId"],"properties":{"identityId":{"type":"string","description":"Identity ID"}}},"annotations":{"title":"Delete identity","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete identity"},"changes":[{"kind":"name","detail":"Renamed \"identities.delete\" → \"identities_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":56,"tokensAfter":56},{"name":"identities.get","fixed":{"name":"identities_get","description":"Fetch a single mock identity by ID.","inputSchema":{"type":"object","required":["identityId"],"properties":{"identityId":{"type":"string","description":"Identity ID"}}},"annotations":{"title":"Get identity","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get identity"},"changes":[{"kind":"name","detail":"Renamed \"identities.get\" → \"identities_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"identities.list","fixed":{"name":"identities_list","description":"List the tenant's mock identities, optionally filtered by OAuth client or mailbox address.","inputSchema":{"type":"object","properties":{"clientId":{"type":"string","description":"Filter by OAuth client ID. Optional."},"mailboxAddress":{"type":"string","description":"Filter by mailbox address. Optional."}}},"annotations":{"title":"List identities","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List identities"},"changes":[{"kind":"name","detail":"Renamed \"identities.list\" → \"identities_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"identities.update","fixed":{"name":"identities_update","description":"Update a mock identity: profile fields, isActive (activate/deactivate), emailVerified, and custom claims merged into the ID token and userinfo.","inputSchema":{"type":"object","required":["identityId"],"properties":{"name":{"type":"string","description":"Display name. Optional."},"claims":{"type":"object","description":"Custom claims (e.g. role, plan) merged into the ID token and userinfo. Replaces existing claims. Reserved claim names are rejected. Optional.","additionalProperties":{"type":"string"}},"isActive":{"type":"boolean","description":"Whether the identity can be used in OAuth flows. Optional."},"username":{"type":"string","description":"Identity username. Optional."},"avatarUrl":{"type":"string","description":"Avatar URL. Optional."},"identityId":{"type":"string","description":"Identity ID"},"emailVerified":{"type":"boolean","description":"Value of the email_verified claim issued for this identity. Optional."}}},"annotations":{"title":"Update identity","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Update identity"},"changes":[{"kind":"name","detail":"Renamed \"identities.update\" → \"identities_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"mailboxes.create","fixed":{"name":"mailboxes_create","description":"Create a new temporary mailbox. The domain defaults to the tenant's default domain; the owner is always the API key's owner.","inputSchema":{"type":"object","properties":{"tag":{"type":"string","description":"Recovery tag, required when recoverable is true."},"domain":{"type":"string","description":"Mailbox domain. Defaults to the tenant default domain (e.g. minutemail.cc)."},"expiresIn":{"type":"integer","description":"Lifetime in minutes, 1-60. Omit for the service default TTL."},"recoverable":{"type":"boolean","description":"Set true to keep the mailbox recoverable after expiry (requires tag)."},"noExpiration":{"type":"boolean","description":"Set true for a permanent mailbox (mutually exclusive with expiresIn)."}}},"annotations":{"title":"Create mailbox","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Create mailbox"},"changes":[{"kind":"name","detail":"Renamed \"mailboxes.create\" → \"mailboxes_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":214,"tokensAfter":214},{"name":"mailboxes.delete","fixed":{"name":"mailboxes_delete","description":"Delete a mailbox and its contents by ID.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Delete mailbox","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete mailbox"},"changes":[{"kind":"name","detail":"Renamed \"mailboxes.delete\" → \"mailboxes_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"mailboxes.delete_bulk","fixed":{"name":"mailboxes_delete_bulk","description":"Delete several mailboxes at once by ID.","inputSchema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Mailbox IDs to delete"}}},"annotations":{"title":"Bulk delete mailboxes","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Bulk delete mailboxes"},"changes":[{"kind":"name","detail":"Renamed \"mailboxes.delete_bulk\" → \"mailboxes_delete_bulk\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"mailboxes.get","fixed":{"name":"mailboxes_get","description":"Fetch a single mailbox by ID.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Get mailbox","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get mailbox"},"changes":[{"kind":"name","detail":"Renamed \"mailboxes.get\" → \"mailboxes_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":56,"tokensAfter":56},{"name":"mailboxes.list","fixed":{"name":"mailboxes_list","description":"List the tenant's active mailboxes (owner is derived from the API key). Optionally look up a single mailbox by exact address.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Exact mailbox address to look up (e.g. user@minutemail.cc). Optional."}}},"annotations":{"title":"List mailboxes","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List mailboxes"},"changes":[{"kind":"name","detail":"Renamed \"mailboxes.list\" → \"mailboxes_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"mails.delete","fixed":{"name":"mails_delete","description":"Delete a single email.","inputSchema":{"type":"object","required":["mailboxId","mailId"],"properties":{"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Delete mail","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete mail"},"changes":[{"kind":"name","detail":"Renamed \"mails.delete\" → \"mails_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"mails.delete_bulk","fixed":{"name":"mails_delete_bulk","description":"Delete several emails of one mailbox at once.","inputSchema":{"type":"object","required":["mailboxId","ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Mail IDs to delete"},"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Bulk delete mails","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Bulk delete mails"},"changes":[{"kind":"name","detail":"Renamed \"mails.delete_bulk\" → \"mails_delete_bulk\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"mails.get","fixed":{"name":"mails_get","description":"Fetch a single email by ID, including body and attachment metadata.","inputSchema":{"type":"object","required":["mailboxId","mailId"],"properties":{"mailId":{"type":"string","description":"Mail ID"},"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"Get mail","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get mail"},"changes":[{"kind":"name","detail":"Renamed \"mails.get\" → \"mails_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"mails.inject","fixed":{"name":"mails_inject","description":"Inject a simulated inbound email into a mailbox (multipart upload). No external mail is sent; use this to simulate inbound mail for flow testing.","inputSchema":{"type":"object","required":["mailboxId","sender","subject","body"],"properties":{"body":{"type":"string","description":"Plain-text body"},"sender":{"type":"string","description":"Sender email address"},"subject":{"type":"string","description":"Email subject"},"expiresIn":{"type":"integer","description":"Mail lifetime in minutes (>=1). Optional."},"mailboxId":{"type":"string","description":"Mailbox ID"},"attachments":{"type":"array","items":{"type":"object","required":["filename","data"],"properties":{"data":{"type":"string","description":"File contents, standard base64"},"filename":{"type":"string","description":"Attachment file name"},"contentType":{"type":"string","description":"MIME type, defaults to application/octet-stream"}}},"description":"Attachments to include"}}},"annotations":{"title":"Inject test mail","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Inject test mail"},"changes":[{"kind":"name","detail":"Renamed \"mails.inject\" → \"mails_inject\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":274,"tokensAfter":274},{"name":"mails.list","fixed":{"name":"mails_list","description":"List the emails in a mailbox, newest first.","inputSchema":{"type":"object","required":["mailboxId"],"properties":{"mailboxId":{"type":"string","description":"Mailbox ID"}}},"annotations":{"title":"List mails","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List mails"},"changes":[{"kind":"name","detail":"Renamed \"mails.list\" → \"mails_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"oauth.clients.create","fixed":{"name":"oauth_clients_create","description":"Register an OAuth client for mock identity flows. The plaintext clientSecret is returned once at creation.","inputSchema":{"type":"object","required":["name","redirectUris"],"properties":{"name":{"type":"string","description":"Client display name"},"providerType":{"enum":["google","github","apple","facebook","custom"],"type":"string","description":"Identity provider type"},"redirectUris":{"type":"array","items":{"type":"string"},"description":"Allowed redirect URIs (at least one)"},"providerLabel":{"type":"string","description":"Custom provider label. Required when providerType is custom."}}},"annotations":{"title":"Create OAuth client","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Create OAuth client"},"changes":[{"kind":"name","detail":"Renamed \"oauth.clients.create\" → \"oauth_clients_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":180,"tokensAfter":180},{"name":"oauth.clients.delete","fixed":{"name":"oauth_clients_delete","description":"Delete an OAuth client by its public client ID.","inputSchema":{"type":"object","required":["clientId"],"properties":{"clientId":{"type":"string","description":"Public OAuth client ID"}}},"annotations":{"title":"Delete OAuth client","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete OAuth client"},"changes":[{"kind":"name","detail":"Renamed \"oauth.clients.delete\" → \"oauth_clients_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"oauth.clients.get","fixed":{"name":"oauth_clients_get","description":"Fetch a single OAuth client by its public client ID.","inputSchema":{"type":"object","required":["clientId"],"properties":{"clientId":{"type":"string","description":"Public OAuth client ID"}}},"annotations":{"title":"Get OAuth client","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get OAuth client"},"changes":[{"kind":"name","detail":"Renamed \"oauth.clients.get\" → \"oauth_clients_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":66,"tokensAfter":66},{"name":"oauth.clients.list","fixed":{"name":"oauth_clients_list","description":"List the tenant's OAuth clients for mock identity testing.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List OAuth clients","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List OAuth clients"},"changes":[{"kind":"name","detail":"Renamed \"oauth.clients.list\" → \"oauth_clients_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":43,"tokensAfter":43},{"name":"oauth.clients.rotate_secret","fixed":{"name":"oauth_clients_rotate_secret","description":"Rotate an OAuth client's secret. The new plaintext secret is returned once.","inputSchema":{"type":"object","required":["clientId"],"properties":{"clientId":{"type":"string","description":"Public OAuth client ID"}}},"annotations":{"title":"Rotate client secret","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Rotate client secret"},"changes":[{"kind":"name","detail":"Renamed \"oauth.clients.rotate_secret\" → \"oauth_clients_rotate_secret\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"team.invitations.create","fixed":{"name":"team_invitations_create","description":"Create a team invitation for an email address (SMTP invite is sent by the team service).","inputSchema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","description":"Invitee email address"}}},"annotations":{"title":"Create invitation","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Create invitation"},"changes":[{"kind":"name","detail":"Renamed \"team.invitations.create\" → \"team_invitations_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":76,"tokensAfter":76},{"name":"team.invitations.delete","fixed":{"name":"team_invitations_delete","description":"Revoke a team invitation.","inputSchema":{"type":"object","required":["invitationId"],"properties":{"invitationId":{"type":"string","description":"Invitation ID"}}},"annotations":{"title":"Delete invitation","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete invitation"},"changes":[{"kind":"name","detail":"Renamed \"team.invitations.delete\" → \"team_invitations_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"team.invitations.list","fixed":{"name":"team_invitations_list","description":"List the tenant's team invitations.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List invitations","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List invitations"},"changes":[{"kind":"name","detail":"Renamed \"team.invitations.list\" → \"team_invitations_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":37,"tokensAfter":37},{"name":"team.members.add","fixed":{"name":"team_members_add","description":"Add a team member directly (no invitation flow).","inputSchema":{"type":"object","required":["user_id","username","email","status"],"properties":{"email":{"type":"string","description":"Member email address"},"status":{"type":"string","description":"Member status, conventionally ACTIVE"},"user_id":{"type":"string","description":"Member user ID"},"username":{"type":"string","description":"Member username"}}},"annotations":{"title":"Add team member","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Add team member"},"changes":[{"kind":"name","detail":"Renamed \"team.members.add\" → \"team_members_add\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"team.members.delete","fixed":{"name":"team_members_delete","description":"Remove a team member.","inputSchema":{"type":"object","required":["memberId"],"properties":{"memberId":{"type":"string","description":"Member ID"}}},"annotations":{"title":"Delete team member","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"title":"Delete team member"},"changes":[{"kind":"name","detail":"Renamed \"team.members.delete\" → \"team_members_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":54,"tokensAfter":54},{"name":"team.members.get","fixed":{"name":"team_members_get","description":"Fetch a single team member by ID.","inputSchema":{"type":"object","required":["memberId"],"properties":{"memberId":{"type":"string","description":"Member ID"}}},"annotations":{"title":"Get team member","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get team member"},"changes":[{"kind":"name","detail":"Renamed \"team.members.get\" → \"team_members_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":57,"tokensAfter":57},{"name":"team.members.list","fixed":{"name":"team_members_list","description":"List the tenant's team members.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List team members","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List team members"},"changes":[{"kind":"name","detail":"Renamed \"team.members.list\" → \"team_members_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":35,"tokensAfter":35}],"toolsChanged":40,"tokensSaved":0,"todo":[],"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."}