Initial commit: MCP email server with IMAP/SMTP, CalDAV/CardDAV, conflict check
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY server.py .
|
||||
|
||||
ENV PORT=8000
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
@@ -0,0 +1,155 @@
|
||||
# MCP Email Server
|
||||
|
||||
A Dockerized, OpenAPI-based MCP email assistant for law firms and legal teams.
|
||||
|
||||
Integrates:
|
||||
- IMAP/SMTP email operations
|
||||
- Shared/public folder support
|
||||
- New-message tracking and flagging
|
||||
- Conflict check search
|
||||
- CalDAV/CardDAV (e.g., Nextcloud) for calendar and contacts
|
||||
- Triage guidance using personnel/chain-of-command
|
||||
|
||||
Designed to be consumed by LLMs via OpenAPI tool servers (e.g., Open WebUI).
|
||||
|
||||
## Quick start
|
||||
|
||||
1. Build:
|
||||
|
||||
docker build -t mcp-email-server /home/user/wall-o/mcp-email-server
|
||||
|
||||
2. Run (example):
|
||||
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-e IMAP_HOST=imap.example.com \
|
||||
-e IMAP_PORT=993 \
|
||||
-e IMAP_USE_SSL=true \
|
||||
-e IMAP_USERNAME="user@example.com" \
|
||||
-e IMAP_PASSWORD="secret" \
|
||||
-e SMTP_HOST=smtp.example.com \
|
||||
-e SMTP_PORT=587 \
|
||||
-e SMTP_USE_TLS=true \
|
||||
-e SMTP_USE_SSL=false \
|
||||
-e SMTP_USERNAME="user@example.com" \
|
||||
-e SMTP_PASSWORD="secret" \
|
||||
-e SMTP_FROM="user@example.com" \
|
||||
-e DEFAULT_CC="supervisor@example.com" \
|
||||
-e BUSINESS_DESCRIPTION="A law firm handling corporate and litigation matters." \
|
||||
-e PERSONNEL_JSON='[{"name":"Jane Doe","role":"Managing Partner","email":"jane@example.com","escalates_to":null},{"name":"John Smith","role":"Associate","email":"john@example.com","escalates_to":"Jane Doe"}]' \
|
||||
mcp-email-server
|
||||
|
||||
3. OpenAPI spec:
|
||||
|
||||
http://localhost:8000/openapi.json
|
||||
|
||||
4. Integrate with Open WebUI (OpenAPI tool server):
|
||||
|
||||
- Admin Settings → External Tools → Add Server
|
||||
- Type: OpenAPI
|
||||
- URL: http://<your-server>:8000/openapi.json
|
||||
|
||||
## Environment variables
|
||||
|
||||
Required for email:
|
||||
|
||||
- IMAP_HOST
|
||||
- IMAP_PORT
|
||||
- IMAP_USE_SSL
|
||||
- IMAP_USERNAME
|
||||
- IMAP_PASSWORD
|
||||
|
||||
- SMTP_HOST
|
||||
- SMTP_PORT
|
||||
- SMTP_USE_TLS
|
||||
- SMTP_USE_SSL
|
||||
- SMTP_USERNAME
|
||||
- SMTP_PASSWORD
|
||||
- SMTP_FROM
|
||||
|
||||
Optional email:
|
||||
|
||||
- DEFAULT_CC: Comma-separated CC addresses.
|
||||
- DEFAULT_BCC: Comma-separated BCC addresses.
|
||||
- BUSINESS_DESCRIPTION: Context for the LLM (e.g., firm description).
|
||||
- PERSONNEL_JSON: JSON array of personnel/chain-of-command:
|
||||
- Example:
|
||||
[
|
||||
{
|
||||
"name": "Jane Doe",
|
||||
"role": "Managing Partner",
|
||||
"email": "jane@example.com",
|
||||
"escalates_to": null
|
||||
},
|
||||
{
|
||||
"name": "John Smith",
|
||||
"role": "Associate",
|
||||
"email": "john@example.com",
|
||||
"escalates_to": "Jane Doe"
|
||||
}
|
||||
]
|
||||
- SCHEDULED_SEND_INTERVAL: Seconds between checks for scheduled emails (default: 10).
|
||||
|
||||
CalDAV/CardDAV (e.g., Nextcloud):
|
||||
|
||||
- DAV_BASE_URL: Base DAV URL (e.g., https://cloud.example.com/remote.php/dav)
|
||||
- DAV_USERNAME
|
||||
- DAV_PASSWORD
|
||||
- DAV_VERIFY_TLS: true/false (default: true)
|
||||
|
||||
Logging:
|
||||
|
||||
- LOG_LEVEL: e.g., INFO, DEBUG, ERROR (default: INFO)
|
||||
|
||||
## Tools (OpenAPI endpoints)
|
||||
|
||||
All endpoints are POST and return JSON.
|
||||
|
||||
Email:
|
||||
|
||||
- /list_folders
|
||||
- /search_messages
|
||||
- /get_new_messages
|
||||
- /sync_seen
|
||||
- /mark_as_read
|
||||
- /flag_message
|
||||
- /move_message
|
||||
- /copy_message
|
||||
- /apply_label
|
||||
- /remove_label
|
||||
- /list_labels
|
||||
- /get_unread_summary
|
||||
- /send_email
|
||||
- /reply_to_message
|
||||
- /forward_message
|
||||
- /save_draft
|
||||
- /list_attachments
|
||||
- /download_attachment
|
||||
- /search_attachments
|
||||
- /schedule_send
|
||||
- /export_conversation
|
||||
- /conflict_check_search
|
||||
- /get_triage_config
|
||||
|
||||
Contacts (CardDAV):
|
||||
|
||||
- /list_carddav_addressbooks
|
||||
- /search_carddav_contacts
|
||||
- /get_carddav_contact
|
||||
- /create_carddav_contact
|
||||
- /update_carddav_contact
|
||||
- /delete_carddav_contact
|
||||
|
||||
Calendar (CalDAV):
|
||||
|
||||
- /list_caldav_calendars
|
||||
- /search_caldav_events
|
||||
- /create_caldav_event
|
||||
- /update_caldav_event
|
||||
- /delete_caldav_event
|
||||
|
||||
## Notes
|
||||
|
||||
- IMAP operations use UIDs for stability.
|
||||
- Conflict check search scans subject lines across specified folders for given terms.
|
||||
- New-message tracking is in-memory per container instance.
|
||||
@@ -0,0 +1,4 @@
|
||||
fastapi==0.115.0
|
||||
uvicorn[standard]==0.34.0
|
||||
pydantic==2.10.0
|
||||
requests==2.32.0
|
||||
Reference in New Issue
Block a user