Skip to content

Stream MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Query channels, search messages, and read threads, users and reactions in your Stream Chat app.

Deletes · 2

13 tools: 2 can delete or cancel things and 11 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

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

Findings

Matches of fixed checks, with the text they matched.

1 info

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Deletes or cancels 2Claude Code: deny
  • stream_send_message⚠[U+FE0F] WRITE: post a new message to a channel, attributed to user_id (must be an existing user in the app).No findings

    Why it is in this group

    • The name "stream_send_message" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    ⚠[U+FE0F] 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.

    Annotations the server declares

    • title: Send a message
    • destructiveHint: true
  • stream_send_reaction⚠[U+FE0F] WRITE: add a reaction (e.g.No findings

    Why it is in this group

    • The name "stream_send_reaction" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    ⚠[U+FE0F] 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.

    Annotations the server declares

    • title: Send a reaction
    • destructiveHint: true
Only reads 11Claude Code: allow
  • stream_get_appFetch the Stream app's settings and configured channel types.1 finding

    Why it is in this group

    • The name "stream_get_app" says "get": a word for reading.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...annel types. Good first call to confirm credentials and discover available channel types. G..."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get app settings
    • readOnlyHint: true
  • stream_get_channelFetch a single channel's state (config, members) and its most recent messages.No findings

    Why it is in this group

    • The name "stream_get_channel" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get channel state + recent messages
    • readOnlyHint: true
  • stream_get_messageFetch a single message by its id.No findings

    Why it is in this group

    • The name "stream_get_message" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single message by its id. GET /api/v2/chat/messages/{id}.

    Annotations the server declares

    • title: Get a message
    • readOnlyHint: true
  • stream_get_reactionsList the reactions on a message.No findings

    Why it is in this group

    • The name "stream_get_reactions" says "get": a word for reading.
    Description, as the server wrote it
    List the reactions on a message. GET /api/v2/chat/messages/{id}/reactions.

    Annotations the server declares

    • title: Get message reactions
    • readOnlyHint: true
  • stream_get_repliesFetch the reply messages in a thread, given the parent message id.No findings

    Why it is in this group

    • The name "stream_get_replies" says "get": a word for reading.
    Description, as the server wrote it
    Fetch the reply messages in a thread, given the parent message id. GET /api/v2/chat/messages/{parent_id}/replies.

    Annotations the server declares

    • title: Get thread replies
    • readOnlyHint: true
  • stream_get_unread_countsFetch total and per-channel unread message/mention counts for one user.No findings

    Why it is in this group

    • The name "stream_get_unread_counts" says "get": a word for reading.
    Description, as the server wrote it
    Fetch total and per-channel unread message/mention counts for one user. GET /api/v2/chat/unread.

    Annotations the server declares

    • title: Get unread counts for a user
    • readOnlyHint: true
  • stream_query_channelsList/filter channels by a Stream query filter.No findings

    Why it is in this group

    • The name "stream_query_channels" says "query": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Query channels
    • readOnlyHint: true
  • stream_query_membersList/filter the members of one channel.No findings

    Why it is in this group

    • The name "stream_query_members" says "query": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Query channel members
    • readOnlyHint: true
  • stream_query_threadsList threads (messages with replies).No findings

    Why it is in this group

    • The name "stream_query_threads" says "query": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Query threads
    • readOnlyHint: true
  • stream_query_usersList/filter users in the app.No findings

    Why it is in this group

    • The name "stream_query_users" says "query": a word for reading.
    Description, as the server wrote it
    List/filter users in the app. e.g. filter {"role":{"$eq":"admin"}} or {"id":{"$in":["u1"]}}. GET /api/v2/users.

    Annotations the server declares

    • title: Query users
    • readOnlyHint: true
  • stream_search_messagesSearch messages across channels.No findings

    Why it is in this group

    • The name "stream_search_messages" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Search messages
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__stream__stream_get_app",
      "mcp__stream__stream_query_channels",
      "mcp__stream__stream_get_channel",
      "mcp__stream__stream_search_messages",
      "mcp__stream__stream_get_message",
      "mcp__stream__stream_get_replies",
      "mcp__stream__stream_get_reactions",
      "mcp__stream__stream_query_members",
      "mcp__stream__stream_query_users",
      "mcp__stream__stream_query_threads",
      "mcp__stream__stream_get_unread_counts"
    ],
    "ask": [],
    "deny": [
      "mcp__stream__stream_send_message",
      "mcp__stream__stream_send_reaction"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as stream. Review it before you use it.