Teams MCP客户端

一个连接Microsoft Teams/Copilot与MCP服务器的对话代理,通过Azure AI Foundry实现AI驱动的工具交互。

  • by implodingduck
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 implodingduck/teams-mcp-client

使用说明

Teams MCP 客户端

一个Microsoft Teams机器人和M365 Copilot代理,通过Azure AI Foundry将Teams/Copilot对话与模型上下文协议(MCP)服务器连接起来。此应用程序使Teams/Copilot用户能够直接从他们的Teams/Copilot界面与各种MCP工具和服务进行交互。

架构概述

Teams MCP 客户端被构建为一个对话式代理,其功能包括:

  1. 接收消息 来自 Microsoft Teams 用户
  2. 验证用户身份 使用 Microsoft Graph 和 Azure AD
  3. 连接到MCP服务器 在Cosmos DB中进行配置
  4. 处理请求 通过Azure AI Foundry(GPT-4o)
  5. 返回响应 使用MCP工具将输出结果返回到Teams

关键组件

  • Teams 机器人框架处理Teams消息和身份验证
  • **Azure AI Foundry(可译为“Azure AI 制造厂”或根据上下文意译为“Azure AI 工厂”,但更常见的可能是直接保留为“Azure AI Foundry”以体现其专有名词性质)**提供基于GPT-4o的人工智能处理能力
  • **Cosmos DB(中文可译为“宇宙数据库”,但通常直接使用原名,因其已成为一个专有名词)**存储MCP服务器配置和允许使用的工具
  • Azure 容器应用托管机器人应用程序
  • **Microsoft Graph(微软图)**处理用户身份验证和资料访问

基础设施组件

Azure 资源

  • Azure 容器应用环境托管基于消费量的扩展的机器人应用程序
  • **Azure AI Foundry(可译为“Azure AI 工坊”或根据具体语境译为“Azure AI 制造平台/开发平台”,但“工坊”可能更贴近其字面意义,若强调其作为开发或构建AI解决方案的平台,也可考虑其他表述)**带有GPT-4o部署的认知服务账户
  • **Cosmos DB(中文可译为“宇宙数据库”或保持原名,根据上下文决定是否需要具体翻译)**用于MCP配置的无服务器NoSQL数据库
  • 密钥保管库安全存储机密和证书
  • 虚拟网络使用子网和DNS区域的私有网络
  • **应用洞察(或应用分析)**监测与遥测
  • 托管身份服务的Azure AD身份验证

网络构建(或人际网络拓展)

  • 私有DNS区域用于 privatelink.cognitiveservices.azure.com, privatelink.services.ai.azure.com,以及 privatelink.openai.azure.com
  • 虚拟网络与专用子网的集成
  • Cosmos DB 和认知服务的专用终结点
  • 用于流量控制的网络安全组

关键依赖项

核心依赖项

  • @azure/ai-agents (^1.2.0-beta.1): 用于对话式人工智能的 Azure AI Agents SDK
  • @azure/ai-projects (^1.0.0-beta.10): 用于AI Foundry集成的Azure AI Projects客户端
  • @azure/cosmos (^4.5.1): 用于MCP服务器配置存储的Cosmos DB SDK
  • @azure/identity (^4.10.2): Azure 身份验证和托管身份
  • @microsoft/agents-hosting (^1.0.15): Microsoft Teams 机器人框架及托管服务
  • express (^5.1.0): 网络服务器框架

开发依赖项

  • TypeScript (^5.8.3): 类型安全的JavaScript开发
  • @microsoft/m365agentsplayground (^0.2.16): M365 代理的测试环境
  • npm-run-all (^4.1.5): 并行脚本执行

数据模型

MCP服务器配置

interface MCPServer {
    serverLabel: string;     // Friendly name for the server
    serverUrl: string;       // HTTP endpoint for the MCP server
    allowedTools: string[];  // Array of permitted tool names
}

interface MCPServersDocument {
    id: string;              // Document identifier
    servers: MCPServer[];    // Array of MCP server configurations
}

环境设置

所需的环境变量

  • TENANT_ID / tenantIdAzure AD 租户 ID
  • CLIENT_ID / clientIdTeams 客户端应用程序 ID
  • AZURE_CLIENT_ID托管身份客户端ID
  • AI_FOUNDRY_ENDPOINTAI Foundry服务终端(或服务端点)
  • AI_FOUNDRY_MODELAI模型部署名称(gpt-4o)
  • AI_FOUNDRY_CLIENT_IDAI Foundry 认证客户端 ID
  • COSMOS_ENDPOINTCosmos DB 帐户终结点
  • COSMOS_DBCosmos DB 数据库名称
  • MCP_LABBY_KEYMCP Labby服务的API密钥
  • graph_connectionName用于身份验证的图连接名称

本地开发

  1. 复制环境配置:

    cp teamsbot/env.sample teamsbot/.env
    cp appPackage/env.sample appPackage/.env
    cp terraform/env.sample terraform/.env
    
  2. 安装依赖项:

    cd teamsbot
    npm install
    
  3. 构建并运行:

    npm run build
    npm start
    

部署

Terraform 基础设施

该基础设施在Terraform中定义,包含以下组件:

  • 资源组包含所有Azure资源的容器
  • 虚拟网络使用子网的私有网络
  • 容器应用环境机器人的托管环境
  • **AI Foundry(人工智能铸造厂/人工智能实验室/人工智能平台)**配备GPT-4o部署的认知服务
  • **Cosmos DB(中文可译为“宇宙数据库”或保持原英文名,根据上下文选择是否翻译)**MCP服务器配置数据库
  • 密钥库安全的秘密存储
  • 应用注册用于Teams集成的Azure AD应用程序

使用以下方式进行部署:

cd terraform
terraform init
terraform plan
terraform apply

容器部署

该应用程序已被容器化,并部署到 Azure 容器应用中:

  • 图像: ghcr.io/implodingduck/teams-mcp-client:latest
  • 扩展/缩放基于HTTP的自动扩展(1-1个副本)
  • 资源0.25个CPU,0.5Gi内存
  • 港口3978(Teams Bot Framework 端点)

Teams 应用程序包

Teams 应用的清单已配置为:

  • 机器人集成自定义引擎代理,支持个人和团队范围
  • 认证Microsoft Graph 集成
  • 权限身份和团队成员消息功能

构建并发布Teams应用:

cd appPackage
./publish.sh

使用方法

团队命令

  • /status检查认证状态
  • /me通过 Microsoft Graph 获取用户配置文件信息
  • /reset清除对话状态
  • /diag显示诊断信息

MCP集成

该机器人自动连接到已配置的MCP服务器,并通过自然语言对话提供对这些服务器工具的访问权限。MCP服务器的配置存储在Cosmos DB中,并且可以包含各种外部服务和API的工具。

许可证

这个项目采用MIT许可证授权。请参阅 许可证 文件中有详细信息。