UNPKG

teams-mcp-server

Version:

Microsoft Teams MCP server with direct messaging support

90 lines (89 loc) 3.57 kB
export function createChatTool(teamsClient) { return { name: 'teams_create_chat', description: 'Create a new chat (one-on-one or group)', inputSchema: { type: 'object', properties: { type: { type: 'string', enum: ['oneOnOne', 'group'], description: 'Type of chat to create' }, members: { type: 'array', description: 'Array of member email addresses', items: { type: 'object', properties: { email: { type: 'string', description: 'Email address of the member' }, role: { type: 'string', enum: ['owner', 'guest'], description: 'Role of the member (default: owner)' } }, required: ['email'] }, minItems: 1 }, topic: { type: 'string', description: 'Topic/title for group chats (ignored for one-on-one)' } }, required: ['type', 'members'] }, handler: async (args) => { try { await teamsClient.ensureAuthenticated(); const request = { chatType: args.type, members: args.members, topic: args.topic }; if (request.chatType === 'oneOnOne' && request.members.length !== 1) { return { content: [{ type: 'text', text: 'One-on-one chats must have exactly one other member besides yourself.' }] }; } const chat = await teamsClient.createChat(request); const members = await teamsClient.getChatMembers(chat.id); return { content: [{ type: 'text', text: JSON.stringify({ success: true, chat: { id: chat.id, type: chat.chatType, topic: chat.topic || `${chat.chatType} chat`, created: new Date(chat.createdDateTime).toLocaleString(), webUrl: chat.webUrl, members: members.map(m => ({ displayName: m.displayName, email: m.email, roles: m.roles })) } }, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Failed to create chat: ${error.message}` }] }; } } }; }