Skip to main content
Glama
LimzoCom

limzo-mcp

Official

limzo-mcp

npm version License: MIT MCP

MCP (Model Context Protocol) server for Limzo, the Telegram anti-spam and moderation bot — 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

list_groups

Search/browse the public group directory (slug, title, members, language)

get_group_stats

Full public stats for one group by slug: activity, top members, levels, awards, moderation summary

get_global_stats

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-mcp

Claude 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/mcp

Example

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.

Listed on

Official MCP Registry (com.limzo/telegram-group-stats) · Glama · Smithery · npm

License

MIT

Available Tools

3 tools
get_global_statsGet network-wide Limzo totalsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
docsNoHuman-readable API documentation.
statsYes
openapiNoMachine-readable OpenAPI document for the REST API.
top_groupsNoCurrent top public groups by Limzo Score.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 groupA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe group's public slug — the last part of its limzo.com/s/<slug> URL.
rangeNoStats window. Defaults to 7d. 30d/all require the group's paid plan; free groups silently fall back to 7d.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
docsNoHuman-readable API documentation.
groupYes
rangeYesThe range actually served — compare `key` with what you requested to detect the plan fallback.
statsYes
schemaYes
openapiNoMachine-readable OpenAPI document for the REST API.
generated_atYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 groupsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoISO 639-1 language code (e.g. "fa", "es", "en"). Keeps groups whose main language it is (the detected top language, or the admin's chosen one when both are languages Limzo speaks) or where it is a meaningful share of the group.
limitNoMaximum groups to return. Defaults to 20, capped at 50.
queryNoKeyword matched case-insensitively against group title, username, slug, and description. Omit to list the top groups by Limzo Score.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
docsNoHuman-readable API documentation.
langNoThe applied ISO 639-1 language filter, or null when not filtering by language.
queryNoThe normalized search keyword, or null when listing top groups.
groupsYes
openapiNoMachine-readable OpenAPI document for the REST API.
total_matchesYesGroups that matched, before the limit was applied.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnlyHint: true, openWorldHint: false). The description goes beyond that by disclosing important behavioral details: it filters case-insensitively, has a language matching nuance ('meaningful share'), only includes public groups (with a caveat about /s/ pages), and returns a `total_matches` field to indicate when there are more results than returned. It also explains language detection ('top language' vs admin-chosen). This is rich behavioral context that is not in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is comprehensive but a bit long. However, it is well-structured, front-loading the tool's purpose, then explaining each parameter's usage, and ending with output details. Every sentence adds value. The length is justified by the tool's complexity and the need to distinguish sibling usage, but it could be slightly tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 params, no required ones) and the existence of an output schema (which covers return structure), the description is complete. It explains the output fields (language mix, slug, title, etc.), the `total_matches` behavior, and the scope (public only). There's no missing information an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema descriptions are already detailed. The tool description adds further value by specifying that `query` filters over four fields, that `lang` is ISO 639-1 and explains the 'meaningful share' semantics, and that omitting both yields top groups by Limzo Score. This goes beyond the schema's param descriptions, which are already good but less detailed about the nuances.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to discover Telegram groups tracked by Limzo, with options to browse, filter by language, or find a group's slug for get_group_stats. It uses a specific verb-resource combination ('Call this to discover Telegram groups') and distinguishes its two main modes: browsing and searching. This sets it apart from siblings like get_global_stats and get_group_stats, which are about stats rather than discovery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use this tool versus alternatives: it mentions using get_group_stats as a follow-up after finding a group's slug, and it details when to use `query` vs `lang` vs neither. It also clarifies that it only lists public groups, which is a key exclusion criterion. This provides clear usage context and routing to siblings, leaving no ambiguity.

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.

  1. 1 tool updatev1.3.1
    • Changedlist_groups1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"ISO 639-1 language code (e.g. \"fa\", \"es\", \"en\"). Keeps only groups where that language is a meaningful share of the group."New value: +"ISO 639-1 language code (e.g. \"fa\", \"es\", \"en\"). Keeps groups whose main language it is (the detected top language, or the admin's chosen one when both are languages Limzo speaks) or where it is a meaningful share of the group."
  2. 3 tool updatesv1.3.0
    • First observedget_global_stats
    • First observedget_group_stats
    • First observedlist_groups

TDQS

A4.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: list_groups for discovery, get_global_stats for network-wide metrics, and get_group_stats for a specific group. There is no overlap or ambiguity, as the descriptions explicitly clarify when to use each one.

Naming Consistency5/5

All three tools follow a consistent verb_noun pattern (list_groups, get_global_stats, get_group_stats) with the same prefix structure and clear, readable naming. The convention is uniform and predictable.

Tool Count5/5

With only 3 tools, the server is tightly scoped to its purpose of retrieving Limzo data: listing groups, global stats, and individual group stats. Each tool is essential and non-redundant, fitting comfortably within the typical 3-15 range.

Completeness5/5

The tool surface fully covers the domain of a read-only stats server: discovery via list_groups, network overview via get_global_stats, and detailed group analysis via get_group_stats. There are no missing operations needed for the server's stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP access to a personal Telegram account. Allows querying chats, reading and searching messages via Streamable HTTP.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read public Telegram channels from AI agents — channel metadata, posts, comments, and search. No MTProto, no Telethon, no api_id.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Public Telegram catalog MCP server: search 1.4M+ channels, groups, bots, and posts, and browse marketplace listings, with no auth or API key.
    1
    MIT