Nevent MCP

io.github.nevent-devPublished by GitHub account nevent-devv1.8.0Updated Oct 25, 2026

Talk to your live-events CRM (campaigns, analytics, paid ads, segments) in Claude and ChatGPT.

Overview

AI-generated overview

Official Nevent MCP server that lets an assistant query and manage a live-events marketing CRM: analytics, segments, campaigns, templates, paid ads and short…

What you can do
  • Query event marketing analytics across campaigns, purchases and fans, with table schemas, filter values and a monthly campaign report
  • Build, preview and save audience segments, and execute them to retrieve matching contacts
  • Create, update, clone and preview email templates, and send test emails
  • Create campaign drafts, quote credit cost, schedule sends, and read delivery metrics, recipients and AI insights
  • Check deliverability and suppressions, and review paid ads status, campaign insights and UTM-based revenue attribution
  • List and switch tenants, and get built-in help on workflows and error codes
When to use it
Useful for live-event promoters and marketing teams already on Nevent who want to ask questions about registrations, campaign performance, audience segments or ad ROI in plain language, and to draft or schedule campaigns from the chat client.
Requirements
Hosted option: add the remote endpoint and authorize with a Nevent admin account via OAuth. Local option: Node.js with npx, plus the NEVENT_JWT_TOKEN environment variable; NEVENT_OPERATION_MODE (READ_ONLY by default, STANDARD, FULL) controls which tools are available. A Nevent account with appropriate tenant permissions is needed either way.
Before you install
The local mode requires a Nevent JWT in NEVENT_JWT_TOKEN, which grants API access as that user. Write tools change real data: segments and templates are persisted, test emails are sent via SES, and scheduling a campaign queues real sends to contacts and consumes credits, requiring confirmed=true. Switching tenants persists in the user record for superadmins. Tenant data is processed on Nevent's AWS infrastructure in eu-west-1.

Installation

In SourceWeft

  1. Open Nevent MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.nevent-dev%2Fmcp-nevent/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "nevent": {
      "type": "http",
      "url": "https://mcp.nevent.ai/"
    }
  }
}

README

Nevent MCP

Talk to your live-events CRM (campaigns, analytics, paid ads, segments, short URLs) in Claude and ChatGPT.

[License: MIT] [npm] [Help Center] [smithery badge]

Official MCP server for Nevent — the marketing platform for live event promoters. 63 tools across 10 groups (analytics, segmentation, campaigns, templates, deliverability, paid media, short URLs, media library, multi-tenant, and help/discovery) over OAuth 2.1 (hosted) or stdio (local).

📚 Full documentation: https://help.nevent.ai/en/nevent-ai/


Install

Hosted (recommended — no install needed)

Add https://mcp.nevent.ai/ as a remote MCP server in your client. Works with Claude.ai, ChatGPT, Cursor, Cline, Continue and any compatible MCP client.

→ Step-by-step with screenshots: Connect with Claude · Connect with ChatGPT

Local (stdio via npm)

bash
npx mcp-nevent

Required env: NEVENT_JWT_TOKEN. Optional: NEVENT_OPERATION_MODE (READ_ONLY | STANDARD | FULL).

→ Full local setup: Local installation


Quick add

Claude.ai · ChatGPT (hosted, no setup)

Settings → Integrations / Connectors → Add custom MCP → URL https://mcp.nevent.ai/. Authorize with your Nevent admin account.

Claude Code

bash
# Hosted (OAuth)claude mcp add --transport http nevent https://mcp.nevent.ai/
# Or local (stdio)claude mcp add nevent -- node /path/to/mcp-nevent/dist/index.jsexport NEVENT_JWT_TOKEN=your_token

→ Full guide: Claude Code

Claude Desktop

Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

json
{  "mcpServers": {    "nevent": {      "command": "node",      "args": ["/path/to/mcp-nevent/dist/index.js"],      "env": {        "NEVENT_JWT_TOKEN": "your_nevent_jwt_token"      }    }  }}

→ Full guide: Claude Desktop

Cursor · Cline · Continue · VS Code

→ Per-client setup: Cursor, Cline, Continue, VS Code


What you can ask

"Show me registrations for EventX broken down by ticket type"
"Which campaigns sent last month had an open rate above 30%?"
"Create a segment of attendees who bought a VIP ticket in 2025 but haven't opened any email in the last 90 days"
"Schedule the 'Summer Gala' campaign for next Monday at 10:00 CET"
"Compare ROAS across our Meta ad campaigns for March"
"Create per-user tracking links for the Summer Gala campaign and show me which users clicked"

→ More patterns: Ready-to-use prompts · Use cases


Documentation

TopicLink
What Nevent AI is and how it workshttps://help.nevent.ai/en/nevent-ai/
Capabilities by area (analytics, campaigns, audience, paid media…)https://help.nevent.ai/en/nevent-ai/what-you-can-do/
End-to-end use caseshttps://help.nevent.ai/en/nevent-ai/use-cases/
Permissions and securityhttps://help.nevent.ai/en/nevent-ai/permissions-and-security/
FAQhttps://help.nevent.ai/en/nevent-ai/faq/

For developers


How it works

LLM (Claude / ChatGPT / Cursor / …)        |        | MCP (Streamable HTTP or stdio)        v  ┌─────────────────┐  │  Nevent MCP     │  mcp.nevent.ai (hosted) or local  └─────────────────┘        |        | REST + JWT        v  Nevent APIs (analytics, campaigns, segments, paid media, short URLs)

Hosted mode uses OAuth 2.1: the MCP server issues short-lived JWT tokens after validating your Nevent credentials. Each session is isolated — no shared service accounts.


Restricting OAuth clients (self-hosted HTTP)

Optional environment variables for the HTTP server:

VariableDefaultPurpose
MCP_READONLY_REDIRECT_PREFIXESunsetComma-separated redirect_uri prefixes. A client that registered a matching redirect URI only gets read-only tools. Every prefix must end with /, for example https://support.nevent.ai/helpbot/.
MCP_READONLY_CLIENT_IDSunsetComma-separated client_id values restricted the same way.
MCP_REFRESH_REVALIDATErestrictedrestricted, all or off: which clients are revalidated against nev-api (GET /auth/me) when they refresh a token.
MCP_REFRESH_MAX_LIFETIME_DAYS90Maximum total lifetime of a refresh-token chain, counted from the original login.

See CHANGELOG.md for the exact behaviour.

Advanced: bearer-passthrough mode (trusted clients, service key required)

MCP_AUTH_MODE=bearer-passthrough is a second HTTP auth mode for trusted clients that already hold a per-user nev-api JWT and want to call MCP tools on that user's behalf — for example nev-helpbot, the Chatwoot support bot, answering as the promoter currently chatting.

bash
MCP_AUTH_MODE=bearer-passthrough \MCP_BEARER_PASSTHROUGH_SERVICE_KEY=$(openssl rand -hex 32) \node dist/index.js --transport=http --port=3000

Every request must carry BOTH the client's service key and the calling user's own nev-api JWT:

X-Nevent-Service-Key: <pre-shared service key>Authorization: Bearer <the promoter's nev-api JWT>
  • Service key (mandatory). The instance may be reachable from outside, so a JWT alone is not enough. MCP_BEARER_PASSTHROUGH_SERVICE_KEY (at least 32 characters) is required: the server refuses to start without it. It is compared in constant time (crypto.timingSafeEqual over SHA-256 digests) and checked before the token is introspected, so outsiders cannot make this server call nev-api. A missing or wrong key gets a bare 401 (Unauthorized.) with no hint of which check failed. For rotation, set MCP_BEARER_PASSTHROUGH_SERVICE_KEY_PREVIOUS to the old key while the client moves to the new one, then remove it. Keep it in a secret store, never in the repository. Requests are also capped per IP (600/min, applied before body parsing) and per token (300/min). GET /health is unauthenticated for load balancers and returns only {status, version, commitSha}.

  • Write policy (off by default). By default every session is READ-only (46 tools). MCP_BEARER_PASSTHROUGH_WRITES=human additionally exposes, to sessions of a person (principalType HUMAN verified in /auth/me), 12 write tools: nevent_create_segment, nevent_update_segment, nevent_create_template, nevent_update_template, nevent_clone_template, nevent_rename_template, nevent_send_test_template, nevent_create_campaign, nevent_schedule_campaign, nevent_create_short_url, nevent_update_short_url, nevent_create_bulk_user_short_urls. SERVICE sessions never get writes. upload_image, delete_image, reset_tenant, switch_tenant and list_tenants are never exposed, and an unclassified tool is denied. The policy is fixed per session at initialize. Writes are not safe to enable yet: the real barrier is the signed single-use write grant (NEV-1855), so the server refuses to start with human until that exists (override for non-production only: MCP_BEARER_PASSTHROUGH_WRITES_UNSAFE_NO_GRANT=true). Each tenant+user is limited to MCP_BEARER_PASSTHROUGH_WRITES_PER_HOUR writes per hour (default 30; over it, a write_rate_limit_exceeded tool error and nothing is executed; READ is never limited). Every tool call is logged with user_id, principal_type and the verified tenant (no email or token). Calls also need NEVENT_OPERATION_MODE=STANDARD for writes and FULL for nevent_schedule_campaign (classified DELETE because it sends for real); startup refuses human with READ_ONLY. The hourly limit is per process (in memory, each instance has its own budget, a restart resets it), counts only calls that actually execute (not invalid arguments, not calls the operation-mode guard rejects; a handler that fails does count) and accepts 1-1000. The no-grant override is rejected when NODE_ENV=production.

  • No OAuth flow, no MCP_JWT_SECRET, no MONGODB_URI required. MONGODB_URI stays optional: set it to also enable the Mongo-backed read tools (campaigns/templates/deliverability), each still scoped by the caller's own JWT tenant.

  • Every request is verified against nev-api before anything is exposed. On every request — initialize, tools/list, tools/call, not only at session start — this server calls GET {NEVENT_API_URL}/auth/me with the forwarded token. A 200 confirms the session is live and the request proceeds; 401, 403, a network error, or a timeout are all treated the same way — the MCP request is rejected with 401 and no tool, no tools/list, and no session is ever created or advanced from it. There is no permissive fallback: if nev-api cannot be reached to confirm the token, the request is refused, it is never let through anyway.

    • A successful check is cached briefly (~60 s) by a hash of the token so a single session does not call /auth/me on every message, but the cache never serves an entry past the token's own expiry.
    • The token's signature is still never checked locally by this server. nev-api signs session JWTs with a symmetric secret (HMAC256); shipping that secret here so it could be verified offline would mean compromising this process could forge a session for any Nevent user, not just read their data. Introspecting against nev-api avoids that trade-off entirely and is the only mechanism this mode uses to confirm a token is real, live, and unexpired. nev-data-api and nev-api additionally validate the token themselves on every downstream call they receive, exactly as they do for stdio mode's shared NEVENT_JWT_TOKEN.
  • Human and service sessions. GET /auth/me also reports principalType (HUMAN or SERVICE), effectiveTenantId and serviceSession. Technical service sessions minted by POST /auth/service-token (unattended agents) are accepted like a human token only with TENANT scope (PLATFORM, i.e. global SUPERADMIN, is refused). The session is locked to effectiveTenantId, which comes only from this answer (never from the JWT payload; also correct for hierarchical admins navigating a child tenant). Fail-closed: an unknown principalType, a SERVICE response without effectiveTenantId, or any response with no tenant at all is refused. A SERVICE verification is cached for 10 s instead of 60 s so a disabled account or revoked session stops working almost immediately.

  • Verification cache. Positive verdicts are cached (max 1000 entries, LRU, expired ones purged first); a token nev-api explicitly rejected (401/403) is remembered for ~5 s so a bad token cannot turn into one /auth/me call per request. When nev-api itself is unavailable (5xx, timeout, network) the request is still refused, but with 503 instead of 401, and that outcome is never cached.

  • Read-only, tenant-locked. Only READ tools are exposed — the same set as an OAuth read-only client, including nevent_segment_execute — minus the tenant-switching tools (nevent_list_tenants / nevent_switch_tenant / nevent_reset_tenant): a bearer-passthrough caller always operates in the tenant its own JWT carries. Excluded and write/delete tools never appear in tools/list.

  • Sessions are bound to their principal. Each Mcp-Session-Id remembers the user id, principal type and effective tenant it was opened for. Every later request (POST, GET, DELETE) must carry a token that nev-api confirms for that same principal and tenant, otherwise it is refused with 403 and nothing is dispatched — a valid token of someone else cannot drive a session it learned the id of. When the same principal presents a different valid token (a refreshed human token, or a service session re-minted after its 30 min expiry) the session's clients switch to the new token instead of keeping the one from initialize.

  • Session isolation. Every MCP session gets its own client instances, built fresh from that session's own JWT — two sessions started with different tokens never share a client or cached data.

  • Reachable from outside, authenticated twice. There is no login page and no client registration. Caller identity is the pre-shared service key (which client) plus the forwarded JWT (which end user), both required on every request. Still prefer a restrictive firewall/security group in front of it, leave MCP_ALLOWED_ORIGINS unset (the caller is a server, not a browser, so CORS is off and no Access-Control-Allow-Origin is emitted; set it only to a short explicit list if a browser client ever needs it), and never point the public OAuth hostname (mcp.nevent.ai) at a process started in this mode. Do not log or commit the service key.

Full design rationale: src/transports/http-bearer-passthrough.ts and src/auth/session-verifier.ts.


Privacy

The Nevent MCP server processes tenant data on Nevent's own infrastructure (AWS, eu-west-1). Data does not leave Nevent's infrastructure and is not used for model training.

For details on data collection, retention, third-party sharing, and contact information, see the full privacy policy: https://nevent.ai/en/privacy/

Security disclosure: see SECURITY.md.


Contributing

See CONTRIBUTING.md, CODE_OF_CONDUCT.md and SECURITY.md.

License

MIT © Nevent

Support

Source: README.md at commit 7ad06cb

Tools

59

nevent_analytics_query

Query analytics data

Query event marketing analytics. Supports dimensions, metrics, time ranges, and filters across campaigns, purchases, fans (user_tenants), and more. MANDATORY RULES: (1) ALWAYS call nevent_analytics_table_schema BEFORE querying to discover exact field names. NEVER guess field names. (2) For BOOLEAN fields, use operator "eq" (or "neq") with the boolean value true or false; "is_true"/"is_false" are segmentation operators and analytics rejects them. (3) For enum fields (state, status), check the field description for valid values. Common values: purchases.state = SUCCEEDED|COMPLETE|PENDING|FAILED; campaigns.status = EXECUTED|DRAFT|PAUSED|STOPPED.

ParametersctessortlimitdryRunhavingfiltersgroupBymetricsdistincttimeRangecollectionrequireddimensions+4 more

nevent_analytics_capabilities

Discover analytics capabilities

Discover available analytics tables and their summary metadata. Call this before nevent_analytics_query, then use nevent_analytics_table_schema to learn valid field names for a selected table.

Takes no parameters.

nevent_analytics_table_schema

Get analytics table schema

Get the full column schema for a specific analytics table including column names, types, and descriptions.

Parameterstablerequired

nevent_analytics_filter_values

Get analytics filter values

Get distinct values available for a field in an analytics table. Useful for building valid filter values before querying.

Parametersfiltersrequiredcollectionrequired

nevent_campaign_report

Generate campaign analytics report

Generate the monthly campaign report of the current brand for a calendar month (year + month). Executes 13 parallel queries in one call: marketing campaign metrics for that month and the previous one, ROI and attribution, revenue, variable costs, 24-month purchase history, transactional campaigns, segments and industry benchmarks. For a single campaign use nevent_get_campaign_insights.

Parametersyearrequiredmonthrequired

nevent_segmentation_criteria

List segmentation criteria

List all available audience segmentation criteria including their IDs, operators, and value types.

Takes no parameters.

nevent_segment_preview

Preview segment audience

Preview estimated audience size for a segment definition without saving it. Returns fan count and sample contacts. SEMANTICS: criteria in the same stanza are OR-combined — a fan matches the stanza if ANY criterion matches. Stanzas are AND-combined — a fan must match EVERY stanza. To require A AND B, put them in separate stanzas; to accept A OR B, put both in the same stanza. MANDATORY RULES: (1) ENTITY operators (is/is_not) accept a single string OR an array of strings (e.g. value: "EVENT_ID" or value: ["EVENT_1","EVENT_2"]). (2) Do NOT include modifiers unless specifically asked for frequency or recency filtering. If included, time_range.value MUST be > 0. KNOWN LIMITATION: Do NOT combine attendance criteria (attended_event, ticket_type) with spending criteria (total_spent, ticket_spent, cashless_recharge_amount) in the SAME stanza. Put them in SEPARATE stanzas. Example — attended EVENT_ID AND spent >= 200, because a fan must match EVERY stanza: { stanzas: [{ criteria: [{ criterion_id: "attended_event", operator: "is", value: "EVENT_ID" }] }, { criteria: [{ criterion_id: "total_spent", operator: "gte", value: 200 }] }] }.

Parametersdefinitionrequired

nevent_segment_execute

Execute segment and get contacts

Execute a segment definition and retrieve matching contacts with pagination. SEMANTICS: criteria in the same stanza are OR-combined — a fan matches the stanza if ANY criterion matches. Stanzas are AND-combined — a fan must match EVERY stanza. To require A AND B, put them in separate stanzas; to accept A OR B, put both in the same stanza.

Parameterspagepage_sizedefinitionrequired

nevent_dimension_values

Get dimension values

Autocomplete values for a segmentation criterion. Useful for discovering valid values when building segment definitions.

Parameterssearchcriterion_idrequired

nevent_help

Get Nevent MCP help

Get guidance when you are unsure which tool to call or how to handle an error. Returns structured markdown for the requested topic. Call with topic="workflows" for common patterns, topic="errors" for error code meanings, topic="tenants" for multi-tenant guidance, or topic=<category> like "paid_media" / "analytics" / "segments". Omit topic to get an index of all available topics.

Parameterstopic

nevent_list_tenants

List accessible tenants

List all Nevent tenants (clients) accessible to the authenticated user. Returns tenant IDs and names for use with nevent_switch_tenant. SUPERADMIN: returns all tenants in the platform. OWNER/ADMIN: returns only your tenant hierarchy subtree (up to 3 levels).

Takes no parameters.

nevent_switch_tenant

Switch active tenant

Switch the active tenant for this session. All subsequent queries (analytics, segments, campaigns, paid media) will use the specified tenant's data. SUPERADMIN: this mutates your user record in the database — the switch PERSISTS. Always call nevent_reset_tenant when cross-tenant work is done to avoid leaving your account pointing at another tenant. OWNER/ADMIN/STAFF: session-scoped only; you can only switch to tenants in your hierarchy subtree (max 3 levels deep). Use nevent_list_tenants to discover available tenant IDs.

Parameterstenant_idrequired

nevent_reset_tenant

Reset to home tenant

Restore the original tenant context set at session start. ALWAYS call this after cross-tenant queries (nevent_switch_tenant) to avoid leaving your SUPERADMIN account pointing to another tenant. For SUPERADMIN users, tenant switches PERSIST in the user record in the database — this tool reverses that. For OWNER/ADMIN/STAFF users, this resets to the session's home tenant. No parameters needed.

Takes no parameters.

nevent_list_segments

List segments

Call this FIRST when you need to build or target an audience. Returns all saved segments for the active tenant: id, name, estimated contact count, and last-execution date. Use the returned segment ids to call nevent_get_segment (for the filter definition), nevent_segment_preview (to verify the audience), or nevent_create_campaign (to send a campaign to that segment).

Takes no parameters.

nevent_get_segment

Get segment details

Retrieve the complete filter definition of a specific segment (criteria stanzas, operators, values) along with its estimated contact count and metadata. Call this after nevent_list_segments when you need to inspect, clone, or explain a segment's logic. Next step: nevent_segment_preview to count the audience, or nevent_update_segment to modify the definition.

Parameterssegment_idrequired

nevent_create_segment

Create segment

Create and persist a new audience segment from a filter definition. SEMANTICS: criteria in the same stanza are OR-combined — a fan matches the stanza if ANY criterion matches. Stanzas are AND-combined — a fan must match EVERY stanza. To require A AND B, put them in separate stanzas; to accept A OR B, put both in the same stanza. PREREQUISITE: call nevent_segmentation_criteria first to discover valid criterion_ids and operators. MANDATORY RULES: (1) ENTITY operators (is/is_not) accept a single string OR an array of strings — e.g. value: "EVENT_ID" or value: ["E1","E2"]. (2) Omit modifiers unless the user explicitly requests frequency/recency filtering; if included, time_range.value MUST be > 0. (3) Criteria fields: only criterion_id, operator, value — omit id, timeframe, type. (4) KNOWN LIMITATION: do NOT mix attendance criteria (attended_event, ticket_type) with spending criteria (total_spent, ticket_spent, cashless_recharge_amount) in the same stanza — put them in separate stanzas. Separate stanzas are AND-combined, so a fan must match both. After creation, call nevent_segment_preview to count the audience, then nevent_create_campaign to send to this segment.

Parametersnamerequireddefinitionrequireddescription

nevent_update_segment

Update segment

Modify an existing segment's name and/or filter definition. Call this after nevent_get_segment to inspect the current definition before changing it. At least one of name or definition must be provided. After update, call nevent_segment_preview to confirm the new audience count before scheduling a campaign.

Parametersnamedefinitionsegment_idrequired

nevent_create_campaign

Create campaign draft

Create a new campaign draft (email, SMS, WhatsApp, push, or multi-channel). PREREQUISITES: call nevent_list_segments to get the target segment_id, and nevent_list_templates to get the template_id. The campaign is always created in DRAFT status — no messages are sent. After creation, call nevent_schedule_campaign to schedule delivery. For EMAIL_ONLY (and email multi-channel): email_subject is required. For SMS_ONLY/WHATSAPP_ONLY/PUSH_ONLY and multi-channel involving those: message is required. Optional fields: from_name, preview_text, template_id, segment_ids, utm_source/medium/campaign/content/term/custom_params, reply_to (email address for reply routing — useful when replies should go to a different mailbox than the From address). Always confirm the segment audience count with the user before scheduling.

Parametersnamerequiredchannelrequiredmessagereply_toutm_termfrom_nameemail_bodyutm_mediumutm_sourcesegment_idstemplate_idutm_content+4 more

nevent_schedule_campaign

Schedule campaign for delivery

Schedule an existing DRAFT campaign for delivery at a specific ISO-8601 datetime. IMPORTANT: this is a DESTRUCTIVE action — the campaign will be queued for sending to real contacts. You MUST set confirmed=true in the call, which requires explicit user consent. Call nevent_get_campaign first to verify the draft content and recipient segment. scheduled_time must be in the future (ISO-8601, e.g. 2025-06-01T10:00:00Z). The campaign transitions from DRAFT to SCHEDULED status on success.

Parametersconfirmedrequiredcampaign_idrequiredscheduled_timerequired

nevent_quote_campaign

Quote campaign cost and audience

Estimate the credit cost and eligible audience of a campaign BEFORE sending it. Read-only pre-flight check against nev-api POST /campaigns/quote — it never debits credits and never sends. Call this after nevent_create_campaign and before nevent_schedule_campaign: scheduling a campaign the tenant cannot afford fails at send time with a 402. Returns cost (credits required), available (credits in the pool), missing (shortfall), recipientCount, affordable (boolean — the gate to check), blocked, unlimited, and an audience block with uniqueAudience, estimatedEligible per channel, eligibleAnyChannel and emailExclusions (no_email / invalid_email / opt_out / unknown). The audience block is null when the estimate could not be computed: any channel mix touching WhatsApp, more than 20 segments, or a data-api timeout — cost and recipientCount are still valid in that case. Use segment_ids from nevent_list_segments; omit them to quote the full addressable audience. Set transactional=true only for genuinely transactional sends (order confirmations, ticket delivery) — it estimates against the TRANSACTIONAL consent mode, which reaches recipients who opted out of marketing.

Parameterschannelrequiredsegment_idstransactional

nevent_get_campaign_metrics

Get campaign metrics

Get the delivery and engagement counters nev-api holds for one campaign: totalRecipients, totalSent, totalDelivered, totalBounces, totalComplaints, totalOpens, uniqueOpens, totalClicks, uniqueClicks, unsubscribes, the derived rates (openRate, clickRate, clickToOpenRate, bounceRate, unsubscribeRate) and the conversion counters (carts, purchases, revenue). This is the OPERATIONAL source of truth, read straight from nev-api — use it right after a send, and prefer it over nevent_campaign_report when the two disagree, because the report reads the analytics warehouse and lags behind by the data pipeline. Use nevent_campaign_report instead when you need to compare many campaigns, slice by dimension, or join against other analytics. Get campaign_id from nevent_list_campaigns. Follow up with nevent_list_campaign_recipients to see who is behind a number (for example which recipients bounced).

Parameterscampaign_idrequired

nevent_list_campaign_recipients

List campaign recipients

List the individual recipients of a campaign and what happened to each message. Use this to put names behind the aggregate numbers from nevent_get_campaign_metrics: who bounced, who clicked, who unsubscribed. Filter with status (SCHEDULED, DELIVERED, OPENED, CLICKED, BOUNCES, UNSUBSCRIBES), narrow to one audience with segment_id when the campaign targeted several segments, or find one person with search (matches name and email). Returns a paginated envelope — content (the recipient rows), page, size, totalElements, totalPages. Rows contain personal data: request the smallest page that answers the question, filter rather than paginate through everything, and do not dump full recipient lists into a summary.

Parameterspagesearchstatuspage_sizesegment_idcampaign_idrequired

nevent_list_campaigns

List campaigns

Call this to discover existing campaigns before reporting on performance or scheduling new sends. Returns campaigns for the active tenant with status, channel, send date, and top-level engagement metrics (sent, open rate, click rate). Filter by status (DRAFT/SCHEDULED/SENT/FAILED), channel (EMAIL/SMS), or date range. Use the returned campaign id to call nevent_get_campaign (full content + metrics) or nevent_get_campaign_insights (AI analysis).

Parameterssortlimitstatuschanneldate_todate_fromsort_order

nevent_get_campaign

Get campaign details

Retrieve the complete record of a campaign: email subject and body HTML, sending profile, all delivery and engagement metrics (sent, delivered, opens, clicks, unsubscribes, bounces), and tracked links with click counts. Call this after nevent_list_campaigns to drill into a specific campaign. Next step: nevent_get_campaign_insights for AI-generated recommendations, or nevent_campaign_report for a full analytics query.

Parameterscampaign_idrequired

nevent_get_campaign_insights

Get campaign AI insights

Get pre-computed AI analysis for a specific campaign: performance summary, detected anomalies (e.g. unusually high bounce rate), and improvement recommendations. Call this after nevent_get_campaign when the user asks "how did this campaign perform?" or "what could be improved?". Complements raw metrics from nevent_get_campaign with narrative insights.

Parameterscampaign_idrequired

nevent_list_templates

List email templates

Call this to discover available email templates before creating a campaign. Returns templates for the active tenant: id, name, tags, and whether they use MJML or HTML. Use the returned template id in nevent_create_campaign. Call nevent_get_template to inspect the full HTML/MJML source of a specific template.

Parameterssorttagslimitsort_ordercontent_nature

nevent_get_template

Get email template

Retrieve the full content of an email template: MJML source, rendered HTML, tags, and usage metrics (how many campaigns used this template). Call this after nevent_list_templates when the user wants to inspect, copy, or modify a template. Next step: nevent_update_template to change the content, or nevent_create_campaign to use this template in a new campaign.

Parameterstemplate_idrequired

nevent_create_template

Create email template

Create and persist a new email template with MJML or raw HTML content. Prefer MJML for responsive email (set format="MJML"). The template is saved and available for reuse across campaigns. After creation, call nevent_create_campaign with the returned template id to send it to a segment.

Parametersnamerequiredtagsformatrequiredhtml_bodymjml_body

nevent_update_template

Update email template

Update an existing email template: change the name, MJML/HTML content, or tags. Call nevent_get_template first to inspect the current version before modifying. At least one of name, content, or tags must be provided. Note: updating a template does NOT retroactively change campaigns already sent with it.

Parametersnametagsformathtml_bodymjml_bodytemplate_idrequired

nevent_clone_template

Clone email template

Clone an existing email template to create a duplicate as a starting point for a new campaign. Use after nevent_list_templates to pick a template to duplicate. Returns the new cloned template (id, name with "(Copy)" suffix, format, tags). Typically follow with nevent_rename_template and nevent_update_template to customize the clone.

Parameterstemplate_idrequired

nevent_rename_template

Rename email template

Rename an email template without modifying its content (lightweight — no re-render triggered). Use after nevent_clone_template to give the clone a proper name, or to reorganize existing templates. Returns the updated template with the new name. Next step: nevent_update_template to change content, or nevent_preview_template to validate rendering.

Parametersnamerequiredtemplate_idrequired

nevent_preview_template

Preview template rendering

Preview a template with merge tags resolved against a sample user's profile. Returns originalBody (raw {{tags}}) and personalizedBody (tags replaced with user data), plus detectedMergeTags (all unique tags found). Always call before nevent_send_test_template to validate rendering. Provide sample_user_id or sample_user_email to see real personalization; omit both to see raw tags only.

Parameterssubjecttemplate_idrequiredsample_user_idsample_user_email

nevent_send_test_template

Send test email

Send a test email of the template to one or more email addresses via SES. Use after nevent_preview_template validates rendering. Test emails carry test indicators in headers and are sent via AWS SES. This call may take up to 60 seconds due to SES delivery. Returns success status, list of recipients the email was sent to, and any error details.

Parametersemailsrequiredsubjectparameterstemplate_idrequiredsample_user_idsample_user_email

nevent_get_sending_profile

Get sending profile

Call this before creating a campaign to verify the tenant is ready to send email. Returns: sender domain(s) and their validation status, warm-up phase (cold/warming/warmed), daily send rate cap, and throttle settings. If the sending profile is not validated or still in warm-up, warn the user before scheduling a large campaign. Combine with nevent_get_suppressions_summary for a full deliverability health check.

Takes no parameters.

nevent_get_suppressions_summary

Get suppressions summary

Get a deliverability health snapshot for the active tenant: total suppressed emails (hard bounces + complaints + manual unsubscribes), 30-day trend, and breakdown by suppression reason. Call this when the user asks about list health, unsubscribe rates, or bounce issues. A suppression rate above 2% indicates deliverability risk — surface this as a warning before scheduling a large campaign.

Takes no parameters.

nevent_paid_ads_status

Check paid ads connection status

Check if a paid ads provider account (meta, google, or tiktok) is connected to this tenant and when data was last synced. Call this first before any ads queries to confirm the integration is active. Returns: connected (bool), accountId, accountName, lastSyncAt.

Parametersproviderrequired

nevent_paid_ads_health

Get paid ads health signals

Get operational health signals for a paid ads provider. Always call this before claiming "no data" to the user — it surfaces throttle state, feature gate enrollment, stale syncs, and tier. Key fields: throttle.isThrottled (API throttled), throttle.nextAttemptAt (next retry), featureGate.isInTenantAllowlist (pilot access), lastSuccessfulSyncAt, lastSuccessfulInsightsAt, backfillEnabled. A 404 here means this tenant is not enrolled in the insights pilot for this provider.

Parametersproviderrequired

nevent_list_paid_campaigns

List paid campaigns

List all paid campaigns synced from a provider (meta, google, or tiktok). Call this to discover campaignId values — you need a campaignId to call insights or ad group tools. Returns campaign IDs, names, statuses, objectives, and budgets. Use the returned campaignId values with nevent_get_paid_campaign_insights and nevent_list_paid_ad_groups.

Parametersproviderrequired

nevent_get_paid_campaign_insights

Get paid campaign insights

Get daily performance metrics for a specific paid campaign. Use after nevent_list_paid_campaigns to get a valid campaignId. Date range defaults to the last 7 days when from/to are omitted. Returns daily rows with: spend, impressions, reach, frequency, clicks, CTR, CPM, CPC, ROAS, engagement rate, video metrics. Each row.date is an ISO 8601 UTC timestamp (e.g. "2026-05-10T00:00:00Z"). A 404 may mean this tenant is not enrolled in the insights pilot — call nevent_paid_ads_health to confirm.

ParameterstofromproviderrequiredcampaignIdrequired

nevent_paid_attribution

Get paid ads attribution

Get the most business-focused view of paid ads: links campaigns to actual ticket sales and revenue via UTM matching. Returns per-campaign: ticketsSold, revenue, budget, utmCampaigns (matched UTM values), status. Use this when the user asks about ROI, conversion, or revenue from paid ads. Use after nevent_list_paid_campaigns to cross-reference campaign IDs.

Parametersproviderrequired

nevent_list_paid_ad_groups

List paid ad groups

List ad groups (ad sets) for a paid ads provider, optionally filtered by campaign. Use after nevent_list_paid_campaigns to drill down into a campaign's ad sets. Returns ad group IDs, names, statuses, and lastSyncedAt. Use the returned adGroupId values with the ad group insights, targeting, and comparative stats tools.

ParametersproviderrequiredcampaignId

nevent_get_paid_ad_group_insights

Get paid ad group insights

Get daily performance metrics for a specific ad group (ad set). Use after nevent_list_paid_ad_groups to get a valid adGroupId. Date range defaults to the last 7 days when from/to are omitted. Returns daily rows with: spend, impressions, reach, frequency, clicks, CTR, CPM, CPC, ROAS, engagement rate, video metrics. Each row.date is an ISO 8601 UTC timestamp (e.g. "2026-05-10T00:00:00Z"). A 404 may mean this tenant is not enrolled in the insights pilot — call nevent_paid_ads_health to confirm.

ParameterstofromproviderrequiredadGroupIdrequired

nevent_get_paid_ad_group_comparative_stats

Get paid ad group comparative stats

Compare an ad group's performance metrics against the mean of its campaign sibling ad groups. Use to detect underperforming ad sets — each metric (costPerResult, CPM, frequency, CTR) is returned with its campaign sibling mean and ratioVsMean (1.0 = on par). For cost metrics (costPerResult, CPM, frequency): ratio > 1.0 means WORSE than siblings (higher cost). For CTR: ratio > 1.0 means BETTER than siblings (higher CTR is better). Use after nevent_list_paid_ad_groups to get a valid adGroupId. A 404 may mean this tenant is not enrolled in the insights pilot — call nevent_paid_ads_health to confirm.

ParameterstofromproviderrequiredadGroupIdrequired

nevent_get_paid_ad_group_targeting

Get paid ad group targeting

Get the full audience targeting configuration for an ad group. Use after nevent_list_paid_ad_groups to get a valid adGroupId. Returns: ageRange, genders, geoSummary (countries/cities/regions), topInterests, topBehaviors, placements, Advantage+ flags (automaticPlacements, expandAge, expandGender), custom and excluded audiences, bidStrategy, promotedObject. A 404 may mean this tenant is not enrolled in the insights pilot — call nevent_paid_ads_health to confirm.

ParametersproviderrequiredadGroupIdrequired

nevent_list_paid_ads

List paid ads

List individual ads for a paid ads provider, optionally filtered by campaign and/or ad group. Use after nevent_list_paid_campaigns or nevent_list_paid_ad_groups to drill down to ad level. Returns ad IDs, names, statuses, UTM fields (utmSource, utmMedium, utmCampaign, utmContainsMacros), and lastSyncedAt. Use the returned adId values with nevent_get_paid_ad_creative.

ParametersproviderrequiredadGroupIdcampaignId

nevent_get_paid_ad_creative

Get paid ad creative

Get the creative content of a specific ad: copy (body, title, description, CTA), click URL, UTM params, and pre-signed S3 image/video URLs (TTL ~1 hour). Use after nevent_list_paid_ads to get a valid adId. Null imageUrl/videoUrl means the asset mirror job has not run yet — retry in ~5 minutes. For Dynamic Creative Ads (hasDca: true), the dca field contains multiple creative variants. A 404 may mean this tenant is not enrolled in the insights pilot — call nevent_paid_ads_health to confirm.

ParametersadIdrequiredproviderrequired

nevent_list_short_urls

List short URLs

List all short URLs for the current tenant with their tracking metrics (click count, last clicked). Use to discover existing campaign links or to audit active tracking URLs. Returns items (array of ShortUrlDTO), total, page, pageSize, totalPages. Key fields per item: id (use with nevent_get_short_url_metrics or nevent_get_short_url_clicks), shortCode (use with nevent_get_short_url_campaign_metrics or nevent_list_short_url_user_links), shortUrl, longUrl, title, tags, clickCount, isActive, isParent. Filter by isActive=true for active links only. Use search to filter by title or URL.

ParameterspagesearchisActivepageSize

nevent_get_short_url

Get short URL details

Get complete details of a specific short URL including target URL, metadata, creation date, expiration, tags, and current click count. Use after nevent_list_short_urls to get the `id`. Key fields returned: id, shortCode, shortUrl, longUrl, title, tags, metadata, clickCount, lastClickedAt, isActive, isExpired, isParent, parentShortCode, userId, userLinksCount. Use the returned id with nevent_get_short_url_metrics for time-series analytics.

Parametersidrequired

nevent_get_short_url_metrics

Get short URL metrics

Get aggregated click analytics for a specific short URL over a time window (default 30 days). Use after nevent_list_short_urls to get the `id`. Returns: totalClicks, uniqueVisitors, firstClickAt, lastClickAt, clicksByDay (date → count), clicksByCountry, clicksByDevice (mobile/desktop/tablet), clicksByBrowser, clicksByOs, topReferers. Use for performance analysis of individual tracking links. For campaign-wide aggregation across all user links, use nevent_get_short_url_campaign_metrics instead.

Parametersidrequireddays

nevent_get_short_url_campaign_metrics

Get short URL campaign metrics

Get aggregated click metrics across a parent short URL and all its per-user variants. Use when a marketing campaign was sent with per-user tracking links (created via nevent_create_bulk_user_short_urls) to see total reach and CTR. Requires the `parentShortCode` from nevent_list_short_urls (where isParent=true). Returns: totalChildUrls, totalClicks, urlsWithClicks, avgClicksPerUrl, clickThroughRate (%), topUsersByClicks (userId, shortCode, clickCount, lastClickedAt), clicksByDay, clicksByDevice, clicksByBrowser, clicksByCountry. This tool aggregates across ALL child user links — use nevent_get_short_url_metrics(id) when you need per-link breakdown for a single URL.

ParametersdaystopNparentShortCoderequired

nevent_get_short_url_clicks

Get short URL click events

Get individual click event records for a specific short URL, ordered by most recent first. Use after nevent_list_short_urls to get the `id`. Each click record includes: clickedAt, ipAddress, userAgent, referer, country, city, device, browser, os, utmSource, utmCampaign, fbclid, gclid, isPaidTraffic. Use for detailed click attribution, fraud detection, or per-user behavior analysis. Default returns 100 most recent clicks; use limit to adjust.

Parametersidrequiredlimit

nevent_create_short_url

Create short URL

Create a new short URL that redirects to the specified destination. Persists immediately — the short code is active as soon as the call returns. Requires at minimum a valid longUrl. All other fields are optional. Returns the created ShortUrlDTO with: id, shortCode, shortUrl (full redirect URL), longUrl, title, tags, isActive. Use the returned shortCode with nevent_create_bulk_user_short_urls to generate per-user variants. WRITE operation — requires STANDARD or FULL operation mode. In READ_ONLY mode this tool returns an operation_not_permitted error immediately without making any API call.

ParameterstagstitlelongUrlrequiredmetadataexpiresAtcustomShortCode

nevent_update_short_url

Update short URL

Update an existing short URL's configuration. Only provided fields are changed — omitted fields remain unchanged. Changes apply immediately. Use after nevent_list_short_urls to get the `id`. Supported updates: title, expiresAt (pass null to remove expiration), isActive (true/false), tags (replaces existing), metadata (replaces existing), longUrl (changes redirect destination). Returns the updated ShortUrlDTO. WRITE operation — requires STANDARD or FULL operation mode. In READ_ONLY mode this tool returns an operation_not_permitted error immediately without making any API call.

ParametersidrequiredtagstitlelongUrlisActivemetadataexpiresAt

nevent_create_bulk_user_short_urls

Create bulk user short URLs

Generate per-user short URL variants for an existing parent short URL. Each user receives their own unique short link that resolves to the same destination as the parent, but identifies the user on click — used for fan-level click attribution in email/SMS campaigns. The parent short URL must already exist (create it first with nevent_create_short_url). Requires: parentShortCode (from nevent_list_short_urls) and userIds (list of user IDs). Returns: parentShortCode, totalRequested, totalCreated, createdLinks (array of ShortUrlDTO with userId, shortCode, shortUrl per user). Use nevent_get_short_url_campaign_metrics afterwards to track aggregate CTR. WRITE operation — requires STANDARD or FULL operation mode. In READ_ONLY mode this tool returns an operation_not_permitted error immediately without making any API call. Note: parentShortCode is sent in both the URL path and request body — they must match (validated server-side).

ParametersuserIdsrequiredparentShortCoderequired

nevent_list_short_url_destinations

List short URLs by destination

List short links grouped by DESTINATION URL — one row per destination instead of one per link. Use this to answer "how much traffic is this landing page getting across all my campaigns?", which nevent_list_short_urls cannot answer because every campaign send creates its own parent link. Campaign parents pointing at the same canonical destination collapse into a single row with aggregated totalClicks, linksCount (how many links form the group) and campaignsCount (how many distinct campaigns used it). Unlike nevent_list_short_urls, this INCLUDES system-managed assistant links (the ones the chatbot pushes), flagged readOnly=true — never try to edit or delete those. Filter with origin: MANUAL (human-created), CAMPAIGN (generated by sends), ASSISTANT (chatbot), or ALL (default). Each row carries canonicalId and members[] (id + shortCode) — pass those ids to nevent_get_short_url or nevent_get_short_url_metrics to drill into a specific link. Pagination is over GROUPS, not documents.

ParameterspageoriginsearchpageSize

nevent_upload_image

Upload image to media library

Upload an image to the Nevent media library and get a CDN URL. Accepts base64-encoded images as a data URL (data:image/png;base64,...) or as raw base64 with an explicit mimeType. Returns a destinationUrl (CloudFront CDN URL) that can be used directly in <img src="..."> inside email template HTML. Maximum decoded size: 5 MB. Upload the image, then reference the returned destinationUrl in nevent_update_template or nevent_create_template HTML content.

ParameterssourcerequiredmimeTypeimageName

nevent_list_images

List media library images

List all images stored in the Nevent media library for the current tenant. Returns each image's CDN URL (src), file name, MIME type, and size in bytes. Use the src value in <img src="..."> in email template HTML, or pass it to nevent_delete_image to remove it.

Takes no parameters.

nevent_delete_image

Delete images from media library

Permanently delete one or more images from the Nevent media library. Provide the CDN URLs (src / destinationUrl) from nevent_list_images or nevent_upload_image. The operation is irreversible. Any email template HTML that references the deleted URLs will show broken images. Requires FULL operation mode (NEVENT_OPERATION_MODE=FULL) and ADMIN, SUPERADMIN, or OWNER role.

Parametersurlsrequired

Version history

1
  1. v1.8.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts