zaungast
zaungast is a read-only, offline MCP server that queries your local Microsoft Teams disk cache without any cloud API, credentials, or network calls.
list_conversations– Browse your Teams sidebar: newest conversations, filtered by kind (1:1, group, channel, meeting), participant, title, or time range.read_messages– Read a conversation's messages in chronological order; supports cursor-based pagination, time-windowed reading, centering around a specific message, and reaction details.search– Full-text search across all messages with filters for sender, conversation, kind, date range, mentions, attachment presence, and exclusions.list_events– Retrieve metadata for calendar meetings and appointments (no join URLs).list_calls– Browse call history: 1:1 and group calls with direction, duration, missed status, and recording pointers.top_topics– Discover trending or distinctive topics over a time window (1d/7d/30d), optionally scoped to a person or conversation, with an example message per topic.find_person– Resolve a name or nickname to a canonical person with their stable handle, message count, and last-contact time; supports browsing the full roster.describe_schema– Inspect the raw Teams IndexedDB structure and propose field mappings — useful when a Teams update changes the database layout.
It is strictly read-only, requires no credentials or tokens, does not use the Microsoft Graph API, and produces token-economical output designed for efficient use with AI/coding agents.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zaungastfind messages from Anna about the deploy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zaungast
zaungast (German: someone who watches over the fence without joining in) is a read-only, offline MCP server for Teams — search chats, read conversations, surface trending topics, and find people straight from the local on-disk cache, with no Graph API, no cloud, and no credentials, and token-economical output for coding agents (Claude Code, Claude Desktop, …).
The new Teams client stores your chats in a local on-disk database; zaungast reads a copy of it directly and serves it over MCP, so your agent can pull in Teams context — "what was decided about the release date", "catch me up on a channel I muted", "what's my team been discussing this week" — without you copy-pasting, and without any cloud API.
Local & offline — reads the on-disk Teams cache. No MS Graph API, no network calls.
No credentials — nothing to log in to, no tokens, no permissions to grant.
Read-only & safe — the Teams files are only ever read/copied, never written, locked, or modified. It cannot corrupt your Teams data.
Token-economical — every tool returns compact, shaped output, never bulk dumps.
Zero-config — auto-discovers the local Teams database; just register and go.
⚠️ Windows & macOS (new Teams / WebView2), Node.js ≥ 22.5. Both use the same Chromium/WebView2 store, so the reader is identical; the local database is auto-discovered on each, or point
TEAMS_LEVELDB_DIRat it manually — see requirements. Not affiliated with or endorsed by Microsoft. It reads your own local data on your own machine.
Installation
npx -y zaungast fetches and runs the server, so registering it in your MCP client is the
whole install. No environment variables are needed in the common case — the local Teams
database is auto-discovered.
Claude Code
Normal case — the Teams database is auto-discovered, so no variables are needed:
claude mcp add zaungast -- npx -y zaungastAdd --scope user to make it available in every project. Verify with claude mcp list
(expect zaungast … ✓ Connected), then open a new session.
Only if auto-discovery fails or you have multiple profiles, set TEAMS_LEVELDB_DIR
explicitly (the -e flag goes before the --) — see
finding the Teams database folder:
claude mcp add zaungast \
-e TEAMS_LEVELDB_DIR="C:\Users\me\AppData\Local\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\EBWebView\WV2Profile_tfw\IndexedDB\https_teams.microsoft.com_0.indexeddb.leveldb" \
-- npx -y zaungastCodex
Add to ~/.codex/config.toml (or run codex mcp add zaungast -- npx -y zaungast):
[mcp_servers.zaungast]
command = "npx"
args = ["-y", "zaungast"]
# The Teams database is auto-discovered, so no path is needed. To set or override it,
# delete the "#" below and point it at your …indexeddb.leveldb folder:
# env = { TEAMS_LEVELDB_DIR = "/full/path/to/https_teams.microsoft.com_0.indexeddb.leveldb" }Claude Desktop / other clients
Add to your client's MCP config (claude_desktop_config.json, .mcp.json, …):
{
"mcpServers": {
"zaungast": { "command": "npx", "args": ["-y", "zaungast"] }
}
}If you want to set or override a variable, use this form instead:
{
"mcpServers": {
"zaungast": {
"command": "npx",
"args": ["-y", "zaungast"],
"env": {
"TEAMS_LEVELDB_DIR": "/full/path/to/https_teams.microsoft.com_0.indexeddb.leveldb"
}
}
}
}TEAMS_LEVELDB_DIR is optional — the database is auto-discovered. Set it only if discovery
fails or to pin a specific profile. From-source setup and other clients are covered in the
installation docs.
Related MCP server: Teams Messenger MCP App
Tools
Tool | What it does |
| Your Teams sidebar — newest conversations, or filter by kind/participant/title/time. |
| Browse one conversation's messages in story order (window / date-range / page back). |
| Read one channel reply-chain in full (root + all replies). |
| One message in full — complete untruncated body + reactions, by conversation + |
| Full-text search + filters (from, in, kind, |
| Calendar meetings & appointments (forward window by default); metadata-only, join-URLs never exposed. |
| Call history — 1:1/group calls with direction, duration, missed, and recording pointers. |
| Rank distinctive/trending topics over a window, vs your baseline, with an example each. |
| Resolve a name/nickname to a canonical person + handle, with contact stats. |
| Recovery tool: propose a field mapping when a Teams update changes the DB layout. |
Full reference: tools documentation.
Environment variables
All optional — zaungast works with no configuration. Pass them via your MCP client's env
block (as above).
Var | Default | Notes |
| auto-discovered | Absolute path to the |
|
| Refresh mode: |
| unset | Read a static copy of the database directly (offline analysis); skips discovery and live refresh. |
|
| Ingest engine: |
TEAMS_LEVELDB_DIR points at the folder ending in .indexeddb.leveldb (the one holding
CURRENT, MANIFEST-*, *.ldb/*.log) — not its parent IndexedDB directory:
# Windows
C:\Users\<you>\AppData\Local\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\EBWebView\<profile>\IndexedDB\https_teams.microsoft.com_0.indexeddb.leveldb
# macOS
/Users/<you>/Library/Containers/com.microsoft.teams2/Data/Library/Application Support/Microsoft/MSTeams/EBWebView/<profile>/IndexedDB/https_teams.microsoft.com_0.indexeddb.leveldb<profile> is usually WV2Profile_tfw. Use the full absolute path in JSON configs (e.g. Claude
Desktop) — environment placeholders like ~ or %LOCALAPPDATA% aren't expanded there.
Privacy & safety
Stays local — no network calls; reads data already on your machine and serves it to your local agent over stdio.
Cannot harm Teams — no code path writes to, locks, or memory-maps the Teams directory; only read-and-copy.
Images/files are URL-only — chat images live in Teams' cloud behind auth; zaungast notes that an attachment exists but never fetches it and never handles credentials.
More in the privacy & safety docs.
Documentation
Full documentation — tools reference, how it works, configuration, privacy, troubleshooting, and development — lives at https://zaungast.readthedocs.io/.
License
Apache 2.0 © Mikael Beyene. Not affiliated with or endorsed by Microsoft. "Microsoft Teams" is a trademark of Microsoft Corporation; this project only reads your own local data.
Available Tools
6 toolsdescribe_schemaDescribe / recover schemaA
Inspect the raw Teams IndexedDB stores and PROPOSE a field mapping. Use when tools report the schema is unrecognized (after a Teams update), or to inspect the DB structure. Proposes only — applies nothing; a human verifies the proposal and saves it as a new schema version.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max stores to list (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully covers behavioral traits: it 'inspects' (read-only) and 'proposes only — applies nothing', so no destructive action. Clear about its safe, non-modifying nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with clear front-loading of purpose. Efficient but could be slightly more concise (e.g., parentheses). Still very well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has one optional parameter and no output schema. Description explains purpose, usage, and behavior adequately. Lacks mention of output format but sufficient for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'limit' is fully described in the schema (100% coverage). The description adds no additional semantic info beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it inspects raw IndexedDB stores and proposes a field mapping. Distinct from sibling tools which deal with people, conversations, messages, search, and topics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use: when schema is unrecognized after a Teams update or to inspect DB structure. Also clarifies it only proposes, not applies, and requires human verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_personFind a personA
Resolve a name/nickname fragment to a person's canonical name and stable p:handle, with message count and last-contact time. Use when a name is ambiguous or unrecognized, or when you need contact stats or a p:handle. For ordinary filtering, just pass a name substring directly to search/read_messages 'from'/'participant' — don't call this first. Omit query to scan the roster (most-talked-to first).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | default 8 | |
| query | No | name substring, or a p:handle to expand; omit to scan the roster |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses output fields (canonical name, p:handle, message count, last-contact time) and the scanning behavior ('most-talked-to first' when query omitted). It does not mention any destructive actions, which is appropriate. A slight improvement would be to confirm the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, usage guidelines, and extra behavior. No redundancy. Efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without annotations or output schema, the description covers input/output behavior but fails to explain the 'n' parameter. Since 'n' defaults to 8 and caps at 25, its role (number of results?) is not fully clarified. This gap reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and descriptions in schema are decent. The tool description adds value by explaining the behavior of omitting query and the ordering. However, the 'n' parameter is not mentioned in the description, which could be overlooked.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves name fragments to canonical names and p:handles, with contact stats. It distinguishes from siblings by explicitly advising when to use search/read_messages instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (ambiguous name, need contact stats) and when not to (ordinary filtering, use search/read_messages). Provides alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsList conversationsA
Your Teams sidebar: the newest N conversations (default), or filter by kind/participant/title/time. Note: this reads the LOCAL Teams cache — history is the synced slice on this device, not the full server archive.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | how many (default 12) | |
| kind | No | ||
| query | No | match conversation title or participant | |
| since | No | ISO date or relative like -7d/-24h | |
| participant | No | display-name substring of a participant | |
| include_empty | No | include 0-message conversations (team roots); off by default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description warns that it reads the local Teams cache, not the full server archive, which is a critical behavioral trait. With no annotations provided, this disclosure adds value. It does not mention any destructive actions, which is consistent with a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences cover purpose, filters, and a critical caveat. Every sentence is meaningful and efficient, front-loading the main function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about the return format or fields, which would help with no output schema. The caveat adds context, but overall completeness is moderate for a tool with 6 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so baseline is 3. The description lists filter options but does not add significant detail beyond the schema. It groups parameters but does not clarify formats or defaults beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists conversations with default newest N and filtering by kind/participant/title/time. The verb 'list' and resource 'conversations' are specific, and the tool is distinct from siblings like search or read_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for browsing conversations with default and filter options. However, it does not explicitly state when not to use it or compare to alternatives, though sibling tools suggest different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_messagesRead a conversationA
Read one conversation's messages in STORY ORDER (oldest→newest). Target by handle (c:xxxx) or title/participant substring. Page back with the returned older: cursor, or center on a message with around:. Note: this reads the LOCAL Teams cache — history is the synced slice on this device, not the full server archive.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | default 40 | |
| since | No | ||
| until | No | ||
| around | No | a message id (the m:… value from a search hit) to center a window on | |
| cursor | No | the older:… value from a previous result, to page back | |
| reactions | No | "full" lists every reactor by name (default shows a capped summary) | |
| conversation | Yes | conversation handle (c:xxxx) or title/participant substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses critical behavior: it reads the local Teams cache only, not the full server archive, and explains the story order and pagination mechanisms. This provides complete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose and order, second explains targeting and pagination, third notes the cache limitation. No unnecessary words, well-organized for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema, the description covers key behavioral aspects: targeting, pagination, ordering, and cache limitation. It could mention the limit default (in schema) or time filtering, but is sufficiently complete for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71% (some parameters lack descriptions like 'since' and 'until'). The description adds value beyond the schema by explaining targeting by handle/substring, pagination with cursor, and centering with around. It compensates for missing schema details but doesn't explicitly cover all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'one conversation's messages'. It specifies the story order (oldest→newest) and how to target by handle or substring, distinguishing it from siblings like list_conversations or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool: target by handle or substring, page back with cursor, center with around. It implies usage for reading a full conversation in order, but lacks explicit comparison to siblings like search or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch messagesA
Full-text search across all messages with filters. Empty query = filtered browse. from/in accept display-name / title substrings or handles. mentions_me finds messages that @mention you. Note: this reads the LOCAL Teams cache — history is the synced slice on this device, not the full server archive.
| Name | Required | Description | Default |
|---|---|---|---|
| in | No | conversation: title substring or c:handle | |
| from | No | sender: display-name substring or p:handle | |
| kind | No | ||
| limit | No | default 20 | |
| query | No | FTS query; omit to browse by filters only | |
| since | No | ||
| until | No | ||
| exclude | No | c:/p: handles to exclude from results | |
| mentions_me | No | ||
| has_attachment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it reads the local Teams cache, not the full server archive - a critical behavioral trait. No annotations provided, so this is valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy: purpose, parameter hints, and behavioral note. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, key parameter usage, and the local cache limitation. Missing output details but acceptable given no output schema. Adequate for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema description coverage, the description adds meaning for from/in and mentions_me, but leaves many parameters (since, until, kind, etc.) without additional explanation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'full-text search across all messages with filters' and distinguishes from siblings like read_messages. The empty query behavior as filtered browse adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on empty query, from/in usage with substrings/handles, and mentions_me flag. Lacks explicit when-not-to-use vs siblings, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_topicsTrending topicsA
Distinctive/trending topics over a window (vs your baseline), overall or scoped to a person/conversation. Returns each topic with an exemplar message. Note: this reads the LOCAL Teams cache — history is the synced slice on this device, not the full server archive.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | default 8 | |
| scope | No | "conversation:<c:handle or title>" or "person:<name or p:handle>" | |
| since | No | arbitrary window start (ISO or -7d); overrides window | |
| until | No | arbitrary window end (ISO or -1d) | |
| window | No | default 7d; ignored if since/until given | |
| exclude | No | words, or c:/p: handles, to exclude | |
| include_bots | No | include bot/app senders (excluded by default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adds important context by disclosing that it reads the local Teams cache and not the full server archive. However, it does not mention other behavioral traits like whether results are sorted or if pagination is supported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a note, all essential. It is front-loaded with the core purpose and scoping, then adds a critical limitation. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and moderate complexity (7 parameters, none required), the description adequately explains purpose, scoping, and the local cache limitation. It could be improved by mentioning the exemplar message structure but is sufficient for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds limited meaning beyond the schema. It mentions 'window' and 'scope' conceptually but does not elaborate on format or edge cases for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns distinctive/trending topics over a window, with scoping to overall, person, or conversation. It distinguishes from sibling tools like read_messages or search by focusing on trending analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for trending topics and mentions scoping, but lacks explicit guidance on when to use this tool vs alternatives like search or list_conversations. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.2.0- First observed
describe_schema - First observed
find_person - First observed
list_conversations - First observed
read_messages - First observed
search - First observed
top_topics
TDQS
Scored across 6 tools
Each tool has a clear and distinct purpose: schema inspection, person resolution, conversation listing, message reading, full-text search, and topic extraction. No overlap in functionality.
All tool names use consistent snake_case and follow a verb_noun pattern (describe_schema, find_person, list_conversations, read_messages, top_topics), with 'search' as a minor deviation but still common and predictable.
6 tools is well-scoped for a Teams data access server, covering essential read and analysis operations without being overwhelming or sparse.
The tool set covers reading and analyzing local cache data comprehensively (schema, people, conversations, messages, search, topics). Minor gaps include lack of write operations and detailed conversation metadata retrieval, but this aligns with the stated read-only purpose.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Your own WhatsApp as an MCP server: read, search and send from any MCP client.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA 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.1-
- FlicenseNot gradedqualityDmaintenanceA 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.-
- AlicenseAqualityDmaintenanceA self-hosted, read-only Slack MCP server that runs locally and provides read-only access to Slack channels, messages, and users via the Slack Web API, with no third-party intermediary.7MIT
- AlicenseCqualityAmaintenanceLocal-first, read-only MCP server for searching and retrieving cited evidence from archived Telegram chats, including transcripts and media metadata.92MIT