Elaan
Create Elaan notification types, templates and brands, trigger sends, and debug delivery.
Connector by elaan.ioOfficial · Domain verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/elaan-io-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 13 read · 9 write · 4 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 26
Read from the source code; the running server may list different tools.
Read 13 · Look things up without changing anything.
get_contactget_contact_preferencesget_delivery_statsget_notification_eventget_notification_typeget_templatelist_brandingslist_contactslist_deliverieslist_notification_typeslist_templateslist_templates_affected_by
Show 1 more tools
preview_email_render
Write 9 · Create, change, send or run things.
create_brandingcreate_contactcreate_notification_typecreate_templateset_contact_preferencetrigger_notificationupdate_brandingupdate_notification_typeupdate_template
Delete 4 · Delete, drop, revoke or wipe things.
delete_brandingdelete_notification_typedelete_templaterestore_notification_type
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
ELAAN_API_KEY
Tools (26)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
create_brandingCreate a brandCreate a brand. `values` is an arbitrary key/value bag interpolated into templates, so one template can render for every customer you have — put whatever the templates reference here (product name, logo URL, colour, support address).
create_contactCreate a contactCreate a contact. `attributes` are available to every template rendered for this recipient, so anything you would otherwise repeat in every trigger belongs here.
create_notification_typeCreate a notification typeCreate a notification type. The key is its permanent identity and is referenced by every template and preference, so choose it carefully — it cannot be renamed. Set allows_opt_out to false for transactional types (password resets, email verification) that a recipient must not be able to switch off; note that this removes only the recipient's veto, and channel_defaults still decides which channels fire.
create_templateCreate a templateCreate a template for one notification type on one channel. Content is Liquid. A value is read from one of three places, and the slot itself says which: {{ contact.first_name }} for the recipient (their attributes, plus contact.email, contact.language, contact.external_id), {{ brand.logo }} for the resolved brand's values, and {{ order_id }} for the trigger's own variables. `contact` and `brand` are reserved, so a variable cannot use either name. A slot nobody filled renders empty rather than failing the send. Loops handle list data: {% for line in lines %} ... {{ line.description }} ... {% en…
delete_brandingDelete a brandcan change or delete dataDelete a brand. The account default cannot be deleted and will return 409. Templates overriding this brand are not deleted, but sends naming it will fall back to the default.
delete_notification_typeDelete a notification typecan change or delete dataSoft-delete a notification type. The row survives because templates and preferences reference it by key, and restore_notification_type brings it back. Templates of a deleted type can still be edited.
delete_templateDelete a templatecan change or delete dataPermanently delete a template. This is a hard delete with no restore. Deleting the last template for a (type, channel) also removes that channel from the contact-facing preference matrix, because a channel with no template can never be delivered.
get_contactGet a contactread-onlyFetch one contact. Accepts either Elaan's internal id or your own identifier prefixed with 'ext:', e.g. 'ext:crm-12345'.
get_contact_preferencesGet a contact's preferencesread-onlyThe per-type by per-channel matrix for one contact, with the effective on/off and whether they overrode the default. Only channels a type can actually reach (i.e. that have a template) are offered, and non-opt-out types are omitted entirely.
get_delivery_statsGet delivery statsread-onlyAggregate delivery counts for the account.
get_notification_eventGet a notification event's statusread-onlyThe outcome of one triggered event: pending, processed or failed, with per-channel errors. Channel failures are isolated, so a broken email template shows here without having blocked the inbox or push delivery of the same event. Start here when someone reports a notification did not arrive.
get_notification_typeGet a notification typeread-onlyFetch a single notification type by its key.
get_templateGet a templateread-onlyFetch one template by id.
list_brandingsList brandsread-onlyList the account's brands. Every account has exactly one default brand, which cannot be deleted and is the fallback whenever a send names no brand or an unknown one.
list_contactsList contactsread-onlyList or search contacts.
Show 11 more tools
list_deliveriesList deliveriesread-onlyThe delivery log, filterable by channel, status, recipient, notification type and time range. This is the tool for 'did this person get it, and if not why'.
list_notification_typesList notification typesread-onlyList every notification type in the account, with its per-channel defaults, declared variables and opt-out policy. Start here when you need to know what already exists.
list_templatesList templates for a channelread-onlyList every template on one channel, across all notification types, brands and languages.
list_templates_affected_byList templates affected by a type's variablesread-onlyReport which email templates reference which of a notification type's declared variables. Advisory only — a template may legitimately use brand keys and contact attributes that are not declared variables — but it is the right check before changing or removing one.
preview_email_renderPreview a rendered emailRender an email template with sample variables and a chosen brand, without sending anything. Use this to check that slots resolve and that the brand-major fallback picked the template you expected.
restore_notification_typeRestore a notification typeUndo a soft delete, bringing the type and its configuration back.
set_contact_preferenceSet a contact preferenceOverride one (type, channel) for one contact. Attempting this on a non-opt-out type returns 409.
trigger_notificationTrigger a notificationSend a notification to 1-100 recipients. Returns 202 immediately with one event_id per recipient; delivery happens asynchronously, so use get_notification_event afterwards to see the outcome. An omitted or unknown branding_key falls back to the account default rather than failing. Variables are any JSON: strings, numbers, booleans, nested objects read as {{ order.customer.name }}, and arrays a template loops over with {% for %}. They fill slots at the TOP level; the recipient and the brand have their own namespaces, so `contact` and `brand` are refused as variable names. This sends real messag…
update_brandingUpdate a brandUpdate a brand's values and/or its email sender. Values are replaced wholesale, not merged — read the brand first if you mean to change one key.
update_notification_typeUpdate a notification typeUpdate any combination of a type's channel defaults, declared variables and opt-out policy. Only the fields you pass are changed. Note that channel_defaults and variables are replaced wholesale, not merged.
update_templateUpdate a templateReplace a template's content. Same field rules as create_template. The notification type, brand and channel of an existing template cannot be changed — delete and recreate to move it.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 17
- Last commit (this folder)
- Aug 15, 2026 (2 months ago)
- Last release
- Aug 3, 2026 (2 months ago)
- Last package publish
- Aug 15, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.elaan/mcp- Version
- 0.1.3
- Auth
- API key
- Packages
- npm @elaanio/mcp
- License
- MIT
- Repository
- github.com/ThingsIDoForLove/elaan-js
- Website
- elaan.io/docs.html
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Elaan MCP server. Agent Mart. https://agentmart.dev/connectors/elaan-io-mcp (last updated 2026-10-24)