Ably MCP by usefulapi
Server Details
MCP server for Ably — channel history, presence, occupancy, stats, publish, and app management.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 75.3% over 79 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 15 tools
Each tool targets a distinct resource or action: account vs app stats, current vs historical channel/presence data, and separate list operations for apps, keys, namespaces, queues, and rules. Descriptions clarify the few near-overlaps (e.g., ably_get_account_stats vs ably_get_stats), leaving no meaningful ambiguity.
All tools use a consistent ably_ prefix and snake_case verb_noun pattern (get_, list_, publish_), with the sole exception of ably_whoami. This is a minor idiomatic deviation but does not hinder predictability.
15 tools is at the upper end of the typical 3–15 range but well within scope for an Ably control/REST API surface. Each tool covers a distinct resource or operation, so none feel redundant or excessive.
The surface is heavily read-only: it offers extensive get/list operations but lacks create, update, or delete for apps, keys, namespaces, queues, and rules. This is a significant gap for a management API, preventing agents from provisioning or modifying Ably resources.
Available Tools
15 toolsably_get_account_statsGet account-level statisticsARead-onlyInspect
Retrieve aggregated usage statistics across the whole account, bucketed by time. Account id is resolved from the control token when ABLY_ACCOUNT_ID is unset. Control API: GET /accounts/{account_id}/stats.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End of range, ms since epoch (inclusive). | |
| unit | No | Bucket size: minute | hour | day | month. Default minute. | |
| limit | No | Max buckets (<=1000). Default 100. | |
| start | No | Start of range, ms since epoch (inclusive). | |
| account_id | No | Override the account id (defaults to the token's account). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond that: how the account id is resolved (control token vs ABLY_ACCOUNT_ID) and the underlying Control API endpoint. It omits pagination/bucketing limits behavior, so not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler; the core action and scope are front-loaded before the auth-resolution and endpoint details.
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?
For a read-only, 100%-schema-covered stats tool with no output schema, the description covers action, scope, auth resolution, and endpoint. It does not describe the shape or content of the returned statistics, which is the only real gap given no output schema exists.
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 schema already documents all five parameters (start/end, unit, limit, account_id). The description's only param-adjacent detail is the ABLY_ACCOUNT_ID fallback for account_id, which the schema phrases differently ('defaults to the token's account'); no syntax or format detail is added. Baseline 3 applies.
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?
States a specific verb (retrieve) and resource (aggregated usage statistics) with clear scope ('across the whole account, bucketed by time'). The account-level framing implicitly distinguishes it from the sibling ably_get_stats, but it never names that sibling explicitly.
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 account-wide aggregation scope implies when this is appropriate versus an app-level stats tool, but the description never states when-to-use, when-not-to-use, or names ably_get_stats as the alternative. Usage is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_channel_detailsGet channel details / occupancyARead-onlyInspect
Get status and occupancy metrics for a single channel (connections, publishers, subscribers, presence members). REST: GET /channels/{channel}.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals this is a safe read operation. The description adds useful context about which metrics are returned (connections, publishers, subscribers, presence members) and gives the REST endpoint, but does not disclose auth requirements, rate limits, time-window semantics, or response shape.
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 tightly written sentences: the first gives purpose and scope, the second gives the REST endpoint. Nothing is wasted and the core purpose is 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?
For a simple read-only, one-parameter tool with full schema coverage and a readOnlyHint annotation, the description is nearly complete. It names the returned metrics, which is helpful without an output schema, but it could go slightly further to clarify whether 'presence members' means counts or detailed presence data.
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 description coverage is 100% for the single 'channel' parameter, and the schema already describes it as 'Channel name.' The description reinforces that the channel is a single named channel but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
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?
States a specific verb ('Get') and resource ('status and occupancy metrics for a single channel'), and lists the metrics included. The word 'single' implicitly distinguishes it from list-oriented siblings like ably_list_channels, but it does not explicitly differentiate from similarly scoped siblings such as ably_get_presence or ably_get_channel_history.
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?
Usage is implied: call this when you have a specific channel and need its status/occupancy. There are no explicit when-to-use, when-not-to-use, or alternative-tool instructions, so an agent must infer selection from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_channel_historyGet channel message historyBRead-onlyInspect
Retrieve historical messages published to a channel, newest-first by default. REST: GET /channels/{channel}/messages.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Latest message time, ms since epoch (inclusive). | |
| limit | No | Max messages (<=1000). Default 100. | |
| start | No | Earliest message time, ms since epoch (inclusive). | |
| channel | Yes | Channel name, e.g. 'chat:room1'. | |
| direction | No | forwards (oldest-first) or backwards (newest-first, default). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds only the REST endpoint (GET /channels/{channel}/messages) and the newness ordering, which is already stated in the schema's direction field. It says nothing about pagination behavior, permissions, or returned message shape.
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 tightly written sentences with the core action front-loaded and zero filler. Nothing could be removed without losing 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?
For a five-parameter retrieval tool with no output schema, the description leaves return-value shape and pagination semantics unexplained. The schema covers the inputs well, but the absence of an output schema means the description could reasonably carry more weight than it does.
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 description coverage is 100%, so all five parameters (including the direction enum and start/end/limit bounds) are fully documented in the schema. The description adds no syntax or format detail beyond what the schema already provides, making the baseline 3 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?
States a specific verb and resource ('Retrieve historical messages published to a channel') with a behavioral default ('newest-first'). This is clearly distinguishable from sibling tools like ably_get_presence_history (different resource) and ably_publish_message (opposite action), though it never names an alternative explicitly.
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?
Gives the default ordering but no when-to-use guidance, no exclusions, and no comparison to sibling tools such as ably_get_presence_history or ably_list_channels. The agent must infer context from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_presenceGet channel presence setARead-onlyInspect
List the members currently present on a channel (who is online now). REST: GET /channels/{channel}/presence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max members (<=1000). Default 100. | |
| channel | Yes | Channel name. | |
| clientId | No | Filter to a specific clientId. | |
| connectionId | No | Filter to a specific connectionId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's added value is modest. It contributes the REST endpoint mapping (GET /channels/{channel}/presence) and confirms the real-time semantics, but says nothing about pagination, default limits, or rate limiting.
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 short sentences with the core scope front-loaded and no filler. The endpoint mapping is compact and useful rather than redundant padding.
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?
With no output schema, the description leaves the returned payload shape undescribed (member fields, pagination cursor for large presence sets). For a simple read-only list tool this is a minor gap, but the agent gets no return-value orientation.
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 description coverage is 100%, so limit, channel, clientId, and connectionId are all documented in the schema itself. The description adds no parameter meaning beyond what the schema provides, making the baseline 3 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?
States a specific verb (list) and resource (members currently present on a channel), with the parenthetical 'who is online now' clarifying the real-time scope. This implicitly distinguishes it from ably_get_presence_history and ably_get_channel_history, though no sibling is named explicitly.
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?
Usage is implied by 'currently present (who is online now)', which suggests live-state queries over historical ones, but there is no explicit when-to-use guidance, no prerequisites, and no named alternative such as ably_get_presence_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_presence_historyGet channel presence historyARead-onlyInspect
Retrieve historical presence events (enter/leave/update) for a channel. REST: GET /channels/{channel}/presence/history.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Latest event time, ms since epoch (inclusive). | |
| limit | No | Max events (<=1000). Default 100. | |
| start | No | Earliest event time, ms since epoch (inclusive). | |
| channel | Yes | Channel name. | |
| direction | No | forwards or backwards (default backwards). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description adds the REST endpoint mapping and the event taxonomy, which is mild extra context, but says nothing about retention windows, result ordering defaults, or how far back history is available.
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 short sentences with the purpose front-loaded and no filler. The REST endpoint line is marginally useful for mapping to API docs but is the least essential part.
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?
For a read-only, single-channel history query with 100% schema coverage and a readOnlyHint, the definition covers what the agent needs to invoke it. With no output schema present, the description could have sketched the returned event shape (timestamps, client ids, connection ids), which is the one remaining gap.
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 description coverage is 100%, so channel, start, end, limit, and direction are fully documented in the schema itself. The description only echoes the channel path segment and adds no format, default, or interaction semantics beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource ('Retrieve historical presence events ... for a channel') and even enumerates the event kinds (enter/leave/update), which separates it from ably_get_presence (current state) and ably_get_channel_history. It stops short of naming those siblings explicitly, so an agent must infer the distinction.
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 word 'historical' implies when this tool applies versus live presence lookup, but there is no explicit when-to-use, no pointer to ably_get_presence or ably_get_channel_history, and no note on prerequisites such as the presence capability or channel existence. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_service_timeGet Ably service timeARead-onlyInspect
Return the current Ably service time in ms since epoch. Useful for aligning start/end windows to the server clock. REST: GET /time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds value beyond the structured fields by disclosing the return unit (ms since epoch) and the underlying REST endpoint, though it doesn't discuss any latency/caching behavior.
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 tight sentences plus an endpoint reference, with the core purpose front-loaded. Every clause earns its place: purpose, format, use case, underlying route.
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?
No output schema exists, and the description compensates by stating exactly what is returned (service time in ms since epoch). For a trivial zero-param, read-only tool, nothing material is missing.
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 tool takes no parameters, so there is nothing for the description to clarify. Baseline 4 applies for a zero-parameter tool.
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?
States a specific verb and resource ('Return the current Ably service time') and even the precise format ('in ms since epoch'). This is unambiguously distinguishable from siblings like ably_get_stats or ably_get_account_stats.
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 second sentence gives a clear use case ('aligning start/end windows to the server clock'), which tells the agent when this tool is relevant. It stops short of naming alternatives or exclusions, but the sibling set makes overlap unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_get_statsGet app statisticsARead-onlyInspect
Retrieve message/connection/channel usage statistics for the app tied to the API key, bucketed by time. REST: GET /stats.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End of range, ms since epoch (inclusive). | |
| unit | No | Bucket size: minute | hour | day | month. Default minute. | |
| limit | No | Max buckets (<=1000). Default 100. | |
| start | No | Start of range, ms since epoch (inclusive). | |
| direction | No | forwards or backwards (default backwards). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, and the description usefully adds that results are bucketed by time and gives the REST endpoint. It does not disclose return shape, pagination behavior against the 1000-bucket limit, or whether data has retention bounds. Solid but not rich beyond the annotation.
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 tight sentences with the resource and scope front-loaded, followed by the endpoint. No filler and nothing repeated from the schema.
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?
With no output schema, the description carries the burden of explaining what comes back, and 'usage statistics bucketed by time' is only a gesture at the return shape (metrics present, bucket keys, retention window). Adequate for invocation but thin for interpreting results.
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 description coverage is 100% with defaults, enum options, and inclusive/exclusive bounds all documented in the schema itself. The description's 'bucketed by time' loosely relates to unit/direction but adds no format or interaction detail beyond the schema. Baseline 3 applies.
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?
States a specific verb (Retrieve) and resource (message/connection/channel usage statistics) and scopes it to 'the app tied to the API key', which implicitly separates it from the account-level sibling. It stops short of naming ably_get_account_stats, so the sibling distinction must be inferred from the scoping phrase alone.
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 API-key scoping implies this is the app-level counterpart to account-level stats, but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent can guess the intent but receives no direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_appsList Ably appsARead-onlyInspect
List all apps in the account (id, name, status, tls-only). Account id is resolved automatically from the control token when ABLY_ACCOUNT_ID is unset. Control API: GET /accounts/{account_id}/apps.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Override the account id (defaults to the token's account). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds real value beyond that by explaining how the account id is derived from the control token and citing the underlying Control API endpoint. It does not mention pagination or result limits, keeping 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and return fields, followed by only the two facts an agent actually needs (auth resolution and endpoint). No filler.
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?
For a zero-required-param read tool with no output schema, the description supplies everything needed: what is listed, the fields returned, and how the account scope is resolved. Nothing material is missing.
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 the single parameter is already documented as an override. The description adds the fallback behavior (token-resolved account, ABLY_ACCOUNT_ID env var), which gives the parameter meaning the schema alone does not.
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?
States a specific verb and resource (list all apps in the account) and even enumerates the returned fields (id, name, status, tls-only), so the agent knows exactly what it gets. It never names or contrasts a sibling tool, so it lands at 4 rather than 5.
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 note that the account id is auto-resolved from the control token when ABLY_ACCOUNT_ID is unset is useful invocation context, but there is no explicit when-to-use/when-not guidance and no routing to alternatives (e.g., ably_list_keys or ably_list_namespaces for other resources).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_channelsList active channelsARead-onlyInspect
Enumerate channels that are currently active in the app. Requires the API key to have the 'channel-metadata' capability. REST: GET /channels.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Return channel ids only ('id', default) or full details ('value'). | |
| limit | No | Max channels per page (<=1000). Default 100. | |
| prefix | No | Only return channels whose name starts with this prefix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds a real behavioral constraint the annotation does not: the required 'channel-metadata' capability, plus the underlying REST endpoint. It stops short of describing pagination or result shape, keeping it out of 5 territory.
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 tight sentences: the core action first, then the auth prerequisite and endpoint. Nothing is wasted and nothing is buried.
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?
For a read-only list tool with complete schema docs and no output schema, the description plus annotations cover what an agent needs to call it. Minor gap: no hint about pagination or the shape of returned channel entries, though the 'by' enum partly implies this.
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 description coverage is 100%, with 'by', 'limit' and 'prefix' fully documented in the schema including defaults and bounds. The description adds no param-level detail beyond that, so the baseline 3 applies.
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?
States a specific verb (Enumerate) and resource (channels currently active in the app), and the REST mapping 'GET /channels' confirms it. It is clearly distinguishable from siblings like ably_get_channel_details (single channel) or ably_publish_message.
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?
Gives a prerequisite ('channel-metadata' capability) but no explicit when-to-use versus alternatives, and no guidance on when not to use it (e.g. for a single channel it points nowhere). The auth caveat is helpful context but usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_keysList an app's API keysARead-onlyInspect
List the API keys for an app, including their capabilities (but not the full secret). Control API: GET /apps/{app_id}/keys.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App id (from ably_list_apps). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral context beyond annotations: it discloses that the response includes capabilities but masks the full secret, plus the underlying Control API route.
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?
A single tight sentence with the core purpose front-loaded and no wasted words; the scope and endpoint details are appended compactly.
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?
For a simple one-parameter read tool with annotations covering safety and no output schema, the description is nearly complete, signaling both content (capabilities) and the masked secret. Minor gap: no pagination or return-shape note, though little is needed here.
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 description coverage is 100%, so the single app_id parameter is already documented (including its source from ably_list_apps). The description adds no syntax or format detail beyond the schema, so baseline 3 applies.
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?
States a specific verb (List) and resource (API keys for an app) and adds scope detail ('including their capabilities (but not the full secret)'). An agent can distinguish it from siblings like ably_list_apps or ably_list_channels without opening a schema.
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?
Usage is only implied: it lists keys for an app and names the underlying Control API endpoint, but gives no explicit when-to-use, prerequisites, or alternatives. The app_id provenance hint lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_namespacesList an app's channel namespacesBRead-onlyInspect
List the channel namespaces (channel-rule prefixes) configured for an app, e.g. persistence and push settings. Control API: GET /apps/{app_id}/namespaces.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App id (from ably_list_apps). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds that this is a Control API call (GET /apps/{app_id}/namespaces), which is mild confirmatory context, but it says nothing about auth requirements, pagination, rate limits, or response shape.
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?
A single tight sentence plus an endpoint reference; the resource and scope are front-loaded and nothing is wasted.
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?
For a simple read-only list of one-parameter scope, the description conveys what is listed and gives a concrete example of namespace contents (persistence, push settings). Without an output schema it could say more about the returned structure, but it is sufficient to call the tool correctly.
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?
Only one parameter and schema coverage is 100%, with the schema itself pointing to ably_list_apps for the app_id. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
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?
States a specific verb and resource ('List the channel namespaces') and clarifies the domain term with 'channel-rule prefixes configured for an app'. That is enough for an agent to tell it apart from list_channels or list_rules, though it never names a sibling explicitly.
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?
There is no guidance on when to call this versus alternatives such as ably_list_rules or ably_list_channels, and no stated prerequisites. The Control API endpoint reference implies context but does not tell the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_queuesList an app's queuesARead-onlyInspect
List the Ably Queues (AMQP/STOMP message queues) provisioned for an app, with their state and messaging stats. Control API: GET /apps/{app_id}/queues.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App id (from ably_list_apps). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only safety; the description adds that results include each queue's state and messaging stats, and identifies the underlying GET endpoint. It still omits pagination and auth details, but adds meaningful context beyond 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?
Two tight sentences, leading with the action and resource, then the API endpoint. No redundant or filler text.
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?
For a simple one-param read tool with annotations and full schema coverage, the description is nearly complete. It omits return structure and pagination, but no output schema exists and annotations already handle safety.
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 app_id is documented in the schema as coming from ably_list_apps. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.
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?
States the verb 'List' and the specific resource 'Ably Queues (AMQP/STOMP message queues)' scoped to an app, plus the Control API endpoint. This clearly distinguishes it from siblings like ably_list_apps or ably_list_channels.
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?
Implies usage by naming the resource and app scope, but does not state when to choose this tool over other list tools or any prerequisites beyond app_id. No explicit alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_list_rulesList an app's integration rulesBRead-onlyInspect
List the integration rules (reactor rules: webhooks, AWS Lambda/SQS/Kinesis, Kafka, Pulsar, etc.) configured for an app. Control API: GET /apps/{app_id}/rules.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App id (from ably_list_apps). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds modest context: it is a Control API operation scoped to a single app. It says nothing about pagination, result limits, or what happens on an invalid app_id, so it clears the lowered annotation-aware bar only modestly.
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, zero waste. The core purpose and its disambiguating detail are front-loaded, and the API path is appended rather than padding the opening.
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?
With one required parameter, no annotations beyond readOnly, and no output schema, the description is nearly sufficient: the enumeration of rule types gives the agent a sense of what comes back. It would be complete with a note on result volume or pagination.
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 description coverage is 100%, and the single app_id parameter is already documented in the schema with the same cross-reference ('from ably_list_apps'). The description adds no parameter syntax or format detail beyond the schema, so baseline 3 applies.
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 ('List the integration rules ... configured for an app') and immediately disambiguates the vague term 'rules' by enumerating what they are (webhooks, AWS Lambda/SQS/Kinesis, Kafka, Pulsar). It does not explicitly contrast itself with sibling list tools like ably_list_namespaces or ably_list_queues, so it falls just short of the top band.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling list/get tools. The Control API path is a technical detail, not usage guidance, so an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_publish_messagePublish a message to a channelADestructiveInspect
WRITE: publish a message to a channel. Every connected subscriber receives it in real time. This is a real, outward-facing side effect — confirm the channel and payload before calling. REST: POST /channels/{channel}/messages.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Message payload (string; send JSON as a stringified value). | |
| name | No | Optional event name for the message. | |
| channel | Yes | Channel name to publish to, e.g. 'chat:room1'. | |
| clientId | No | Optional clientId to attribute the message to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write nature is structured. The description adds genuinely new context beyond that: every connected subscriber receives the message in real time, it is an outward-facing side effect, and the REST equivalent endpoint. It does not cover error behavior or delivery semantics failures.
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 short sentences, front-loaded with the WRITE classification, then the effect, then the caution. No filler; each sentence earns its place.
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?
For a four-parameter write tool with full schema coverage and no output schema, the description covers purpose, effect, and a pre-call caution. Missing only edge-case behavior (e.g., failure modes, whether the call blocks on delivery), which keeps it short of a 5.
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 description coverage is 100%, so all four parameters (data, name, channel, clientId) are already documented in the schema with examples. The description adds no parameter-level meaning, so the baseline of 3 applies.
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?
States a specific verb (publish) and resource (message to a channel), explicitly labeled WRITE. This clearly separates it from the sibling read tools like ably_get_channel_history or ably_list_channels.
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?
Gives a clear usage condition ('confirm the channel and payload before calling') and frames it as an outward-facing side effect. It does not name an alternative tool, but the sibling set is entirely read-only, so the routing decision is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ably_whoamiGet control token / account infoARead-onlyInspect
Return details about the configured control token: the account and user it belongs to and its capabilities. Good first call to confirm control-plane access. Control API: GET /me.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds useful context beyond it: the exact scope of the response (account, user, capabilities) and the underlying endpoint GET /me, which signals it targets the control plane rather than a data plane. It omits auth/permission prerequisites, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it returns, when to use it, and the backing API call. The purpose is front-loaded with no redundancy.
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?
With no output schema, the description carries the return-value burden and does so at a summary level (account, user, capabilities) rather than describing the response shape. That is adequate for a trivial identity probe, though slightly more on the returned fields would make it airtight.
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 tool takes zero parameters, so the baseline of 4 applies. Nothing in the schema needs compensating for, and the description correctly avoids inventing inputs.
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?
States a specific verb (Return) and resource (details about the configured control token), enumerating the returned data: the account, the user, and capabilities. This clearly distinguishes it from data-plane siblings like ably_get_channel_details or ably_list_apps.
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?
"Good first call to confirm control-plane access" gives the agent a concrete situation in which to reach for this tool. It doesn't name an alternative or state exclusions, but for a unique zero-param identity probe no real alternative exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
MCP server for interacting with the Supabase platform
The official MCP Server for the Mux API
MCP server for Sendbird — chat users, channels, members, and messages from your AI client.
The official Planning Center MCP server for interacting with your ministry's data.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for ntfy: publish notifications, read cached messages, manage users and topic access1397 npm1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for the Mobilerun platform, exposing tools for device control, workflow automation, task management, and platform operations via a stateless HTTP or stdio interface with bearer-token authentication and policy-based access control.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for the Meshimize agent communication platform: Q\&A groups, messaging and group discovery144 npm1MIT
- AlicenseBqualityDmaintenanceMCP server for interacting with a self-hosted Appsmith instance via its REST API, enabling read/update/create of pages, queries, JS objects, widgets, datasources, and applications with lazy session management and destructive-operation gating.30MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.