UNPKG

outlook-mcp

Version:

Comprehensive MCP server for Claude to access Microsoft Outlook and Teams via Microsoft Graph API - including Email, Calendar, Contacts, Tasks, Teams, Chats, and Online Meetings

102 lines (91 loc) 2.6 kB
/** * Mark email as read functionality */ const config = require('../config'); const { callGraphAPI } = require('../utils/graph-api'); const { ensureAuthenticated } = require('../auth'); /** * Mark email as read handler * @param {object} args - Tool arguments * @returns {object} - MCP response */ async function handleMarkAsRead(args) { const emailId = args.id; const isRead = args.isRead !== undefined ? args.isRead : true; // Default to true if (!emailId) { return { content: [{ type: "text", text: "Email ID is required." }] }; } try { // Get access token const accessToken = await ensureAuthenticated(); // Make API call to update email read status const endpoint = `me/messages/${encodeURIComponent(emailId)}`; const updateData = { isRead: isRead }; try { const result = await callGraphAPI(accessToken, 'PATCH', endpoint, updateData); const status = isRead ? 'read' : 'unread'; return { content: [ { type: "text", text: `Email successfully marked as ${status}.` } ] }; } catch (error) { console.error(`Error marking email as ${isRead ? 'read' : 'unread'}: ${error.message}`); // Improved error handling with more specific messages if (error.message.includes("doesn't belong to the targeted mailbox")) { return { content: [ { type: "text", text: `The email ID seems invalid or doesn't belong to your mailbox. Please try with a different email ID.` } ] }; } else if (error.message.includes("UNAUTHORIZED")) { return { content: [ { type: "text", text: "Authentication failed. Please re-authenticate and try again." } ] }; } else { return { content: [ { type: "text", text: `Failed to mark email as ${isRead ? 'read' : 'unread'}: ${error.message}` } ] }; } } } catch (error) { if (error.message === 'Authentication required') { return { content: [{ type: "text", text: "Authentication required. Please use the 'authenticate' tool first." }] }; } return { content: [{ type: "text", text: `Error accessing email: ${error.message}` }] }; } } module.exports = handleMarkAsRead;