send_custom_email
Send personalized emails to PocketBase users through the Advanced PocketBase MCP Server, enabling targeted communication and notifications directly from your database system.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/services/email.ts:176-212 (handler)Core handler function that sends a custom email using nodemailer and logs the result (success or failure) to the 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)Registers the 'send_custom_email' MCP tool, defines its input schema using Zod, and provides a handler that ensures the EmailService is loaded and calls sendCustomEmail on it.this.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 interface definition for the sendCustomEmail method input parameters and return type.sendCustomEmail(data: { to: string; from?: string; subject: string; html: string; text?: string; }): Promise<EmailLog>;