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

74 lines (62 loc) 2.14 kB
/** * List events functionality */ const config = require('../config'); const { callGraphAPI } = require('../utils/graph-api'); const { ensureAuthenticated, createAuthRequiredResponse } = require('../auth'); /** * List events handler * @param {object} args - Tool arguments * @returns {object} - MCP response */ async function handleListEvents(args) { const count = Math.min(args.count || 10, config.MAX_RESULT_COUNT); try { // Get access token const accessToken = await ensureAuthenticated(); // Check if authentication is required if (!accessToken) { return await createAuthRequiredResponse('list-events'); } // Build API endpoint let endpoint = 'me/events'; // Add query parameters const queryParams = { $top: count, $orderby: 'start/dateTime', $filter: `start/dateTime ge '${new Date().toISOString()}'`, $select: config.CALENDAR_SELECT_FIELDS }; // Make API call const response = await callGraphAPI(accessToken, 'GET', endpoint, null, queryParams); if (!response.value || response.value.length === 0) { return { content: [{ type: "text", text: "No calendar events found." }] }; } // Format results const eventList = response.value.map((event, index) => { const startDate = new Date(event.start.dateTime).toLocaleString(event.start.timeZone); const endDate = new Date(event.end.dateTime).toLocaleString(event.end.timeZone); const location = event.location.displayName || 'No location'; return `${index + 1}. ${event.subject} - Location: ${location}\nStart: ${startDate}\nEnd: ${endDate}\nSubject: ${event.subject}\nSummary: ${event.bodyPreview}\nID: ${event.id}\n`; }).join("\n"); return { content: [{ type: "text", text: `Found ${response.value.length} events:\n\n${eventList}` }] }; } catch (error) { return { content: [{ type: "text", text: `Error listing events: ${error.message}` }] }; } } module.exports = handleListEvents;