@agenticmail/mcp 0.5.42 → 0.5.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/REFERENCE.md +87 -791
  2. package/package.json +1 -1
package/REFERENCE.md CHANGED
@@ -1,843 +1,139 @@
1
- # @agenticmail/mcpTechnical Reference
1
+ # AgenticMail MCP Server Tool Reference
2
2
 
3
- Complete technical reference for the AgenticMail MCP server. Lists every tool, resource, input schema, and behavioral detail.
3
+ > **62 tools** available via MCP stdio transport (`@agenticmail/mcp`)
4
4
 
5
5
  ---
6
6
 
7
- ## Server Configuration
8
-
9
- | Property | Value |
10
- |----------|-------|
11
- | Name | `AgenticMail` |
12
- | Version | `0.2.26` |
13
- | Description | `Email infrastructure for AI agents — by Ope Olatunji` |
14
- | Transport | `StdioServerTransport` (stdin/stdout) |
15
- | Capabilities | Tools, Resources |
16
- | SDK | `@modelcontextprotocol/sdk ^1.12.0` |
17
-
18
- ## Environment Variables
19
-
20
- | Variable | Default | Description |
21
- |----------|---------|-------------|
22
- | `AGENTICMAIL_API_URL` | `http://127.0.0.1:3100` | API server URL |
23
- | `AGENTICMAIL_API_KEY` | `''` | Agent API key |
24
- | `AGENTICMAIL_MASTER_KEY` | `''` | Master key (for admin tools) |
25
-
26
- ## API Request Function
27
-
28
- ```typescript
29
- async function apiRequest(
30
- method: string,
31
- path: string,
32
- body?: unknown,
33
- useMasterKey = false,
34
- timeoutMs = 30_000
35
- ): Promise<any>
36
- ```
37
-
38
- - Base URL: `${API_URL}/api/agenticmail${path}`
39
- - Auth: `Authorization: Bearer ${useMasterKey && MASTER_KEY ? MASTER_KEY : API_KEY}`
40
- - Content-Type: `application/json` (only when body provided)
41
- - Timeout: `AbortSignal.timeout(timeoutMs)`
42
- - Error: Reads response text, throws `Error: API error {status}: {text}`
43
- - Response: Parses JSON if Content-Type includes `application/json`, returns `null` otherwise
44
-
45
- ## Master Key Tools
46
-
47
- These tools automatically use the master key instead of the agent key:
48
-
49
- ```
50
- create_account, setup_email_relay, setup_email_domain, setup_guide,
51
- setup_gmail_alias, setup_payment, purchase_domain, check_gateway_status,
52
- send_test_email, delete_agent, deletion_reports, cleanup_agents
53
- ```
7
+ ## Core
54
8
 
55
- ---
56
-
57
- ## Tool Definitions
58
-
59
- ### send_email
60
-
61
- Send email from agent's mailbox. External emails scanned for sensitive content.
62
-
63
- **Input Schema:**
64
- | Field | Type | Required | Description |
65
- |-------|------|----------|-------------|
66
- | `to` | string | Yes | Recipient email |
67
- | `subject` | string | Yes | Email subject |
68
- | `text` | string | No | Plain text body |
69
- | `html` | string | No | HTML body |
70
- | `cc` | string | No | CC recipients |
71
- | `inReplyTo` | string | No | Message-ID for threading |
72
- | `references` | string | No | Reference chain |
73
- | `attachments` | array | No | File attachments |
74
-
75
- **Attachment schema:** `{ filename: string, content: string (required), contentType: string, encoding: string }`
76
-
77
- **Behavior:**
78
- - Posts to `POST /mail/send`
79
- - If blocked: Returns pending ID, schedules follow-up reminders
80
- - If sent with warnings: Returns message ID + warnings
81
- - If clean: Returns message ID
82
-
83
- ---
84
-
85
- ### list_inbox
86
-
87
- **Input Schema:**
88
- | Field | Type | Required | Default | Range |
89
- |-------|------|----------|---------|-------|
90
- | `limit` | number | No | 20 | 1–100 |
91
- | `offset` | number | No | 0 | 0+ |
92
-
93
- **Behavior:** `GET /mail/inbox?limit=N&offset=N`
94
-
95
- **Response format:** `"UID: {uid} | From: {address} | Subject: {subject} | Date: {date}"` per message.
96
-
97
- ---
98
-
99
- ### read_email
100
-
101
- **Input Schema:**
102
- | Field | Type | Required |
103
- |-------|------|----------|
104
- | `uid` | number | Yes (positive integer) |
105
-
106
- **Behavior:** `GET /mail/messages/{uid}`
107
-
108
- **Response format:** Multi-line with From, To, Subject, Date, Message-ID, In-Reply-To, body text, attachments list, security section (spam score, sanitization, attachment warnings, phishing alerts).
109
-
110
- **Security section includes:**
111
- - `[SPAM]` or `[WARNING]` with score and category
112
- - `[SANITIZED]` with detection types
113
- - Attachment risk levels: `[CRITICAL]` (double extensions), `[HIGH]` (executables, HTML), `[MEDIUM]` (archives)
114
- - Phishing rule matches: `ph_mismatched_display_url`, `ph_data_uri`, `ph_homograph`, `ph_spoofed_sender`, `de_webhook_exfil`, `pi_invisible_unicode`
115
-
116
- ---
117
-
118
- ### reply_email
119
-
120
- **Input Schema:**
121
- | Field | Type | Required | Default |
122
- |-------|------|----------|---------|
123
- | `uid` | number | Yes | — |
124
- | `text` | string | Yes | — |
125
- | `html` | string | No | — |
126
- | `replyAll` | boolean | No | false |
127
-
128
- **Behavior:**
129
- 1. `GET /mail/messages/{uid}` — fetch original
130
- 2. Build reply: `Re: {subject}`, `In-Reply-To: {messageId}`, `References: {chain}`
131
- 3. If `replyAll`: includes all original recipients
132
- 4. Appends quoted body: `\n\n--- Original message ---\n{original text}`
133
- 5. `POST /mail/send` with threading headers
134
-
135
- ---
136
-
137
- ### forward_email
138
-
139
- **Input Schema:**
140
- | Field | Type | Required |
141
- |-------|------|----------|
142
- | `uid` | number | Yes |
143
- | `to` | string | Yes |
144
- | `text` | string | No |
145
-
146
- **Behavior:**
147
- 1. Fetch original message
148
- 2. Build forward: `Fwd: {subject}`
149
- 3. Body: `{optional text}\n\n--- Forwarded message ---\n{original text}`
150
- 4. Preserves original attachments as base64
151
- 5. `POST /mail/send`
152
-
153
- ---
154
-
155
- ### search_emails
156
-
157
- **Input Schema:**
158
- | Field | Type | Required | Description |
159
- |-------|------|----------|-------------|
160
- | `from` | string | No | Sender filter |
161
- | `to` | string | No | Recipient filter |
162
- | `subject` | string | No | Subject filter |
163
- | `text` | string | No | Body text search |
164
- | `since` | string | No | ISO 8601 date (after) |
165
- | `before` | string | No | ISO 8601 date (before) |
166
- | `seen` | boolean | No | Read status filter |
167
- | `searchRelay` | boolean | No | Also search relay account (default: false) |
168
-
169
- **Behavior:** `POST /mail/search`
170
-
171
- **Response:** Local UIDs + relay results (if enabled) with `uid, source, account, messageId, subject, from, to, date, flags`.
172
-
173
- ---
174
-
175
- ### import_relay_email
176
-
177
- **Input Schema:**
178
- | Field | Type | Required |
179
- |-------|------|----------|
180
- | `uid` | number | Yes |
181
-
182
- **Behavior:** `POST /mail/import-relay` — imports email from connected relay into local inbox.
183
-
184
- ---
185
-
186
- ### delete_email
187
-
188
- **Input Schema:** `{ uid: number (required, positive integer) }`
189
-
190
- **Behavior:** `DELETE /mail/messages/{uid}`
191
-
192
- ---
193
-
194
- ### move_email
195
-
196
- **Input Schema:**
197
- | Field | Type | Required | Default |
198
- |-------|------|----------|---------|
199
- | `uid` | number | Yes | — |
200
- | `to` | string | Yes | — |
201
- | `from` | string | No | "INBOX" |
202
-
203
- **Behavior:** `POST /mail/messages/{uid}/move`
204
-
205
- ---
206
-
207
- ### mark_read
208
-
209
- **Input Schema:** `{ uid: number (required) }`
210
-
211
- **Behavior:** `POST /mail/messages/{uid}/seen`
212
-
213
- ---
214
-
215
- ### mark_unread
216
-
217
- **Input Schema:** `{ uid: number (required) }`
218
-
219
- **Behavior:** `POST /mail/messages/{uid}/unseen`
220
-
221
- ---
222
-
223
- ### inbox_digest
224
-
225
- **Input Schema:**
226
- | Field | Type | Default | Range |
227
- |-------|------|---------|-------|
228
- | `limit` | number | 20 | 1–50 |
229
- | `offset` | number | 0 | 0+ |
230
- | `folder` | string | "INBOX" | — |
231
- | `previewLength` | number | 200 | 50–500 |
232
-
233
- **Behavior:** `GET /mail/digest?limit=N&offset=N&folder=F&previewLength=N`
234
-
235
- **Response format:** Compact digest with `[*]` for unread, `[r]` for read, sender, subject, date, and text preview.
236
-
237
- ---
238
-
239
- ### wait_for_email
240
-
241
- **Input Schema:**
242
- | Field | Type | Default | Range |
243
- |-------|------|---------|-------|
244
- | `timeout` | number | 120 | 1–300 seconds |
245
-
246
- **Behavior:**
247
- 1. Opens SSE connection to `GET /events`
248
- 2. Listens for `new` (email) or `task` events
249
- 3. Falls back to polling if SSE unavailable
250
- 4. Uses `AbortController` for timeout
251
-
252
- **Response:**
253
- ```json
254
- {
255
- "arrived": true,
256
- "mode": "push",
257
- "eventType": "email",
258
- "timedOut": false,
259
- "uid": 123,
260
- "subject": "...",
261
- "from": "..."
262
- }
263
- ```
264
-
265
- ---
266
-
267
- ### list_folders
268
-
269
- **Behavior:** `GET /mail/folders`
270
-
271
- **Response:** Folder paths, one per line.
272
-
273
- ---
274
-
275
- ### list_folder
276
-
277
- **Input Schema:**
278
- | Field | Type | Required | Default | Range |
279
- |-------|------|----------|---------|-------|
280
- | `folder` | string | Yes | — | — |
281
- | `limit` | number | No | 20 | 1–100 |
282
- | `offset` | number | No | 0 | 0+ |
283
-
284
- **Behavior:** `GET /mail/folders/{folder}?limit=N&offset=N`
285
-
286
- ---
287
-
288
- ### Batch Operations
289
-
290
- All batch tools validate: `Array.isArray(uids) && uids.length > 0`
291
-
292
- **batch_delete:** `{ uids: number[], folder?: string }` → `POST /mail/batch/delete`
293
-
294
- **batch_mark_read:** `{ uids: number[], folder?: string }` → `POST /mail/batch/seen`
295
-
296
- **batch_mark_unread:** `{ uids: number[], folder?: string }` → `POST /mail/batch/unseen`
297
-
298
- **batch_move:** `{ uids: number[], to: string, from?: string }` → `POST /mail/batch/move`
299
-
300
- **batch_read:** `{ uids: number[], folder?: string }` → `POST /mail/batch/read`
301
- Returns 500-char preview per message.
302
-
303
- ---
304
-
305
- ### manage_contacts
306
-
307
- **Input Schema:**
308
- | Field | Type | Required |
309
- |-------|------|----------|
310
- | `action` | "list" \| "add" \| "delete" | Yes |
311
- | `email` | string | For "add" |
312
- | `name` | string | No (for "add") |
313
- | `id` | string | For "delete" |
314
-
315
- **API calls:** `GET /contacts`, `POST /contacts`, `DELETE /contacts/{id}`
316
-
317
- ---
318
-
319
- ### manage_drafts
320
-
321
- **Input Schema:**
322
- | Field | Type | Required |
323
- |-------|------|----------|
324
- | `action` | "list" \| "create" \| "update" \| "send" \| "delete" | Yes |
325
- | `to` | string | For "create" |
326
- | `subject` | string | For "create" |
327
- | `text` | string | For "create"/"update" |
328
- | `html` | string | No |
329
- | `id` | string | For "update"/"send"/"delete" |
330
-
331
- **API calls:** `GET /drafts`, `POST /drafts`, `PUT /drafts/{id}`, `POST /drafts/{id}/send`, `DELETE /drafts/{id}`
332
-
333
- ---
334
-
335
- ### manage_signatures
336
-
337
- **Input Schema:**
338
- | Field | Type | Required |
339
- |-------|------|----------|
340
- | `action` | "list" \| "create" \| "delete" | Yes |
341
- | `name` | string | For "create" |
342
- | `text` | string | For "create" |
343
- | `isDefault` | boolean | No |
344
- | `id` | string | For "delete" |
9
+ ### `whoami`
10
+ Get the current agent\.
345
11
 
346
- **API calls:** `GET /signatures`, `POST /signatures`, `DELETE /signatures/{id}`
12
+ ### `update_metadata`
13
+ Update the current agent\.
347
14
 
348
- ---
349
-
350
- ### manage_templates
351
-
352
- **Input Schema:**
353
- | Field | Type | Required |
354
- |-------|------|----------|
355
- | `action` | "list" \| "create" \| "delete" | Yes |
356
- | `name` | string | For "create" |
357
- | `subject` | string | For "create" |
358
- | `text` | string | For "create" |
359
- | `id` | string | For "delete" |
360
-
361
- **API calls:** `GET /templates`, `POST /templates`, `DELETE /templates/{id}`
362
-
363
- ---
364
-
365
- ### template_send
366
-
367
- **Input Schema:**
368
- | Field | Type | Required |
369
- |-------|------|----------|
370
- | `id` | string | Yes |
371
- | `to` | string | Yes |
372
- | `variables` | object | No |
373
- | `cc` | string | No |
374
- | `bcc` | string | No |
375
-
376
- **Behavior:** `POST /templates/{id}/send`
377
-
378
- Replaces `{{ variableName }}` patterns in subject and body.
379
-
380
- ---
381
-
382
- ### manage_scheduled
383
-
384
- **Input Schema:**
385
- | Field | Type | Required |
386
- |-------|------|----------|
387
- | `action` | "create" \| "list" \| "cancel" | Yes |
388
- | `to` | string | For "create" |
389
- | `subject` | string | For "create" |
390
- | `text` | string | For "create" |
391
- | `sendAt` | string | For "create" |
392
- | `html` | string | No |
393
- | `cc` | string | No |
394
- | `bcc` | string | No |
395
- | `id` | string | For "cancel" |
396
-
397
- **Supported `sendAt` formats:** ISO 8601, relative (`in 30 minutes`), named (`tomorrow 8am`), day-based (`next monday 9am`), human (`02-14-2026 3:30 PM EST`), casual (`tonight`).
398
-
399
- ---
400
-
401
- ### manage_tags
402
-
403
- **Input Schema:**
404
- | Field | Type | Required |
405
- |-------|------|----------|
406
- | `action` | "list" \| "create" \| "delete" \| "tag_message" \| "untag_message" \| "get_messages" \| "get_message_tags" | Yes |
407
- | `name` | string | For "create" |
408
- | `color` | string | No (hex, for "create") |
409
- | `id` | string | For "delete"/"tag_message"/"untag_message"/"get_messages" |
410
- | `uid` | number | For "tag_message"/"untag_message"/"get_message_tags" |
411
- | `folder` | string | No (for message operations) |
412
-
413
- **API calls:** `GET /tags`, `POST /tags`, `DELETE /tags/{id}`, `POST /tags/{id}/messages`, `DELETE /tags/{id}/messages/{uid}`, `GET /tags/{id}/messages`, `GET /messages/{uid}/tags`
414
-
415
- ---
416
-
417
- ### manage_rules
418
-
419
- **Input Schema:**
420
- | Field | Type | Required |
421
- |-------|------|----------|
422
- | `action` | "list" \| "create" \| "delete" | Yes |
423
- | `name` | string | For "create" |
424
- | `priority` | number | No (for "create") |
425
- | `conditions` | object | For "create" |
426
- | `actions` | object | For "create" |
427
- | `id` | string | For "delete" |
428
-
429
- **Conditions:** `from_contains`, `subject_contains`, `subject_regex`, `to_contains`, `has_attachment`
430
-
431
- **Actions:** `move_to`, `mark_read`, `delete`, `add_tags`
15
+ ## Email Management
432
16
 
433
- ---
434
-
435
- ### manage_spam
436
-
437
- **Input Schema:**
438
- | Field | Type | Required |
439
- |-------|------|----------|
440
- | `action` | "list" \| "report" \| "not_spam" \| "score" | Yes |
441
- | `uid` | number | For "report"/"not_spam"/"score" |
442
- | `folder` | string | No (for "report"/"score") |
443
- | `limit` | number | No (for "list") |
444
- | `offset` | number | No (for "list") |
445
-
446
- **API calls:** `GET /mail/spam`, `POST /mail/messages/{uid}/spam`, `POST /mail/messages/{uid}/not-spam`, `GET /mail/messages/{uid}/spam-score`
447
-
448
- ---
449
-
450
- ### manage_pending_emails
451
-
452
- **Input Schema:**
453
- | Field | Type | Required |
454
- |-------|------|----------|
455
- | `action` | "list" \| "view" \| "approve" \| "reject" | Yes |
456
- | `id` | string | For "view"/"approve"/"reject" |
457
-
458
- **Critical:** `approve` and `reject` actions are **explicitly blocked** — returns error message directing agent to notify the owner.
459
-
460
- **API calls:** `GET /mail/pending`, `GET /mail/pending/{id}`
461
-
462
- ---
463
-
464
- ### create_folder
17
+ ### `delete_email`
18
+ Delete an email by its UID.
465
19
 
466
- **Input Schema:** `{ name: string (required) }`
20
+ ### `mark_read`
21
+ Mark an email as read.
467
22
 
468
- **Behavior:** `POST /mail/folders`
23
+ ### `mark_unread`
24
+ Mark an email as unread.
469
25
 
470
- ---
26
+ ### `list_folder`
27
+ List messages in a specific folder.
471
28
 
472
- ### check_health
29
+ ### `create_folder`
30
+ Create a new mail folder for organizing emails.
473
31
 
474
- **Behavior:** `GET /health`
32
+ ## Drafts & Templates
475
33
 
476
- **Response:** Status message with API and Stalwart status.
34
+ ### `template_send`
35
+ Send an email using a saved template with variable substitution. Variables like {{name}} are replaced..
477
36
 
478
- ---
37
+ ## Batch Operations
479
38
 
480
- ### create_account
39
+ ### `batch_read`
40
+ Read multiple emails at once by UIDs. Returns full parsed content for each message in a single call..
481
41
 
482
- **Master key required.**
42
+ ### `batch_delete`
43
+ Delete multiple emails by UIDs.
483
44
 
484
- **Input Schema:**
485
- | Field | Type | Required | Description |
486
- |-------|------|----------|-------------|
487
- | `name` | string | Yes | Agent name |
488
- | `domain` | string | No | Default: localhost |
489
- | `role` | enum | No | secretary, assistant, researcher, writer, custom |
45
+ ### `batch_mark_read`
46
+ Mark multiple emails as read.
490
47
 
491
- **Behavior:** `POST /accounts`
48
+ ### `batch_mark_unread`
49
+ Mark multiple emails as unread.
492
50
 
493
- ---
51
+ ### `batch_move`
52
+ Move multiple emails to another folder.
494
53
 
495
- ### delete_agent
54
+ ## Agent Management
496
55
 
497
- **Master key required.**
56
+ ### `list_agents`
57
+ List all AI agents in the system with their email addresses and roles. Use this to discover which agents you can communicate with via message_agent..
498
58
 
499
- **Input Schema:**
500
- | Field | Type | Required |
501
- |-------|------|----------|
502
- | `name` | string | Yes |
503
- | `reason` | string | No |
59
+ ### `create_account`
60
+ Create a new agent email account (requires master API key).
504
61
 
505
- **Behavior:** Looks up agent by name, calls `DELETE /accounts/{id}?archive=true&reason={}&deletedBy=agent`
62
+ ### `delete_agent`
63
+ Delete an agent account. Archives all emails and generates a deletion report before removing the account permanently.
506
64
 
507
- ---
65
+ ### `deletion_reports`
66
+ List past agent deletion reports or retrieve a specific report by ID. Shows archived email summaries from deleted agents.
508
67
 
509
- ### deletion_reports
68
+ ## Agent Coordination
510
69
 
511
- **Master key required.**
70
+ ### `message_agent`
71
+ Send a message to another AI agent by name. The message is delivered to their email inbox.
512
72
 
513
- **Input Schema:**
514
- | Field | Type | Required |
515
- |-------|------|----------|
516
- | `id` | string | No (specific report) |
73
+ ### `call_agent`
74
+ Synchronous RPC: assign a task to another agent, notify them via email (wakes wait_for_email), and wait for the result. Times out after specified duration..
517
75
 
518
- **Behavior:** `GET /accounts/deletions` or `GET /accounts/deletions/{id}`
76
+ ### `check_messages`
77
+ Check for new unread messages from other agents or external senders. Returns a summary of pending communications.
519
78
 
520
- ---
79
+ ### `check_tasks`
80
+ Check for pending tasks assigned to you (or a specific agent) or tasks you assigned to others.
521
81
 
522
- ### cleanup_agents
82
+ ### `claim_task`
83
+ Claim a pending task assigned to you.
523
84
 
524
- **Master key required.**
85
+ ### `submit_result`
86
+ Submit the result for a claimed task, marking it as completed.
525
87
 
526
- **Input Schema:**
527
- | Field | Type | Required |
528
- |-------|------|----------|
529
- | `action` | "list_inactive" \| "cleanup" \| "set_persistent" | Yes |
530
- | `hours` | number | No (for list/cleanup) |
531
- | `dryRun` | boolean | No (for cleanup) |
532
- | `agentId` | string | For "set_persistent" |
533
- | `persistent` | boolean | For "set_persistent" |
88
+ ### `wait_for_email`
89
+ Wait for a new email or task notification using push notifications (SSE). Blocks until an email arrives, a task is assigned to you, or timeout is reached.
534
90
 
535
- ---
91
+ ## Contacts, Tags & Rules
536
92
 
537
- ### whoami
93
+ ## Security & Moderation
538
94
 
539
- **Behavior:** `GET /accounts/me`
95
+ ## Setup & Configuration
540
96
 
541
- **Response:** Name, email, role, ID, created date, metadata.
97
+ ### `setup_guide`
98
+ Get a comparison of email setup modes (Relay vs Domain) with difficulty levels, requirements, pros/cons, and step-by-step instructions. Show this to users who want to set up real internet email..
542
99
 
543
- ---
100
+ ### `setup_gmail_alias`
101
+ Get step-by-step instructions (with exact field values) to add an agent email as a Gmail "Send mail as" alias. Returns the Gmail settings URL and all field values.
544
102
 
545
- ### update_metadata
103
+ ### `setup_payment`
104
+ Get instructions for adding a payment method to Cloudflare (required before purchasing domains). Returns Option A (self-service link) and Option B (browser automation steps).
546
105
 
547
- **Input Schema:** `{ metadata: object (required) }`
106
+ ### `purchase_domain`
107
+ Search for available domains via Cloudflare Registrar (requires master API key). NOTE: Cloudflare API only supports READ access — domains must be purchased manually at https://dash.cloudflare.com or from another registrar (then point nameservers to Cloudflare)..
548
108
 
549
- **Behavior:** `PATCH /accounts/me`
109
+ ## SMS / Phone
550
110
 
551
- ---
552
-
553
- ### list_agents
554
-
555
- **Behavior:** `GET /accounts/directory`
111
+ ### `sms_setup`
112
+ Configure SMS/phone number access via Google Voice. The user must have a Google Voice account with SMS-to-email forwarding enabled.
556
113
 
557
- ---
558
-
559
- ### message_agent
114
+ ### `sms_send`
115
+ Send an SMS text message via Google Voice. Records the message and provides instructions for sending via Google Voice web interface.
560
116
 
561
- **Input Schema:**
562
- | Field | Type | Required | Description |
563
- |-------|------|----------|-------------|
564
- | `agent` | string | Yes | Target agent name |
565
- | `subject` | string | Yes | Email subject |
566
- | `text` | string | Yes | Message body |
567
- | `priority` | enum | No | normal, high, urgent |
117
+ ### `sms_messages`
118
+ List SMS messages (inbound and outbound). Use direction filter to see only received or sent messages..
568
119
 
569
- **Behavior:**
570
- 1. `GET /accounts/directory/{agent}` validate target exists
571
- 2. If priority=high: prefix `[HIGH] `
572
- 3. If priority=urgent: prefix `[URGENT] `
573
- 4. `POST /mail/send` to `{agent}@localhost`
120
+ ### `sms_check_code`
121
+ Check for recent verification/OTP codes received via SMS. Scans inbound SMS for common code patterns (6-digit, 4-digit, alphanumeric).
574
122
 
575
- ---
123
+ ### `sms_read_voice`
124
+ Get instructions and URL for reading SMS directly from Google Voice web (FASTEST method). Returns the voice.google.com URL and guidance for browser-based SMS reading.
576
125
 
577
- ### check_messages
126
+ ### `sms_record`
127
+ Record an SMS message read from Google Voice web or any other source. Saves to SMS database and extracts verification codes.
578
128
 
579
- **Behavior:** `GET /mail/inbox?limit=10`
129
+ ### `sms_parse_email`
130
+ Parse an SMS from a forwarded Google Voice email. Use this when you receive an email from Google Voice containing an SMS.
580
131
 
581
- **Response:** Summary of unread messages, tagged as `[agent]` or `[external]`.
132
+ ### `sms_config`
133
+ Get the current SMS/phone number configuration for this agent. Shows whether SMS is enabled, the phone number, and forwarding email..
582
134
 
583
- ---
584
-
585
- ### check_tasks
586
-
587
- **Input Schema:**
588
- | Field | Type | Required |
589
- |-------|------|----------|
590
- | `direction` | "incoming" \| "outgoing" | Yes |
591
- | `assignee` | string | No (for incoming only) |
592
-
593
- **Behavior:** `GET /tasks/pending?assignee={name}` or `GET /tasks/assigned`
594
-
595
- ---
596
-
597
- ### claim_task
598
-
599
- **Input Schema:** `{ id: string (required) }`
600
-
601
- **Behavior:** `POST /tasks/{id}/claim`
602
-
603
- ---
604
-
605
- ### submit_result
606
-
607
- **Input Schema:**
608
- | Field | Type | Required |
609
- |-------|------|----------|
610
- | `id` | string | Yes |
611
- | `result` | object | No |
612
-
613
- **Behavior:** `POST /tasks/{id}/result`
614
-
615
- ---
616
-
617
- ### call_agent
618
-
619
- **Input Schema:**
620
- | Field | Type | Required | Default | Range |
621
- |-------|------|----------|---------|-------|
622
- | `target` | string | Yes | — | — |
623
- | `task` | string | Yes | — | — |
624
- | `payload` | object | No | — | — |
625
- | `timeout` | number | No | 180 | 5–300 seconds |
626
-
627
- **Behavior:** `POST /tasks/rpc` — holds connection open, returns result or timeout.
628
-
629
- ---
630
-
631
- ### Gateway Tools
632
-
633
- **setup_email_relay** (master):
634
- ```
635
- { provider: "gmail"|"outlook"|"custom", email: string, password: string,
636
- smtpHost?: string, smtpPort?: number, imapHost?: string, imapPort?: number,
637
- agentName?: string, agentRole?: string, skipDefaultAgent?: boolean }
638
- ```
639
-
640
- **setup_email_domain** (master):
641
- ```
642
- { cloudflareToken: string, cloudflareAccountId: string,
643
- domain?: string, purchase?: { keywords: string[], tld?: string },
644
- gmailRelay?: { email: string, appPassword: string } }
645
- ```
646
-
647
- **setup_gmail_alias** (master):
648
- ```
649
- { agentEmail: string, agentDisplayName?: string }
650
- ```
651
-
652
- **setup_guide** (master): No input.
653
-
654
- **setup_payment** (master): No input.
655
-
656
- **purchase_domain** (master):
657
- ```
658
- { keywords: string[], tld?: string }
659
- ```
660
-
661
- **check_gateway_status** (master): No input.
662
-
663
- **send_test_email** (master):
664
- ```
665
- { to: string }
666
- ```
667
-
668
- ---
669
-
670
- ## Outbound Guard Rules
671
-
672
- ### PII Detection (18 rules)
673
-
674
- | Rule ID | Severity | Pattern |
675
- |---------|----------|---------|
676
- | `ob_ssn` | HIGH | `\b\d{3}-\d{2}-\d{4}\b` |
677
- | `ob_ssn_obfuscated` | HIGH | Obfuscated SSN variants |
678
- | `ob_credit_card` | HIGH | `\b(?:\d{4}[-\s]?){3}\d{4}\b` |
679
- | `ob_phone` | MEDIUM | Phone number patterns |
680
- | `ob_bank_routing` | HIGH | Routing/account numbers |
681
- | `ob_drivers_license` | HIGH | Driver's license patterns |
682
- | `ob_dob` | MEDIUM | Date of birth with keywords |
683
- | `ob_passport` | HIGH | Passport numbers |
684
- | `ob_tax_id` | HIGH | EIN/TIN patterns |
685
- | `ob_itin` | HIGH | ITIN patterns |
686
- | `ob_medicare` | HIGH | Medicare/Medicaid IDs |
687
- | `ob_immigration` | HIGH | Immigration A-numbers |
688
- | `ob_pin` | MEDIUM | PIN codes |
689
- | `ob_security_qa` | MEDIUM | Security Q&A patterns |
690
- | `ob_iban` | HIGH | IBAN patterns |
691
- | `ob_swift` | MEDIUM | SWIFT/BIC codes |
692
- | `ob_crypto_wallet` | HIGH | BTC/ETH/XMR wallet addresses |
693
- | `ob_wire_transfer` | HIGH | Wire transfer instructions |
694
-
695
- ### Credential Detection (19 rules)
696
-
697
- | Rule ID | Severity | Pattern |
698
- |---------|----------|---------|
699
- | `ob_api_key` | HIGH | API key patterns |
700
- | `ob_aws_key` | HIGH | `AKIA[A-Z0-9]{16}` |
701
- | `ob_password_value` | HIGH | Password field patterns |
702
- | `ob_private_key` | HIGH | PEM private key headers |
703
- | `ob_bearer_token` | HIGH | Bearer token patterns |
704
- | `ob_connection_string` | HIGH | DB connection strings |
705
- | `ob_github_token` | HIGH | GitHub token patterns |
706
- | `ob_stripe_key` | HIGH | Stripe key patterns |
707
- | `ob_jwt` | HIGH | JWT token patterns |
708
- | `ob_webhook_url` | HIGH | Slack/Discord webhook URLs |
709
- | `ob_env_block` | HIGH | Consecutive ENV variable lines |
710
- | `ob_seed_phrase` | HIGH | Crypto seed/recovery phrases |
711
- | `ob_2fa_codes` | HIGH | 2FA backup codes |
712
- | `ob_credential_pair` | HIGH | Username+password pairs |
713
- | `ob_oauth_token` | HIGH | OAuth tokens |
714
- | `ob_vpn_creds` | HIGH | VPN credentials |
715
-
716
- ### System Internals (3 rules)
717
-
718
- | Rule ID | Severity | Pattern |
719
- |---------|----------|---------|
720
- | `ob_private_ip` | MEDIUM | Private IP ranges (10.x, 172.16-31.x, 192.168.x) |
721
- | `ob_file_path` | MEDIUM | File paths (/home, /Users, /etc, C:\\) |
722
- | `ob_env_variable` | MEDIUM | Environment variable assignments |
723
-
724
- ### Owner Privacy (2 rules)
725
-
726
- | Rule ID | Severity | Pattern |
727
- |---------|----------|---------|
728
- | `ob_owner_info` | HIGH | Mentions of owner's personal info |
729
- | `ob_personal_reveal` | HIGH | Reveals about agent's creator/operator |
730
-
731
- ### Attachment Risk
732
-
733
- | Risk Level | Extensions |
734
- |------------|------------|
735
- | HIGH (keys) | `.pem`, `.key`, `.p12`, `.pfx`, `.env`, `.credentials`, `.keystore`, `.jks`, `.p8` |
736
- | MEDIUM (data) | `.db`, `.sqlite`, `.sqlite3`, `.sql`, `.csv`, `.tsv`, `.json`, `.yml`, `.yaml`, `.conf`, `.config`, `.ini` |
737
- | HIGH (exec) | `.exe`, `.bat`, `.cmd`, `.ps1`, `.sh`, `.msi`, `.scr`, `.com`, `.vbs`, `.js`, `.wsf`, `.hta`, `.cpl`, `.jar`, `.app`, `.dmg`, `.run` |
738
- | MEDIUM (archive) | `.zip`, `.rar`, `.7z`, `.tar`, `.gz`, `.bz2`, `.xz`, `.cab`, `.iso` |
739
- | CRITICAL | Double extensions (e.g., `.pdf.exe`) |
740
-
741
- ---
742
-
743
- ## Pending Email Follow-Up System
744
-
745
- ### Schedule
746
-
747
- | Step | Delay | Description |
748
- |------|-------|-------------|
749
- | 0 | 12 hours | First reminder |
750
- | 1 | 6 hours | Second reminder |
751
- | 2 | 3 hours | Third reminder |
752
- | 3 | 1 hour | Final reminder before cooldown |
753
- | — | 3 days | Cooldown period |
754
- | 4+ | Repeat cycle | Re-starts from 12 hours |
755
-
756
- ### Heartbeat
757
-
758
- Every 5 minutes, checks all tracked pending emails. If externally resolved, cancels reminders.
759
-
760
- ### API
761
-
762
- | Function | Description |
763
- |----------|-------------|
764
- | `scheduleFollowUp(pendingId, recipient, subject, checkFn)` | Start follow-ups |
765
- | `drainFollowUps()` | Get and clear queued notifications |
766
- | `cancelFollowUp(pendingId)` | Cancel specific email follow-ups |
767
- | `cancelAllFollowUps()` | Cancel all follow-ups |
768
- | `activeFollowUpCount()` | Count tracked emails |
769
-
770
- ### Message Templates
771
-
772
- **Interim (steps 0–2):**
773
- ```
774
- [FOLLOW-UP REMINDER {step+1}/{4}]
775
- Your blocked email to {recipient} (subject: "{subject}") is still pending owner approval.
776
- Please follow up with your owner — ask if they've reviewed the notification email.
777
- Next reminder in {nextDelayH} hour(s).
778
- Pending ID: {pendingId}
779
- ```
780
-
781
- **Final (step 3):**
782
- ```
783
- [FINAL FOLLOW-UP]
784
- Your blocked email to {recipient} (subject: "{subject}") is STILL pending approval.
785
- This is the last reminder before a 3-day cooldown. Please urgently remind your owner.
786
- Pending ID: {pendingId}
787
- ```
788
-
789
- **Cycle restart (after cooldown):**
790
- ```
791
- [FOLLOW-UP REMINDER — cycle {cycle+2}]
792
- Your blocked email to {recipient} has been pending for over {totalDays} days.
793
- Starting a new follow-up cycle. Please remind your owner.
794
- Pending ID: {pendingId}
795
- ```
796
-
797
- ---
798
-
799
- ## Resources
800
-
801
- | URI | Name | MIME Type | Description |
802
- |-----|------|-----------|-------------|
803
- | `agenticmail://inbox` | Agent Inbox | `text/plain` | 20 most recent inbox messages |
804
-
805
- **Format:** `{index}. UID: {uid} | From: {address} | Subject: {subject} | Date: {date}`
806
-
807
- ---
808
-
809
- ## Constants Summary
810
-
811
- | Constant | Value |
812
- |----------|-------|
813
- | Default API URL | `http://127.0.0.1:3100` |
814
- | API request timeout | 30,000ms |
815
- | list_inbox max limit | 100 |
816
- | list_folder max limit | 100 |
817
- | inbox_digest max limit | 50 |
818
- | inbox_digest max preview | 500 chars |
819
- | wait_for_email max timeout | 300 seconds |
820
- | wait_for_email default timeout | 120 seconds |
821
- | call_agent max timeout | 300 seconds |
822
- | call_agent default timeout | 180 seconds |
823
- | batch_read preview length | 500 chars |
824
- | Follow-up step delays | [12h, 6h, 3h, 1h] |
825
- | Follow-up cooldown | 3 days (259,200,000ms) |
826
- | Follow-up heartbeat | 5 minutes |
827
-
828
- ---
829
-
830
- ## Signal Handlers
831
-
832
- | Signal | Action |
833
- |--------|--------|
834
- | `SIGTERM` | Close server, exit 0 |
835
- | `SIGINT` | Close server, exit 0 |
836
-
837
- Shutdown errors are silently ignored.
838
-
839
- ---
135
+ ## Database Storage
840
136
 
841
- ## License
137
+ ### `storage`
138
+ Full database management system for agents. 28 actions: DDL (create/alter/drop/clone/rename tables & columns), DML (insert/upsert/query/aggregate/update/delete/truncate), indexing (create/list/drop/reindex), import/export (JSON/CSV, conflict handling), raw SQL, maintenance (stats/vacuum/analyze/explain), archiving.
842
139
 
843
- [MIT](./LICENSE) - Ope Olatunji ([@ope-olatunji](https://github.com/ope-olatunji))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticmail/mcp",
3
- "version": "0.5.42",
3
+ "version": "0.5.43",
4
4
  "description": "MCP server for AgenticMail — give any AI client real email and SMS capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",