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

121 lines (106 loc) 3.23 kB
/** * Create folder functionality */ const { callGraphAPI } = require('../utils/graph-api'); const { ensureAuthenticated, createAuthRequiredResponse } = require('../auth'); const { getFolderIdByName } = require('../email/folder-utils'); /** * Create folder handler * @param {object} args - Tool arguments * @returns {object} - MCP response */ async function handleCreateFolder(args) { const folderName = args.name; const parentFolder = args.parentFolder || ''; if (!folderName) { return { content: [{ type: "text", text: "Folder name is required." }] }; } try { // Get access token const accessToken = await ensureAuthenticated(); // Check if authentication is required if (!accessToken) { return await createAuthRequiredResponse('create-folder'); } // Create folder with appropriate parent const result = await createMailFolder(accessToken, folderName, parentFolder); return { content: [{ type: "text", text: result.message }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating folder: ${error.message}` }] }; } } /** * Create a new mail folder * @param {string} accessToken - Access token * @param {string} folderName - Name of the folder to create * @param {string} parentFolderName - Name of the parent folder (optional) * @returns {Promise<object>} - Result object with status and message */ async function createMailFolder(accessToken, folderName, parentFolderName) { try { // Check if a folder with this name already exists const existingFolder = await getFolderIdByName(accessToken, folderName); if (existingFolder) { return { success: false, message: `A folder named "${folderName}" already exists.` }; } // If parent folder specified, find its ID let endpoint = 'me/mailFolders'; if (parentFolderName) { const parentId = await getFolderIdByName(accessToken, parentFolderName); if (!parentId) { return { success: false, message: `Parent folder "${parentFolderName}" not found. Please specify a valid parent folder or leave it blank to create at the root level.` }; } endpoint = `me/mailFolders/${parentId}/childFolders`; } // Create the folder const folderData = { displayName: folderName }; const response = await callGraphAPI( accessToken, 'POST', endpoint, folderData ); if (response && response.id) { const locationInfo = parentFolderName ? `inside "${parentFolderName}"` : "at the root level"; return { success: true, message: `Successfully created folder "${folderName}" ${locationInfo}.`, folderId: response.id }; } else { return { success: false, message: "Failed to create folder. The server didn't return a folder ID." }; } } catch (error) { console.error(`Error creating folder "${folderName}": ${error.message}`); throw error; } } module.exports = handleCreateFolder;