# Usefulapi Stream MCP server

Source: https://glimind.com/server/mcp-registry%2Fio.usefulapi%2Fstream
Registry id: `mcp-registry/io.usefulapi/stream`
Status: auth-required (checked 2026-10-27T02:18:19.936Z)

## Verdict

Usefulapi Stream MCP server answered 100% of Glimind's liveness checks over 30 days, better than 42% of MCP servers, with 65 ms median handshake and 0 outages in 90 days. Its agent-readiness grade is A (96/100) across 13 tools, costing an agent about 2,666 tokens to load. Checked every few minutes; no tool is ever called.

## Measurements (30 days)

| Metric | Value | Better than |
|---|---|---|
| Uptime, 30 days | 100% | 42% of MCP servers |
| Median handshake latency | 65 ms | 87% of MCP servers |
| p95 handshake latency | 273 ms | — |
| Checks in 30 days | 213 | — |
| Outages, 90 days | 0 | — |
| Median recovery | — | — |
| Agent-readiness score | 96/100 (A) | 82% of MCP servers |
| Tools | 13 | — |
| Tool-list size for an agent | ~2,666 tokens | 48% of MCP servers |
| Days observed | 28 | — |

## Install

```json
{
  "mcpServers": {
    "usefulapi-stream-mcp-server": {
      "type": "http",
      "url": "https://stream.usefulapi.io/mcp"
    }
  }
}
```

Claude Code:

```sh
claude mcp add --transport http usefulapi-stream-mcp-server https://stream.usefulapi.io/mcp
```

## Tools (13)

- `stream_get_app`: Fetch the Stream app's settings and configured channel types. Good first call to confirm credentials and discover available channel types. GET /api/v2/app.
- `stream_get_channel`: Fetch a single channel's state (config, members) and its most recent messages. Note: uses Stream's get-or-create endpoint — for an existing channel it reads; if
- `stream_get_message`: Fetch a single message by its id. GET /api/v2/chat/messages/{id}.
- `stream_get_reactions`: List the reactions on a message. GET /api/v2/chat/messages/{id}/reactions.
- `stream_get_replies`: Fetch the reply messages in a thread, given the parent message id. GET /api/v2/chat/messages/{parent_id}/replies.
- `stream_get_unread_counts`: Fetch total and per-channel unread message/mention counts for one user. GET /api/v2/chat/unread.
- `stream_query_channels`: List/filter channels by a Stream query filter. e.g. filter {"type":"messaging"} or {"members":{"$in":["user-1"]}}. Returns channels with recent state. POST /api
- `stream_query_members`: List/filter the members of one channel. Requires the channel type + id. Optional member filter, e.g. {"name":{"$autocomplete":"jo"}}. GET /api/v2/chat/members.
- `stream_query_threads`: List threads (messages with replies). Server-side calls should pass a user_id to scope thread read-state to that user. POST /api/v2/chat/threads.
- `stream_query_users`: List/filter users in the app. e.g. filter {"role":{"$eq":"admin"}} or {"id":{"$in":["u1"]}}. GET /api/v2/users.
- `stream_search_messages`: Search messages across channels. Scope with a channel filter (filter, e.g. {"type":"messaging"}) plus EITHER a full-text `query` OR a `message_filter` object (e
- `stream_send_message`: ⚠️ WRITE: post a new message to a channel, attributed to user_id (must be an existing user in the app). POST /api/v2/chat/channels/{type}/{id}/message.
- `stream_send_reaction`: ⚠️ WRITE: add a reaction (e.g. "like", "love") to a message, attributed to user_id (must be an existing user). POST /api/v2/chat/messages/{id}/reaction.

Measured by Glimind (https://glimind.com): MCP handshake + tool list only, no tool is ever called. CC BY 4.0.
