---
title: "Novu MCP server for AI agents - actionlake"
description: "Give Claude 146 Novu actions through one MCP server: subscriber notifications, integrations. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/novu
updated: 2026-10-23
---

Connectors · Email & messaging

# Novu MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Novu and the rest of your systems. It gives your agent 146 Novu actions (50 reads, 73 writes and 23 that wait for a confirmation) and holds the Novu credential itself, so the agent never does. It paces Novu's limits and records every call.

[Connect Novu free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "novu.subscribers.list",
  intent: "check which Novu account is connected"
}
# Search subscribers · read · 1 upstream call
```

- 146 actions in one signed file
- 50 read look, never change
- 73 write create and update
- 23 wait for a yes destructive, confirmed first

Set up

## Connect Novu in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Novu.
   API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `api_key` Novu secret key (Novu dashboard > Developer > API Keys > Secret Key) for the environment you want to act on
   - `host` Where your Novu lives: your host
   ```
   account { op: "connections.requirements", service: "novu" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "novu.subscribers.list" }
   # search subscribers · read · 1 upstream call
   check { action: "novu.events.trigger", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Novu at a glance

**Sign-in**

API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`api_key`

**Setup fields**

`host`

**Limits we pace to**

20 calls a second, per connection

**API covered**

Novu API (OpenAPI 3.0.0, 3.19.2), at your Novu instance's API base URL, which you enter when connecting

**Built from**

Novu's documentation, read 23 October 2026[api.novu.co](https://api.novu.co/openapi.json) [docs.novu.co](https://docs.novu.co/api-reference/overview)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

35 of 50 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

2, so ask can line Novu up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Novu.

146 actions in 27 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **50** read look, never change
- **73** write create and update
- **23** destructive wait for a confirmation

1. ### Subscriber notifications
   18
   4 read · 12 write · 2 destructive
   Delete a notification · Retrieve subscriber notifications · Retrieve subscriber notifications · Archive a notification
2. ### Integrations
   13
   2 read · 10 write · 1 destructive
   Create an integration · Issue a short-lived mobile setup link for an existing integration · Generate chat OAuth URL · Generate OAuth URL for a workspace/tenant connection
3. ### Domains
   9
   4 read · 4 write · 1 destructive
   Create a domain · Diagnose inbound DNS for a domain · List domains for an environment · Retrieve a domain by name
4. ### Layouts
   8
   4 read · 3 write · 1 destructive
   Create a layout · Duplicate a layout · List all layouts · Generate layout preview
5. ### Agents
   7
   2 read · 4 write · 1 destructive
   Create an agent · List all agents · Send an agent reply · Retrieve an agent
6. ### Environments
   7
   3 read · 3 write · 1 destructive
   List all environments · Create an environment · Update an environment · Delete an environment
7. ### Subscribers
   7
   2 read · 4 write · 1 destructive
   Search subscribers · Retrieve a subscriber · Update a subscriber · Create a subscriber
8. ### Workflows
   7
   2 read · 4 write · 1 destructive
   List all workflows · Create a workflow · Retrieve a workflow · Update a workflow

**19 more areas · 70 actions**

- Domain routes **6**
- Environment variables **6**
- Channel connections **5**
- Channel endpoints **5**
- Contexts **5**
- Topic subscriptions **5**
- Topics **5**
- Translations **5**
- Agent integrations **4**
- Events **4**
- Messages **3**
- Subscriber credentials **3**
- Subscriber messages **3**
- Subscriber preferences **3**
- Notifications **2**
- Translation groups **2**
- Workflow steps **2**
- Subscriber topics **1**
- Topic subscribers **1**

Top actions

## The Novu API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 22 of Novu's 23 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `novu.subscribers.list` Search subscribers | Search subscribers. | read | `comm.audience_member.list` 23 connectors |
| `novu.subscribers.get` Retrieve a subscriber | Retrieve a subscriber. | read | `comm.audience_member.get` 17 connectors |
| `novu.topics.list` List all topics | List all topics. | read | `comm.subscription_topic.list` 4 connectors |
| `novu.notifications.list` List all events | List all events. | read | `comm.notification.list` 19 connectors |
| `novu.events.trigger` Trigger event | Trigger event. | write | `comm.notification.send` 16 connectors |
| `novu.workflows.list` List all workflows | List all workflows. | read | `automation.workflow.list` 51 connectors |
| `novu.workflows.create` Create a workflow | Create a workflow. | write | `automation.workflow.create` 38 connectors |
| `novu.workflows.delete` Delete a workflow | Delete a workflow. | destructive | `automation.workflow.delete` 40 connectors |
| `novu.environments.list` List all environments | List all environments. | read | `devops.environment.list` 24 connectors |
| `novu.environments.create` Create an environment | Create an environment. | write | `devops.environment.create` 18 connectors |
| `novu.topics.get` Retrieve a topic | Retrieve a topic. | read | `comm.subscription_topic.get` 2 connectors |
| `novu.agents.list` List all agents | List all agents. | read | this connector |

Try it

## Prompts to paste into Claude.

Each one names the Novu actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Search subscribers in Novu and tell me what stands out.
   calls `novu.subscribers.list`
2. Write write
   Trigger event in Novu. Show me exactly what you will send before you save it.
   calls `novu.events.trigger`

Governance for Novu

## Destructive actions wait for a yes.

23 Novu actions are destructive. These are all of them:

- Delete a workflow `novu.workflows.delete`
- Delete a notification `novu.subscriber_notifications.delete`
- Delete a topic `novu.topics.delete`
- Delete an environment `novu.environments.delete`
- Delete an agent `novu.agents.delete`
- Delete a domain `novu.domains.delete`
- Delete a layout `novu.layouts.delete`
- Delete a context `novu.contexts.delete`
- Delete a message `novu.messages.delete`
- Delete a subscriber `novu.subscribers.delete`
- Delete an integration `novu.integrations.delete`
- Delete a route `novu.domain_routes.delete`
- Delete a channel endpoint `novu.channel_endpoints.delete`
- Delete an agent integration `novu.agent_integrations.delete`
- Delete a translation group `novu.translation_groups.delete`
- Delete a channel connection `novu.channel_connections.delete`
- Delete topic subscriptions `novu.topic_subscriptions.delete`
- Delete environment variable `novu.environment_variables.delete`
- Delete provider credentials `novu.subscriber_credentials.delete`
- Delete messages by transactionId `novu.messages.delete_by_transaction`
- Delete all notifications `novu.subscriber_notifications.delete_all`
- Delete a translation `novu.translations.delete`
- Cancel triggered event `novu.events.cancel`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do novu.workflows.delete confirm_policy: **human**

Delete a workflow?

**intent:** the user asked me to delete a workflow

run suspended · waiting for a named person · key _novu-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "novu-agent",
  allowed_actions: ["novu.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "novu.workflows.delete", approver: "lead@example.com" },
    { match: "novu.subscriber_notifications.delete", approver: "lead@example.com" },
    { match: "novu.topics.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Novu only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Novu costs on actionlake.

Every Novu action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Novu refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 146 Novu actions
- 146 actions page each page of a long list is one call
- 35 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Novu action.

146 actions by area: the id your agent calls, what it does, and its effect.

**Subscriber notifications 18**

- `novu.subscriber_notifications.archive` Archive a notification write
- `novu.subscriber_notifications.archive_all` Archive all notifications write
- `novu.subscriber_notifications.archive_all_read` Archive all read notifications write
- `novu.subscriber_notifications.complete_action` Complete a notification action write
- `novu.subscriber_notifications.count` Retrieve subscriber notifications count read
- `novu.subscriber_notifications.delete` Delete a notification destructive
- `novu.subscriber_notifications.delete_all` Delete all notifications destructive
- `novu.subscriber_notifications.feed` Retrieve subscriber notifications read
- `novu.subscriber_notifications.list` Retrieve subscriber notifications read
- `novu.subscriber_notifications.mark_all_read` Mark all notifications as read write
- `novu.subscriber_notifications.mark_read` Mark a notification as read write
- `novu.subscriber_notifications.mark_seen` Mark notifications as seen write
- `novu.subscriber_notifications.mark_unread` Mark a notification as unread write
- `novu.subscriber_notifications.revert_action` Revert a notification action write
- `novu.subscriber_notifications.snooze` Snooze a notification write
- `novu.subscriber_notifications.unarchive` Unarchive a notification write
- `novu.subscriber_notifications.unseen_count` Retrieve unseen notifications count read
- `novu.subscriber_notifications.unsnooze` Unsnooze a notification write

**Integrations 13**

- `novu.integrations.auto_configure` Auto-configure an integration for inbound webhooks write
- `novu.integrations.configure_webhook` Configure a chat integration webhook write
- `novu.integrations.create` Create an integration write
- `novu.integrations.create_mobile_link` Issue a short-lived mobile setup link for an existing integration write
- `novu.integrations.delete` Delete an integration destructive
- `novu.integrations.generate_chat_oauth_url` Generate chat OAuth URL write
- `novu.integrations.generate_connect_oauth_url` Generate OAuth URL for a workspace/tenant connection write
- `novu.integrations.generate_link_user_oauth_url` Generate OAuth URL to link a subscriber user identity write
- `novu.integrations.link_channel_endpoint` Issue a URL to link a subscriber chat identity write
- `novu.integrations.list` List all integrations read
- `novu.integrations.list_active` List active integrations read
- `novu.integrations.set_primary` Update integration as primary write
- `novu.integrations.update` Update an integration write

**Domains 9**

- `novu.domains.create` Create a domain write
- `novu.domains.delete` Delete a domain destructive
- `novu.domains.diagnose` Diagnose inbound DNS for a domain read
- `novu.domains.get` Retrieve a domain by name read
- `novu.domains.get_auto_configure` Retrieve auto-configuration availability read
- `novu.domains.list` List domains for an environment read
- `novu.domains.start_auto_configure` Start DNS auto-configuration write
- `novu.domains.update` Update a domain write
- `novu.domains.verify` Verify a domain write

**Layouts 8**

- `novu.layouts.create` Create a layout write
- `novu.layouts.delete` Delete a layout destructive
- `novu.layouts.duplicate` Duplicate a layout write
- `novu.layouts.get` Retrieve a layout read
- `novu.layouts.get_usage` Get layout usage read
- `novu.layouts.list` List all layouts read
- `novu.layouts.preview` Generate layout preview read
- `novu.layouts.update` Update a layout write

**Agents 7**

- `novu.agents.create` Create an agent write
- `novu.agents.delete` Delete an agent destructive
- `novu.agents.get` Retrieve an agent read
- `novu.agents.list` List all agents read
- `novu.agents.send_reply` Send an agent reply write
- `novu.agents.update` Update an agent write
- `novu.agents.update_bridge` Update an agent bridge write

**Environments 7**

- `novu.environments.create` Create an environment write
- `novu.environments.delete` Delete an environment destructive
- `novu.environments.diff` Compare resources between environments read
- `novu.environments.list` List all environments read
- `novu.environments.list_tags` List environment tags read
- `novu.environments.publish` Publish resources to target environment write
- `novu.environments.update` Update an environment write

**Subscribers 7**

- `novu.subscribers.create` Create a subscriber write
- `novu.subscribers.create_bulk` Bulk create subscribers write
- `novu.subscribers.delete` Delete a subscriber destructive
- `novu.subscribers.get` Retrieve a subscriber read
- `novu.subscribers.list` Search subscribers read
- `novu.subscribers.update` Update a subscriber write
- `novu.subscribers.update_online_status` Update subscriber online status write

**Workflows 7**

- `novu.workflows.create` Create a workflow write
- `novu.workflows.delete` Delete a workflow destructive
- `novu.workflows.get` Retrieve a workflow read
- `novu.workflows.list` List all workflows read
- `novu.workflows.patch` Update a workflow write
- `novu.workflows.sync` Sync a workflow write
- `novu.workflows.update` Update a workflow write

**Domain routes 6**

- `novu.domain_routes.create` Create a route write
- `novu.domain_routes.delete` Delete a route destructive
- `novu.domain_routes.get` Retrieve a route by address read
- `novu.domain_routes.list` List routes for a domain read
- `novu.domain_routes.test` Test an inbound route write
- `novu.domain_routes.update` Update a route write

**Environment variables 6**

- `novu.environment_variables.create` Create a variable write
- `novu.environment_variables.delete` Delete environment variable destructive
- `novu.environment_variables.get` Get environment variable read
- `novu.environment_variables.get_usage` Retrieve a variable usage read
- `novu.environment_variables.list` List all variables read
- `novu.environment_variables.update` Update a variable write

**Channel connections 5**

- `novu.channel_connections.create` Create a channel connection write
- `novu.channel_connections.delete` Delete a channel connection destructive
- `novu.channel_connections.get` Retrieve a channel connection read
- `novu.channel_connections.list` List all channel connections read
- `novu.channel_connections.update` Update a channel connection write

**Channel endpoints 5**

- `novu.channel_endpoints.create` Create a channel endpoint write
- `novu.channel_endpoints.delete` Delete a channel endpoint destructive
- `novu.channel_endpoints.get` Retrieve a channel endpoint read
- `novu.channel_endpoints.list` List all channel endpoints read
- `novu.channel_endpoints.update` Update a channel endpoint write

**Contexts 5**

- `novu.contexts.create` Create a context write
- `novu.contexts.delete` Delete a context destructive
- `novu.contexts.get` Retrieve a context read
- `novu.contexts.list` List all contexts read
- `novu.contexts.update` Update a context write

**Topic subscriptions 5**

- `novu.topic_subscriptions.create` Create topic subscriptions write
- `novu.topic_subscriptions.delete` Delete topic subscriptions destructive
- `novu.topic_subscriptions.get` Retrieve a topic subscription read
- `novu.topic_subscriptions.list` List topic subscriptions read
- `novu.topic_subscriptions.update` Update a topic subscription write

**Topics 5**

- `novu.topics.delete` Delete a topic destructive
- `novu.topics.get` Retrieve a topic read
- `novu.topics.list` List all topics read
- `novu.topics.update` Update a topic write
- `novu.topics.upsert` Create a topic write

**Translations 5**

- `novu.translations.create` Create a translation write
- `novu.translations.delete` Delete a translation destructive
- `novu.translations.get` Retrieve a translation read
- `novu.translations.get_master_json` Retrieve master translations JSON read
- `novu.translations.import_master_json` Import master translations JSON write

**Agent integrations 4**

- `novu.agent_integrations.create` Create an agent integration write
- `novu.agent_integrations.delete` Delete an agent integration destructive
- `novu.agent_integrations.list` List agent integrations read
- `novu.agent_integrations.update` Update an agent integration write

**Events 4**

- `novu.events.cancel` Cancel triggered event destructive
- `novu.events.trigger` Trigger event write
- `novu.events.trigger_broadcast` Broadcast event to all write
- `novu.events.trigger_bulk` Bulk trigger event write

**Messages 3**

- `novu.messages.delete` Delete a message destructive
- `novu.messages.delete_by_transaction` Delete messages by transactionId destructive
- `novu.messages.list` List all messages read

**Subscriber credentials 3**

- `novu.subscriber_credentials.append` Upsert provider credentials write
- `novu.subscriber_credentials.delete` Delete provider credentials destructive
- `novu.subscriber_credentials.update` Update provider credentials write

**Subscriber messages 3**

- `novu.subscriber_messages.mark_all` Update all notifications state write
- `novu.subscriber_messages.mark_as` Update notifications state write
- `novu.subscriber_messages.update_action` Update notification action status write

**Subscriber preferences 3**

- `novu.subscriber_preferences.bulk_update` Bulk update subscriber preferences write
- `novu.subscriber_preferences.list` Retrieve subscriber preferences read
- `novu.subscriber_preferences.update` Update subscriber preferences write

**Notifications 2**

- `novu.notifications.get` Retrieve an event read
- `novu.notifications.list` List all events read

**Translation groups 2**

- `novu.translation_groups.delete` Delete a translation group destructive
- `novu.translation_groups.get` Retrieve a translation group read

**Workflow steps 2**

- `novu.workflow_steps.get` Retrieve workflow step read
- `novu.workflow_steps.preview` Generate a step preview read

**Subscriber topics 1**

- `novu.subscriber_topics.list` Retrieve subscriber subscriptions read

**Topic subscribers 1**

- `novu.topic_subscribers.get` Check topic subscriber read

Questions

## The Novu MCP server, answered.

**Is there a Novu MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 146 Novu actions across subscriber notifications, integrations, domains and layouts, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Novu.

**What do I need to connect Novu?**

Novu secret key (Novu dashboard > Developer > API Keys > Secret Key) for the environment you want to act on. Plus your host. The free call account { op: "connections.requirements", service: "novu" } lists exactly what to paste.

**Can an AI agent delete or change things in Novu?**

Only if its key allows it, and only with an explicit confirmation. 23 Novu actions are destructive, including delete a workflow, delete a notification and delete a topic. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Novu API limit?**

actionlake paces every call to the limits in the Novu service file: 20 calls a second per connection. Repeated reads are answered from cache (35 Novu actions can be), which never reaches Novu.

**What does a Novu action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (146 Novu actions page). Cache hits, searches, dry runs and calls Novu refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Novu API does it cover?**

The Novu API (OpenAPI 3.0.0, 3.19.2) at your Novu instance's API base URL, which you enter when connecting. It is built from Novu's documentation as read on 23 October 2026. 146 actions in 27 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my Novu data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Novu credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Novu

Shares the most action names with

- [Resend 8](https://actionlake.com/connectors/resend)
- [Salesforce Marketing Cloud Engagement 6](https://actionlake.com/connectors/salesforce-marketing-cloud-engagement)
- [Meta WhatsApp Business Cloud API 5](https://actionlake.com/connectors/meta-whatsapp-business-cloud-api)
- [Loops 5](https://actionlake.com/connectors/loops)
- [Omnisend 5](https://actionlake.com/connectors/omnisend)
- [Customer.io 5](https://actionlake.com/connectors/customer-io)

Joins with, on shared entities

- [beehiiv 2](https://actionlake.com/connectors/beehiiv)
- [Docebo 1](https://actionlake.com/connectors/docebo)
- [ActiveCampaign 1](https://actionlake.com/connectors/activecampaign)
- [Brevo 1](https://actionlake.com/connectors/brevo)
- [Twilio Segment 1](https://actionlake.com/connectors/twilio-segment)
- [Google Analytics 4 1](https://actionlake.com/connectors/google-analytics-4)

Browse

- [All Email & messaging connectors](https://actionlake.com/connectors/category/email-and-messaging)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Novu; the name is the vendor's own. Counts are from the Novu service file, version 1.0.0.

## Give your agent Novu today.

[Connect Novu free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/novu
More: https://actionlake.com/llms.txt
