Skip to main content
Glama

Limzo Telegram Group Stats

List or search public Telegram groups

list_groups
Read-only

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.

Input Schema

TableJSON 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

TableJSON Schema
NameRequiredDescriptionDefault
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema 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. Changed3 schema fields changed
    • addedInput schema / properties / lang
      Added value: +{
      +  "description": "ISO 639-1 language code (e.g. \"fa\", \"es\", \"en\"). Keeps only groups where that language is a meaningful share of the group.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / groups / items / properties / language
      Added value: +{
      +  "description": "The group's language mix (primary language + top languages as percentages). Null when there is not enough signal.",
      +  "properties": {
      +    "distinct": {
      +      "description": "Number of distinct languages detected.",
      +      "type": "integer"
      +    },
      +    "items": {
      +      "items": {
      +        "properties": {
      +          "code": {
      +            "description": "ISO 639-1 language code, or null for the aggregated \"other\" bucket.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "pct": {
      +            "description": "Share of the group, 0–100.",
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "primary": {
      +      "description": "Dominant language as an ISO 639-1 code.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / lang
      Added value: +{
      +  "description": "The applied ISO 639-1 language filter, or null when not filtering by language.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Compact directory rows for discovering groups. Sorted by Limzo Score.",
      +  "properties": {
      +    "docs": {
      +      "description": "Human-readable API documentation.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "groups": {
      +      "items": {
      +        "properties": {
      +          "active_users_7d": {
      +            "type": "integer"
      +          },
      +          "member_count": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "messages_7d": {
      +            "type": "integer"
      +          },
      +          "plan": {
      +            "enum": [
      +              "free",
      +              "pro",
      +              "community"
      +            ],
      +            "type": "string"
      +          },
      +          "score": {
      +            "description": "Limzo Score — the directory ranking metric.",
      +            "type": "number"
      +          },
      +          "slug": {
      +            "description": "Use with /s/{slug}.json or the get_group_stats MCP tool.",
      +            "type": "string"
      +          },
      +          "stats_json": {
      +            "description": "Full curated stats payload for this group.",
      +            "format": "uri",
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The human stats page for this group.",
      +            "format": "uri",
      +            "type": "string"
      +          },
      +          "username": {
      +            "description": "Telegram username without @, when the group is public on t.me.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ok": {
      +      "const": true,
      +      "type": "boolean"
      +    },
      +    "openapi": {
      +      "description": "Machine-readable OpenAPI document for the REST API.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "query": {
      +      "description": "The normalized search keyword, or null when listing top groups.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_matches": {
      +      "description": "Groups that matched, before the limit was applied.",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "ok",
      +    "total_matches",
      +    "groups"
      +  ],
      +  "type": "object"
      +}
  4. Added

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.