campaign_chest
AI Marketing Orchestrator Toolbox — 35 MCP tools for end-to-end campaign automation.
Integrates Hi.Events + Cal.com + Mautic into a single curated toolset designed for LangGraph agents running the deterministic campaign pipeline:
Create Event (Hi.Events) → Publish → Get ticket URL
→ Create Booking Page (Cal.com) → Get booking URL
→ Inject URLs into email templates (Mautic)
→ Create segment + drip campaign → Add contacts
Tool Inventory
Hi.Events: Ticketed Events (11 tools)
| Tool | Purpose | |------|---------| | hi_events_list_organizers | Get organizer_id before creating events | | hi_events_list | Check if event already exists | | hi_events_get | Get event details + construct public URL | | hi_events_create | Create event as DRAFT | | hi_events_update_settings | Set location, timezone, support_email | | hi_events_create_ticket | Create ticket type with price + quantity | | hi_events_create_capacity | Set total event capacity | | hi_events_publish | Publish event LIVE → URL becomes active | | hi_events_list_tickets | List ticket types + IDs | | hi_events_get_stats | Ticket sales, revenue, attendance rate | | hi_events_list_attendees | Who registered (for Mautic contact import) |
Cal.com: Consultation Booking (8 tools)
| Tool | Purpose | |------|---------| | calcom_get_profile | Get username + timezone for URL construction | | calcom_list_schedules | Pick schedule when creating event type | | calcom_list_event_types | Check existing consultation pages + get URLs | | calcom_get_event_type | Get booking URL after creation | | calcom_create_event_type | Create consultation booking page | | calcom_get_available_slots | Show host availability to agent/user | | calcom_create_booking | Programmatically create a booking | | calcom_list_bookings | Monitor incoming consultation bookings |
Mautic: Email Campaign (16 tools)
| Tool | Purpose | |------|---------| | mautic_list_contacts | Check who already exists | | mautic_get_contact | Verify contact details | | mautic_create_contact | Add prospect | | mautic_update_contact | Update contact fields | | mautic_list_segments | Check existing segments | | mautic_create_segment | Create campaign audience | | mautic_add_to_segment | Manual add — reliable (filter-based requires cron) | | mautic_list_emails | Check existing email templates | | mautic_create_email | Create email template with injected URLs | | mautic_update_email | Edit email content | | mautic_list_campaigns | Check existing campaigns | | mautic_create_campaign | Create drip campaign with event timeline | | mautic_get_campaign | Verify campaign state + published status | | mautic_list_campaign_contacts | Verify contacts entered campaign | | mautic_send_email | Direct send fallback (bypasses cron) | | mautic_add_to_campaign | Manually push contact into campaign |
Installation
cd /Users/ds/my-mcp-servers/campaign_chest
uv pip install -e ".[mcp]"
Environment Variables
| Variable | Service | Required | |----------|---------|----------| | HI_EVENTS_BASE_URL | Hi.Events | Yes | | HI_EVENTS_EMAIL | Hi.Events | Yes | | HI_EVENTS_PASSWORD | Hi.Events | Yes | | CALCOM_BASE_URL | Cal.com | No (default: https://api.cal.com) | | CALCOM_API_KEY | Cal.com | Yes | | MAUTIC_BASE_URL | Mautic | Yes | | MAUTIC_USERNAME | Mautic | Yes | | MAUTIC_PASSWORD | Mautic | Yes |
Claude Desktop Config
"campaign-chest": {
"command": "uv",
"args": ["--directory", "/Users/ds/my-mcp-servers/campaign_chest",
"run", "--extra", "mcp", "mcp_server.py"],
"env": {
"HI_EVENTS_BASE_URL": "https://events.brothersbit.com/api",
"HI_EVENTS_EMAIL": "...",
"HI_EVENTS_PASSWORD": "...",
"CALCOM_BASE_URL": "https://connect-api.marketfier.com",
"CALCOM_API_KEY": "...",
"MAUTIC_BASE_URL": "https://marketing.brothersbit.com",
"MAUTIC_USERNAME": "...",
"MAUTIC_PASSWORD": "..."
}
}
Key API Quirks
- Hi.Events:
location_detailscauses 500 on event create — always useupdate_settings()separately - Hi.Events: Public ticket URL:
{base_url without /api}/event/{id}/{slug} - Hi.Events: Products are returned via
/product-categories(not/productswhich 500s) - Cal.com: Slots use
start/endparams (NOTstartTime/endTime) - Mautic: Campaign
triggerMode: "date"causes 500 — use"immediate"or"interval"only - Mautic:
publishUpformat:"YYYY-MM-DD HH:MM:SS"(no T, no timezone offset) - Mautic: Campaign events need BOTH
parentfield ANDcanvasSettings.connections - Mautic: Use manual
add_to_segment()— filter-based segments require cron to process - Mautic:
emailType: "transactional"bypasses frequency rules (right for event invitations)






