Teams消息桥接服务

一个基于Model Context Protocol (MCP)的服务,用于桥接Microsoft Teams和MCP兼容客户端(如LLMs、代理框架和CLI MCP客户端),提供聊天/消息集成、高级搜索功能和持久存储。

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

使用说明

Teams Messenger MCP应用程序

该项目实现了一个纯模型上下文协议(MCP)服务器,该服务器连接了Microsoft Teams和MCP兼容客户端(LLM、代理框架和丰富的CLI MCP客户端)。所有功能都是通过MCP工具、资源和事件公开的,没有REST API端点。

特性

  • 通过MCP集成Microsoft Teams聊天/消息
  • 基于PostgreSQL的信息检索(IR)服务器,具有高级搜索功能
  • 在DuckDB中持久存储聊天/消息历史记录
  • 语义和词汇混合搜索(BM25+向量,FlockMTL风格)
  • 用于登录/令牌管理的CLI和用于本地测试的丰富MCP客户端
  • 基于轮询的新消息事件发布
  • 实时事件流和搜索LLM和CLI
  • 单代理(bot)帐户,非多用户

建筑

+-------------------+      +-------------------+      +-------------------+
|   CLI MCP Client  |<---->|    MCP Server     |<---->|  Microsoft Teams  |
| (rich terminal UI)|      | (Python, FastMCP) |      |  (Graph API)      |
+-------------------+      +-------------------+      +-------------------+
         |                        |                          
         |                        v                          
         |                +-------------------+      +-------------------+
         |                |     DuckDB DB     |      |    IR Server      |
         |                +-------------------+      | (PostgreSQL, API) |
                                                     +-------------------+
                                                              |
                                                              v
                                                     +-------------------+
                                                     |  PostgreSQL DB    |
                                                     |  (with pgvector)  |
                                                     +-------------------+
  • 所有聊天/消息/搜索逻辑都是通过MCP工具/资源/事件实现的
  • Teams MCP服务器使用DuckDB进行消息存储
  • IR服务器通过PostgreSQL和pgvector提供高级搜索功能
  • IR服务器公开用于MCP服务器通信的HTTP API

安装

需求

选项1:本地安装

1.克隆存储库

git clone <your-repo-url>
cd mcp-teams

2.安装依赖项

pip install -r requirements.txt

3.配置环境变量

复制模板并填写您的Azure AD/团队凭据:

cp .env.template .env
# Edit .env and fill in your Azure AD and other settings

变量说明见下表。

选项2:Docker部署(推荐)

1.克隆存储库

git clone <your-repo-url>
cd mcp-teams

2.配置环境变量

复制模板并填写您的凭据:

cp .env.template .env
# Edit .env and fill in your settings

3.构建和启动服务

docker-compose up -d

环境变量(.env)

变量 描述 示例/默认值
AZURE_CLIENT_ID AZURE AD应用程序(客户端)ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AZURE_CLIENT_CRET AZURE AD应用程序机密 your-secret
AZURE_TENANT_ID.安全AD租户ID。安全AD租户标识。 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AZURE_APP_OBJECT_ID AZURE AD应用程序对象ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DUCKDB_PATH DUCKDB数据库文件的路径 db/teams_mcp.duckdb
TOKEN_PATH 存储持久令牌缓存的路径 db/token_cache.json
POLL_INTERVAL 新消息的轮询间隔(秒) 10
DEMO_MODE 设置为 true 用于模拟/演示模式(没有真正的Teams API调用) false
OPENAI_API_KEY 用于嵌入生成的OPENAI API密钥 sk-...
PostgreSQL用户名 postgres
PostgreSQL密码 postgres
PostgreSQL数据库名称 mcp_ir
IR_SERVER_HOST IR服务器主机名 ir_server
IR_SERVER_PORT IR服务器端口 8090

运行MCP服务器

本地模式(无Docker)

python mcp_server/server.py

Docker模式(所有服务)

docker-compose up -d

要检查日志,请执行以下操作:

docker-compose logs -f teams_mcp  # Teams MCP server logs
docker-compose logs -f ir_server  # IR server logs

演示模式(没有真正的Teams API调用)

集 DEMO_MODE=true 在你的 .env 并如上所述运行。

CLI使用情况

1.登录和令牌管理

python cli/login.py login
python cli/login.py status
python cli/login.py logout

2.丰富的CLI MCP客户端

以下所有命令都使用MCP stdio协议与服务器通信。

列出聊天记录

python cli/mcp_client.py list_chats

从聊天中获取消息

python cli/mcp_client.py get_messages <chat_id>

发送消息

python cli/mcp_client.py send_message <chat_id> "Hello from CLI!"

创建新的1:1聊天

python cli/mcp_client.py create_chat <user_id_or_email>

搜索消息(混合、BM25或矢量)

python cli/mcp_client.py search_messages "project update" --mode hybrid --top_k 5

流式传输新的传入消息(实时事件订阅)

python cli/mcp_client.py stream

IR服务器使用情况

IR服务器通过PostgreSQL和pgvector提供高级搜索功能。它公开了一个用于MCP服务器通信的HTTP API。

IR服务器API端点

1.健康检查

GET http://localhost:8090/

2.列出可用工具

GET http://localhost:8090/api/tools

3.搜索内容

POST http://localhost:8090/api/tools/search

主体:

{
  "query": "your search query",
  "search_type": "hybrid",
  "limit": 10
}

4.索引内容

POST http://localhost:8090/api/tools/index_content

主体:

{
  "content": "Text content to index",
  "source_type": "teams",
  "metadata": {
    "author": "User Name",
    "created": "2025-04-01T12:00:00Z"
  }
}

有关更详细的IR服务器文档,请参阅 ir/README.md.

搜索和事件流

  • 混合搜索:将BM25和矢量搜索与LLM重新排序相结合
  • 直播:订阅 messages/incoming 用于实时更新

开发与扩展

  • 在中添加新的MCP工具/资源 mcp_server/server.py
  • 扩展团队集成 teams/graph.py
  • 修改IR服务器中的IR功能
  • 使用DuckDB、PostgreSQL和LLM添加分析、摘要或RAG功能
  • 将CLI用作所有MCP功能的测试线束

故障排除和常见问题

  • 登录失败:检查您的Azure AD凭据,然后 .env 价值观
  • 未显示任何消息:确保投票正在运行,并且您的机器人帐户在团队聊天中
  • DuckDB错误:检查中的文件权限和路径 .env
  • IR服务器没有响应:检查Docker日志并确保容器正在运行
  • 演示模式:设置 DEMO_MODE=true 用于没有真实团队的本地测试

参考文献


有关完整的产品详细信息,请参阅 specs/app-spec.md.