MCP Aruba Email & Calendar Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IMAP_HOST | Yes | IMAP server hostname, e.g. imaps.aruba.it | |
| IMAP_PORT | Yes | IMAP server port, e.g. 993 | |
| SMTP_HOST | Yes | SMTP server hostname, e.g. smtps.aruba.it | |
| SMTP_PORT | Yes | SMTP server port, e.g. 465 | |
| CALDAV_URL | Yes | CalDAV calendar URL, e.g. https://syncdav.aruba.it/calendars/your_email@aruba.it/ | |
| IMAP_PASSWORD | Yes | IMAP password for your Aruba email account | |
| IMAP_USERNAME | Yes | IMAP username, typically your Aruba email address | |
| CALDAV_PASSWORD | Yes | CalDAV password for your Aruba calendar account | |
| CALDAV_USERNAME | Yes | CalDAV username, typically your Aruba email address |
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_emailsA | List emails from the specified folder. Args: folder: Mail folder to list from (default: INBOX) sender_filter: Optional filter by sender email address (e.g., "denisa@c-tic.it") limit: Maximum number of emails to return (default: 10, max: 50) Returns: List of email summaries with id, from, to, subject, date, and body preview Example: list_emails(sender_filter="denisa@c-tic.it", limit=5) |
| read_emailA | Read the full content of a specific email. Args: email_id: Email ID to read (from list_emails) folder: Mail folder (default: INBOX) Returns: Full email content with from, to, subject, date, and body Example: read_email(email_id="123") |
| search_emailsA | Search emails by subject or body content. Args: query: Search query string (searches in subject and body) folder: Mail folder to search in (default: INBOX) from_date: Only emails from this date onwards (format: DD-MMM-YYYY, e.g., "01-Dec-2024") limit: Maximum number of results (default: 10, max: 50) Returns: List of matching emails Example: search_emails(query="API", from_date="01-Dec-2024", limit=5) |
| get_email_attachmentsA | Get list of attachments for a specific email. Args: email_id: Email ID (from list_emails or search_emails) folder: Mail folder (default: INBOX) Returns: List of attachments with index, filename, content_type, and size Example: get_email_attachments(email_id="123") |
| download_attachmentA | Download a specific attachment from an email. Args: email_id: Email ID attachment_index: Index of attachment (from get_email_attachments, starting at 0) folder: Mail folder (default: INBOX) Returns: Dictionary with filename, content_type, size, and data_base64 (base64 encoded content) Example: download_attachment(email_id="123", attachment_index=0) Note: The attachment content is returned as base64 encoded string in 'data_base64' field. You can decode it and save to file. |
| save_attachmentA | Download an email attachment and save it directly to disk. This is the PREFERRED tool for attachments — saves the file and returns the local path so the user can open it immediately. No base64 decoding needed. Args: email_id: Email ID attachment_index: Index of attachment (from get_email_attachments, starting at 0) folder: Mail folder (default: INBOX) save_dir: Directory to save into (default: user's Downloads folder) Returns: Dictionary with filename, saved_path, content_type, and size Example: save_attachment(email_id="123", attachment_index=0) |
| get_raw_emailB | Get raw email content in RFC822 format for .eml export. Args: email_id: Email ID folder: Mail folder (default: INBOX) Returns: Dictionary with raw_content (RFC822 format string) Example: get_raw_email(email_id="123") Note: Save the raw_content to a .eml file to export the email. |
| send_emailA | Send a NEW email via SMTP (not a reply). For replying to an existing email thread, use reply_email() instead. Args: to: Recipient email address subject: Email subject body: Email body (plain text) cc: Optional CC email addresses (comma-separated) from_name: Sender display name (default: "" — uses email address only) attachments: Optional comma-separated file paths to attach (e.g., "/path/to/file.pdf,/path/to/image.png") Returns: Send status with details Example: send_email( to="christopher.caponi@emotion-team.com", subject="Ciao Christopher!", body="Come stai? Ti scrivo per...", attachments="/path/to/documento.pdf" ) |
| reply_emailA | Reply to an existing email, preserving the thread. Fetches the original email, extracts threading headers (Message-ID, References), and sends a reply that appears in the same conversation thread in the recipient's mail client. Args: email_id: Email ID to reply to (from list_emails) body: Reply body (plain text) cc: Optional CC email addresses (comma-separated) folder: Mail folder where the original email lives (default: INBOX) attachments: Optional comma-separated file paths to attach (e.g., "/path/to/file.pdf,/path/to/image.png") Returns: Send status with details Example: reply_email( email_id="123", body="Thank you for your email, here is the updated proposal.", attachments="/path/to/proposal.pdf" ) |
| check_bounced_emailsB | Check for bounced or failed email delivery notifications. This tool searches for delivery failure notifications (bounce-backs) that indicate emails could not be delivered. Common reasons include:
Args: folder: Mail folder to check (default: INBOX) limit: Maximum number of bounce notifications to check (default: 20) Returns: List of bounce notifications with failed recipient and reason Example: check_bounced_emails(limit=10) |
| set_email_signatureA | Create and save a professional email signature with optional photo and colors. The signature will be automatically appended to all sent emails. If photo_url or color are provided, an HTML signature will be created. Args: name: Full name (e.g., "Giacomo Fiorucci") email: Email address role: Job title/role (optional, e.g., "Software Developer") company: Company name (optional, e.g., "Emotion Team") phone: Phone number (optional, e.g., "+39 123 456 7890") photo_url: URL or local file path to profile photo (optional, auto-uploads if local file) color: Hex color code for accents (optional, e.g., "#0066cc", "#FF5722") style: Signature style - "professional", "minimal", "colorful" (default: "professional") signature_name: Name to save signature as (default: "default") Returns: Confirmation with signature preview Examples: # Simple text signature set_email_signature( name="Giacomo Fiorucci", email="giacomo.fiorucci@emotion-team.com", role="Software Developer", company="Emotion Team" ) |
| get_email_signatureA | Get a saved email signature. Args: signature_name: Name of signature to retrieve (default: "default") Returns: Signature content or error Example: get_email_signature() |
| list_email_signaturesA | List all saved email signatures. Returns: Dictionary of all signatures Example: list_email_signatures() |
| create_calendar_eventB | Create a new calendar event. Args: summary: Event title start: Start datetime in ISO format (e.g., "2025-12-05T10:00:00") end: End datetime in ISO format (e.g., "2025-12-05T11:00:00") description: Event description (optional) location: Event location (optional) attendees: Comma-separated list of attendee email addresses (optional) Returns: Created event details including UID Example: create_calendar_event( summary="Team Meeting", start="2025-12-05T10:00:00", end="2025-12-05T11:00:00", description="Discussione sui nuovi progetti", location="Sala Riunioni A", attendees="christopher.caponi@emotion-team.com,marco.rossi@example.com" ) |
| list_calendar_eventsB | List calendar events within a date range. Args: start_date: Start date in ISO format (default: today) end_date: End date in ISO format (default: 30 days from now) limit: Maximum number of events to return (default: 50) Returns: List of calendar events Example: list_calendar_events( start_date="2025-12-01T00:00:00", end_date="2025-12-31T23:59:59", limit=20 ) |
| accept_calendar_eventB | Accept a calendar event invitation. Args: event_uid: UID of the event to accept comment: Optional comment for the acceptance Returns: Response status Example: accept_calendar_event( event_uid="abc123@aruba.it", comment="Ci sarò!" ) |
| decline_calendar_eventA | Decline a calendar event invitation. Args: event_uid: UID of the event to decline comment: Optional comment for the decline Returns: Response status Example: decline_calendar_event( event_uid="abc123@aruba.it", comment="Purtroppo non posso partecipare" ) |
| tentative_calendar_eventB | Mark a calendar event as tentative (maybe attending). Args: event_uid: UID of the event comment: Optional comment Returns: Response status Example: tentative_calendar_event( event_uid="abc123@aruba.it", comment="Forse riesco a partecipare" ) |
| delete_calendar_eventC | Delete a calendar event. Args: event_uid: UID of the event to delete Returns: Deletion status Example: delete_calendar_event(event_uid="abc123@aruba.it") |
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 19 tools
Most tools target clearly distinct resources and actions (list/read/search email, create/list/respond/delete event). The one real overlap is download_attachment vs save_attachment, which both fetch an attachment's bytes; the description mitigates this by declaring save_attachment preferred, but an agent could still hesitate. read_email vs get_raw_email is also a mild boundary case.
Nearly all tools follow a snake_case verb_noun pattern (accept_calendar_event, list_emails, set_email_signature). Verb choices vary slightly (read_email vs get_email_attachments vs list_email_signatures), but the convention remains readable and predictable.
19 tools is at the upper edge of the ideal range but each maps to a real operation across two domains (email and calendar). The three signature tools (set/get/list) are the least essential and inflate the count slightly.
Email coverage is strong (send, reply, list, read, search, attachments, raw export, bounces, signatures) and calendar covers create/list and all RSVP actions plus delete. Gaps remain: no update_calendar_event, no way to list mail folders (leaving the folder parameter a dead end), and no delete/move/forward for email.