Notti has a built-in MCP server. Once an assistant is connected, you can ask it things like "how did last week's campaigns perform?" or "send the Black Friday template to the iOS segment", and it works on your Notti data through a fixed set of tools.
Connect
In your assistant, add a custom connector (or MCP server) and use this URL:
texthttps://<your-notti-host>/mcpUse the same public address you open the dashboard on. Settings → Connected apps shows this URL with a copy button. On a self-hosted instance the address must be
https;httponly works onlocalhost.The assistant opens a Notti sign-in page. Sign in as you normally do.
Choose the Company to connect and the permissions to grant, then approve. You are sent back to the assistant.
A connection belongs to one Company. To use the assistant with another Company, connect again and choose the other one.
Sign-in uses OAuth 2.1 with PKCE. The assistant never sees your password.
What the assistant can reach
The assistant acts as you: it reaches the Apps you can reach in the dashboard. An owner reaches every App of the Company; a member only the Apps they were granted. An App outside that is answered as app_not_found, the same as one that does not exist. If you leave the Company or lose access to an App, the assistant loses it too.
Permissions
You choose them on the consent screen. Read is always granted.
| Permission | Scope | What it allows |
|---|---|---|
| Read your data | notti:read | See Apps, labels, templates, segments, notifications, the App overview and usage. |
| Edit templates and segments | notti:write | Create and change templates and segments. It cannot send anything by itself. |
| Send notifications | notti:send | Prepare sends to your users, then confirm or cancel them. |
Tools
| Tool | Scope | What it does |
|---|---|---|
list_apps | read | Lists the Apps the connection reaches. |
list_labels | read | Lists an App's labels. |
get_usage | read | Shows monthly active devices against the plan limit, and today's MCP calls. |
get_app_overview | read | Delivery and engagement numbers for a date range. |
list_notifications, get_notification | read | Notification history, filterable by status, source, label and text, and one notification's content (including its custom data payload) and delivery summary. |
list_templates, get_template | read | Templates, with 30-day stats for those that were sent. |
list_segments, get_segment, preview_segment | read | Segments and how many devices a rule set reaches. Values of rules on external user ID, email, phone and tags are shown as [hidden]. |
create_template, update_template | write | Create or change a template. |
create_segment, update_segment | write | Create or change a segment. |
prepare_send | send | Shows exactly what would go out and to how many devices, without sending. |
confirm_send | send | Sends what prepare_send showed. |
cancel_scheduled_send | send | Cancels a scheduled send. |
Sending is always two steps
prepare_send never sends. It returns a preview and a confirmation_token. Only confirm_send with that token creates the notification, and confirming the same token twice sends once. Review the preview before the assistant confirms. If the template of a send is edited or deleted between the two steps, confirm_send refuses it (content_changed) and the assistant has to prepare it again, so what goes out is what you saw. A template is rendered when the push goes out, so a scheduled send uses the template as it is at that time.
Notifications sent this way show MCP as their source in the push list and in the notification detail, and are recorded in the Company's audit log as made through the MCP.
Limits
- Daily quota. Each plan allows a number of MCP tool calls per Company per UTC day (250 on Free, 500 on Start, 1,000 on Pro and 4,000 on Business). The Usage screen of an App shows today's calls, the plan's limit and when the counter resets. Past the limit, tool calls are refused until the reset. Self-hosted instances have no daily quota.
- Rate. At most 60 tool calls per minute per connection.
Manage and revoke connections
Open Settings → Connected apps in the dashboard to see the assistants you connected, which Company and permissions each has and when it was last used. Revoking one ends it immediately.
For Company owners
Owners of a Company control MCP for everyone in it. Open Company settings → MCP and AI assistants (only owners see it):
- Turn MCP off or on. MCP is on by default for every Company. While it is off, no member can approve a new connection, and every assistant already connected to the Company gets
401until it is turned back on. Turning it off asks for confirmation first. - Turning it off suspends, it does not revoke. The connections stay stored, and when you turn MCP back on the ones that were not revoked can work again. Whether an assistant resumes by itself depends on the assistant: while MCP is off, a token refresh is refused with
invalid_grant, and some clients treat that as a lost connection and discard their credentials. Then the member has to approve it again. Access tokens last one hour, so a short pause is the case most likely to resume without anyone doing anything. - See and revoke everyone's connections. The table lists every connection to the Company with who connected it, the assistant, the permissions and when it was last used. Revoking one ends it immediately and permanently: that member has to approve it again to reconnect, even if you turn MCP off and on.
Turning MCP off or on and revoking a member's connection are recorded in the audit log with the owner as the actor. The setting works the same on SaaS and self-hosted instances.
Data handling
- Tool results are aggregated or descriptive. They do not include push tokens, device IDs, external user IDs or device attribute values. Segment rules are returned with the values of conditions on external user ID, email, phone and tags replaced by
[hidden], and an assistant cannot save rules that contain that placeholder. Segment previews return counts only. Free rules on those fields cannot be previewed: save them as a segment and preview it by its ID, where a count under 5 is withheld and the split by platform and by group is left out, so a rule cannot be used to check whether one person is in an App. This is a barrier against casual reads, not against an assistant that is allowed to create segments and compares their counts. The audience size thatprepare_sendshows before a send is always the real one, because you confirm against it. The customdatapayload of a notification is the exception: it is returned as you sent it, so keep personal data out of it if you do not want an assistant to read it. - What a tool returns, and what you write in templates and sends, is processed by the assistant provider you chose to connect. Before enabling this for a Company, check that provider's terms and your own data-protection obligations (for example LGPD) with your legal team.
- Connect only assistants and clients you trust. Anyone using a connection can do what its permissions allow, as you.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| The assistant cannot add the server | The instance address is not https (or localhost), or /mcp is not reachable from the assistant. |
| The consent page says the request expired | It was already answered, took too long or belongs to another account. Start the connection again from the assistant. |
app_not_found | The App does not exist, or this user cannot reach it. |
subscription_inactive | The Company's subscription is not active. |
| A tool is refused for lack of permission | The connection was made without that scope. Connect again and grant it. |
The assistant gets 401 after it worked, or the consent page lists a Company as unavailable | An owner turned MCP off for that Company. Ask an owner to turn it on in Company settings. |