Supports containerized deployment of the MCP server and its dependencies
Provides persistent storage for chat and message history with full querying capabilities
Enables Microsoft Teams chat integration, allowing message sending/receiving, chat creation, and message history access
Uses OpenAI API for generating embeddings used in vector search functionality
Powers the Information Retrieval server for advanced hybrid search capabilities (BM25 + vector search) with pgvector extension
Teams Messenger MCP App
This project implements a pure Model Context Protocol (MCP) server that bridges Microsoft Teams and MCP-compatible clients (LLMs, agentic frameworks, and a rich CLI MCP client). All features are exposed via MCP tools, resources, and events—no REST API endpoints.
Features
Microsoft Teams chat/message integration via MCP
PostgreSQL-based Information Retrieval (IR) server for advanced search capabilities
Persistent storage in DuckDB for chat/message history
Hybrid semantic and lexical search (BM25 + vector, FlockMTL-style)
CLI for login/token management and a rich MCP client for local testing
Polling-based event emission for new messages
Live event streaming and search for LLMs and CLI
Single-agent (bot) account, not multi-user
Architecture
All chat/message/search logic is via MCP tools/resources/events
Teams MCP server uses DuckDB for message storage
IR server provides advanced search capabilities with PostgreSQL and pgvector
IR server exposes an HTTP API for MCP server communication
Installation
Requirements
Python 3.9+
Docker and Docker Compose (for containerized deployment)
Option 1: Local Installation
1. Clone the repository
2. Install dependencies
3. Configure environment variables
Copy the template and fill in your Azure AD/Teams credentials:
See the table below for variable descriptions.
Option 2: Docker Deployment (Recommended)
1. Clone the repository
2. Configure environment variables
Copy the template and fill in your credentials:
3. Build and start services
Environment Variables (.env)
Variable | Description | Example / Default |
AZURE_CLIENT_ID | Azure AD Application (client) ID |
|
AZURE_CLIENT_SECRET | Azure AD Application secret |
|
AZURE_TENANT_ID | Azure AD Tenant ID |
|
AZURE_APP_OBJECT_ID | Azure AD Application object ID |
|
DUCKDB_PATH | Path to DuckDB database file |
|
TOKEN_PATH | Path to store persistent token cache |
|
POLL_INTERVAL | Polling interval (seconds) for new messages |
|
DEMO_MODE | Set to
for mock/demo mode (no real Teams API calls) |
|
OPENAI_API_KEY | OpenAI API key for embedding generation |
|
POSTGRES_USER | PostgreSQL username |
|
POSTGRES_PASSWORD | PostgreSQL password |
|
POSTGRES_DB | PostgreSQL database name |
|
IR_SERVER_HOST | IR server hostname |
|
IR_SERVER_PORT | IR server port |
|
Running the MCP Server
Local Mode (without Docker)
Docker Mode (All Services)
To check logs:
Demo Mode (no real Teams API calls)
Set DEMO_MODE=true
in your .env
and run as above.
CLI Usage
1. Login and Token Management
2. Rich CLI MCP Client
All commands below use the MCP stdio protocol to talk to the server.
List chats
Get messages from a chat
Send a message
Create a new 1:1 chat
Search messages (hybrid, BM25, or vector)
Stream new incoming messages (live event subscription)
IR Server Usage
The IR server provides advanced search capabilities with PostgreSQL and pgvector. It exposes an HTTP API for MCP server communication.
IR Server API Endpoints
1. Health Check
2. List Available Tools
3. Search Content
Body:
4. Index Content
Body:
For more detailed IR server documentation, see ir/README.md.
Search and Event Streaming
Hybrid search: Combines BM25 and vector search with LLM reranking
Live streaming: Subscribe to
messages/incoming
for real-time updates
Development & Extension
Add new MCP tools/resources in
mcp_server/server.py
Extend Teams integration in
teams/graph.py
Modify IR capabilities in the IR server
Add analytics, summarization, or RAG features using DuckDB, PostgreSQL, and LLMs
Use the CLI as a test harness for all MCP features
Troubleshooting & FAQ
Login fails: Check your Azure AD credentials and
.env
valuesNo messages appear: Ensure polling is running and your bot account is in the Teams chat
DuckDB errors: Check file permissions and paths in
.env
IR server not responding: Check Docker logs and ensure the container is running
Demo mode: Set
DEMO_MODE=true
for local testing without real Teams
References
For full product details, see specs/app-spec.md
.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
A Model Context Protocol server that bridges Microsoft Teams and MCP-compatible clients, enabling chat integration, message handling, and advanced search capabilities without REST API endpoints.
Related MCP Servers
- AsecurityAlicenseAqualityA Model Context Protocol server that enables interaction with Microsoft Dynamics 365 CRM from Claude Desktop, allowing users to retrieve, create, and update CRM data through natural language.Last updated -514MIT License
- -securityFlicense-qualityA Model Context Protocol server that bridges Microsoft Teams with MCP-compatible clients (LLMs, agentic frameworks, CLI), enabling chat integration, message search, and event streaming without traditional REST API endpoints.Last updated -
- -securityAlicense-qualityAn implementation of the Model Context Protocol (MCP) server that enables multiple clients to connect simultaneously and handles basic context management and messaging with an extendable architecture.Last updated -MIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that provides AI assistants with access to Microsoft Teams, enabling interaction with teams, channels, chats, and organizational data through Microsoft Graph APIs.Last updated -198718MIT License