limzo-mcp
OfficialProvides access to public Telegram group statistics such as leaderboards, activity trends, member levels, weekly awards, and moderation summaries for groups with public Limzo stats pages.
limzo-mcp
MCP (Model Context Protocol) server for Limzo — read-only public Telegram group statistics: leaderboards, activity trends, member levels, weekly award history, and moderation summaries for any group with a public Limzo stats page.
No API key, no account. Everything served is already public at limzo.com/s/<slug> — payloads never include verbatim member messages.
Tools
Tool | What it returns |
| Search/browse the public group directory (slug, title, members, language) |
| Full public stats for one group by slug: activity, top members, levels, awards, moderation summary |
| Network-wide Limzo stats |
Related MCP server: Shadow-tg
Quick start
The server is hosted — this package is a stdio bridge for MCP clients:
npx limzo-mcpClaude Desktop / Claude Code
{
"mcpServers": {
"limzo": { "command": "npx", "args": ["-y", "limzo-mcp"] }
}
}Cursor / other MCP clients
Same pattern — command npx, args ["-y", "limzo-mcp"].
Direct HTTP (streamable MCP, no bridge)
Clients that support remote MCP can connect straight to:
https://limzo.com/api/public/mcpExample
Ask an assistant "How active is the hipo_chat Telegram group?" and it calls get_group_stats:
// get_group_stats { "slug": "hipo" } → (response trimmed)
{
"group": { "title": "Hipo Chat", "username": "hipo_chat", "member_count": 3920 },
"range": { "key": "7d", "label": "7 days", "days": 7 },
"stats": {
"messages": 1107,
"active_users": 236,
"mood": { "label": "Sunny", "emoji": "☀️", "positive_pct": 83 },
"top_members": [
{ "rank": 1, "name": "Josip", "messages": 238 },
{ "rank": 2, "name": "Behrang Norouzinia", "messages": 84 }
]
}
}Every value above is already public at limzo.com/s/hipo — the server never exposes verbatim member messages. Full response shape: openapi.json.
What is Limzo?
A Telegram community bot: public shareable stats pages, member levels/badges/achievements, weekly highlights and reports, mini-games, and smart anti-spam moderation (newcomer captcha, impersonator guard, link safety scan, /warn warnings, language lock, cross-group network shield). Free to start: @LimzoRobot.
Docs: https://limzo.com/docs/
llms.txt: https://limzo.com/llms.txt
Listed on
Official MCP Registry (com.limzo/telegram-group-stats) · Glama · Smithery · npm
License
MIT
Available Tools
3 toolsget_global_statsGet network-wide Limzo totalsARead-onlyInspect
Call this for network-wide numbers across all public Telegram groups tracked by Limzo (group count, messages, active users, replies, reactions, karma — 7-day and all-time) plus durable lifetime totals (messages analyzed, members tracked, spam messages removed) and the current top groups by Limzo Score. For finding a specific group, prefer list_groups.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| docs | No | Human-readable API documentation. |
| stats | Yes | |
| openapi | No | Machine-readable OpenAPI document for the REST API. |
| top_groups | No | Current top public groups by Limzo Score. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds useful scope context: network-wide coverage, 7-day/all-time windows, durable lifetime totals, and top groups. It does not contradict annotations. Since the output schema exists, the lack of return format description is acceptable.
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 a single, front-loaded sentence listing key outputs, followed by one concise sentence for guidance. No wasted words; every clause adds information.
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 tool is simple (0 params) and has an output schema. The description thoroughly covers the returned data (metrics, timeframes, totals, top groups) and provides usage context. It is complete and self-sufficient.
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?
There are zero parameters and schema description coverage is 100% (vacuously). No parameter explanation is needed. The description adds meaning about what data is returned, which is beyond the empty 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?
The description states a specific verb ('Call this for network-wide numbers') and clearly resources ('all public Telegram groups tracked by Limzo'), with an enumerated list of metrics. It is distinct from siblings: 'For finding a specific group, prefer list_groups' explicitly differentiates it.
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?
It provides an explicit alternative: 'For finding a specific group, prefer list_groups.' This gives clear when-to-use/when-not-to-use guidance and names the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_statsGet public stats for one Telegram groupARead-onlyInspect
Call this when the user asks about the activity, health, leaderboard, mood, or trends of a specific Telegram group tracked by Limzo. slug is the last part of the group's public page URL, limzo.com/s/ (e.g. "hipo"). Returns the curated limzo.public_stats/v1 JSON: messages, replies, active members, daily series, top members, mood, reactions, language mix, the Limzo Levels ladder (lifetime XP + badge tiers), and weekly-league standings when the group has the league enabled. Optional range: 7d (default), 30d, all — the wider ranges only serve real data for groups on a paid plan and otherwise silently fall back to 7d, so check range.key in the result. Never includes verbatim member messages. For a private group (one with no public t.me handle) the member identities, the group description and member_count are withheld too: aggregates plus an anonymised leaderboard are all it returns.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The group's public slug — the last part of its limzo.com/s/<slug> URL. | |
| range | No | Stats window. Defaults to 7d. 30d/all require the group's paid plan; free groups silently fall back to 7d. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| docs | No | Human-readable API documentation. |
| group | Yes | |
| range | Yes | The range actually served — compare `key` with what you requested to detect the plan fallback. |
| stats | Yes | |
| schema | Yes | |
| openapi | No | Machine-readable OpenAPI document for the REST API. |
| generated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotation, it discloses that verbatim member messages are never included, that private groups withhold identities/description/member_count and return an anonymised leaderboard, and that wider ranges silently fall back to 7d unless the group is on a paid plan. These are important behavioral caveats an agent needs to set correct expectations.
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 trigger is front-loaded, every sentence carries distinct information, and the detailed return-field list and caveats are justified given the tool's complexity. Nothing feels redundant or padded.
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 the annotations, parameter schema, and output-schema presence, the description fully covers when to call, what to pass, what to expect, and edge cases such as paid-plan fallback and private-group anonymisation. An agent has enough context to call the tool correctly without additional inference.
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 baseline is 3, but the description adds actionable meaning: slug is tied to the URL pattern with an example, and range's default/paid-plan/fallback behavior is spelled out with the instruction to check range.key. That goes beyond simply restating parameter names.
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 opens with a clear trigger: 'Call this when the user asks about... activity, health, leaderboard, mood, or trends of a specific Telegram group' and the title states the resource as 'public stats for one Telegram group'. This clearly distinguishes it from global-stats or group-listing tools.
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?
It explicitly says when to call the tool and scopes it to a specific group, which separates it from the global/listing siblings. It does not name the alternatives directly or state explicit when-not-to-use conditions, but the trigger phrasing and 'specific group' scope are strong enough to make intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsList or search public Telegram groupsARead-onlyInspect
Call this to discover Telegram groups tracked by Limzo — to browse the directory, filter by language, or find a group's slug for get_group_stats. Optional query filters case-insensitively over group title, username, slug, and description. Optional lang (ISO 639-1, e.g. "fa", "es") keeps only groups where that language is a meaningful share of what members write — the way to answer "find active Persian/Spanish groups". Omit both to list the top groups by Limzo Score. The directory covers PUBLIC groups only — a group with no t.me handle is never listed, though it may still have a /s/ page. Each row carries a language mix (primary language + top languages as percentages); rows also include slug, title, username, plan, member_count, 7-day messages and active members, score and page URLs, plus total_matches so you can tell when more groups matched than were returned.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ISO 639-1 language code (e.g. "fa", "es", "en"). Keeps only groups where that language is a meaningful share of the group. | |
| limit | No | Maximum groups to return. Defaults to 20, capped at 50. | |
| query | No | Keyword matched case-insensitively against group title, username, slug, and description. Omit to list the top groups by Limzo Score. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| docs | No | Human-readable API documentation. |
| lang | No | The applied ISO 639-1 language filter, or null when not filtering by language. |
| query | No | The normalized search keyword, or null when listing top groups. |
| groups | Yes | |
| openapi | No | Machine-readable OpenAPI document for the REST API. |
| total_matches | Yes | Groups that matched, before the limit was applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's job was to add context, and it does: the PUBLIC-groups-only coverage rule, the Limzo Score ranking when all filters are omitted, and the total_matches signal for truncated results. The 'meaningful share of what members write' qualifier for the lang filter is behavioral nuance the structured data cannot convey. Nothing contradicts the annotations.
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 dense but every clause earns its place -- purpose, param semantics, default behavior, coverage limitation, row contents, and truncation flag. It is front-loaded with the purpose and has no filler, though it sits near the upper bound of comfortable length for a 3-parameter tool.
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 that an output schema covers return values and annotations cover the read-only safety profile, the description supplies everything else an agent needs: when to call it, param semantics, defaults, and behavioral caveats like public-only coverage and total_matches. The only omission -- an explicit word about get_global_stats -- does not undermine correct invocation.
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 baseline is 3, but the description still adds real meaning: query 'filters case-insensitively over group title, username, slug, and description', lang is pinned to ISO 639-1 with a meaningful-share semantic and an example, and the omit-both default is spelled out. It enriches both filters rather than merely restating 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?
The description states a specific verb and resource -- 'discover Telegram groups tracked by Limzo' -- and names its immediate use case of resolving a slug for get_group_stats, so an agent can place it in the workflow. It is clearly distinct from the sibling stats tools.
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 gives explicit contexts for calling it: browsing the directory, filtering by language, or finding a slug for get_group_stats, and even maps a natural-language request ('find active Persian/Spanish groups') to the lang parameter. It does not explicitly contrast itself with get_global_stats or state when to avoid it, so exclusions are left to inference.
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.
3 tool updates
v1.3.0- First observed
get_global_stats - First observed
get_group_stats - First observed
list_groups
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_group_stats targets a single group's analytics, list_groups handles discovery/search, and get_global_stats provides network-wide aggregates. No overlap or ambiguity between them.
All tool names follow a clean verb_noun snake_case pattern: get_group_stats, list_groups, get_global_stats. The list vs get distinction naturally reflects collection vs single-resource operations.
Three tools is well-scoped for a read-only analytics directory server. Each tool earns its place with no redundancy and no unnecessary surface area.
The domain is Limzo's public Telegram group analytics, and the set covers discovery (list_groups), per-group stats (get_group_stats), and global network stats (get_global_stats). For a public read-only API, this is complete with no obvious dead ends or missing lifecycle operations.
Maintenance
Related MCP Connectors
Live Telegram data: trending topics, channel profiles & metrics, post history incl. edits/deletions.
I use your linked Telegram MTProto session (Integrations → Telegram) to list groups, members, and s…
161Search 100k+ auto-verified Telegram channels, bots and groups: full-text search and top rankings.
Search 408K+ MAX channels and 86M+ posts; metrics, reactions, forwards, webhooks and usage.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceRead-only MCP access to a personal Telegram account. Allows querying chats, reading and searching messages via Streamable HTTP.-
- AlicenseNot gradedqualityBmaintenanceRead public Telegram channels from AI agents — channel metadata, posts, comments, and search. No MTProto, no Telethon, no api_id.MIT
- AlicenseNot gradedqualityCmaintenancePublic Telegram catalog MCP server: search 1.4M+ channels, groups, bots, and posts, and browse marketplace listings, with no auth or API key.1MIT
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for Telegram channels. Provides access to posts, comments, reactions, and aggregated statistics via MTProto.21 npm-