update tools and prompts to add functionality for 'starring' emails

This commit is contained in:
KS Jannette
2026-08-11 18:52:28 -04:00
parent 549f2b0949
commit 632b0029be
5 changed files with 73 additions and 24 deletions

View File

@@ -56,7 +56,7 @@ server.registerTool(
description:
"Fetch unread emails from a Gmail inbox. Returns sender, date, " +
"subject, message ID, and body text for each message. The message IDs " +
"can be passed to delete_emails later. Specify which account to fetch from.",
"must be passed to star_emails after evaluation. Specify which account to fetch from.",
inputSchema: {
account: accountSchema,
maxResults: z
@@ -303,3 +303,58 @@ server.registerTool(
}
}
);
// --------------------------------------------------------------------------- //
// Tool: star_emails
// --------------------------------------------------------------------------- //
server.registerTool(
"star_emails",
{
description: "Mark reviewed emails with a star and mark them as read in Gmail. " +
"Use this for all reviewed messages (Categories A, B, C, and D) " +
"to signal they have been processed. Specify which account the emails belong to.",
inputSchema: {
account: accountSchema,
messageIds: z
.array(z.string())
.describe("Array of Gmail message IDs to star and mark read"),
},
},
async ({ account, messageIds }) => {
try {
if (messageIds.length === 0) {
return { content: [{ type: "text" as const, text: "No message IDs provided." }] };
}
const gmail = getGmailClient(account);
// Batch modify allows updating up to 1000 messages in a single API call
await gmail.users.messages.batchModify({
userId: "me",
requestBody: {
ids: messageIds,
addLabelIds: ["STARRED"],
removeLabelIds: ["UNREAD"]
}
});
return {
content: [
{
type: "text" as const,
text: `Successfully starred and marked read ${messageIds.length} email(s).`,
},
],
};
} catch (error) {
const errMsg = error instanceof Error ? error.message : String(error);
return {
content: [
{
type: "text" as const,
text: `Error starring emails: ${errMsg}`,
},
],
};
}
}
);