Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KEILA_URL | No | Keila instance URL | https://mail.korroni.com |
| KEILA_API_KEY | Yes | API key (create in Keila dashboard) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_contacts | List all contacts in Keila with pagination. Args: page: Page number for pagination (optional). Returns: A dict with 'data' (list of contacts) and 'meta' (pagination info). Each contact has id, email, first_name, last_name, status, data, and timestamps. |
| get_contact | Fetch a single contact by ID. Args: contact_id: The contact ID (e.g. "c_12345"). Returns: A dict with contact details: id, email, first_name, last_name, status, data. |
| create_contact | Create a new contact in Keila. Args: email: Email address (required). first_name: First name (optional). last_name: Last name (optional). Returns: The created contact record. |
| update_contact | Update an existing contact. Args: contact_id: The contact ID (e.g. "c_12345"). email: New email address (optional). first_name: New first name (optional). last_name: New last name (optional). Returns: The updated contact record. |
| delete_contact | Delete a contact. Args: contact_id: The contact ID (e.g. "c_12345"). Returns: Confirmation message. |
| list_campaigns | List all campaigns in Keila. Returns: A dict with 'data' (list of campaigns). Each campaign has id, subject, text_body, sender_id, segment_id, settings, sent_at, scheduled_for, and timestamps. |
| get_campaign | Fetch a single campaign by ID. Args: campaign_id: The campaign ID (e.g. "mc_12345"). Returns: Campaign details including subject, body, sender, segment, and delivery status. |
| create_campaign | Create a new email campaign. Does NOT send it — use send_campaign after. The body supports Liquid templates: {{ contact.first_name }}, {{ contact.email }}. Args: subject: Email subject line. text_body: Email body content (markdown by default). sender_id: Sender ID to send from (e.g. "ms_12345"). Use list_senders to find IDs. settings_type: Content type — "markdown", "text", "mjml", or "block" (default: "markdown"). segment_id: Optional segment ID to restrict recipients (e.g. "sgm_12345"). preview_text: Optional preview text shown in email clients. Returns: The created campaign record. |
| update_campaign | Update an existing campaign (only unsent campaigns can be updated). Args: campaign_id: The campaign ID (e.g. "mc_12345"). subject: New subject line (optional). text_body: New body content (optional). sender_id: New sender ID (optional). segment_id: New segment ID (optional). preview_text: New preview text (optional). Returns: The updated campaign record. |
| delete_campaign | Delete a campaign. Args: campaign_id: The campaign ID (e.g. "mc_12345"). Returns: Confirmation message. |
| send_campaign | Send a campaign immediately to all contacts (or segment contacts). WARNING: This sends real emails. Make sure the campaign content and recipient list are correct before calling this. Args: campaign_id: The campaign ID (e.g. "mc_12345"). Returns: Delivery queued confirmation. |
| schedule_campaign | Schedule a campaign for future delivery. Args: campaign_id: The campaign ID (e.g. "mc_12345"). scheduled_for: ISO 8601 datetime (e.g. "2026-03-15T14:00:00Z"). Returns: The updated campaign record with scheduled_for set. |
| list_segments | List all contact segments. Returns: A dict with 'data' (list of segments). Each segment has id, name, and filter. |
| create_segment | Create a new contact segment with a filter. Filter examples: {"email": {"$like": "%@example.com"}} — contacts with example.com emails {"inserted_at": {"$gt": "2026-01-01"}} — contacts added after Jan 1 Args: name: Segment name. filter: Filter JSON object for matching contacts. Returns: The created segment record. |
| delete_segment | Delete a segment. Does not delete the contacts in it. Args: segment_id: The segment ID (e.g. "sgm_12345"). Returns: Confirmation message. |
| list_senders | List all configured senders. Use sender IDs when creating campaigns. Returns: A dict with 'data' (list of senders with id, name, from_email, reply_to). |
| list_forms | List all signup forms. Returns: A dict with 'data' (list of forms). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |