> ## Documentation Index
> Fetch the complete documentation index at: https://docs.novu.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Novu MCP Server

> Connect Cursor, Claude, ChatGPT, and other AI tools to the Novu MCP server to manage notifications, workflows, and subscribers using natural language.

The Novu MCP Server exposes Novu's notification infrastructure as tools that AI assistants can discover and use in real time. Connect your AI tool to manage subscribers, workflows, integrations, and delivery activity from natural-language prompts.

<Note>
  Novu also hosts a separate **documentation MCP server** at [docs.novu.co/mcp](https://docs.novu.co/mcp) that lets AI tools search and read this documentation site. The Novu MCP Server described on this page manages your Novu account — triggers, workflows, subscribers, and more.
</Note>

## About the Novu MCP server

The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard for connecting AI applications to external services. Once connected, you can prompt your AI assistant to:

* Trigger workflows for specific subscribers
* Search and inspect subscriber data
* Update subscriber notification preferences
* Debug failed notifications and delivery issues
* Analyze notification activity and logs
* Create and manage workflows

Some AI tools support both MCP and [Agent Skills](/platform/build-with-ai/skills). MCP gives your assistant live access to your Novu account, while skills instruct agents how to use Novu APIs and SDKs effectively. They're complementary — connect the MCP server for account operations and install skills for implementation guidance.

## Prerequisites

* A Novu Cloud account (to sign in with OAuth), or a [Novu API key](https://dashboard.novu.co/settings/api-keys)
* An MCP-compatible AI tool — Cursor, Claude Code, ChatGPT, Claude Desktop, VS Code, Codex, or similar

## Endpoints

Novu Cloud has one MCP endpoint per region:

| Region | MCP URL                   |
| ------ | ------------------------- |
| US     | `https://mcp.novu.co/`    |
| EU     | `https://eu.mcp.novu.co/` |

Use the URL that matches your dashboard region — `eu.dashboard.novu.co` pairs with the EU endpoint, everything else uses US.

## Connect your AI tool

Connecting with **OAuth** is recommended — you don't copy or paste a key; your client signs you in and picks up your organization automatically. If your client doesn't support OAuth, or you're on self-hosted Novu, use an [API key](#api-key-fallback) instead.

<Tabs>
  <Tab title="Cursor">
    Open **Cursor Settings** → **Tools & Integrations** → **New MCP Server**, and add:

    ```json theme={null}
    {
      "mcpServers": {
        "novu": {
          "url": "https://mcp.novu.co/"
        }
      }
    }
    ```

    Save the file. Cursor will prompt you to sign in to Novu the first time it calls a tool.
  </Tab>

  <Tab title="VS Code">
    Add to `.vscode/mcp.json` (or your user MCP settings):

    ```json theme={null}
    {
      "servers": {
        "novu": {
          "type": "http",
          "url": "https://mcp.novu.co/"
        }
      }
    }
    ```

    Reload VS Code and approve the sign-in prompt when it appears.
  </Tab>

  <Tab title="Claude Code">
    ```bash theme={null}
    claude mcp add --transport http novu https://mcp.novu.co/
    ```

    Then run `/mcp` inside Claude Code to sign in.
  </Tab>

  <Tab title="ChatGPT">
    Add Novu as a custom connector using the MCP URL for your region, and choose **OAuth** as the connection mechanism. ChatGPT will prompt you to sign in to Novu.
  </Tab>

  <Tab title="Claude Desktop">
    Claude Desktop doesn't yet support remote OAuth, so connect with an API key through the [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) proxy (requires Node.js 18+):

    ```json theme={null}
    {
      "mcpServers": {
        "novu": {
          "command": "npx",
          "args": [
            "mcp-remote",
            "https://mcp.novu.co/",
            "--header",
            "Authorization:Bearer your-novu-api-key"
          ]
        }
      }
    }
    ```
  </Tab>

  <Tab title="Codex">
    Codex connects with an API key today:

    ```bash theme={null}
    export NOVU_API_KEY="your-novu-api-key"
    ```

    ```toml theme={null}
    [mcp_servers.novu]
    url = "https://mcp.novu.co/"
    bearer_token_env_var = "NOVU_API_KEY"
    ```
  </Tab>

  <Tab title="Other">
    Any MCP client that supports remote OAuth can connect with just the URL and no header:

    | Setting            | Value                                                                                      |
    | ------------------ | ------------------------------------------------------------------------------------------ |
    | **URL**            | `https://mcp.novu.co/` (US) or `https://eu.mcp.novu.co/` (EU)                              |
    | **Transport**      | Streamable HTTP                                                                            |
    | **Authentication** | OAuth (no header), or an [API key](#api-key-fallback) if your client doesn't support OAuth |
  </Tab>
</Tabs>

### API key (fallback)

Use a Novu API key for clients without OAuth support, `mcp-remote` / stdio setups, autonomous agents, and **all self-hosted Novu** deployments. Copy your secret key from the [Novu Dashboard](https://dashboard.novu.co/settings/api-keys) and send it as a bearer token:

```json theme={null}
{
  "mcpServers": {
    "novu": {
      "url": "https://mcp.novu.co/",
      "headers": {
        "Authorization": "Bearer your-novu-api-key"
      }
    }
  }
}
```

Presenting an API key skips the OAuth sign-in entirely. A key is bound to a single environment, so connect to the endpoint matching its region and there's nothing else to configure.

## Environments

OAuth sessions are scoped to your organization and default to the **Development** environment. To act on a different environment (for example, Production), call `get_environments` and pass the environment's `_id` as the optional `environmentId` parameter on any tool call.

API keys are already bound to one environment, so `environmentId` has no effect on API key sessions.

<Prompt description="Switch an OAuth session to a specific environment" icon="bot" actions={["copy", "cursor"]}>
  List my Novu environments, then show notifications from Production (not Development).
</Prompt>

## Example prompts

After connecting the Novu MCP server, copy or open these prompts in Cursor to verify the connection and perform common tasks.

<Note>
  Replace placeholder values (for example, subscriber IDs and workflow identifiers) with values from your Novu dashboard.
</Note>

### Verify connection

<Prompt description="Test your Novu MCP connection" icon="bot" actions={["copy", "cursor"]}>
  Run `whoami` to verify I'm authenticated and show my Novu region.
</Prompt>

<Prompt description="List your notification workflows" icon="bot" actions={["copy", "cursor"]}>
  Show me all my notification workflows in Novu.
</Prompt>

### Subscriber management

<Prompt description="Find a subscriber by email" icon="bot" actions={["copy", "cursor"]}>
  Find subscriber [user@example.com](mailto:user@example.com) in my Novu account and show their profile details.
</Prompt>

<Prompt description="Create a new subscriber" icon="bot" actions={["copy", "cursor"]}>
  Create a new subscriber with subscriberId user-456, email [jane@example.com](mailto:jane@example.com), and firstName Jane in my Novu account.
</Prompt>

### Trigger and debug

<Prompt description="Trigger a workflow for a subscriber" icon="bot" actions={["copy", "cursor"]}>
  Trigger my welcome-email workflow for subscriber test-user-123 with payload containing userName "Jane" and activationLink "[https://app.example.com/activate](https://app.example.com/activate)".
</Prompt>

<Prompt description="Debug failed notifications" icon="bot" actions={["copy", "cursor"]}>
  Show recent failed notifications in the last 24 hours and help me debug delivery issues.
</Prompt>

## MCP tools

Your AI assistant discovers these tools automatically when it connects, and calls the right one based on your prompt.

| Category      | Tool                            | Description                                                                      |
| ------------- | ------------------------------- | -------------------------------------------------------------------------------- |
| Auth          | `whoami`                        | Verify the current credential and show your identity and region                  |
| Environments  | `get_environments`              | List environments — use an `_id` as the `environmentId` parameter on other tools |
| Subscribers   | `create_subscriber`             | Create a subscriber with name, email, phone, and custom data                     |
| Subscribers   | `get_subscriber`                | Retrieve a subscriber by `subscriberId`                                          |
| Subscribers   | `update_subscriber`             | Update a subscriber's attributes                                                 |
| Subscribers   | `delete_subscriber`             | Delete a subscriber                                                              |
| Subscribers   | `find_subscribers`              | Search subscribers by email, name, phone, or ID                                  |
| Preferences   | `get_subscriber_preferences`    | Get a subscriber's channel preferences                                           |
| Preferences   | `update_subscriber_preferences` | Update a subscriber's channel preferences                                        |
| Workflows     | `create_workflow`               | Create a workflow, including its steps                                           |
| Workflows     | `get_workflow`                  | Get a workflow's full definition                                                 |
| Workflows     | `get_workflows`                 | List all workflows                                                               |
| Workflows     | `update_workflow`               | Update an existing workflow                                                      |
| Workflows     | `delete_workflow`               | Delete a workflow                                                                |
| Workflows     | `trigger_workflow`              | Trigger a workflow for a subscriber                                              |
| Workflows     | `bulk_trigger_workflow`         | Trigger multiple workflows in one call                                           |
| Workflows     | `cancel_triggered_event`        | Cancel a pending triggered event                                                 |
| Notifications | `get_notification`              | Get a notification with execution logs                                           |
| Notifications | `get_notifications`             | Fetch notifications with filtering                                               |
| Integrations  | `get_integrations`              | List channel integrations                                                        |
| Integrations  | `get_active_integrations`       | List active integrations                                                         |
| Integrations  | `delete_integration`            | Delete an integration                                                            |
| Integrations  | `set_primary_integration`       | Set an integration as primary for its channel                                    |

<Note>
  Every tool accepts an optional `environmentId` parameter — see [Environments](#environments).
</Note>

## Use multiple MCP servers

You can connect both the Novu MCP server and the [Novu documentation MCP server](https://docs.novu.co/mcp) at the same time. Each serves a different purpose:

| Server        | URL                                                          | Purpose                                                     |
| ------------- | ------------------------------------------------------------ | ----------------------------------------------------------- |
| Novu MCP      | `https://mcp.novu.co/` (US) / `https://eu.mcp.novu.co/` (EU) | Manage your Novu account — workflows, subscribers, triggers |
| Novu Docs MCP | `https://docs.novu.co/mcp`                                   | Search and read Novu documentation                          |

Connected MCP servers don't consume context until the AI calls a tool. Be specific in your prompts so the assistant uses the most relevant server — for example, "trigger my welcome workflow" uses the Novu MCP, while "how do I configure digest steps?" uses the Docs MCP.

## Troubleshooting

<AccordionGroup>
  <Accordion title="OAuth sign-in loop or never connects">
    Confirm the URL matches your region, and that you haven't also set an `Authorization` header — presenting a credential skips OAuth entirely. Restart your AI assistant after changing the config.
  </Accordion>

  <Accordion title="Wrong environment data">
    OAuth sessions default to Development. Call `get_environments` and pass the `_id` you want as `environmentId`.
  </Accordion>

  <Accordion title="401 after previously working">
    Your OAuth token expired or was revoked — reconnect through your client to sign in again.
  </Accordion>

  <Accordion title="Empty results or authentication errors">
    Double-check you're on the endpoint for your region (`eu.dashboard.novu.co` → `https://eu.mcp.novu.co/`), and that any API key is sent as `Authorization: Bearer your-api-key` with no extra spaces.
  </Accordion>

  <Accordion title="Self-hosted Novu">
    OAuth isn't available on self-hosted deployments — connect with an [API key](#api-key-fallback) from your instance. See [API keys](/platform/developer/api-keys).
  </Accordion>

  <Accordion title="Still not connecting">
    Restart your AI assistant after config changes. For Claude Code, run `claude mcp list`. For Codex, run `/mcp` in the TUI. For Claude Desktop, confirm Node.js is installed.
  </Accordion>
</AccordionGroup>

## Security

* Prefer OAuth over long-lived API keys for interactive clients — OAuth tokens are short-lived and revocable.
* The server never puts credentials in URLs, and holds no ambient credentials between sessions.
* Rotate an API key from the Dashboard immediately if you suspect it's been exposed.
* Self-hosted Novu always uses API keys; OAuth is available for Novu Cloud only.
* Use caution when combining the Novu MCP server with other MCP servers or untrusted data in the same session, and review tool calls before approving actions that modify your data.

## Related topics

<Columns cols={2}>
  <Card title="Agent Skills" href="/platform/build-with-ai/skills">
    Give AI coding assistants implementation guidance for Novu SDKs and workflows.
  </Card>

  <Card title="Agent Toolkit" href="/platform/build-with-ai/agent-toolkit">
    Embed Novu tools inside your own AI agents with the `@novu/agent-toolkit` package.
  </Card>

  <Card title="Novu Docs MCP" href="https://docs.novu.co/mcp">
    Connect AI tools to search and read this documentation site.
  </Card>

  <Card title="API keys" href="/platform/developer/api-keys">
    Learn how to create and manage the secret keys used for API key authentication.
  </Card>
</Columns>
