UNPKG

teams-mcp-server

Version:

Microsoft Teams MCP server with direct messaging support

83 lines (82 loc) 3.27 kB
import { TeamsClientStateless } from '../api/teamsClientStateless.js'; import { getAccessToken } from '../utils/tokenHelper.js'; export function createGetMessagesStatelessTool() { const teamsClient = new TeamsClientStateless(); return { name: 'teams_get_messages', description: 'Get messages from a Teams chat', inputSchema: { type: 'object', properties: { tokens: { type: 'object', properties: { access_token: { type: ['string', 'null'] } }, required: [], description: 'OAuth tokens with access_token' }, chatId: { type: 'string', description: 'ID of the chat to retrieve messages from' }, limit: { type: 'number', description: 'Maximum number of messages to return (1-50)', minimum: 1, maximum: 50, default: 20 }, orderBy: { type: 'string', enum: ['createdDateTime desc', 'createdDateTime asc'], description: 'Sort order for messages', default: 'createdDateTime desc' } }, required: ['tokens', 'chatId'] }, handler: async (args) => { try { const accessToken = getAccessToken(args.tokens); if (!accessToken) { return { content: [{ type: 'text', text: 'Error: access_token is required in tokens parameter' }] }; } const limit = args.limit || 20; const orderBy = args.orderBy || 'createdDateTime desc'; const messages = await teamsClient.getMessages(accessToken, args.chatId, limit, orderBy); const formattedMessages = messages.map(msg => ({ id: msg.id, from: msg.from?.user?.displayName || 'System', content: msg.body?.content || '', contentType: msg.body?.contentType || 'text', timestamp: new Date(msg.createdDateTime).toLocaleString(), importance: msg.importance })); return { content: [{ type: 'text', text: JSON.stringify({ messages: formattedMessages, count: formattedMessages.length, chatId: args.chatId }, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Failed to get messages: ${error.message}` }] }; } } }; }