Stream MCP by usefulapi
Server Details
Query channels, search messages, and read threads, users and reactions in your Stream Chat app.
- Status
- Healthy
- Uptime
- 70.5% over 54 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 13 tools
Most tools clearly target distinct resources or actions, and the get_/query_/search_ prefixes help separate single-resource fetches from filtered lists. The main ambiguity is between get_channel and query_channels, since both return channel state and recent messages, and get_replies vs query_threads both surface threaded conversations.
All tools follow a consistent stream_ prefix with clear verb_noun snake_case names. get_ is used for direct lookups, query_ for filtered listings, search_ for full-text search, and send_ for write actions, making the naming pattern highly predictable.
With 13 tools, the set is well-scoped for a Stream chat integration covering app config, channels, messages, reactions, members, threads, users, and search. Each tool corresponds to a meaningful API surface without excessive fragmentation.
The read side is fairly comprehensive, but the write surface is severely limited: there is no update/delete for messages or reactions, no channel management, and no member or user mutations. Agents can look up and send content but cannot edit, moderate, or manage the chat environment, which is a significant gap for a chat API server.
Available Tools
13 toolsstream_get_appGet app settingsRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
stream_get_channelGet channel state + recent messagesRead-onlyInspect
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 the type/id does not exist it may be created empty. POST /api/v2/chat/channels/{type}/{id}/query.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Channel id (the part after the type). | |
| type | Yes | Channel type, e.g. "messaging", "team", "livestream". | |
| messages_limit | No | Recent messages to return. Default 25. |
stream_get_messageGet a messageRead-onlyInspect
Fetch a single message by its id. GET /api/v2/chat/messages/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Message id. | |
| show_deleted | No | Include the message even if soft-deleted. Default false. |
stream_get_reactionsGet message reactionsRead-onlyInspect
List the reactions on a message. GET /api/v2/chat/messages/{id}/reactions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Message id. | |
| limit | No | Max reactions. Default 50. | |
| offset | No | Pagination offset. |
stream_get_repliesGet thread repliesRead-onlyInspect
Fetch the reply messages in a thread, given the parent message id. GET /api/v2/chat/messages/{parent_id}/replies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max replies (<=300). Default 25. | |
| parent_id | Yes | Parent (thread-root) message id. |
stream_get_unread_countsGet unread counts for a userRead-onlyInspect
Fetch total and per-channel unread message/mention counts for one user. GET /api/v2/chat/unread.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | User id to fetch unread counts for. |
stream_query_channelsQuery channelsRead-onlyInspect
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/v2/chat/channels.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Default [{"field":"last_message_at","direction":-1}]. | |
| limit | No | Max channels (<=30). Default 30. | |
| filter | No | Stream filter_conditions object, e.g. {"type":"messaging"} or {"members":{"$in":["u1"]}}. Default {} (all channels the app can see). | |
| offset | No | Pagination offset. | |
| message_limit | No | Recent messages per channel to include. Default 25. |
stream_query_membersQuery channel membersRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Channel id. | |
| sort | No | Sort spec, e.g. [{"field":"created_at","direction":1}]. | |
| type | Yes | Channel type, e.g. "messaging". | |
| limit | No | Max members (<=100). Default 100. | |
| filter | No | Member filter_conditions, e.g. {"user_id":{"$in":["u1","u2"]}}. Default {}. | |
| offset | No | Pagination offset. |
stream_query_threadsQuery threadsRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort spec for threads. | |
| limit | No | Max threads (<=25). Default 10. | |
| user_id | No | User id to scope thread participation/read-state to. | |
| reply_limit | No | Replies to preview per thread. Default 3. |
stream_query_usersQuery usersRead-onlyInspect
List/filter users in the app. e.g. filter {"role":{"$eq":"admin"}} or {"id":{"$in":["u1"]}}. GET /api/v2/users.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort spec, e.g. [{"field":"created_at","direction":-1}]. | |
| limit | No | Max users (<=100). Default 100. | |
| filter | No | User filter_conditions, e.g. {"role":{"$eq":"admin"}}. Default {} (all users). | |
| offset | No | Pagination offset. |
stream_search_messagesSearch messagesRead-onlyInspect
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.g. {"text":{"$q":"refund"}}). GET /api/v2/chat/search.
| Name | Required | Description | Default |
|---|---|---|---|
| next | No | Pagination cursor returned by a previous search. | |
| sort | No | Sort spec for results. | |
| limit | No | Max results (<=100). Default 20. | |
| query | No | Full-text search string. Provide this OR message_filter. | |
| filter | Yes | Channel filter_conditions, e.g. {"type":"messaging"} or {"members":{"$in":["u1"]}}. | |
| message_filter | No | Message filter object, e.g. {"text":{"$q":"refund"}} or {"attachments":{"$exists":true}}. |
stream_send_messageSend a message (WRITE — posts to Stream)DestructiveInspect
⚠️ 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Channel id. | |
| text | Yes | Message text. | |
| type | Yes | Channel type, e.g. "messaging". | |
| user_id | Yes | Existing user id to send the message as. | |
| mentioned_users | No | User ids to @mention. |
stream_send_reactionSend a reaction (WRITE — posts to Stream)DestructiveInspect
⚠️ 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Message id to react to. | |
| user_id | Yes | Existing user id to react as. | |
| reaction_type | Yes | Reaction type, e.g. "like", "love", "haha". |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
- Changed
stream_get_app1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_get_channel1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_get_message1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_get_reactions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_get_replies1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_get_unread_counts1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_query_channels1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_query_members1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_query_threads1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_query_users1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_search_messages1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_send_message1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
stream_send_reaction1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
13 tool updates
- First observed
stream_get_app - First observed
stream_get_channel - First observed
stream_get_message - First observed
stream_get_reactions - First observed
stream_get_replies - First observed
stream_get_unread_counts - First observed
stream_query_channels - First observed
stream_query_members - First observed
stream_query_threads - First observed
stream_query_users - First observed
stream_search_messages - First observed
stream_send_message - First observed
stream_send_reaction
Related MCP Connectors
Public and private rooms for agents, with messages, files, search, and resumable events.
CometChat docs search + implementation bundles: add chat, voice, video & moderation to your app.
Read Bettermode community spaces, members and posts; full-text search across your community.
Read and verify freeq conversations: channels, history, search, signatures, pins.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables searching and retrieving information from Slack messages, threads, files, canvases, and user profiles using a User Token, with advanced filtering capabilities.50MIT

cordslite-mcpofficial
FlicenseAqualityCmaintenanceProvides read-only Discord access, enabling listing guilds, mapping channels, reading and searching messages, following threads, and viewing attachments without posting.121-- FlicenseNot gradedqualityBmaintenanceRead-only MCP access to a personal Telegram account. Allows querying chats, reading and searching messages via Streamable HTTP.-
- AlicenseNot gradedqualityBmaintenanceEnables authorized MCP clients to perform five read-only operations — checking connection status, listing conversations, reading messages, searching, and polling for changes — over selected Discord server channels and DMs, with scope-based authentication, retention limits, and no ability to send messages or moderate.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.