Ably MCP by usefulapi
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
MCP server for Ably — channel history, presence, occupancy, stats, publish, and app management.
| Author | io.usefulapi |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 236 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Ably MCP by usefulapi": {
"url": "https://ably.usefulapi.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (15)
ably_get_channel_historyread-onlyRetrieve historical messages published to a channel, newest-first by default. REST: GET /channels/{channel}/messages.
Parameters:
channel(required) — string — Channel name, e.g. 'chat:room1'.end— integer — Latest message time, ms since epoch (inclusive).limit— integer — Max messages (<=1000). Default 100.start— integer — Earliest message time, ms since epoch (inclusive).direction— string — forwards (oldest-first) or backwards (newest-first, default).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_presenceread-onlyList the members currently present on a channel (who is online now). REST: GET /channels/{channel}/presence.
Parameters:
channel(required) — string — Channel name.limit— integer — Max members (<=1000). Default 100.clientId— string — Filter to a specific clientId.connectionId— string — Filter to a specific connectionId.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_presence_historyread-onlyRetrieve historical presence events (enter/leave/update) for a channel. REST: GET /channels/{channel}/presence/history.
Parameters:
channel(required) — string — Channel name.end— integer — Latest event time, ms since epoch (inclusive).limit— integer — Max events (<=1000). Default 100.start— integer — Earliest event time, ms since epoch (inclusive).direction— string — forwards or backwards (default backwards).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_channel_detailsread-onlyGet status and occupancy metrics for a single channel (connections, publishers, subscribers, presence members). REST: GET /channels/{channel}.
Parameters:
channel(required) — string — Channel name.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_channelsread-onlyEnumerate channels that are currently active in the app. Requires the API key to have the 'channel-metadata' capability. REST: GET /channels.
Parameters:
by— string — Return channel ids only ('id', default) or full details ('value').limit— integer — Max channels per page (<=1000). Default 100.prefix— string — Only return channels whose name starts with this prefix.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_statsread-onlyRetrieve message/connection/channel usage statistics for the app tied to the API key, bucketed by time. REST: GET /stats.
Parameters:
end— integer — End of range, ms since epoch (inclusive).unit— string — Bucket size: minute | hour | day | month. Default minute.limit— integer — Max buckets (<=1000). Default 100.start— integer — Start of range, ms since epoch (inclusive).direction— string — forwards or backwards (default backwards).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_service_timeread-onlyReturn the current Ably service time in ms since epoch. Useful for aligning start/end windows to the server clock. REST: GET /time.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_publish_messagedestructiveWRITE: 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.
Parameters:
channel(required) — string — Channel name to publish to, e.g. 'chat:room1'.data(required) — string — Message payload (string; send JSON as a stringified value).name— string — Optional event name for the message.clientId— string — Optional clientId to attribute the message to.
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
ably_whoamiread-onlyReturn 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.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_appsread-onlyList 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.
Parameters:
account_id— string — Override the account id (defaults to the token's account).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_keysread-onlyList the API keys for an app, including their capabilities (but not the full secret). Control API: GET /apps/{app_id}/keys.
Parameters:
app_id(required) — string — App id (from ably_list_apps).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_namespacesread-onlyList the channel namespaces (channel-rule prefixes) configured for an app, e.g. persistence and push settings. Control API: GET /apps/{app_id}/namespaces.
Parameters:
app_id(required) — string — App id (from ably_list_apps).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_queuesread-onlyList the Ably Queues (AMQP/STOMP message queues) provisioned for an app, with their state and messaging stats. Control API: GET /apps/{app_id}/queues.
Parameters:
app_id(required) — string — App id (from ably_list_apps).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_list_rulesread-onlyList the integration rules (reactor rules: webhooks, AWS Lambda/SQS/Kinesis, Kafka, Pulsar, etc.) configured for an app. Control API: GET /apps/{app_id}/rules.
Parameters:
app_id(required) — string — App id (from ably_list_apps).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
ably_get_account_statsread-onlyRetrieve 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.
Parameters:
end— integer — End of range, ms since epoch (inclusive).unit— string — Bucket size: minute | hour | day | month. Default minute.limit— integer — Max buckets (<=1000). Default 100.start— integer — Start of range, ms since epoch (inclusive).account_id— string — Override the account id (defaults to the token's account).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.