UNPKG

@davidmoore-io/ms-365-mcp-server

Version:

Microsoft 365 MCP Server - Fork with pre-authenticated token support

98 lines (97 loc) 3.16 kB
import { z } from 'zod'; export function registerAuthTools(server, authManager) { server.tool('login', { force: z.boolean().default(false).describe('Force a new login even if already logged in'), }, async ({ force }) => { try { // Check if we have a pre-authenticated token from environment if (!force && process.env.MS365_ACCESS_TOKEN) { const loginStatus = await authManager.testLogin(); if (loginStatus.success) { return { content: [ { type: 'text', text: JSON.stringify({ status: 'Already authenticated via environment token', ...loginStatus, }), }, ], }; } } if (!force) { const loginStatus = await authManager.testLogin(); if (loginStatus.success) { return { content: [ { type: 'text', text: JSON.stringify({ status: 'Already logged in', ...loginStatus, }), }, ], }; } } const text = await new Promise((r) => { authManager.acquireTokenByDeviceCode(r); }); return { content: [ { type: 'text', text, }, ], }; } catch (error) { return { content: [ { type: 'text', text: JSON.stringify({ error: `Authentication failed: ${error.message}` }), }, ], }; } }); server.tool('logout', {}, async () => { try { await authManager.logout(); return { content: [ { type: 'text', text: JSON.stringify({ message: 'Logged out successfully' }), }, ], }; } catch (error) { return { content: [ { type: 'text', text: JSON.stringify({ error: 'Logout failed' }), }, ], }; } }); server.tool('verify-login', async () => { const testResult = await authManager.testLogin(); return { content: [ { type: 'text', text: JSON.stringify(testResult), }, ], }; }); }