Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/tools/listTools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,12 @@ export async function generateToolStructure(): Promise<ModuleStructure> {
description: 'Send templated emails to multiple recipients with per-recipient variable substitution and configurable delay between sends (default 5000ms). Set dryRun: true to preview all rendered emails without sending. Returns { sent, failed, results?, previews? }.',
example: 'const result = await gmail.sendBatch({ subject: "Hi {{name}}", template: "Hello {{name}}, {{note}}", recipients: [{ to: "alice@example.com", variables: { name: "Alice", note: "checking in" } }, { to: "bob@example.com", variables: { name: "Bob", note: "quick update" } }], delayMs: 5000 });\nconsole.log(`Sent: ${result.sent}, Failed: ${result.failed}`);',
},
{
name: 'detectReplies',
signature: 'detectReplies({ threadIds: string[] })',
description: 'Check an array of Gmail thread IDs for replies from external participants. Filters out messages sent by the authenticated user to identify genuine inbound replies. Useful for tracking campaign response rates.',
example: 'const { threads } = await gmail.detectReplies({ threadIds: ["thread1", "thread2"] });\nconst replied = threads.filter(t => t.hasReply);\nconsole.log(`${replied.length} of ${threads.length} threads have replies`);',
},
{
name: 'listDrafts',
signature: 'listDrafts({ maxResults?: number, pageToken?: string })',
Expand Down
Loading