listmonk-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LISTMONK_URL | Yes | Base URL of the Listmonk instance (no /api suffix). | |
| MCP_HTTP_PORT | No | HTTP port used when MCP_TRANSPORT=http. | 3100 |
| MCP_TRANSPORT | No | Transport to use: stdio or http. | stdio |
| MCP_HTTP_TOKEN | No | Required only when MCP_TRANSPORT=http. At least 24 characters; used in the /mcp/<token> URL which acts as a secret. | |
| LISTMONK_API_USER | Yes | Listmonk API user name (Admin -> Users -> API user). | |
| LISTMONK_API_TOKEN | Yes | Listmonk API token for the API user. | |
| LISTMONK_MCP_READONLY | No | true = write and delete tools are not registered (14 read-only tools instead of 32). | false |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| listmonk_statusA | Server health, version, and build info. Start here when diagnosing anything. Returns {health, about, config}. |
| listmonk_dashboard_countsA | Totals across the instance: subscribers by status, lists, campaigns, and messages. |
| listmonk_logsB | Recent Listmonk application log lines (ring buffer, not persisted). |
| listmonk_settings_getA | Instance settings. Passwords, keys, and tokens are replaced with [redacted] before being returned. |
| listmonk_smtp_testA | Opens a connection to a configured SMTP server and sends a test email to the given address. Sends real mail through the instance's SMTP settings. |
| lists_listB | All mailing lists with id, name, type, opt-in mode, tags, and subscriber counts. |
| list_getC | One mailing list by id. |
| list_createC | Create a mailing list. type is 'public' or 'private'; optin is 'single' or 'double'. |
| list_updateB | Update a mailing list. Only the fields you pass change; the rest are kept from the current list. |
| list_deleteA | Permanently delete a mailing list by id. Subscriptions to it are removed; subscriber records are kept. |
| subscribers_searchB | Search subscribers. Pass query as a Listmonk SQL expression on the subscribers table, e.g. subscribers.email LIKE '%@example.com' or subscribers.status = 'blocklisted'. Omit query to list all. |
| subscriber_getB | One subscriber by id, including their list memberships. |
| subscriber_createB | Create a subscriber. list_ids subscribes them to lists. preconfirm skips double opt-in confirmation for double opt-in lists. |
| subscriber_updateA | Update a subscriber. Only the fields you pass change. Passing list_ids replaces their list memberships; use subscribers_lists_change to add or remove without replacing. |
| subscribers_lists_changeB | Bulk add, remove, or unsubscribe subscribers from lists without replacing their other memberships. action: add | remove | unsubscribe. |
| subscriber_deleteA | Permanently delete a subscriber by id, with their list subscriptions and campaign history. |
| campaigns_searchC | List campaigns. Filter by status (draft, scheduled, running, paused, cancelled, finished) and optional query text. |
| campaign_getA | One campaign by id, including body, lists, and send statistics. |
| campaign_createA | Create a campaign as a draft. Nothing is sent until campaign_set_status moves it to running or scheduled. |
| campaign_updateA | Update a campaign. Only the fields you pass change. Listmonk only allows edits while the campaign is a draft, scheduled, or paused. |
| campaign_set_statusA | Start, schedule, pause, resume, or cancel a campaign. 'running' SENDS EMAIL to all recipients immediately. 'scheduled' sends at send_at. Confirm the recipient lists and body before using. |
| campaign_test_sendA | Send a test copy of a campaign to up to 10 email addresses. Sends real mail to those addresses. |
| campaign_deleteA | Permanently delete a campaign and its view and click statistics. Listmonk rejects deletion of running campaigns. |
| templates_listA | All campaign and transactional templates with id, name, type, and default flag. |
| template_getB | One template by id, including its HTML body. |
| template_createB | Create a template. type is 'campaign' (for campaigns) or 'tx' (for transactional sends). body must contain {{ template "content" . }} for campaign templates. |
| template_updateB | Update a template. Only the fields you pass change. |
| template_deleteA | Permanently delete a template. Listmonk refuses to delete the default template or one in use by a campaign. |
| bounces_searchB | Recorded bounces, newest first. Filter by bounce type (soft, hard, complaint) and campaign. |
| bounce_getC | One bounce record by id. |
| bounce_deleteA | Delete a bounce record by id. Does not change the subscriber's status; use subscriber_update to re-enable a subscriber. |
| tx_sendB | Send one transactional email from a 'tx' template to a subscriber email. data fills template placeholders. Sends real mail. |
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 32 tools
Tools are organized around distinct resources and actions, so most selections are clear. A few areas could be confused, such as subscriber_update versus subscribers_lists_change and the several email-sending tools, but their descriptions make the intended use distinguishable.
Names are consistently snake_case and mostly follow a resource_action pattern, with plural collection names like subscribers_search and singular record names like subscriber_get. Minor deviations exist, including the listmonk_ prefix for system tools and mixed collection verbs such as list versus search.
32 tools is heavy for an MCP surface, even though Listmonk is a broad domain with multiple CRUD-managed resources. Most tools map to real operations, but the count is borderline and could overwhelm agents selecting among many similar resource actions.
Core lifecycle coverage is strong across lists, subscribers, campaigns, templates, bounces, and system diagnostics. Minor gaps remain, such as no settings update, subscriber import/export, campaign preview beyond campaign_get, and media management.