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, without /api | |
| MCP_HTTP_PORT | No | HTTP port (used when MCP_TRANSPORT is http) | 3100 |
| MCP_TRANSPORT | No | Transport to use: stdio or http | stdio |
| MCP_HTTP_TOKEN | No | HTTP only: token used in the /mcp/<token> URL; must be at least 24 characters | |
| LISTMONK_API_USER | Yes | Listmonk API user name | |
| LISTMONK_API_TOKEN | Yes | Listmonk API token | |
| LISTMONK_MCP_READONLY | No | true = write and delete tools are not registered | 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
Most tools map cleanly to a resource+action, and the descriptions proactively disambiguate the risky pairs (subscriber_update vs subscribers_lists_change, campaign_update vs campaign_set_status). The only residual overlap is mild: several prefixed system tools (status, dashboard_counts, logs, settings_get) all return 'instance info', though their specific outputs are distinct enough.
The underlying pattern is verb_noun with a resource prefix, which is readable and mostly predictable. However prefixes flip between singular and plural (subscriber_delete vs subscribers_search, list_get vs lists_list, campaign_get vs campaigns_search), which is a genuine convention inconsistency.
32 tools is heavy, but the server genuinely spans seven resource areas (subscribers, lists, campaigns, templates, bounces, transactional sends, system diagnostics), so most tools earn their place. Still, it sits in the 25+ range where an agent has to scan a lot of surface.
CRUD coverage is solid for lists, subscribers, campaigns, and templates, with bounces and transactional sending appropriately read/delete-only and send-only. Minor gaps: no bulk subscriber import/export and no listing subscribers per-list outside SQL search expressions.