msteams-local-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MSTEAMS_LEVELDB | No | Path to the Microsoft Teams LevelDB directory. If not set, auto-discovery per OS is used. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List the Teams accounts (tenant/user contexts) in the local cache. Each: |
| list_conversationsB | List chats/channels (id, title, type), optionally filtered by |
| read_conversationC | Return up to |
| search_messagesB | Case-insensitive substring search across cached messages. Optional |
| recent_messagesA | Messages received in the last Ideal for 'what did I get while I was away'. Filter by |
| mentionsA | @-mentions of you (someone @mentioned you), newest first, with content.
|
| unread_messagesA | Unread items needing attention = your UNREAD @-mentions. ⚠️ The local Teams cache has NO general read marker (per-message read state is
not stored on disk), so true 'all unread' can't be derived. Unread @-mentions
are the reliable signal. For 'everything that arrived while I was away', use
|
| overviewA | Who messaged you: recent activity grouped by conversation, newest first. Per conversation: title, message count, distinct senders, last message + time. Great first call to get the lay of the land before drilling in. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Most tools are distinct, but mentions and unread_messages overlap significantly — both describe '@-mentions' and read/unread state. The descriptions try to disambiguate (unread_messages explicitly warns it's just unread @-mentions), but an agent could easily misselect between them or between recent_messages and read_conversation.
The naming follows a verb_noun pattern (list_accounts, list_conversations, read_conversation, search_messages). However 'recent_messages', 'mentions', and 'overview' break the pattern by being noun-phrases rather than verb_noun. Also verb choice is inconsistent — 'list', 'read', 'search', 'recent', 'mentions', 'overview'. Mix of verb-led and noun-led names.
8 tools is a reasonable, well-scoped count for a Teams-cache read-only server. There are no redundant padding tools. Could arguably be condensed (mentions + unread_messages overlap), but 8 is within a comfortable range.
The server is read-only covering account listing, conversation listing/reading, searching, recency, mentions/unread, and overview. However there are notable gaps: no way to fetch a single specific message by ID, no filter by sender, no pagination beyond simple 'limit', and no ability to drill into unread across all conversation types beyond mentions. The surface is functional for typical 'what happened' queries but lacks finer-grained access.