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
cd mcp-teams2.安装依赖项
pip install -r requirements.txt3.配置环境变量
复制模板并填写您的Azure AD/团队凭据:
cp .env.template .env
# Edit .env and fill in your Azure AD and other settings变量说明见下表。
选项2:Docker部署(推荐)
1.克隆存储库
git clone
cd mcp-teams2.配置环境变量
复制模板并填写您的凭据:
cp .env.template .env
# Edit .env and fill in your settings3.构建和启动服务
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.pyDocker模式(所有服务)
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 logout2.丰富的CLI MCP客户端
以下所有命令都使用MCP stdio协议与服务器通信。
列出聊天记录
python cli/mcp_client.py list_chats从聊天中获取消息
python cli/mcp_client.py get_messages 发送消息
python cli/mcp_client.py send_message "Hello from CLI!"创建新的1:1聊天
python cli/mcp_client.py create_chat 搜索消息(混合、BM25或矢量)
python cli/mcp_client.py search_messages "project update" --mode hybrid --top_k 5流式传输新的传入消息(实时事件订阅)
python cli/mcp_client.py streamIR服务器使用情况
IR服务器通过PostgreSQL和pgvector提供高级搜索功能。它公开了一个用于MCP服务器通信的HTTP API。
IR服务器API端点
1.健康检查
GET http://localhost:8090/2.列出可用工具
GET http://localhost:8090/api/tools3.搜索内容
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.
