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