Skip to main content
Glama

Enhanced Outlook MCP Server

by jibberish69
list.js3.65 kB
const config = require('../config'); const logger = require('../utils/logger'); const { GraphApiClient } = require('../utils/graph-api'); const { buildQueryParams } = require('../utils/odata-helpers'); /** * List emails from a mailbox * @param {Object} params - Tool parameters * @returns {Promise<Object>} - List of emails */ async function listEmailsHandler(params = {}) { const userId = params.userId || 'default'; const folderId = params.folderId || 'inbox'; const limit = Math.min( params.limit || config.email.maxEmailsPerRequest, config.email.maxEmailsPerRequest ); try { logger.info(`Listing emails for user ${userId} in folder ${folderId}`); const graphClient = new GraphApiClient(userId); // Determine endpoint based on folder ID let endpoint; if (folderId.toLowerCase() === 'inbox') { endpoint = '/me/mailFolders/inbox/messages'; } else if (folderId.toLowerCase() === 'drafts') { endpoint = '/me/mailFolders/drafts/messages'; } else if (folderId.toLowerCase() === 'sentitems') { endpoint = '/me/mailFolders/sentItems/messages'; } else if (folderId.toLowerCase() === 'deleteditems') { endpoint = '/me/mailFolders/deletedItems/messages'; } else { endpoint = `/me/mailFolders/${folderId}/messages`; } // Build query parameters const queryParams = buildQueryParams({ select: params.fields || config.email.defaultFields, top: limit, filter: params.filter, orderBy: params.orderBy || { receivedDateTime: 'desc' }, skip: params.skip || 0, search: params.search }); // Get emails const emails = await graphClient.getPaginated(endpoint, queryParams, { maxPages: params.maxPages || 1 }); return { status: 'success', folder: folderId, count: emails.length, emails: emails.map(email => formatEmailResponse(email)), hasMore: emails.length >= limit }; } catch (error) { logger.error(`Error listing emails: ${error.message}`); return { status: 'error', message: `Failed to list emails: ${error.message}` }; } } /** * Format email response to clean up and improve readability * @param {Object} email - Raw email from Graph API * @returns {Object} - Formatted email */ function formatEmailResponse(email) { // Extract sender name and email let sender = null; if (email.from && email.from.emailAddress) { sender = { name: email.from.emailAddress.name, email: email.from.emailAddress.address }; } // Extract recipients let toRecipients = []; if (email.toRecipients && Array.isArray(email.toRecipients)) { toRecipients = email.toRecipients.map(recipient => ({ name: recipient.emailAddress.name, email: recipient.emailAddress.address })); } // Extract CC recipients let ccRecipients = []; if (email.ccRecipients && Array.isArray(email.ccRecipients)) { ccRecipients = email.ccRecipients.map(recipient => ({ name: recipient.emailAddress.name, email: recipient.emailAddress.address })); } // Build a cleaner email object return { id: email.id, subject: email.subject || '(No Subject)', sender, toRecipients, ccRecipients, receivedDateTime: email.receivedDateTime, sentDateTime: email.sentDateTime, preview: email.bodyPreview, hasAttachments: !!email.hasAttachments, isRead: email.isRead, importance: email.importance, isDraft: email.isDraft, webLink: email.webLink, categories: email.categories || [] }; } module.exports = { listEmailsHandler };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jibberish69/enhanced-outlook-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server