Skip to the documentation
MCP server

Your account

The workspaces, email, photo, username, apps, invitations, signed-in devices and passkeys of the person.

Your account tools

ToolWhat it does
listAccountWorkspacesEvery workspace your account can open, owned or joined, with the one the app opens for you and the one these tools act on.
switchAppWorkspaceChoose the workspace the app opens for you. These tools keep acting on the workspace they act on now.
createWorkspaceCreate a workspace you own, on the Free plan, which the app opens for you from then on. An account can own one Free workspace.
deleteWorkspaceDelete the workspace these tools act on, with everything in it, once confirm names it. Only its owner may, and never the first workspace an account made. In the app’s chat it always asks first.
getNotificationSettingsWhich kinds of email Nextmail sends you, and the workspaces muted on your phone.
setEmailNotificationTurn activity or product email on or off. account and billing email are always on.
setWorkspacePushMutedMute or unmute the phone notifications of one workspace.
setProfilePhotoSet your profile photo from an image in base64.
removeProfilePhotoRemove your profile photo. In the app’s chat it always asks first.
getUsernameYour username, whether you chose it, and the free address it gives you.
checkUsernameWhether you could choose a username, and why not when you could not.
chooseUsernameChoose your username for good, since it never changes once chosen. In the app’s chat it always asks first.
listConnectedAppsThe apps you connected, with what each may reach and until when.
revokeConnectedAppRemove a connected app, so it has to ask again. In the app’s chat it always asks first.
listReceivedInvitationsThe invitations to join a workspace that wait for you. listInvitations is the one for the invitations a workspace sent.
acceptInvitationJoin the workspace of an invitation, and with activate make it the one the app opens.
declineInvitationTurn an invitation down, for good. In the app’s chat it always asks first.
listSessionsThe browsers and phones you are signed in on, each with its country and city, how it signed in and when it was last used.
revokeSessionSign one browser or phone out, so its next request is refused. In the app’s chat it always asks first.
revokeOtherSessionsSign every browser and phone out at once, the one you are using included, and with connectedApps remove every connected app too. In the app’s chat it always asks first.
listSecurityEventsYour security log, newest first: sign-ins with their device and place, devices signed out, password and two-factor changes, and passkeys added or removed. Returned a page at a time.
listPasskeysThe passkeys that can sign in to your account, with the name of each, whether it is synced between your devices and when it was last used.
renamePasskeyGive a passkey a name you will recognise.
removePasskeyRemove a passkey, so it can no longer sign in or confirm a change. You are told by email. In the app’s chat it always asks first.
listConnectedAppRequestsThe request log of an app you connected: each REST call it made, newest first, with its status and how long it took.

These tools act on the person who connected the client, never on anyone else, and in the app’s chat on you. Reading needs account:read and every change needs account:write, which no role limits, so a client a member connected reaches that member’s own account too.

Three things stay in the app: changing what a connected app may reach, letting one make changes without a verification code, and deleting the whole account.

The workspace tools never move the other tools: switchAppWorkspace changes what the app opens, and setActiveConnection what the tools act on.

Some tools on this server make a change the REST API guards with a verification code, and ask for the same code. Until the client has verified a code in the last 60 minutes, or the person has chosen Allow changes for 60 minutes on it in Account → Connected apps, such a tool answers with a result that starts Refused (step_up_required): and changes nothing. emptyAudience never asks for a code. The API Authentication page lists every tool that asks, and shows how to ask for a code and verify it.

A passkey is added in Account → General → Security on the device that holds it, never through a tool. revokeOtherSessions leaves nothing signed in: it signs out the browser or phone you are using as well, and with connectedApps it removes the client you are talking through.

Reference

listAccountWorkspaces

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

Every workspace your Nextmail account can open, the ones you own and the ones you joined, as the workspace switcher of the app lists them, with the one the app opens for you. It is about your account, not this connection: getConnections lists what these tools can act on, and switchAppWorkspace changes only what the app opens, never what these tools act on.

Inputs

Takes no input.

Also available in

API
GET /workspacesGET /workspaces/active
TypeScript
nextmail.workspaces.list()nextmail.workspaces.getActive()
Python
workspaces.list()workspaces.get_active()
Ruby
workspaces.listworkspaces.get_active
PHP
workspaces->listworkspaces->getActive
Go
Workspaces.ListWorkspaces.GetActive
Java
workspaces().listworkspaces().getActive
C#
Workspaces.ListAsyncWorkspaces.GetActiveAsync

switchAppWorkspace

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Choose which workspace the Nextmail app opens for you, as the workspace switcher does. Pass a workspace id from listAccountWorkspaces. It changes the app only: these tools keep acting on the workspace they act on now.

Inputs

workspaceIdstringRequired
1 to 128 characters

Also available in

API
PUT /workspaces/active
TypeScript
nextmail.workspaces.setActive()
Python
workspaces.set_active()
Ruby
workspaces.set_active
PHP
workspaces->setActive
Go
Workspaces.SetActive
Java
workspaces().setActive
C#
Workspaces.SetActiveAsync

createWorkspace

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Create a new workspace that you own, on the Free plan, and make it the one the app opens for you, as creating one in the app does. An account can own one Free workspace, so while you own one this is refused until you upgrade it.

Inputs

namestringRequired
1 to 64 characters

Also available in

API
POST /workspaces
TypeScript
nextmail.workspaces.create()
Python
workspaces.create()
Ruby
workspaces.create
PHP
workspaces->create
Go
Workspaces.Create
Java
workspaces().create
C#
Workspaces.CreateAsync

deleteWorkspace

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Delete the workspace these tools act on, with its domains, addresses, mail and members, and cancel its plan. It cannot be undone. Only its owner may do it, never through an app limited to some addresses, and your first workspace can never be deleted. confirm has to be the name of the workspace, as listAccountWorkspaces shows it.

Inputs

confirmstringRequired

The name of the workspace being deleted, typed out.

1 to 256 characters

Also available in

API
DELETE /workspaces/{id}
TypeScript
nextmail.workspaces.delete()
Python
workspaces.delete()
Ruby
workspaces.delete
PHP
workspaces->delete
Go
Workspaces.Delete
Java
workspaces().delete
C#
Workspaces.DeleteAsync

getNotificationSettings

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

Which kinds of email Nextmail sends you, as Account, Notifications shows them, and the workspaces whose notifications are muted on your phone. Account and billing email are always on.

Inputs

Takes no input.

Also available in

API
GET /account/notifications
TypeScript
nextmail.account.getNotifications()
Python
account.get_notifications()
Ruby
account.get_notifications
PHP
account->getNotifications
Go
Account.GetNotifications
Java
account().getNotifications
C#
Account.GetNotificationsAsync

setEmailNotification

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Turn one kind of email from Nextmail on or off for you. activity and product can be turned off; account and billing cannot.

Inputs

categorystringRequired
One of"account""billing""activity""product"
enabledbooleanRequired

Also available in

API
PUT /account/notifications/email/{category}
TypeScript
nextmail.account.setEmailNotification()
Python
account.set_email_notification()
Ruby
account.set_email_notification
PHP
account->setEmailNotification
Go
Account.SetEmailNotification
Java
account().setEmailNotification
C#
Account.SetEmailNotificationAsync

setWorkspacePushMuted

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Mute or unmute the notifications of one workspace on your phone, on every phone you signed in on. Pass a workspace id from listAccountWorkspaces.

Inputs

workspaceIdstringRequired
1 to 128 characters
mutedbooleanRequired

Also available in

API
PUT /account/notifications/push/{workspaceId}
TypeScript
nextmail.account.setPushMuted()
Python
account.set_push_muted()
Ruby
account.set_push_muted
PHP
account->setPushMuted
Go
Account.SetPushMuted
Java
account().setPushMuted
C#
Account.SetPushMutedAsync

setProfilePhoto

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Set your profile photo, replacing any there was, as Account, Profile does. Pass the picture in base64 as image, with its type as contentType: image/png, image/jpeg, image/webp, image/gif, up to 5 MB. It is fitted into a 512 pixel square.

Inputs

imagestringRequired

The image in base64, or as a data: URL.

1 to 7340032 characters
contentTypestringRequired

The type of the image: image/png, image/jpeg, image/webp, image/gif.

1 to 100 characters

Also available in

API
PUT /account/photo
TypeScript
nextmail.account.setPhoto()
Python
account.set_photo()
Ruby
account.set_photo
PHP
account->setPhoto
Go
Account.SetPhoto
Java
account().setPhoto
C#
Account.SetPhotoAsync

checkUsername

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

Whether you could choose a username, without choosing it, and why not when you could not. It is lowercased and its spaces become dots before it is checked.

Inputs

usernamestringRequired
1 to 60 characters

Also available in

API
GET /account/username/availability
TypeScript
nextmail.account.checkUsername()
Python
account.check_username()
Ruby
account.check_username
PHP
account->checkUsername
Go
Account.CheckUsername
Java
account().checkUsername
C#
Account.CheckUsernameAsync

chooseUsername

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Choose your username, and with it your free address, for good. Once chosen it never changes, so check it with checkUsername first and make sure it is the one you want.

Inputs

usernamestringRequired
1 to 60 characters

Also available in

API
PUT /account/username
TypeScript
nextmail.account.setUsername()
Python
account.set_username()
Ruby
account.set_username
PHP
account->setUsername
Go
Account.SetUsername
Java
account().setUsername
C#
Account.SetUsernameAsync

listConnectedApps

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

Every app you connected to your account with OAuth, as Account, Connected apps lists them: what each may reach, until when, and its client id, which revokeConnectedApp takes. What an app may reach is changed in the app, never from here.

Inputs

Takes no input.

Also available in

API
GET /account/connected-apps
TypeScript
nextmail.account.listConnectedApps()
Python
account.list_connected_apps()
Ruby
account.list_connected_apps
PHP
account->listConnectedApps
Go
Account.ListConnectedApps
Java
account().listConnectedApps
C#
Account.ListConnectedAppsAsync

revokeConnectedApp

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Remove an app you connected: every token it holds and the access you gave it are deleted, so its next call is refused and it has to ask again. Pass its client id from listConnectedApps. Removing the app you are talking through disconnects it.

Inputs

clientIdstringRequired
1 to 128 characters

Also available in

API
DELETE /account/connected-apps/{clientId}
TypeScript
nextmail.account.revokeConnectedApp()
Python
account.revoke_connected_app()
Ruby
account.revoke_connected_app
PHP
account->revokeConnectedApp
Go
Account.RevokeConnectedApp
Java
account().revokeConnectedApp
C#
Account.RevokeConnectedAppAsync

listReceivedInvitations

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

The invitations to join a workspace that are waiting for you, oldest first, each with the id acceptInvitation and declineInvitation take. It is not listInvitations, which lists the invitations this workspace sent.

Inputs

Takes no input.

Also available in

API
GET /account/invitations
TypeScript
nextmail.account.listInvitations()
Python
account.list_invitations()
Ruby
account.list_invitations
PHP
account->listInvitations
Go
Account.ListInvitations
Java
account().listInvitations
C#
Account.ListInvitationsAsync

acceptInvitation

Scopesaccount:writeThe app's assistant asks first unless you asked for itToolkitaccount

Accept an invitation that is waiting for you and join its workspace with the role and the addresses it gives. activate also makes it the workspace the app opens for you. A workspace that asks for two-factor sign-in is refused until you turn it on.

Inputs

invitationIdstringRequired
1 to 128 characters
activateboolean

Also available in

API
POST /account/invitations/{invitationId}/accept
TypeScript
nextmail.account.acceptInvitation()
Python
account.accept_invitation()
Ruby
account.accept_invitation
PHP
account->acceptInvitation
Go
Account.AcceptInvitation
Java
account().acceptInvitation
C#
Account.AcceptInvitationAsync

declineInvitation

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Decline an invitation that is waiting for you. Its link stops working and whoever sent it is told. It cannot be taken back: they would have to invite you again.

Inputs

invitationIdstringRequired
1 to 128 characters

Also available in

API
POST /account/invitations/{invitationId}/decline
TypeScript
nextmail.account.declineInvitation()
Python
account.decline_invitation()
Ruby
account.decline_invitation
PHP
account->declineInvitation
Go
Account.DeclineInvitation
Java
account().declineInvitation
C#
Account.DeclineInvitationAsync

listSessions

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

Every browser and phone you are signed in on, as Account, Security lists them: the browser and system, the country and city it was last used from, how it signed in, when it was last used, and its id, which revokeSession takes. No address is recorded, only the place.

Inputs

Takes no input.

Also available in

API
GET /account/sessions
TypeScript
nextmail.account.listSessions()
Python
account.list_sessions()
Ruby
account.list_sessions
PHP
account->listSessions
Go
Account.ListSessions
Java
account().listSessions
C#
Account.ListSessionsAsync

revokeSession

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Sign one browser or phone out of your account. Its next request is refused at once, and a phone stops getting notifications. Pass its id from listSessions.

Inputs

sessionIdstringRequired
1 to 128 characters

Also available in

API
DELETE /account/sessions/{sessionId}
TypeScript
nextmail.account.revokeSession()
Python
account.revoke_session()
Ruby
account.revoke_session
PHP
account->revokeSession
Go
Account.RevokeSession
Java
account().revokeSession
C#
Account.RevokeSessionAsync

revokeOtherSessions

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Sign every browser and phone out of your account at once, for when a device is lost or a password may have leaked. That includes the browser or phone you are using, if you are signed in there. With connectedApps true, every connected app is removed as well, the one you are talking through included.

Inputs

connectedAppsboolean

Also remove every app connected to the account. Left out, apps stay.

Also available in

API
DELETE /account/sessions
TypeScript
nextmail.account.revokeSessions()
Python
account.revoke_sessions()
Ruby
account.revoke_sessions
PHP
account->revokeSessions
Go
Account.RevokeSessions
Java
account().revokeSessions
C#
Account.RevokeSessionsAsync

listSecurityEvents

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

listPasskeys

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

The passkeys that can sign in to your account, with the name of each, whether it is synced between your devices, when it was last used, and its id, which renamePasskey and removePasskey take. A passkey is added on the device that holds it, in Account, Security, never from here.

Inputs

Takes no input.

Also available in

API
GET /account/passkeys
TypeScript
nextmail.account.listPasskeys()
Python
account.list_passkeys()
Ruby
account.list_passkeys
PHP
account->listPasskeys
Go
Account.ListPasskeys
Java
account().listPasskeys
C#
Account.ListPasskeysAsync

removePasskey

Scopesaccount:writeThe app's assistant always asks firstToolkitaccount

Remove a passkey from your account, so it can no longer sign in or confirm a change. You are told by email. The passkey stays on the device until you delete it there. Pass its id from listPasskeys.

Inputs

passkeyIdstringRequired
1 to 128 characters

Also available in

API
DELETE /account/passkeys/{passkeyId}
TypeScript
nextmail.account.removePasskey()
Python
account.remove_passkey()
Ruby
account.remove_passkey
PHP
account->removePasskey
Go
Account.RemovePasskey
Java
account().removePasskey
C#
Account.RemovePasskeyAsync

listConnectedAppRequests

Scopesaccount:readThe app's assistant runs it without askingToolkitaccount

The request log of an app you connected, newest first: each REST call it made with the access you gave it, with the method, the path, the status, how long it took and the error code of a refusal. Pass its client id from listConnectedApps. failedOnly keeps the refused calls, and cursor takes the cursor of the previous answer.

Inputs

clientIdstringRequired
1 to 128 characters
failedOnlyboolean

True keeps the calls answered with 400 or more.

cursorstring

The cursor the previous answer ended with, to read the next page.

Up to 2048 characters

Also available in

API
GET /account/connected-apps/{clientId}/requests
TypeScript
nextmail.account.listConnectedAppRequests()nextmail.account.listAllConnectedAppRequests()nextmail.account.iterateConnectedAppRequests()
Python
account.list_connected_app_requests()account.list_all_connected_app_requests()account.iterate_connected_app_requests()
Ruby
account.list_connected_app_requestsaccount.list_all_connected_app_requestsaccount.iterate_connected_app_requests
PHP
account->listConnectedAppRequestsaccount->listAllConnectedAppRequestsaccount->iterateConnectedAppRequests
Go
Account.ListConnectedAppRequestsAccount.ListAllConnectedAppRequestsAccount.IterateConnectedAppRequests
Java
account().listConnectedAppRequestsaccount().listAllConnectedAppRequestsaccount().iterateConnectedAppRequests
C#
Account.ListConnectedAppRequestsAsyncAccount.ListAllConnectedAppRequestsAsyncAccount.IterateConnectedAppRequestsAsync