teams-mcp-server
Version:
Microsoft Teams MCP server with direct messaging support
83 lines (82 loc) • 3.27 kB
JavaScript
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}`
}]
};
}
}
};
}