Skip to main content
Glama

Enhanced Outlook MCP Server

by jibberish69
list.js4.77 kB
const config = require('../config'); const logger = require('../utils/logger'); const { GraphApiClient } = require('../utils/graph-api'); const { buildQueryParams } = require('../utils/odata-helpers'); /** * List mail folders * @param {Object} params - Tool parameters * @returns {Promise<Object>} - List of folders */ async function listFoldersHandler(params = {}) { const userId = params.userId || 'default'; const parentFolderId = params.parentFolderId; try { logger.info(`Listing mail folders for user ${userId}`); const graphClient = new GraphApiClient(userId); // Determine the endpoint based on whether a parent folder is specified let endpoint; if (parentFolderId) { endpoint = `/me/mailFolders/${parentFolderId}/childFolders`; } else { endpoint = '/me/mailFolders'; } // Build query parameters const queryParams = buildQueryParams({ top: params.limit || 100, select: ['id', 'displayName', 'parentFolderId', 'childFolderCount', 'totalItemCount', 'unreadItemCount', 'wellKnownName'], filter: params.filter, orderBy: params.orderBy || { displayName: 'asc' } }); // Get folders const response = await graphClient.get(endpoint, queryParams); if (!response || !response.value) { return { status: 'error', message: 'Failed to retrieve folders' }; } const folders = response.value.map(folder => ({ id: folder.id, name: folder.displayName, parentFolderId: folder.parentFolderId, childFolderCount: folder.childFolderCount, itemCount: folder.totalItemCount, unreadItemCount: folder.unreadItemCount, wellKnownName: folder.wellKnownName || null })); return { status: 'success', count: folders.length, parentFolderId: parentFolderId || 'root', folders }; } catch (error) { logger.error(`Error listing folders: ${error.message}`); return { status: 'error', message: `Failed to list folders: ${error.message}` }; } } /** * Get information about a specific folder * @param {Object} params - Tool parameters * @returns {Promise<Object>} - Folder info */ async function getFolderHandler(params = {}) { const userId = params.userId || 'default'; const folderId = params.folderId; if (!folderId) { return { status: 'error', message: 'Folder ID is required' }; } try { logger.info(`Getting folder ${folderId} for user ${userId}`); const graphClient = new GraphApiClient(userId); // Determine the endpoint based on whether it's a well-known folder let endpoint; if (['inbox', 'drafts', 'sentitems', 'deleteditems'].includes(folderId.toLowerCase())) { endpoint = `/me/mailFolders/${folderId.toLowerCase()}`; } else { endpoint = `/me/mailFolders/${folderId}`; } // Get folder details with child folders and recent messages const folder = await graphClient.get(endpoint, { $expand: 'childFolders,messages($top=5;$orderby=receivedDateTime desc;$select=id,subject,from,receivedDateTime,isRead)' }); if (!folder) { return { status: 'error', message: `Folder not found with ID: ${folderId}` }; } // Format child folders const childFolders = folder.childFolders ? folder.childFolders.map(child => ({ id: child.id, name: child.displayName, childFolderCount: child.childFolderCount, itemCount: child.totalItemCount, unreadItemCount: child.unreadItemCount })) : []; // Format recent messages const recentMessages = folder.messages ? folder.messages.map(message => ({ id: message.id, subject: message.subject || '(No Subject)', sender: message.from ? { name: message.from.emailAddress.name, email: message.from.emailAddress.address } : null, receivedDateTime: message.receivedDateTime, isRead: message.isRead })) : []; // Build folder info response const folderInfo = { id: folder.id, name: folder.displayName, parentFolderId: folder.parentFolderId, childFolderCount: folder.childFolderCount, itemCount: folder.totalItemCount, unreadItemCount: folder.unreadItemCount, wellKnownName: folder.wellKnownName || null, childFolders, recentMessages }; return { status: 'success', folder: folderInfo }; } catch (error) { logger.error(`Error getting folder: ${error.message}`); return { status: 'error', message: `Failed to get folder: ${error.message}` }; } } module.exports = { listFoldersHandler, getFolderHandler };

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