Keila MCP Server
This repository contains a Model Context Protocol (MCP) server that actsas a secure, multi-tenant proxy between an AI Assistant and the Keilabackend API. It exposes 34 MCP tools covering 6 resource domainswith full CRUD, transactional messaging, and system operations.
โจ Features
- ๐ Identity Passthrough โ Extracts the
Authorization: Bearer <token>header from incoming HTTP requests and forwards it to the Keila APIwithout server-side authentication. - ๐ฅ Multi-Tenancy โ Uses Python
contextvarsto maintain thread-safeuser identity isolation, ensuring all AI-driven actions are scoped tothe authenticated user's permissions. - ๐ Full Keila Coverage โ 34 tools mapped to Keila REST APIendpoints across 6 resource domains.
- โก TOON Optimization โ Bulk list responses are automatically compressedusing TOON (Token-Optimized Object Notation) to reduce token consumptionand maximize context window efficiency.
- ๐ Efficient Gets โ GET responses return only commonly used fields bydefault. Full objects are available via an
include_all_fieldsflag. - ๐งช Comprehensive Testing โ 75 automated tests covering all tooldomains, run via the test runner pipeline.
๐ง Environment Variables
| Variable | Required | Description |
|---|---|---|
KEILA_BASE_URL |
Yes | Docker-internal URL of the Keila API (e.g. http://keila-app:4000). |
MCP_SERVER_PORT |
Yes | Port number the MCP server listens on |
ALLOW_ALL_AGGREGATE |
No | When true, aggregate listing tools honor the include_all_fields parameter. When false (default), the parameter is silently forced to False for aggregate list operations. |
IS_STATEFUL |
No | When true, uses stateful Streamable HTTP with session tracking. When false (default), uses stateless mode. |
๐ฆ Installation & Local Development
- Ensure you have Python 3.12+ installed.
- Install dependencies:
pip install fastmcp httpx pydantic uvicorn toon-mcp-server - Run the server:
export KEILA_BASE_URL=http://keila-app:4000 export MCP_SERVER_PORT=80 python -m src.main
๐ณ Docker Deployment
Build and run the server using Docker:
docker build -t keila-mcp:latest .
docker run -d --name keila-mcp \
-e KEILA_BASE_URL="http://keila-app:4000" \
-e MCP_SERVER_PORT=80 \
-e ALLOW_ALL_AGGREGATE=false \
keila-mcp:latest
The MCP server serves at http://keila-mcp:80/mcp (Streamable HTTP).
โ ๏ธ Important Notes
- ๐
include_all_fieldsโ Theinclude_all_fieldsparameter (availableon allget_*andlist_*tools) controls whether all available fieldsare included in responses. Defaults toFalsefor performance; set toTrueonly when additional fields are needed. - ๐
ALLOW_ALL_AGGREGATEโ Controls whether aggregate listing tools respect theinclude_all_fieldsparameter. When set tofalse(default), all aggregate list operations silently return only default fields regardless of the caller's request. - โก TOON Compression โ All bulk list responses are automaticallycompressed using TOON to reduce token consumption by 30โ60%.
- ๐ Required Fields & Defaults โ Each
create_*tool requires specifickey fields. All other fields default to empty strings or reasonable values.
๐ ๏ธ API Tool Mapping
The server implements 34 MCP tools organized into the following categories:
๐ง Campaigns (7 tools)
list_all_campaignsโ List all campaign recordsget_campaign_by_idโ Get a single campaign by IDcreate_campaignโ Create a new campaignupdate_campaignโ Update an existing campaigndelete_campaign_by_idโ Delete a campaign by IDsend_campaignโ Queue a campaign for immediate deliveryschedule_campaignโ Schedule a campaign for future delivery
๐ฏ Segments (5 tools)
list_all_segmentsโ List all segment recordsget_segment_by_idโ Get a single segment by IDcreate_segmentโ Create a new segmentupdate_segmentโ Update an existing segmentdelete_segment_by_idโ Delete a segment by ID
๐ฅ Contacts (7 tools)
list_all_contactsโ List all contact recordsget_contact_by_idโ Get a single contact by ID, email, or external IDcreate_contactโ Create a new contactupdate_contactโ Update an existing contactdelete_contact_by_idโ Delete a contact by ID, email, or external IDupdate_contact_dataโ Shallow-merge custom data fields on a contactreplace_contact_dataโ Replace all custom data fields on a contact
๐ Forms (6 tools)
list_all_formsโ List all form recordsget_form_by_idโ Get a single form by IDcreate_formโ Create a new formupdate_formโ Update an existing formdelete_form_by_idโ Delete a form by IDsubmit_formโ Submit a form to create or update a contact
๐ Templates (5 tools)
list_all_templatesโ List all template recordsget_template_by_idโ Get a single template by IDcreate_templateโ Create a new templateupdate_templateโ Update an existing templatedelete_template_by_idโ Delete a template by ID
๐ ๏ธ Senders, Transactional Messages & System Tools (4 tools)
list_all_sendersโ List all sender recordssend_transactional_messageโ Send a transactional messagerender_transactional_messageโ Render a transactional message without sending itcheck_server_statusโ Check connectivity to the Keila backend