send_custom_email
Send personalized emails programmatically through PocketBase integration. This tool facilitates communication by customizing and delivering emails directly from the MCP server.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/services/email.ts:176-212 (handler)Core handler function that sends custom email using nodemailer transporter and logs to PocketBase email_logs collection.async sendCustomEmail(data: { to: string; from?: string; subject: string; html: string; text?: string; }): Promise<EmailLog> { try { // Send email const info = await this.transporter.sendMail({ from: data.from || process.env.SMTP_USER || process.env.DEFAULT_FROM_EMAIL, to: data.to, subject: data.subject, html: data.html, text: data.text, }); // Log email const emailLog = await this.pb.collection('email_logs').create({ to: data.to, from: data.from || process.env.SMTP_USER || process.env.DEFAULT_FROM_EMAIL, subject: data.subject, status: 'sent', }); return emailLog as unknown as EmailLog; } catch (error: any) { // Log failed email const emailLog = await this.pb.collection('email_logs').create({ to: data.to, from: data.from || process.env.SMTP_USER || process.env.DEFAULT_FROM_EMAIL, subject: data.subject, status: 'failed', error: error.message, }); throw new Error(`Failed to send custom email: ${error.message}`); } }
- src/agent-simple.ts:790-837 (registration)MCP server tool registration for 'send_custom_email' including input schema validation with zod and wrapper handler that invokes EmailService.sendCustomEmailthis.server.tool( 'send_custom_email', { description: 'Send a custom email with specified content', inputSchema: { to: z.string().email().describe('Recipient email address'), from: z.string().email().optional().describe('Sender email address'), subject: z.string().describe('Email subject'), html: z.string().describe('HTML email body'), text: z.string().optional().describe('Plain text email body') } }, async ({ to, from, subject, html, text }) => { // Lazy load Email service await this.ensureEmailService(); if (!this.emailService) { throw new Error('Email service not available. Please configure EMAIL_SERVICE or SMTP settings.'); } try { const result = await this.emailService.sendCustomEmail({ to, from, subject, html, text }); return { content: [{ type: 'text', text: JSON.stringify({ success: true, emailLog: { id: result.id, to: result.to, subject: result.subject, status: result.status, sentAt: result.created } }, null, 2) }] }; } catch (error: any) { throw new Error(`Failed to send email: ${error.message}`); } } );
- dist/services/email.d.ts:31-37 (schema)TypeScript type definition/schema for the sendCustomEmail method parameters.sendCustomEmail(data: { to: string; from?: string; subject: string; html: string; text?: string; }): Promise<EmailLog>;
- src/agent-best-practices.ts:967-1007 (registration)Another MCP tool registration for 'send_custom_email' in the best-practices agent with similar schema and handler.{ to: EmailAddressSchema, from: EmailAddressSchema.optional(), subject: z.string().describe('Email subject'), htmlBody: z.string().optional().describe('HTML email body'), textBody: z.string().optional().describe('Plain text email body') }, async ({ to, from, subject, htmlBody, textBody }) => { try { if (!this.emailService) { return this.createErrorResponse('Email service not available'); } const result = await this.emailService.sendCustomEmail({ to, from, subject, html: htmlBody || '', text: textBody }); return { content: [{ type: 'text', text: JSON.stringify({ success: true, emailLog: { id: result.id, to: result.to, subject: result.subject, status: result.status, sentAt: result.created } }, null, 2) }] }; } catch (error) { return this.createErrorResponse(error); } } );
- src/worker.ts:328-342 (schema)JSON schema for send_custom_email tool in worker tools list for discovery.{ name: 'send_custom_email', description: 'Send a custom email with specified content', inputSchema: { type: 'object', properties: { to: { type: 'string', format: 'email', description: 'Recipient email address' }, from: { type: 'string', format: 'email', description: 'Sender email address' }, subject: { type: 'string', description: 'Email subject' }, html: { type: 'string', description: 'HTML email body' }, text: { type: 'string', description: 'Plain text email body' } }, required: ['to', 'subject', 'html'] } }