agentmail-toolkit 0.3.0 → 0.4.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/util.ts","../src/toolkit.ts","../src/schemas.ts","../src/functions.ts","../src/tools.ts"],"sourcesContent":["import { AgentMailClient } from 'agentmail'\nimport { getDocumentProxy, extractText } from 'unpdf'\nimport JSZip from 'jszip'\n\nexport const safeFunc = async <T>(\n func: (client: AgentMailClient, args: Record<string, any>) => Promise<T>,\n client: AgentMailClient,\n args: Record<string, any>\n) => {\n try {\n return { isError: false, result: await func(client, args) }\n } catch (error) {\n if (error instanceof Error) return { isError: true, result: error.message }\n else return { isError: true, result: 'Unknown error' }\n }\n}\n\nexport function detectFileType(bytes: Uint8Array): string | undefined {\n // PDF: starts with %PDF (0x25 0x50 0x44 0x46)\n if (bytes[0] === 0x25 && bytes[1] === 0x50 && bytes[2] === 0x44 && bytes[3] === 0x46) {\n return 'application/pdf'\n }\n // ZIP (DOCX is a ZIP): starts with PK\\x03\\x04 (0x50 0x4B 0x03 0x04)\n if (bytes[0] === 0x50 && bytes[1] === 0x4b && bytes[2] === 0x03 && bytes[3] === 0x04) {\n return 'application/zip'\n }\n return undefined\n}\n\nexport async function extractPdfText(bytes: Uint8Array): Promise<string> {\n const pdf = await getDocumentProxy(bytes)\n const { text } = await extractText(pdf)\n return Array.isArray(text) ? text.join('\\n') : text\n}\n\nexport async function extractDocxText(bytes: Uint8Array): Promise<string | undefined> {\n const zip = await JSZip.loadAsync(bytes)\n const documentXml = await zip.file('word/document.xml')?.async('string')\n if (!documentXml) return undefined\n return documentXml\n .replace(/<w:p[^>]*>/g, '\\n')\n .replace(/<[^>]+>/g, '')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/g, '&')\n .replace(/&quot;/g, '\"')\n .replace(/&apos;/g, \"'\")\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n}\n","import { AgentMailClient } from 'agentmail'\n\nimport { type Tool, tools } from './tools.js'\n\nexport abstract class BaseToolkit<T> {\n protected readonly client: AgentMailClient\n protected readonly tools: Record<string, T> = {}\n\n constructor(client?: AgentMailClient) {\n this.client = client ?? new AgentMailClient()\n\n this.tools = tools.reduce(\n (acc, tool) => {\n acc[tool.name] = this.buildTool(tool)\n return acc\n },\n {} as Record<string, T>\n )\n }\n\n protected abstract buildTool(tool: Tool): T\n}\n\nexport abstract class ListToolkit<T> extends BaseToolkit<T> {\n public getTools(names?: string[]) {\n if (!names) return Object.values(this.tools)\n\n return names.reduce((acc, name) => {\n if (name in this.tools) acc.push(this.tools[name])\n return acc\n }, [] as T[])\n }\n}\n\nexport abstract class MapToolkit<T> extends BaseToolkit<T> {\n public getTools(names?: string[]) {\n if (!names) return this.tools\n\n return names.reduce(\n (acc, name) => {\n if (name in this.tools) acc[name] = this.tools[name]\n return acc\n },\n {} as Record<string, T>\n )\n }\n}\n","import { z } from 'zod'\n\nconst InboxIdSchema = z.string().describe('ID of inbox')\nconst ThreadIdSchema = z.string().describe('ID of thread')\nconst MessageIdSchema = z.string().describe('ID of message')\nconst AttachmentIdSchema = z.string().describe('ID of attachment')\nconst DraftIdSchema = z.string().describe('ID of draft')\n\nexport const ListItemsParams = z.object({\n limit: z.number().optional().default(10).describe('Max number of items to return'),\n pageToken: z.string().optional().describe('Page token for pagination'),\n})\n\nexport const GetInboxParams = z.object({\n inboxId: InboxIdSchema,\n})\n\nexport const CreateInboxParams = z.object({\n username: z.string().optional().describe('Username'),\n domain: z.string().optional().describe('Domain'),\n displayName: z.string().optional().describe('Display name'),\n clientId: z.string().optional().describe('Client-provided ID for idempotent creation'),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional()\n .describe('Custom metadata key-value pairs to attach to the inbox'),\n})\n\nexport const UpdateInboxParams = z.object({\n inboxId: InboxIdSchema,\n displayName: z.string().optional().describe('Display name'),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()]))\n .nullable()\n .optional()\n .describe('Metadata to merge into existing metadata. Set a key to null to remove it, or the whole field to null to clear all metadata'),\n})\n\nexport const ListInboxItemsParams = ListItemsParams.extend({\n inboxId: InboxIdSchema,\n labels: z.array(z.string()).optional().describe('Labels to filter items by'),\n before: z.string().pipe(z.coerce.date()).optional().describe('Filter items before datetime'),\n after: z.string().pipe(z.coerce.date()).optional().describe('Filter items after datetime'),\n ascending: z.boolean().optional().describe('Sort by oldest first instead of most recent first'),\n})\n\nexport const ListThreadsParams = ListInboxItemsParams.extend({\n senders: z.array(z.string()).optional().describe('Filter threads by senders (substring match; all values must match)'),\n recipients: z.array(z.string()).optional().describe('Filter threads by recipients (substring match; all values must match)'),\n subject: z.array(z.string()).optional().describe('Filter threads by subject (substring match; all values must match)'),\n includeSpam: z.boolean().optional().describe('Include threads in spam'),\n includeTrash: z.boolean().optional().describe('Include threads in trash'),\n})\n\nexport const SearchInboxItemsParams = ListItemsParams.extend({\n inboxId: InboxIdSchema,\n q: z.string().describe('Full-text search query'),\n before: z.string().pipe(z.coerce.date()).optional().describe('Filter items before datetime'),\n after: z.string().pipe(z.coerce.date()).optional().describe('Filter items after datetime'),\n})\n\nexport const GetThreadParams = z.object({\n inboxId: InboxIdSchema,\n threadId: ThreadIdSchema,\n})\n\nexport const UpdateThreadParams = GetThreadParams.extend({\n addLabels: z.array(z.string()).optional().describe('Labels to add'),\n removeLabels: z.array(z.string()).optional().describe('Labels to remove'),\n})\n\nexport const GetAttachmentParams = z.object({\n inboxId: InboxIdSchema,\n threadId: ThreadIdSchema,\n attachmentId: AttachmentIdSchema,\n})\n\nconst AttachmentSchema = z.object({\n filename: z.string().optional().describe('Filename'),\n content_id: z.string().optional().describe('Content ID for inline attachments'),\n content: z.string().optional().describe('Base64 encoded content'),\n url: z.url().optional().describe('URL'),\n})\n\nconst BaseMessageParams = z.object({\n inboxId: InboxIdSchema,\n text: z.string().optional().describe('Plain text body'),\n html: z.string().optional().describe('HTML body'),\n labels: z.array(z.string()).optional().describe('Labels'),\n attachments: z.array(AttachmentSchema).optional().describe('Attachments'),\n})\n\nexport const SendMessageParams = BaseMessageParams.extend({\n to: z.array(z.string()).describe('Recipients'),\n cc: z.array(z.string()).optional().describe('CC recipients'),\n bcc: z.array(z.string()).optional().describe('BCC recipients'),\n subject: z.string().optional().describe('Subject'),\n replyTo: z.array(z.string()).optional().describe('Reply-to addresses'),\n})\n\nexport const ReplyToMessageParams = BaseMessageParams.extend({\n messageId: MessageIdSchema,\n replyAll: z.boolean().optional().describe('Reply to all recipients'),\n to: z.array(z.string()).optional().describe('Override reply recipients'),\n cc: z.array(z.string()).optional().describe('Override CC recipients'),\n bcc: z.array(z.string()).optional().describe('Override BCC recipients'),\n replyTo: z.array(z.string()).optional().describe('Reply-to addresses'),\n})\n\nexport const ForwardMessageParams = SendMessageParams.extend({\n messageId: MessageIdSchema,\n})\n\nexport const UpdateMessageParams = z.object({\n inboxId: InboxIdSchema,\n messageId: MessageIdSchema,\n addLabels: z.array(z.string()).optional().describe('Labels to add'),\n removeLabels: z.array(z.string()).optional().describe('Labels to remove'),\n})\n\nexport const ListMessagesParams = ListInboxItemsParams.extend({\n from: z.array(z.string()).optional().describe('Filter messages by sender (substring match; all values must match)'),\n to: z.array(z.string()).optional().describe('Filter messages by recipients (substring match; all values must match)'),\n subject: z.array(z.string()).optional().describe('Filter messages by subject (substring match; all values must match)'),\n includeSpam: z.boolean().optional().describe('Include messages in spam'),\n includeTrash: z.boolean().optional().describe('Include messages in trash'),\n})\n\n// Draft schemas\n\nexport const CreateDraftParams = BaseMessageParams.extend({\n to: z.array(z.string()).optional().describe('Recipients'),\n cc: z.array(z.string()).optional().describe('CC recipients'),\n bcc: z.array(z.string()).optional().describe('BCC recipients'),\n subject: z.string().optional().describe('Subject'),\n replyTo: z.array(z.string()).optional().describe('Reply-to addresses'),\n inReplyTo: z.string().optional().describe('Message ID this draft is replying to'),\n sendAt: z.string().pipe(z.coerce.date()).optional().describe('ISO 8601 datetime to schedule sending (e.g. 2026-04-01T09:00:00Z)'),\n clientId: z.string().optional().describe('Client-provided ID for idempotent creation'),\n})\n\nexport const ListDraftsParams = ListInboxItemsParams\n\nexport const GetDraftParams = z.object({\n inboxId: InboxIdSchema,\n draftId: DraftIdSchema,\n})\n\nexport const UpdateDraftParams = z.object({\n inboxId: InboxIdSchema,\n draftId: DraftIdSchema,\n to: z.array(z.string()).optional().describe('Recipients'),\n cc: z.array(z.string()).optional().describe('CC recipients'),\n bcc: z.array(z.string()).optional().describe('BCC recipients'),\n subject: z.string().optional().describe('Subject'),\n text: z.string().optional().describe('Plain text body'),\n html: z.string().optional().describe('HTML body'),\n replyTo: z.array(z.string()).optional().describe('Reply-to addresses'),\n sendAt: z.string().pipe(z.coerce.date()).optional().describe('ISO 8601 datetime to reschedule sending'),\n})\n\nexport const SendDraftParams = z.object({\n inboxId: InboxIdSchema,\n draftId: DraftIdSchema,\n})\n\nexport const DeleteDraftParams = z.object({\n inboxId: InboxIdSchema,\n draftId: DraftIdSchema,\n})\n\nexport const AuthMeParams = z.object({})\n","import { AgentMailClient } from 'agentmail'\nimport { detectFileType, extractPdfText, extractDocxText } from './util.js'\n\nexport type Args = Record<string, any>\n\nexport async function listInboxes(client: AgentMailClient, args: Args) {\n return client.inboxes.list(args)\n}\n\nexport async function getInbox(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.get(inboxId, options)\n}\n\nexport async function createInbox(client: AgentMailClient, args: Args) {\n return client.inboxes.create(args)\n}\n\nexport async function updateInbox(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.update(inboxId, options)\n}\n\nexport async function deleteInbox(client: AgentMailClient, args: Args) {\n const { inboxId } = args\n return client.inboxes.delete(inboxId)\n}\n\nexport async function listThreads(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.threads.list(inboxId, options)\n}\n\nexport async function searchThreads(client: AgentMailClient, args: Args) {\n const { inboxId, q, ...options } = args\n return client.inboxes.threads.search(inboxId, { q, ...options })\n}\n\nexport async function getThread(client: AgentMailClient, args: Args) {\n const { inboxId, threadId, ...options } = args\n return client.inboxes.threads.get(inboxId, threadId, options)\n}\n\nexport async function updateThread(client: AgentMailClient, args: Args) {\n const { inboxId, threadId, ...options } = args\n return client.inboxes.threads.update(inboxId, threadId, options)\n}\n\nexport async function deleteThread(client: AgentMailClient, args: Args) {\n const { inboxId, threadId } = args\n return client.inboxes.threads.delete(inboxId, threadId)\n}\n\nexport async function getAttachment(client: AgentMailClient, args: Args) {\n const { inboxId, threadId, attachmentId } = args\n\n const attachment = await client.inboxes.threads.getAttachment(inboxId, threadId, attachmentId)\n\n try {\n const response = await fetch(attachment.downloadUrl)\n const arrayBuffer = await response.arrayBuffer()\n const fileBytes = new Uint8Array(arrayBuffer)\n\n const detectedType = detectFileType(fileBytes)\n\n if (detectedType === 'application/pdf') {\n return { ...attachment, text: await extractPdfText(fileBytes) }\n } else if (detectedType === 'application/zip') {\n return { ...attachment, text: await extractDocxText(fileBytes) }\n }\n } catch {}\n\n return attachment\n}\n\nexport async function listMessages(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.messages.list(inboxId, options)\n}\n\nexport async function searchMessages(client: AgentMailClient, args: Args) {\n const { inboxId, q, ...options } = args\n return client.inboxes.messages.search(inboxId, { q, ...options })\n}\n\nexport async function sendMessage(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.messages.send(inboxId, options)\n}\n\nexport async function replyToMessage(client: AgentMailClient, args: Args) {\n const { inboxId, messageId, ...options } = args\n return client.inboxes.messages.reply(inboxId, messageId, options)\n}\n\nexport async function forwardMessage(client: AgentMailClient, args: Args) {\n const { inboxId, messageId, ...options } = args\n return client.inboxes.messages.forward(inboxId, messageId, options)\n}\n\nexport async function updateMessage(client: AgentMailClient, args: Args) {\n const { inboxId, messageId, ...options } = args\n return client.inboxes.messages.update(inboxId, messageId, options)\n}\n\n// Draft functions\n\nexport async function createDraft(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.drafts.create(inboxId, options)\n}\n\nexport async function listDrafts(client: AgentMailClient, args: Args) {\n const { inboxId, ...options } = args\n return client.inboxes.drafts.list(inboxId, options)\n}\n\nexport async function getDraft(client: AgentMailClient, args: Args) {\n const { inboxId, draftId } = args\n return client.inboxes.drafts.get(inboxId, draftId)\n}\n\nexport async function updateDraft(client: AgentMailClient, args: Args) {\n const { inboxId, draftId, ...options } = args\n return client.inboxes.drafts.update(inboxId, draftId, options)\n}\n\nexport async function sendDraft(client: AgentMailClient, args: Args) {\n const { inboxId, draftId } = args\n return client.inboxes.drafts.send(inboxId, draftId, {})\n}\n\nexport async function deleteDraft(client: AgentMailClient, args: Args) {\n const { inboxId, draftId } = args\n return client.inboxes.drafts.delete(inboxId, draftId)\n}\n\nexport async function authMe(client: AgentMailClient) {\n return client.auth.me()\n}\n","import { z } from 'zod'\nimport { AgentMailClient } from 'agentmail'\nimport { type ToolAnnotations } from '@modelcontextprotocol/sdk/types.js'\n\nimport {\n ListItemsParams,\n ListThreadsParams,\n SearchInboxItemsParams,\n GetInboxParams,\n CreateInboxParams,\n UpdateInboxParams,\n GetThreadParams,\n UpdateThreadParams,\n GetAttachmentParams,\n ListMessagesParams,\n SendMessageParams,\n ReplyToMessageParams,\n UpdateMessageParams,\n ForwardMessageParams,\n CreateDraftParams,\n ListDraftsParams,\n GetDraftParams,\n UpdateDraftParams,\n SendDraftParams,\n DeleteDraftParams,\n AuthMeParams,\n} from './schemas.js'\nimport {\n type Args,\n listInboxes,\n getInbox,\n createInbox,\n updateInbox,\n deleteInbox,\n listThreads,\n searchThreads,\n getThread,\n updateThread,\n deleteThread,\n getAttachment,\n listMessages,\n searchMessages,\n sendMessage,\n replyToMessage,\n updateMessage,\n forwardMessage,\n createDraft,\n listDrafts,\n getDraft,\n updateDraft,\n sendDraft,\n deleteDraft,\n authMe,\n} from './functions.js'\nexport interface Tool {\n name: string\n description: string\n paramsSchema: z.ZodObject<any>\n func: (client: AgentMailClient, args: Args) => Promise<any>\n annotations?: ToolAnnotations\n}\n\nexport const tools: Tool[] = [\n {\n name: 'list_inboxes',\n description: 'List email inboxes, paginated.',\n paramsSchema: ListItemsParams,\n func: listInboxes,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'get_inbox',\n description: 'Get an inbox by ID.',\n paramsSchema: GetInboxParams,\n func: getInbox,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'create_inbox',\n description: 'Create a new email inbox. Optionally specify username, domain, display name, and metadata.',\n paramsSchema: CreateInboxParams,\n func: createInbox,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n {\n name: 'update_inbox',\n description: \"Update an inbox's display name or metadata. Metadata keys are merged; set a key to null to remove it, or set metadata to null to clear all.\",\n paramsSchema: UpdateInboxParams,\n func: updateInbox,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'delete_inbox',\n description: 'Delete an inbox by ID.',\n paramsSchema: GetInboxParams,\n func: deleteInbox,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'list_threads',\n description: 'List email threads in an inbox. Filter by labels, sender, recipient, subject, or before/after datetime, paginated.',\n paramsSchema: ListThreadsParams,\n func: listThreads,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'search_threads',\n description: 'Search threads in an inbox with a full-text query, ranked by relevance. Matches senders, recipients, subject, and message body. Spam and trash are excluded.',\n paramsSchema: SearchInboxItemsParams,\n func: searchThreads,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'get_thread',\n description: 'Get a thread by ID, including its messages.',\n paramsSchema: GetThreadParams,\n func: getThread,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'get_attachment',\n description: 'Get an attachment from a thread. Returns metadata and a download URL, plus extracted text for PDF and DOCX files.',\n paramsSchema: GetAttachmentParams,\n func: getAttachment,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'update_thread',\n description: \"Update a thread's labels (add or remove). System labels cannot be modified.\",\n paramsSchema: UpdateThreadParams,\n func: updateThread,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'delete_thread',\n description: 'Delete a thread from an inbox.',\n paramsSchema: GetThreadParams,\n func: deleteThread,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n {\n name: 'list_messages',\n description: 'List messages in an inbox. Filter by labels, sender, recipient, subject, or before/after datetime, paginated.',\n paramsSchema: ListMessagesParams,\n func: listMessages,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'search_messages',\n description: 'Search messages in an inbox with a full-text query, ranked by relevance. Matches sender, recipients, subject, and message body. Spam and trash are excluded.',\n paramsSchema: SearchInboxItemsParams,\n func: searchMessages,\n annotations: {\n readOnlyHint: true,\n openWorldHint: true,\n },\n },\n {\n name: 'send_message',\n description: 'Send an email from an inbox to one or more recipients.',\n paramsSchema: SendMessageParams,\n func: sendMessage,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n {\n name: 'reply_to_message',\n description: 'Reply to a message in its thread. Set replyAll to include all original recipients.',\n paramsSchema: ReplyToMessageParams,\n func: replyToMessage,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n {\n name: 'forward_message',\n description: 'Forward a message to new recipients.',\n paramsSchema: ForwardMessageParams,\n func: forwardMessage,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n {\n name: 'update_message',\n description: \"Update a message's labels (add or remove).\",\n paramsSchema: UpdateMessageParams,\n func: updateMessage,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'create_draft',\n description: 'Create a draft email. Use sendAt (ISO 8601 datetime) to schedule it for later sending.',\n paramsSchema: CreateDraftParams,\n func: createDraft,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n {\n name: 'list_drafts',\n description: 'List drafts in inbox. Filter by labels (e.g. \"scheduled\") to find scheduled drafts.',\n paramsSchema: ListDraftsParams,\n func: listDrafts,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'get_draft',\n description: 'Get a draft by ID, including its content, status, and scheduled send time.',\n paramsSchema: GetDraftParams,\n func: getDraft,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'update_draft',\n description: 'Update a draft. Use sendAt to reschedule a scheduled draft.',\n paramsSchema: UpdateDraftParams,\n func: updateDraft,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'send_draft',\n description: 'Send a draft immediately. The draft is converted to a sent message and deleted.',\n paramsSchema: SendDraftParams,\n func: sendDraft,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n {\n name: 'delete_draft',\n description: 'Delete a draft. Also used to cancel a scheduled send.',\n paramsSchema: DeleteDraftParams,\n func: deleteDraft,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n {\n name: 'auth_me',\n description: 'Get the identity and scope of the authenticated credential, including organization, pod, and inbox IDs.',\n paramsSchema: AuthMeParams,\n func: authMe,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n },\n]\n"],"mappings":"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","names":[]}
package/dist/clawdbot.cjs CHANGED
@@ -55,18 +55,43 @@ var GetInboxParams = import_zod.z.object({
55
55
  var CreateInboxParams = import_zod.z.object({
56
56
  username: import_zod.z.string().optional().describe("Username"),
57
57
  domain: import_zod.z.string().optional().describe("Domain"),
58
- displayName: import_zod.z.string().optional().describe("Display name")
58
+ displayName: import_zod.z.string().optional().describe("Display name"),
59
+ clientId: import_zod.z.string().optional().describe("Client-provided ID for idempotent creation"),
60
+ metadata: import_zod.z.record(import_zod.z.string(), import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean()])).optional().describe("Custom metadata key-value pairs to attach to the inbox")
61
+ });
62
+ var UpdateInboxParams = import_zod.z.object({
63
+ inboxId: InboxIdSchema,
64
+ displayName: import_zod.z.string().optional().describe("Display name"),
65
+ metadata: import_zod.z.record(import_zod.z.string(), import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean(), import_zod.z.null()])).nullable().optional().describe("Metadata to merge into existing metadata. Set a key to null to remove it, or the whole field to null to clear all metadata")
59
66
  });
60
67
  var ListInboxItemsParams = ListItemsParams.extend({
61
68
  inboxId: InboxIdSchema,
62
69
  labels: import_zod.z.array(import_zod.z.string()).optional().describe("Labels to filter items by"),
63
70
  before: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("Filter items before datetime"),
71
+ after: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("Filter items after datetime"),
72
+ ascending: import_zod.z.boolean().optional().describe("Sort by oldest first instead of most recent first")
73
+ });
74
+ var ListThreadsParams = ListInboxItemsParams.extend({
75
+ senders: import_zod.z.array(import_zod.z.string()).optional().describe("Filter threads by senders (substring match; all values must match)"),
76
+ recipients: import_zod.z.array(import_zod.z.string()).optional().describe("Filter threads by recipients (substring match; all values must match)"),
77
+ subject: import_zod.z.array(import_zod.z.string()).optional().describe("Filter threads by subject (substring match; all values must match)"),
78
+ includeSpam: import_zod.z.boolean().optional().describe("Include threads in spam"),
79
+ includeTrash: import_zod.z.boolean().optional().describe("Include threads in trash")
80
+ });
81
+ var SearchInboxItemsParams = ListItemsParams.extend({
82
+ inboxId: InboxIdSchema,
83
+ q: import_zod.z.string().describe("Full-text search query"),
84
+ before: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("Filter items before datetime"),
64
85
  after: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("Filter items after datetime")
65
86
  });
66
87
  var GetThreadParams = import_zod.z.object({
67
88
  inboxId: InboxIdSchema,
68
89
  threadId: ThreadIdSchema
69
90
  });
91
+ var UpdateThreadParams = GetThreadParams.extend({
92
+ addLabels: import_zod.z.array(import_zod.z.string()).optional().describe("Labels to add"),
93
+ removeLabels: import_zod.z.array(import_zod.z.string()).optional().describe("Labels to remove")
94
+ });
70
95
  var GetAttachmentParams = import_zod.z.object({
71
96
  inboxId: InboxIdSchema,
72
97
  threadId: ThreadIdSchema,
@@ -89,11 +114,16 @@ var SendMessageParams = BaseMessageParams.extend({
89
114
  to: import_zod.z.array(import_zod.z.string()).describe("Recipients"),
90
115
  cc: import_zod.z.array(import_zod.z.string()).optional().describe("CC recipients"),
91
116
  bcc: import_zod.z.array(import_zod.z.string()).optional().describe("BCC recipients"),
92
- subject: import_zod.z.string().optional().describe("Subject")
117
+ subject: import_zod.z.string().optional().describe("Subject"),
118
+ replyTo: import_zod.z.array(import_zod.z.string()).optional().describe("Reply-to addresses")
93
119
  });
94
120
  var ReplyToMessageParams = BaseMessageParams.extend({
95
121
  messageId: MessageIdSchema,
96
- replyAll: import_zod.z.boolean().optional().describe("Reply to all recipients")
122
+ replyAll: import_zod.z.boolean().optional().describe("Reply to all recipients"),
123
+ to: import_zod.z.array(import_zod.z.string()).optional().describe("Override reply recipients"),
124
+ cc: import_zod.z.array(import_zod.z.string()).optional().describe("Override CC recipients"),
125
+ bcc: import_zod.z.array(import_zod.z.string()).optional().describe("Override BCC recipients"),
126
+ replyTo: import_zod.z.array(import_zod.z.string()).optional().describe("Reply-to addresses")
97
127
  });
98
128
  var ForwardMessageParams = SendMessageParams.extend({
99
129
  messageId: MessageIdSchema
@@ -104,6 +134,13 @@ var UpdateMessageParams = import_zod.z.object({
104
134
  addLabels: import_zod.z.array(import_zod.z.string()).optional().describe("Labels to add"),
105
135
  removeLabels: import_zod.z.array(import_zod.z.string()).optional().describe("Labels to remove")
106
136
  });
137
+ var ListMessagesParams = ListInboxItemsParams.extend({
138
+ from: import_zod.z.array(import_zod.z.string()).optional().describe("Filter messages by sender (substring match; all values must match)"),
139
+ to: import_zod.z.array(import_zod.z.string()).optional().describe("Filter messages by recipients (substring match; all values must match)"),
140
+ subject: import_zod.z.array(import_zod.z.string()).optional().describe("Filter messages by subject (substring match; all values must match)"),
141
+ includeSpam: import_zod.z.boolean().optional().describe("Include messages in spam"),
142
+ includeTrash: import_zod.z.boolean().optional().describe("Include messages in trash")
143
+ });
107
144
  var CreateDraftParams = BaseMessageParams.extend({
108
145
  to: import_zod.z.array(import_zod.z.string()).optional().describe("Recipients"),
109
146
  cc: import_zod.z.array(import_zod.z.string()).optional().describe("CC recipients"),
@@ -111,7 +148,8 @@ var CreateDraftParams = BaseMessageParams.extend({
111
148
  subject: import_zod.z.string().optional().describe("Subject"),
112
149
  replyTo: import_zod.z.array(import_zod.z.string()).optional().describe("Reply-to addresses"),
113
150
  inReplyTo: import_zod.z.string().optional().describe("Message ID this draft is replying to"),
114
- sendAt: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("ISO 8601 datetime to schedule sending (e.g. 2026-04-01T09:00:00Z)")
151
+ sendAt: import_zod.z.string().pipe(import_zod.z.coerce.date()).optional().describe("ISO 8601 datetime to schedule sending (e.g. 2026-04-01T09:00:00Z)"),
152
+ clientId: import_zod.z.string().optional().describe("Client-provided ID for idempotent creation")
115
153
  });
116
154
  var ListDraftsParams = ListInboxItemsParams;
117
155
  var GetDraftParams = import_zod.z.object({
@@ -138,6 +176,7 @@ var DeleteDraftParams = import_zod.z.object({
138
176
  inboxId: InboxIdSchema,
139
177
  draftId: DraftIdSchema
140
178
  });
179
+ var AuthMeParams = import_zod.z.object({});
141
180
 
142
181
  // src/util.ts
143
182
  var import_unpdf = require("unpdf");
@@ -174,6 +213,10 @@ async function getInbox(client, args) {
174
213
  async function createInbox(client, args) {
175
214
  return client.inboxes.create(args);
176
215
  }
216
+ async function updateInbox(client, args) {
217
+ const { inboxId, ...options } = args;
218
+ return client.inboxes.update(inboxId, options);
219
+ }
177
220
  async function deleteInbox(client, args) {
178
221
  const { inboxId } = args;
179
222
  return client.inboxes.delete(inboxId);
@@ -182,13 +225,25 @@ async function listThreads(client, args) {
182
225
  const { inboxId, ...options } = args;
183
226
  return client.inboxes.threads.list(inboxId, options);
184
227
  }
228
+ async function searchThreads(client, args) {
229
+ const { inboxId, q, ...options } = args;
230
+ return client.inboxes.threads.search(inboxId, { q, ...options });
231
+ }
185
232
  async function getThread(client, args) {
186
233
  const { inboxId, threadId, ...options } = args;
187
234
  return client.inboxes.threads.get(inboxId, threadId, options);
188
235
  }
236
+ async function updateThread(client, args) {
237
+ const { inboxId, threadId, ...options } = args;
238
+ return client.inboxes.threads.update(inboxId, threadId, options);
239
+ }
240
+ async function deleteThread(client, args) {
241
+ const { inboxId, threadId } = args;
242
+ return client.inboxes.threads.delete(inboxId, threadId);
243
+ }
189
244
  async function getAttachment(client, args) {
190
- const { threadId, attachmentId } = args;
191
- const attachment = await client.threads.getAttachment(threadId, attachmentId);
245
+ const { inboxId, threadId, attachmentId } = args;
246
+ const attachment = await client.inboxes.threads.getAttachment(inboxId, threadId, attachmentId);
192
247
  try {
193
248
  const response = await fetch(attachment.downloadUrl);
194
249
  const arrayBuffer = await response.arrayBuffer();
@@ -203,6 +258,14 @@ async function getAttachment(client, args) {
203
258
  }
204
259
  return attachment;
205
260
  }
261
+ async function listMessages(client, args) {
262
+ const { inboxId, ...options } = args;
263
+ return client.inboxes.messages.list(inboxId, options);
264
+ }
265
+ async function searchMessages(client, args) {
266
+ const { inboxId, q, ...options } = args;
267
+ return client.inboxes.messages.search(inboxId, { q, ...options });
268
+ }
206
269
  async function sendMessage(client, args) {
207
270
  const { inboxId, ...options } = args;
208
271
  return client.inboxes.messages.send(inboxId, options);
@@ -243,12 +306,15 @@ async function deleteDraft(client, args) {
243
306
  const { inboxId, draftId } = args;
244
307
  return client.inboxes.drafts.delete(inboxId, draftId);
245
308
  }
309
+ async function authMe(client) {
310
+ return client.auth.me();
311
+ }
246
312
 
247
313
  // src/tools.ts
248
314
  var tools = [
249
315
  {
250
316
  name: "list_inboxes",
251
- description: "List inboxes",
317
+ description: "List email inboxes, paginated.",
252
318
  paramsSchema: ListItemsParams,
253
319
  func: listInboxes,
254
320
  annotations: {
@@ -258,7 +324,7 @@ var tools = [
258
324
  },
259
325
  {
260
326
  name: "get_inbox",
261
- description: "Get inbox",
327
+ description: "Get an inbox by ID.",
262
328
  paramsSchema: GetInboxParams,
263
329
  func: getInbox,
264
330
  annotations: {
@@ -268,7 +334,7 @@ var tools = [
268
334
  },
269
335
  {
270
336
  name: "create_inbox",
271
- description: "Create inbox",
337
+ description: "Create a new email inbox. Optionally specify username, domain, display name, and metadata.",
272
338
  paramsSchema: CreateInboxParams,
273
339
  func: createInbox,
274
340
  annotations: {
@@ -278,9 +344,21 @@ var tools = [
278
344
  openWorldHint: false
279
345
  }
280
346
  },
347
+ {
348
+ name: "update_inbox",
349
+ description: "Update an inbox's display name or metadata. Metadata keys are merged; set a key to null to remove it, or set metadata to null to clear all.",
350
+ paramsSchema: UpdateInboxParams,
351
+ func: updateInbox,
352
+ annotations: {
353
+ readOnlyHint: false,
354
+ destructiveHint: true,
355
+ idempotentHint: true,
356
+ openWorldHint: false
357
+ }
358
+ },
281
359
  {
282
360
  name: "delete_inbox",
283
- description: "Delete inbox",
361
+ description: "Delete an inbox by ID.",
284
362
  paramsSchema: GetInboxParams,
285
363
  func: deleteInbox,
286
364
  annotations: {
@@ -292,17 +370,27 @@ var tools = [
292
370
  },
293
371
  {
294
372
  name: "list_threads",
295
- description: "List threads in inbox",
296
- paramsSchema: ListInboxItemsParams,
373
+ description: "List email threads in an inbox. Filter by labels, sender, recipient, subject, or before/after datetime, paginated.",
374
+ paramsSchema: ListThreadsParams,
297
375
  func: listThreads,
298
376
  annotations: {
299
377
  readOnlyHint: true,
300
378
  openWorldHint: true
301
379
  }
302
380
  },
381
+ {
382
+ name: "search_threads",
383
+ description: "Search threads in an inbox with a full-text query, ranked by relevance. Matches senders, recipients, subject, and message body. Spam and trash are excluded.",
384
+ paramsSchema: SearchInboxItemsParams,
385
+ func: searchThreads,
386
+ annotations: {
387
+ readOnlyHint: true,
388
+ openWorldHint: true
389
+ }
390
+ },
303
391
  {
304
392
  name: "get_thread",
305
- description: "Get thread",
393
+ description: "Get a thread by ID, including its messages.",
306
394
  paramsSchema: GetThreadParams,
307
395
  func: getThread,
308
396
  annotations: {
@@ -312,7 +400,7 @@ var tools = [
312
400
  },
313
401
  {
314
402
  name: "get_attachment",
315
- description: "Get attachment",
403
+ description: "Get an attachment from a thread. Returns metadata and a download URL, plus extracted text for PDF and DOCX files.",
316
404
  paramsSchema: GetAttachmentParams,
317
405
  func: getAttachment,
318
406
  annotations: {
@@ -320,57 +408,101 @@ var tools = [
320
408
  openWorldHint: true
321
409
  }
322
410
  },
411
+ {
412
+ name: "update_thread",
413
+ description: "Update a thread's labels (add or remove). System labels cannot be modified.",
414
+ paramsSchema: UpdateThreadParams,
415
+ func: updateThread,
416
+ annotations: {
417
+ readOnlyHint: false,
418
+ destructiveHint: true,
419
+ idempotentHint: true,
420
+ openWorldHint: false
421
+ }
422
+ },
423
+ {
424
+ name: "delete_thread",
425
+ description: "Delete a thread from an inbox.",
426
+ paramsSchema: GetThreadParams,
427
+ func: deleteThread,
428
+ annotations: {
429
+ readOnlyHint: false,
430
+ destructiveHint: true,
431
+ idempotentHint: false,
432
+ openWorldHint: false
433
+ }
434
+ },
435
+ {
436
+ name: "list_messages",
437
+ description: "List messages in an inbox. Filter by labels, sender, recipient, subject, or before/after datetime, paginated.",
438
+ paramsSchema: ListMessagesParams,
439
+ func: listMessages,
440
+ annotations: {
441
+ readOnlyHint: true,
442
+ openWorldHint: true
443
+ }
444
+ },
445
+ {
446
+ name: "search_messages",
447
+ description: "Search messages in an inbox with a full-text query, ranked by relevance. Matches sender, recipients, subject, and message body. Spam and trash are excluded.",
448
+ paramsSchema: SearchInboxItemsParams,
449
+ func: searchMessages,
450
+ annotations: {
451
+ readOnlyHint: true,
452
+ openWorldHint: true
453
+ }
454
+ },
323
455
  {
324
456
  name: "send_message",
325
- description: "Send message",
457
+ description: "Send an email from an inbox to one or more recipients.",
326
458
  paramsSchema: SendMessageParams,
327
459
  func: sendMessage,
328
460
  annotations: {
329
461
  readOnlyHint: false,
330
- destructiveHint: false,
462
+ destructiveHint: true,
331
463
  idempotentHint: false,
332
464
  openWorldHint: true
333
465
  }
334
466
  },
335
467
  {
336
468
  name: "reply_to_message",
337
- description: "Reply to message",
469
+ description: "Reply to a message in its thread. Set replyAll to include all original recipients.",
338
470
  paramsSchema: ReplyToMessageParams,
339
471
  func: replyToMessage,
340
472
  annotations: {
341
473
  readOnlyHint: false,
342
- destructiveHint: false,
474
+ destructiveHint: true,
343
475
  idempotentHint: false,
344
476
  openWorldHint: true
345
477
  }
346
478
  },
347
479
  {
348
480
  name: "forward_message",
349
- description: "Forward message",
481
+ description: "Forward a message to new recipients.",
350
482
  paramsSchema: ForwardMessageParams,
351
483
  func: forwardMessage,
352
484
  annotations: {
353
485
  readOnlyHint: false,
354
- destructiveHint: false,
486
+ destructiveHint: true,
355
487
  idempotentHint: false,
356
488
  openWorldHint: true
357
489
  }
358
490
  },
359
491
  {
360
492
  name: "update_message",
361
- description: "Update message",
493
+ description: "Update a message's labels (add or remove).",
362
494
  paramsSchema: UpdateMessageParams,
363
495
  func: updateMessage,
364
496
  annotations: {
365
497
  readOnlyHint: false,
366
- destructiveHint: false,
498
+ destructiveHint: true,
367
499
  idempotentHint: true,
368
500
  openWorldHint: false
369
501
  }
370
502
  },
371
503
  {
372
504
  name: "create_draft",
373
- description: "Create a draft email. Use send_at (ISO 8601 datetime) to schedule it for later sending.",
505
+ description: "Create a draft email. Use sendAt (ISO 8601 datetime) to schedule it for later sending.",
374
506
  paramsSchema: CreateDraftParams,
375
507
  func: createDraft,
376
508
  annotations: {
@@ -402,12 +534,12 @@ var tools = [
402
534
  },
403
535
  {
404
536
  name: "update_draft",
405
- description: "Update a draft. Use send_at to reschedule a scheduled draft.",
537
+ description: "Update a draft. Use sendAt to reschedule a scheduled draft.",
406
538
  paramsSchema: UpdateDraftParams,
407
539
  func: updateDraft,
408
540
  annotations: {
409
541
  readOnlyHint: false,
410
- destructiveHint: false,
542
+ destructiveHint: true,
411
543
  idempotentHint: true,
412
544
  openWorldHint: false
413
545
  }
@@ -419,7 +551,7 @@ var tools = [
419
551
  func: sendDraft,
420
552
  annotations: {
421
553
  readOnlyHint: false,
422
- destructiveHint: false,
554
+ destructiveHint: true,
423
555
  idempotentHint: false,
424
556
  openWorldHint: true
425
557
  }
@@ -435,6 +567,16 @@ var tools = [
435
567
  idempotentHint: true,
436
568
  openWorldHint: false
437
569
  }
570
+ },
571
+ {
572
+ name: "auth_me",
573
+ description: "Get the identity and scope of the authenticated credential, including organization, pod, and inbox IDs.",
574
+ paramsSchema: AuthMeParams,
575
+ func: authMe,
576
+ annotations: {
577
+ readOnlyHint: true,
578
+ openWorldHint: false
579
+ }
438
580
  }
439
581
  ];
440
582