keila-mcp
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) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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_contactsB | 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_contactA | 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_contactC | 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_contactC | 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_contactB | Delete a contact. Args: contact_id: The contact ID (e.g. "c_12345"). Returns: Confirmation message. |
| list_campaignsB | 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_campaignA | 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_campaignA | 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_campaignA | 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_campaignB | Delete a campaign. Args: campaign_id: The campaign ID (e.g. "mc_12345"). Returns: Confirmation message. |
| send_campaignA | 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_campaignA | 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_segmentsB | List all contact segments. Returns: A dict with 'data' (list of segments). Each segment has id, name, and filter. |
| create_segmentA | 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_segmentA | Delete a segment. Does not delete the contacts in it. Args: segment_id: The segment ID (e.g. "sgm_12345"). Returns: Confirmation message. |
| list_sendersA | 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_formsB | 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 | |
TDQS
Scored across 17 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools are organized by resource type (campaign, contact, segment, sender, form) and action (create, get, list, update, delete, schedule, send), making it easy for an agent to select the correct one. Overlap is minimal, such as create_campaign and send_campaign being clearly separated in workflow.
Tool names follow a highly consistent verb_noun pattern throughout, with verbs like create, get, list, update, delete, schedule, and send paired with nouns like campaign, contact, segment, sender, and form. There are no deviations in style or convention, making the set predictable and readable.
With 17 tools, the count is well-scoped for an email marketing platform, covering core CRUD operations for campaigns, contacts, and segments, plus essential utilities like listing senders and forms, and campaign-specific actions like scheduling and sending. Each tool earns its place without bloat or redundancy.
The tool surface provides complete CRUD/lifecycle coverage for the domain of email marketing. It includes create, get, list, update, and delete for campaigns, contacts, and segments, plus specialized actions like schedule_campaign and send_campaign, and supporting tools like list_senders and list_forms. There are no obvious gaps that would hinder agent workflows.