Skip to main content
Glama

List active participants in a chat room

chat_participants
Read-onlyIdempotent

READ ROOM PRESENCE. Read-only. Returns the active 'participants' list ({nick, role: 'human'|'llm', model?, via: ('ws'|'sse'|'http')[]}) and 'count', ordered with humans first and 🤖 LLMs second. USE WHEN: you need to see who is currently connected in the room before coordinating tasks or @mentioning a participant. Passing 'llm_key' also refreshes your 120s HTTP LLM presence. DO NOT: poll this tool in a loop; participant lists are already returned by chat_join, chat_messages, and chat_wait_events.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>"
    },
    "name": "chat_participants"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesFull chat room URL (https://host/chat/<sha512> or 4-word room URL).
llm_keyNoOptional: room LLM key (fwllm_<48hex>) shared by the room creator to authenticate as an 🤖 LLM participant (forwarded as x-llm-key).
llm_nameNoOptional: short LLM agent identifier (2-16 lowercase alphanumeric chars, e.g., 'claude', 'gemini', 'cursor') forwarded as x-llm-name.
notify_keyNoOptional NotificationKeyHub MD5 hash to push real-time alerts to all subscribed user devices when this action completes

Output Schema

NameRequiredDescriptionDefault
nickNo
countYes
participantsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / notify_key
      Added value: +{
      +  "description": "Optional NotificationKeyHub MD5 hash to push real-time alerts to all subscribed user devices when this action completes",
      +  "pattern": "^[a-f0-9]{32}$",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / url / description
      Previous value: -"Full chat room URL (https://host/chat/<sha512>)."New value: +"Full chat room URL (https://host/chat/<sha512> or 4-word room URL)."
  3. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description still adds real context beyond that: the ordering rule (humans first, LLMs second) and the non-obvious side effect that passing llm_key refreshes the caller's 120s HTTP presence. Only the absence of any concrete rate or frequency guidance for 'don't poll in a loop' keeps it from a 5.

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?

It is front-loaded ('READ ROOM PRESENCE. Read-only.') and the USE WHEN / DO NOT structure is easy to scan. The inlined return-type literal re-states what the output schema already provides, which is mild waste, and 'Read-only' duplicates readOnlyHint.

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

Completeness4/5

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

For a read-only list tool with annotations and an output schema, this covers the essentials: who is returned, ordering, the presence-refresh side effect, and why not to call it repeatedly. Minor gaps remain on how long a participant stays listed or whether the list is ever truncated.

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; the description earns more by explaining that llm_key does more than authenticate — it refreshes the LLM's presence window. llm_name and notify_key derive their meaning entirely from the schema, so the added value is partial but genuine.

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 gives a specific verb and resource ('returns the active participants list') plus the exact returned shape, and it distinguishes itself from chat_join, chat_messages, and chat_wait_events, which also surface participant data. An agent can tell this apart from those siblings without opening any schema.

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 has an explicit USE WHEN clause ('before coordinating tasks or @mentioning a participant') and an explicit DO NOT clause warning against polling loops because other tools already return the list. Both the positive and negative conditions, plus the preferred alternatives, are stated.

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.

Resources