stalwart-jmap-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STALWART_URL | Yes | The base URL of the Stalwart server | |
| STALWART_TOKEN | Yes | API token for Stalwart |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| stalwart_server_infoA | Return Stalwart server info: edition, capabilities, account used. |
| stalwart_list_accountsA | List mail accounts (users) with a compact summary. Args: limit: max rows (default 50) search: optional substring match on account name |
| stalwart_get_accountA | Get full account detail by ID or email address (secrets are masked). Args: account_id: account id (from stalwart_list_accounts) email: full email address, e.g. user@domain.com |
| stalwart_list_domainsB | List mail domains configured in Stalwart. |
| stalwart_list_principalsA | List principals (users/groups/lists/domains/roles/tenants). Uses the standard JMAP principals namespace. Args: principal_type: filter by type — individual, group, list, domain, tenant, role, apiKey, oauthClient, resource, location limit: max rows (default 50) |
| stalwart_list_dkim_signaturesA | List DKIM signing keys with selector + stage. Args: domain_id: optional filter by domain id (from stalwart_list_domains) |
| stalwart_list_queueA | List messages currently in the outgoing mail queue. Shows envelope return-path, per-recipient status/retry info, size and age. For full raw message content use stalwart_get_queue_message. |
| stalwart_get_queue_messageA | Full detail of one queued message, including parsed headers (From/To/Subject/Date) from the raw RFC 5322 message. Args: message_id: queued message id (from stalwart_list_queue) |
| stalwart_list_api_keysB | List Stalwart API keys (tokens are masked). |
| stalwart_create_accountA | Create a new mail account (user). Args: name: local part, e.g. 'alice' (creates alice@domain.com) domain_id: domain id (from stalwart_list_domains) password: initial password for the account description: optional description locale: BCP-47 locale (default id_ID) time_zone: IANA timezone (default Asia/Jakarta) |
| stalwart_delete_accountA | Delete a mail account. Destructive — requires confirm=True. Args: account_id: account id (from stalwart_list_accounts) confirm: must be True to proceed |
| stalwart_set_account_passwordB | Reset an account's password. Args: account_id: account id password: new password (min length enforced by server) |
| stalwart_create_domainA | Add a new mail domain. Args: name: domain name, e.g. example.com |
| stalwart_delete_domainA | Delete a mail domain. Destructive — requires confirm=True. Args: domain_id: domain id (from stalwart_list_domains) confirm: must be True to proceed |
| stalwart_generate_dkimA | Generate a new DKIM signing key for a domain. Args: domain_id: domain id (from stalwart_list_domains) selector: DKIM selector; auto-generated if omitted algorithm: 'rsa' (2048-bit default) or 'ed25519' |
| stalwart_create_api_keyA | Create a new API key (token shown ONCE in response). Note: the ApiKey object has no 'name' field — only description. Args: description: human-readable description (required) permissions: permission list; defaults to server default |
| stalwart_delete_api_keyA | Delete an API key. Destructive — requires confirm=True. Args: api_key_id: key id (from stalwart_list_api_keys) confirm: must be True to proceed |
| stalwart_reload_settingsA | Reload Stalwart server settings (hot reload, no restart). |
| stalwart_reload_tls_certificatesA | Reload TLS certificates without restart. |
| stalwart_queue_pauseA | Pause outbound MTA queue processing. |
| stalwart_queue_resumeA | Resume outbound MTA queue processing. |
| stalwart_invalidate_cachesA | Invalidate server caches. Args: all_caches: True = invalidate all caches, False = negative caches only |
| stalwart_troubleshoot_dmarcA | Run a live DMARC/SPF/DKIM/ARC troubleshoot on a message. Args: mail_from: envelope MAIL FROM remote_ip: connecting IP ehlo_domain: EHLO/HELO domain message: full RFC 5322 message to: optional envelope RCPT TO |
| stalwart_classify_spamA | Run the spam filter on a message and get the score. Args: message: full RFC 5322 message env_from: envelope MAIL FROM (required) remote_ip: connecting IP (default 127.0.0.1; 0.0.0.0 is rejected) ehlo_domain: optional EHLO domain env_rcpt_to: optional envelope recipient list |
| stalwart_list_mailboxesA | List mailboxes (folders) of an account with email counts. Args: account_id: Stalwart account id ('b' = postmaster/admin; akun user lain bisa diakses karena token punya impersonate) |
| stalwart_search_emailsA | Search emails in an account. Args: account_id: account id ('b' = admin; impersonate memungkinkan akun lain) mailbox_role: folder role — inbox, trash, junk, drafts, sent, archive mailbox_id: explicit mailbox id (overrides mailbox_role) text: optional free-text search (from/to/subject/body) limit: max results (default 20) |
| stalwart_get_emailA | Get one email in full: headers, body preview, and raw message. Args: account_id: account id email_id: email id (dari stalwart_search_emails) |
| stalwart_list_identitiesA | List sending identities (From addresses) of an account. |
| stalwart_get_vacation_responseA | Get auto-reply (vacation response) settings of an account. |
| stalwart_list_sieve_scriptsB | List Sieve filter scripts of an account. |
| stalwart_list_objectsA | Generic listing for admin object types. Args: obj_type: one of task, alert, action, role, mailing_list, tenant, certificate, cluster_node, application, webhook, tracer, acme_provider, dns_server, spam_rule, blocked_ip, allowed_ip limit: max rows (default 50) |
| stalwart_reschedule_queue_messageA | Reschedule a queued message's next retry time. Args: message_id: queued message id (from stalwart_list_queue) retry_at: ISO 8601 UTC datetime, e.g. 2026-08-09T12:00:00Z |
| stalwart_delete_queue_messageA | Delete a message from the outgoing queue. Destructive — confirm=True. Args: message_id: queued message id (from stalwart_list_queue) confirm: must be True to proceed |
| stalwart_block_ipA | Block an IP address (spam defense). Args: address: IP or CIDR to block reason: optional reason expires_at: optional ISO 8601 UTC expiry (e.g. 2026-08-10T00:00:00Z) |
| stalwart_unblock_ipA | Remove an IP block. Destructive — confirm=True. Args: ip_id: blocked ip id (from stalwart_list_objects(obj_type='blocked_ip')) confirm: must be True to proceed |
| stalwart_allow_ipA | Allowlist an IP address (bypass spam checks). Args: address: IP or CIDR to allowlist reason: optional reason expires_at: optional ISO 8601 UTC expiry |
| stalwart_unallow_ipA | Remove an IP from the allowlist. Destructive — confirm=True. Args: ip_id: allowed ip id (from stalwart_list_objects(obj_type='allowed_ip')) confirm: must be True to proceed |
| stalwart_create_mailing_listA | Create a mailing list. Args: name: list name, e.g. 'news' (creates news@domain.com) domain_id: domain id (from stalwart_list_domains) description: optional description recipients: optional member email addresses |
| stalwart_delete_mailing_listA | Delete a mailing list. Destructive — confirm=True. Args: list_id: list id (from stalwart_list_objects(obj_type='mailing_list')) confirm: must be True to proceed |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
Most tools target distinct resources (accounts, domains, queue, IPs, emails), but list_accounts and list_principals overlap since accounts are principals of type 'individual', and list_objects can list many types already covered by dedicated list tools. Descriptions mostly clarify, but the duplication creates minor ambiguity.
All tools use the stalwart_ prefix and mostly follow verb_noun naming (list_accounts, create_domain, delete_queue_message). Exceptions like server_info (noun-only) and queue_pause/queue_resume (noun-verb instead of verb-noun) break the uniform pattern, but the overall style is still predictable.
With 39 tools, this server is excessively large for an MCP interface. Even for a broad mail server admin domain, the sheer number of tools makes selection harder and suggests over-fragmentation, exceeding the 25+ threshold for 'too many'.
The tool set covers many admin operations (accounts, domains, queue, IP blocks, mailing lists) but only provides read-only access to identities, vacation responses, and Sieve scripts—no create/update/delete for these. This leaves notable gaps for full lifecycle management.