Revise contacts and email tools
All checks were successful
Build And Test / publish (push) Successful in 48s
All checks were successful
Build And Test / publish (push) Successful in 48s
This commit is contained in:
34
README.md
34
README.md
@@ -4,7 +4,7 @@ A self-hosted MCP server that connects IMAP/SMTP, CalDAV, and CardDAV to MCP-com
|
||||
|
||||
## Features
|
||||
|
||||
- Email tools over IMAP/SMTP (list, read, search, send, drafts, flags, unsubscribe)
|
||||
- Email tools over IMAP/SMTP (list, read, search, drafts, send drafts, flags, unsubscribe)
|
||||
- Calendar tools over CalDAV (list, create, update, delete)
|
||||
- Contacts tools over CardDAV (list, create, update, delete)
|
||||
- Optional email notifications via webhook with IMAP IDLE or polling
|
||||
@@ -94,8 +94,11 @@ ICS_CALENDAR_TIMEOUT=20
|
||||
CARDDAV_URL=https://carddav.example.com/dav
|
||||
CARDDAV_USERNAME=you@example.com
|
||||
CARDDAV_PASSWORD=your-password
|
||||
CONTACTS_ADDRESSBOOK_ID=/dav/addressbooks/users/you@example.com/contacts/
|
||||
```
|
||||
|
||||
Contacts tools always use `CONTACTS_ADDRESSBOOK_ID`. Listing address books is not exposed via MCP.
|
||||
|
||||
ICS calendars are optional and read-only. Set `ICS_CALENDARS` to a comma-separated list of entries, each as `name|url` or just `url` if you want the name inferred.
|
||||
|
||||
### Email notifications (Poke webhook)
|
||||
@@ -145,32 +148,47 @@ Add your MCP endpoint at https://poke.com/settings/connections.
|
||||
|
||||
| Category | Tools |
|
||||
| --- | --- |
|
||||
| Email | `list_mailboxes`, `list_emails`, `list_drafts`, `read_email`, `search_emails`, `move_email`, `delete_email`, `delete_draft`, `save_draft`, `edit_draft`, `send_email`, `set_email_flags`, `unsubscribe_email` |
|
||||
| Email | `list_mailboxes`, `list_emails`, `list_drafts`, `read_email`, `search_emails`, `move_email`, `delete_email`, `delete_draft`, `save_draft`, `edit_draft`, `send_draft`, `set_email_flags`, `unsubscribe_maillist` |
|
||||
| Calendar | `list_calendars`, `list_events`, `get_event`, `create_event`, `update_event`, `delete_event` |
|
||||
| Contacts | `list_addressbooks`, `list_contacts`, `get_contact`, `create_contact`, `update_contact`, `delete_contact` |
|
||||
| Contacts | `list_contacts`, `get_contact`, `create_contact`, `update_contact`, `delete_contact` |
|
||||
| System | `get_server_info` |
|
||||
|
||||
### Sending email
|
||||
|
||||
Emails are sent only from drafts. Create or edit a draft with `save_draft`/`edit_draft`, then send it with `send_draft` using the returned draft ID.
|
||||
|
||||
### Replying to an email
|
||||
|
||||
Use `reply_to_email_id` on `save_draft`, `edit_draft`, or `send_email` to create a reply without a separate tool.
|
||||
Use `in_reply_to_email_id` on `save_draft` or `edit_draft` to create a reply without a separate tool. Then send it with `send_draft`.
|
||||
|
||||
- Provide `reply_to_email_id` (and optionally `reply_mailbox`, default `INBOX`).
|
||||
- Provide `in_reply_to_email_id` (and optionally `in_reply_to_mailbox`, default `INBOX`).
|
||||
- `reply_all=true` includes original recipients; otherwise it replies to the sender/Reply-To.
|
||||
- If `to`/`subject` are omitted, they are derived from the original email; `body` is still required.
|
||||
- `in_reply_to_email_id` is the email UID from `list_emails`/`read_email`, not the RFC Message-ID header.
|
||||
|
||||
Example (send a reply):
|
||||
```json
|
||||
{
|
||||
"tool": "send_email",
|
||||
"tool": "save_draft",
|
||||
"args": {
|
||||
"reply_to_email_id": "12345",
|
||||
"reply_mailbox": "INBOX",
|
||||
"in_reply_to_email_id": "12345",
|
||||
"in_reply_to_mailbox": "INBOX",
|
||||
"reply_all": true,
|
||||
"body": "Thanks — sounds good to me."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then send the draft by its returned ID:
|
||||
```json
|
||||
{
|
||||
"tool": "send_draft",
|
||||
"args": {
|
||||
"email_id": "67890"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Database and Migrations
|
||||
|
||||
The server uses SQLite (default: `/data/cache.db`) and Alembic.
|
||||
|
||||
Reference in New Issue
Block a user