iMail-mcp
Retrieve Mail from icloud
README
iCloud Mail MCP Server
<a href="https://glama.ai/mcp/servers/@Racimy/iMail-mcp"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@Racimy/iMail-mcp/badge" /> </a>
A Model Context Protocol (MCP) server for integrating with iCloud Mail using App Password authentication. This server provides tools to read, send, and manage emails through iCloud's IMAP and SMTP services.
Development logs for this project are being shared on Hack Club's Summer of Making. Check it out to follow the development journey!
Features
- Secure Authentication: Uses App-specific passwords for secure iCloud Mail access
- Email Management: Read, send, and organize emails
- Mailbox Operations: List mailboxes, mark messages as read
- Attachment Support: Handle email attachments
- MCP Integration: Seamless integration with MCP-compatible clients
Prerequisites
- iCloud Account: You need an active iCloud account with Mail enabled
- App Password: Generate an app-specific password for Mail access:
- Sign in to appleid.apple.com
- Go to "Sign-In and Security" > "App-Specific Passwords"
- Generate a new password for "Mail"
- Save this password securely
Installation
# Clone the repository
git clone https://github.com/minagishl/icloud-mail-mcp.git
cd icloud-mail-mcp
# Install dependencies using pnpm
pnpm install
# Build the project
pnpm run build
Configuration
The server requires environment variables to be set for authentication. Configuration is done through your MCP client settings:
Environment Variables (Required)
Add to your MCP server configuration:
{
"icloud-mail-mcp": {
"command": "node",
"args": ["/path/to/icloud-mail-mcp/dist/index.js"],
"env": {
"ICLOUD_EMAIL": "your-email@icloud.com",
"ICLOUD_APP_PASSWORD": "your-app-specific-password"
}
}
}
Available Tools
<details> <summary><strong>Click to view all available tools</strong></summary>
Email Operations
get_messages
Retrieve email messages from a specified mailbox.
Parameters:
mailbox(string, optional): Mailbox name (default: "INBOX")limit(number, optional): Maximum number of messages to retrieve (default: 10)unreadOnly(boolean, optional): Retrieve only unread messages (default: false)
send_email
Send an email through iCloud Mail.
Parameters:
to(string or array, required): Recipient email address(es)subject(string, required): Email subjecttext(string, optional): Plain text email bodyhtml(string, optional): HTML email body
mark_as_read
Mark email messages as read.
Parameters:
messageIds(array, required): Array of message IDs to mark as readmailbox(string, optional): Mailbox name (default: "INBOX")
move_messages
Move messages between mailboxes.
Parameters:
messageIds(array, required): Array of message IDs to movesourceMailbox(string, required): Source mailbox namedestinationMailbox(string, required): Destination mailbox name
search_messages
Search for messages using various criteria.
Parameters:
query(string, optional): Search query text (searches in subject, from, body)mailbox(string, optional): Mailbox name (default: "INBOX")limit(number, optional): Maximum number of messages to retrieve (default: 10)dateFrom(string, optional): Start date for search (YYYY-MM-DD format)dateTo(string, optional): End date for search (YYYY-MM-DD format)fromEmail(string, optional): Filter by sender email addressunreadOnly(boolean, optional): Search only unread messages (default: false)
delete_messages
Delete messages from a mailbox.
Parameters:
messageIds(array, required): Array of message IDs to deletemailbox(string, optional): Mailbox name (default: "INBOX")
set_flags
Set flags on messages (read, unread, flagged, etc.).
Parameters:
messageIds(array, required): Array of message IDs to set flags onflags(array, required): Array of flags to set (e.g., ["\Seen", "\Flagged"])mailbox(string, optional): Mailbox name (default: "INBOX")action(string, optional): Whether to "add" or "remove" the flags (default: "add")
download_attachment
Download an attachment from a specific message.
Parameters:
messageId(string, required): Message ID containing the attachmentattachmentIndex(number, optional): Index of the attachment to download (0-based, default: 0)mailbox(string, optional): Mailbox name (default: "INBOX")
auto_organize
Automatically organize emails based on rules (sender, subject keywords, etc.).
Parameters:
rules(array, required): Array of organization rules with conditions and actionssourceMailbox(string, optional): Source mailbox to organize (default: "INBOX")dryRun(boolean, optional): If true, only shows what would be organized without moving emails (default: false)
Rule Structure:
{
"name": "Rule name",
"condition": {
"fromContains": "sender keyword",
"subjectContains": "subject keyword"
},
"action": {
"moveToMailbox": "destination folder"
}
}
Mailbox Management
get_mailboxes
List all available mailboxes in your iCloud Mail account.
Parameters: None
create_mailbox
Create a new mailbox (folder) in your iCloud Mail account.
Parameters:
name(string, required): Name of the mailbox to create
delete_mailbox
Delete an existing mailbox (folder) from your iCloud Mail account.
Parameters:
name(string, required): Name of the mailbox to delete
Safety Features:
- Prevents deletion of system mailboxes (INBOX, Sent, Trash, Drafts, Junk)
- Validates mailbox name input
- Provides detailed error messages for common issues
System Tools
test_connection
Test the email server connection to verify IMAP and SMTP connectivity.
Parameters: None
check_config
Check if environment variables are properly configured and show connection status.
Parameters: None
</details>
Usage Example
<details> <summary><strong>Click to view usage examples</strong></summary>
Getting Started
Start the MCP server:
# With environment variables (recommended)
ICLOUD_EMAIL="your-email@icloud.com" ICLOUD_APP_PASSWORD="your-app-password" pnpm run start
# Or start normally and configure manually
pnpm run start
Email Operations
Get recent messages:
{
"tool": "get_messages",
"arguments": {
"limit": 5,
"unreadOnly": true
}
}
Send an email:
{
"tool": "send_email",
"arguments": {
"to": "recipient@example.com",
"subject": "Hello from MCP",
"text": "This email was sent using the iCloud Mail MCP server!"
}
}
Move messages between mailboxes:
{
"tool": "move_messages",
"arguments": {
"messageIds": ["message-id-1", "message-id-2"],
"sourceMailbox": "INBOX",
"destinationMailbox": "My Custom Folder"
}
}
Mailbox Management
Create a new mailbox:
{
"tool": "create_mailbox",
"arguments": {
"name": "My Custom Folder"
}
}
Delete a mailbox:
{
"tool": "delete_mailbox",
"arguments": {
"name": "My Custom Folder"
}
}
System Tools
Test connection:
{
"tool": "test_connection",
"arguments": {}
}
Check configuration:
{
"tool": "check_config",
"arguments": {}
}
</details>
Security Notes
- App Passwords: Always use app-specific passwords, never your main iCloud password
- Secure Storage: Store your app password securely and never commit it to version control
- Connection Security: All connections use TLS/SSL encryption
- Minimal Permissions: The server only accesses Mail functionality
Development
# Install dependencies
pnpm install
# Run in development mode
pnpm run dev
# Build the project
pnpm run build
# Type checking
pnpm run typecheck
# Run tests
pnpm run test
# Run linting
pnpm run lint
Testing
This project includes comprehensive test coverage using Vitest. The test suite covers:
Test Structure
- Total Tests: 29 tests across 3 test files
- Framework: Vitest with TypeScript support
- Coverage: Core functionality, type definitions, and configuration
Test Categories
1. Core Client Tests (src/lib/icloud-mail-client.test.ts)
- Constructor validation: Tests client creation with various configurations
- Email name extraction: Tests handling of different email formats
- Basic functionality: Tests core client behavior and configuration validation
2. Type Definition Tests (src/types/config.test.ts)
- iCloudConfig: Tests configuration object structure
- EmailMessage: Tests email message data types
- SendEmailOptions: Tests email sending parameter validation
- SearchOptions: Tests search parameter structures
- OrganizationRule: Tests email organization rule definitions
- Attachment: Tests attachment data structures
3. Server Configuration Tests (src/index.test.ts)
- Environment variables: Tests handling of configuration environment variables
- Credential masking: Tests security functions for hiding sensitive data
- Config validation: Tests basic configuration validation logic
Running Tests
# Run all tests once
pnpm run test:run
# Run tests in watch mode (interactive)
pnpm run test
# Run tests with UI interface
pnpm run test:ui
Test Features
- Type Safety: All tests are written in TypeScript without using
any - Mocking: External dependencies (IMAP, SMTP) are properly mocked
- Coverage: Tests cover both happy path and edge cases
- Isolation: Each test is independent and properly cleaned up
- Real-world scenarios: Tests reflect actual usage patterns
Troubleshooting
Authentication Issues
- Verify your app password is correct and hasn't expired
- Ensure two-factor authentication is enabled on your iCloud account
- Check that Mail is enabled in your iCloud settings
Connection Problems
- Verify internet connectivity
- Check if iCloud Mail servers are accessible
- Ensure firewall settings allow connections to imap.mail.me.com and smtp.mail.me.com
Email Not Sending
- Verify SMTP settings and authentication
- Check recipient email addresses are valid
- Ensure you're not hitting rate limits
iCloud Mail Server Settings
The server uses the following default settings for iCloud Mail:
- IMAP Server: imap.mail.me.com (Port: 993, SSL: Yes)
- SMTP Server: smtp.mail.me.com (Port: 587, TLS: Yes)
License
This project is licensed under the MIT License - see the LICENSE file for details.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。