MCP server for Ably — channel history, presence, occupancy, stats, publish, and app management.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
End of range, ms since epoch (inclusive).
Bucket size: minute | hour | day | month. Default minute.
Max buckets (<=1000). Default 100.
Start of range, ms since epoch (inclusive).
Override the account id (defaults to the token's account).
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.
| Argument | Type | Description |
|---|---|---|
| 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). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "End of range, ms since epoch (inclusive)."
},
"unit": {
"enum": [
"minute",
"hour",
"day",
"month"
],
"type": "string",
"description": "Bucket size: minute | hour | day | month. Default minute."
},
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max buckets (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Start of range, ms since epoch (inclusive)."
},
"account_id": {
"type": "string",
"description": "Override the account id (defaults to the token's account)."
}
}
}Get status and occupancy metrics for a single channel (connections, publishers, subscribers, presence members). REST: GET /channels/{channel}.
| Argument | Type | Description |
|---|---|---|
| channel* | string | Channel name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"channel"
],
"properties": {
"channel": {
"type": "string",
"description": "Channel name."
}
}
}Retrieve historical messages published to a channel, newest-first by default. REST: GET /channels/{channel}/messages.
| Argument | Type | Description |
|---|---|---|
| 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). |
| channel* | string | Channel name, e.g. 'chat:room1'. |
| direction | string | forwards (oldest-first) or backwards (newest-first, default). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"channel"
],
"properties": {
"end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Latest message time, ms since epoch (inclusive)."
},
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max messages (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Earliest message time, ms since epoch (inclusive)."
},
"channel": {
"type": "string",
"description": "Channel name, e.g. 'chat:room1'."
},
"direction": {
"enum": [
"forwards",
"backwards"
],
"type": "string",
"description": "forwards (oldest-first) or backwards (newest-first, default)."
}
}
}List the members currently present on a channel (who is online now). REST: GET /channels/{channel}/presence.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max members (<=1000). Default 100. |
| channel* | string | Channel name. |
| clientId | string | Filter to a specific clientId. |
| connectionId | string | Filter to a specific connectionId. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"channel"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max members (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"channel": {
"type": "string",
"description": "Channel name."
},
"clientId": {
"type": "string",
"description": "Filter to a specific clientId."
},
"connectionId": {
"type": "string",
"description": "Filter to a specific connectionId."
}
}
}Retrieve historical presence events (enter/leave/update) for a channel. REST: GET /channels/{channel}/presence/history.
| Argument | Type | Description |
|---|---|---|
| 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). |
| channel* | string | Channel name. |
| direction | string | forwards or backwards (default backwards). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"channel"
],
"properties": {
"end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Latest event time, ms since epoch (inclusive)."
},
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max events (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Earliest event time, ms since epoch (inclusive)."
},
"channel": {
"type": "string",
"description": "Channel name."
},
"direction": {
"enum": [
"forwards",
"backwards"
],
"type": "string",
"description": "forwards or backwards (default backwards)."
}
}
}Return the current Ably service time in ms since epoch. Useful for aligning start/end windows to the server clock. REST: GET /time.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Retrieve message/connection/channel usage statistics for the app tied to the API key, bucketed by time. REST: GET /stats.
| Argument | Type | Description |
|---|---|---|
| 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). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "End of range, ms since epoch (inclusive)."
},
"unit": {
"enum": [
"minute",
"hour",
"day",
"month"
],
"type": "string",
"description": "Bucket size: minute | hour | day | month. Default minute."
},
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max buckets (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Start of range, ms since epoch (inclusive)."
},
"direction": {
"enum": [
"forwards",
"backwards"
],
"type": "string",
"description": "forwards or backwards (default backwards)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| account_id | string | Override the account id (defaults to the token's account). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"account_id": {
"type": "string",
"description": "Override the account id (defaults to the token's account)."
}
}
}Enumerate channels that are currently active in the app. Requires the API key to have the 'channel-metadata' capability. REST: GET /channels.
| Argument | Type | Description |
|---|---|---|
| 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. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"by": {
"enum": [
"id",
"value"
],
"type": "string",
"description": "Return channel ids only ('id', default) or full details ('value')."
},
"limit": {
"type": "integer",
"maximum": 1000,
"description": "Max channels per page (<=1000). Default 100.",
"exclusiveMinimum": 0
},
"prefix": {
"type": "string",
"description": "Only return channels whose name starts with this prefix."
}
}
}List the API keys for an app, including their capabilities (but not the full secret). Control API: GET /apps/{app_id}/keys.
| Argument | Type | Description |
|---|---|---|
| app_id* | string | App id (from ably_list_apps). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "string",
"description": "App id (from ably_list_apps)."
}
}
}List the channel namespaces (channel-rule prefixes) configured for an app, e.g. persistence and push settings. Control API: GET /apps/{app_id}/namespaces.
| Argument | Type | Description |
|---|---|---|
| app_id* | string | App id (from ably_list_apps). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "string",
"description": "App id (from ably_list_apps)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| app_id* | string | App id (from ably_list_apps). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "string",
"description": "App id (from ably_list_apps)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| app_id* | string | App id (from ably_list_apps). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "string",
"description": "App id (from ably_list_apps)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data* | string | Message payload (string; send JSON as a stringified value). |
| name | string | Optional event name for the message. |
| channel* | string | Channel name to publish to, e.g. 'chat:room1'. |
| clientId | string | Optional clientId to attribute the message to. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"channel",
"data"
],
"properties": {
"data": {
"type": "string",
"description": "Message payload (string; send JSON as a stringified value)."
},
"name": {
"type": "string",
"description": "Optional event name for the message."
},
"channel": {
"type": "string",
"description": "Channel name to publish to, e.g. 'chat:room1'."
},
"clientId": {
"type": "string",
"description": "Optional clientId to attribute the message to."
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}