Sendbird MCP by usefulapi
Server Details
MCP server for Sendbird — chat users, channels, members, and messages from your AI client.
- Status
- Healthy
- Uptime
- 75.3% over 75 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action, and the group-channel vs open-channel vs user distinctions are clearly conveyed. The only mild overlap is sendbird_request, a generic escape hatch that technically could duplicate other reads, but it is explicitly scoped as a read-only catch-all.
All 14 tools follow a uniform sendbird_verb_noun convention (create/get/list/update/send). The pattern is predictable and readable throughout, with no mixing of conventions or verb styles.
At 14 tools the surface is well-scoped for a Sendbird chat API, with each tool mapping to a plausible resource-level operation. No filler or redundant tools bloat the set.
The surface covers create/get/list for users and channels plus messaging, but notable write operations are missing: no delete/update for channels, no add/remove of channel members (only listing), and no user deletion. Because sendbird_request is GET-only, these mutation gaps cannot be worked around, and multipart/file messages are also unsupported.
Available Tools
14 toolssendbird_create_group_channelCreate a group channelADestructiveInspect
MUTATES Sendbird data: creates a group channel with the given members. Platform API: POST /group_channels.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Additional structured data as a string (often JSON). | |
| name | No | Channel name. | |
| user_ids | Yes | User ids to add as members of the new channel. | |
| cover_url | No | Channel cover image URL. | |
| is_public | No | If true, the channel is public (joinable without invitation). | |
| channel_url | No | Custom channel URL; auto-generated if omitted. | |
| custom_type | No | Custom type tag for the channel. | |
| is_distinct | No | If true, reuse an existing channel with the same members instead of creating a duplicate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description's "MUTATES Sendbird data" prefix is consistent with that and adds the underlying endpoint as extra context. It does not, however, disclose side effects such as what happens on duplicate members or the is_distinct reuse behavior, so it only modestly extends the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste, and the critical mutation warning is front-loaded before the endpoint detail. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema, the description never indicates what is returned (e.g., the created channel's URL/identity), which an agent needs after creation. Annotations and schema otherwise cover the operation, so this is a moderate gap rather than a fatal one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters are already documented in the schema. The description only echoes the member concept ("with the given members"), adding no syntax or format detail beyond the structured fields, which makes the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("creates a group channel") plus scope ("with the given members"), which cleanly separates it from the sibling list/get tools. The added Platform API mapping (POST /group_channels) reinforces exactly what operation is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no alternative named, despite siblings like sendbird_request and sendbird_create_user that could overlap. Only an implied context: you call this when you need a channel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_create_userCreate a userBDestructiveInspect
MUTATES Sendbird data: creates a new user. Platform API: POST /users.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Unique user id to create. | |
| metadata | No | Arbitrary key/value metadata object stored on the user. | |
| nickname | No | Display nickname. | |
| profile_url | No | Profile image URL (may be empty). | |
| issue_access_token | No | If true, issues an access token for the user in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description corroborates with 'MUTATES' plus the concrete endpoint mapping, which is useful. However, it omits key mutation behavior an agent needs: what happens if user_id already exists, whether the call is idempotent, and any permission/token requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences, mutation warning front-loaded, endpoint detail second, with zero filler. Well-sized for a simple create tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented schema and no output schema, the description covers the essentials of the operation. It falls short on collision semantics (duplicate user_id handling) and auth expectations, which matter for a create/mutation call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including metadata, nickname, profile_url and issue_access_token are already documented in the schema. The description adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('creates a new user') and even names the underlying platform call (POST /users), so the agent knows exactly what operation this is. It doesn't explicitly distinguish itself from sendbird_update_user or sendbird_get_user, but the verb makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus sendbird_update_user or sendbird_get_user, nor any prerequisites (e.g., whether user_id must be new). The only routing signal is the name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_get_group_channelGet a group channelARead-onlyInspect
Fetch a single group channel by URL, optionally with members and receipts. Platform API: GET /group_channels/{channel_url}.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_url | Yes | Group channel URL (percent-encoded automatically). | |
| show_member | No | Include the member list. | |
| show_read_receipt | No | Include per-member read receipts. | |
| show_delivery_receipt | No | Include per-member delivery receipts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds that members and receipts are opt-in, which clarifies the read's scope, but says nothing about auth requirements, rate limits, or error behavior on an invalid URL. With annotations covering the safety profile, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action; nothing is padded. The trailing platform-endpoint note is marginally useful metadata rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 100% schema coverage and a readOnlyHint, the definition covers action, input, and optional expansions. There is no output schema, yet the description roughly conveys what comes back (channel plus optional members/receipts), so it is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the percent-encoding note for channel_url. The description's 'optionally with members and receipts' mirrors the show_member/show_read_receipt/show_delivery_receipt flags without adding new meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a single group channel by URL') and scopes the optional additions. The word 'single' distinguishes it from the list_group_channels sibling, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the 'single channel by URL' framing, but there is no explicit when-to-use guidance or statement of when to prefer this over sendbird_list_group_channels or sendbird_get_open_channel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_get_open_channelGet an open channelARead-onlyInspect
Fetch a single open channel by URL. Platform API: GET /open_channels/{channel_url}.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_url | Yes | Open channel URL (percent-encoded automatically). | |
| participants_count | No | Include the current participant count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds the underlying Platform API endpoint mapping, which is modest but real context; it says nothing about errors, rate limits, or what happens when the URL does not resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, followed by the endpoint. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It is a simple two-parameter read with full schema coverage, so the description is largely sufficient. With no output schema, however, nothing tells the agent what the response contains (channel metadata, member counts), leaving a small but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (channel_url, participants_count) are already documented in the schema. The description adds nothing about parameter format or semantics beyond that, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('a single open channel by URL'), and 'single' implicitly contrasts with the sibling list_open_channels. It stops short of naming the alternative explicitly, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you call this when you already have a channel_url and need that one channel. There is no explicit when-to-use guidance, no prerequisites, and no named alternative (e.g. list_open_channels) for the case where the agent lacks a URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_get_userGet a userBRead-onlyInspect
Fetch a single user by user_id. Platform API: GET /users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Target user id (percent-encoded automatically). | |
| super_mode | No | Scope unread count by Supergroup vs. group channels. | |
| custom_types | No | Comma-separated channel custom types to scope the unread count. | |
| include_unread_count | No | Include the user's total unread message count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, so the description's only added behavior is the raw endpoint mapping, GET /users/{user_id}. It says nothing about how the optional unread-count scoping params affect the response, whether the call 404s for unknown users, or rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler; the action and its key input come first and the endpoint mapping is a compact secondary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-record fetch with no output schema and fully documented parameters, the description is nearly sufficient. It could be tightened by mentioning that optional params enrich the response, but nothing critical to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including the super_mode enum and include_unread_count) are already documented in the schema. The description mentions only user_id and adds no format or interaction detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a single user by user_id'), which implicitly distinguishes it from the sibling sendbird_list_users and from sendbird_update_user/sendbird_create_user. It stops short of explicitly naming those siblings as the alternative, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. An agent is left to infer that this single-record fetch is preferred over sendbird_list_users when one user_id is known, and nothing is said about prerequisites such as whether the user must exist or which API key/permissions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_group_channel_membersList group channel membersARead-onlyInspect
List the members of a group channel. Platform API: GET /group_channels/{channel_url}/members. Returns { members[], next }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. Default 10. | |
| order | No | Sort order of members. | |
| token | No | Pagination token from a previous response's `next`. | |
| channel_url | Yes | Group channel URL (percent-encoded automatically). | |
| operator_filter | No | Filter by operator status. Default all. | |
| show_read_receipt | No | Include each member's read receipt. | |
| member_state_filter | No | Filter by invitation/join state (e.g. joined, invited, invited_by_friend). | |
| show_delivery_receipt | No | Include each member's delivery receipt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful context beyond that: the underlying endpoint and the return shape ({ members[], next }), which tells the agent this response is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste, front-loading the purpose before the endpoint and return shape. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by stating the return shape and the presence of a next token, and annotations cover the read-only nature. This is enough for an agent to call it correctly, though a note on pagination usage would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (limit, order, token, operator_filter, member_state_filter, etc.) is already documented in the schema. The description contributes nothing extra about parameter meaning, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the members of a group channel') that is clearly distinct from sibling resources like group channels or users. However, it never names or contrasts with a sibling tool, so an agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (channel membership/existence), and no alternatives named. The description only declares what the tool does, not when to pick it over sendbird_get_group_channel or sendbird_list_users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_group_channelsList group channelsARead-onlyInspect
List group channels in the application, with rich filtering (name, members, distinct/public/super mode). Platform API: GET /group_channels. Returns { channels[], next }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. Default 10. | |
| order | No | Sort order. Default chronological. | |
| token | No | Pagination token from a previous response's `next`. | |
| super_mode | No | Filter by Supergroup vs. group. Default all. | |
| public_mode | No | Filter by public/private. Default all. | |
| show_frozen | No | Include frozen channels. Default true. | |
| show_member | No | Include the member list in each channel. | |
| custom_types | No | Comma-separated channel custom types to filter on. | |
| distinct_mode | No | Filter by distinct flag. Default all. | |
| name_contains | No | Substring match on channel name. | |
| members_include_in | No | Comma-separated user ids; returns channels including any of them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true). The description adds the underlying Platform API endpoint (GET /group_channels) and the return envelope { channels[], next }, which tells the agent pagination is token-driven. It does not discuss rate limits or auth, but that is a minor gap given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then filters, then endpoint and return shape. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully declares the return shape and pagination token. Combined with full schema coverage and a readOnly annotation, an agent has enough to call it correctly; only ordering/pagination conventions are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all 11 parameters, including defaults and enums. The description's parenthetical filter summary (name, members, distinct/public/super) largely restates what the schema documents, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List group channels in the application") plus the filtering axes (name, members, distinct/public/super mode). It does not explicitly differentiate from the close sibling sendbird_list_group_channels_by_user, but the scope is otherwise unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource and filter summary, but there is no explicit when-to-use guidance and no named alternative (e.g., list_group_channels_by_user, list_open_channels). An agent must infer the choice from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_group_channels_by_userList a user's group channelsARead-onlyInspect
List the group channels a given user belongs to. Platform API: GET /users/{user_id}/my_group_channels. Returns { channels[], next }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. Default 10. | |
| order | No | Sort order. Default chronological. | |
| token | No | Pagination token from a previous response's `next`. | |
| user_id | Yes | Target user id (percent-encoded automatically). | |
| hidden_mode | No | Filter by hidden state (e.g. unhidden_only, hidden_only, all). | |
| public_mode | No | Filter by public/private. Default all. | |
| show_member | No | Include the member list in each channel. | |
| custom_types | No | Comma-separated channel custom types to filter on. | |
| distinct_mode | No | Filter by distinct flag. Default all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, so the bar is low, and the description adds genuine value by naming the underlying Platform API endpoint and the return envelope ({ channels[], next }). It adds no auth, rate-limit, or filtering behavior context, but the annotation/return-shape disclosure is solid for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: purpose first, endpoint second, return shape third. Everything is front-loaded and nothing needs to be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by declaring the return shape (channels[] + pagination next). For a 9-parameter paginated list tool this is nearly sufficient; only the relationship to sibling listing tools is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all nine parameters (limit, order, token, hidden_mode, public_mode, show_member, custom_types, distinct_mode) are documented in the schema, so the baseline of 3 applies. The description adds nothing about parameter semantics beyond embedding user_id in the endpoint path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the group channels') and scopes it to 'a given user belongs to', which is the key differentiator from the sibling sendbird_list_group_channels. It stops short of naming that sibling explicitly, so an agent must still infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'a given user belongs to'; there is no explicit statement of when to choose this over sendbird_list_group_channels or sendbird_list_group_channel_members. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_messagesList messagesARead-onlyInspect
List messages in a channel, anchored at a timestamp or message id. Provide EITHER message_ts (unix ms) OR message_id. Platform API: GET /{channel_type}/{channel_url}/messages. Returns { messages[] }.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Include the anchor message itself. | |
| reverse | No | Return in reverse chronological order. | |
| user_ids | No | Comma-separated sender user ids to filter on. | |
| message_id | No | Anchor message id. Provide this OR message_ts. | |
| message_ts | No | Anchor timestamp in unix milliseconds. Provide this OR message_id. | |
| next_limit | No | Number of messages after the anchor, 0-200. | |
| prev_limit | No | Number of messages before the anchor, 0-200. | |
| channel_url | Yes | Channel URL (percent-encoded automatically). | |
| channel_type | Yes | Channel type: group_channels (member-based) or open_channels (public, participant-based). | |
| custom_types | No | Comma-separated message custom types to filter on. | |
| message_type | No | Filter by message type: MESG (text), FILE, or ADMM (admin). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, so the bar is lower. The description adds incremental behavior: the mutual exclusivity of the anchor parameters, the underlying endpoint shape, and that the result is a { messages[] } payload. It does not explain pagination behavior (how next_limit/prev_limit interact), ordering defaults, or the include/reverse interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then the anchor rule, then the endpoint/return shape. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters fully documented in the schema and a read-only annotation, the description only needs to orient the agent, which it does. The main residual gap is that no output schema exists and the return description is minimal ('{ messages[] }'), so nothing explains the shape of individual message entries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters including the anchor alternatives and enum meanings. The description restates the message_ts/message_id exclusivity and unit (unix ms) but adds nothing about the pagination limits or filters. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource+scope ('List messages in a channel') and adds the anchoring concept, so an agent immediately knows what the tool does. It never names or contrasts a sibling tool, but the resource is distinct enough from send_message/list_users that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states one important usage rule clearly: 'Provide EITHER message_ts (unix ms) OR message_id.' That is a real constraint on invocation, but there is no guidance on when to use this tool versus other ways of retrieving messages, and no mention of prerequisites such as channel membership or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_open_channelsList open channelsARead-onlyInspect
List open (public, participant-based) channels. Platform API: GET /open_channels. Returns { channels[], next }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. Default 10. | |
| token | No | Pagination token from a previous response's `next`. | |
| custom_types | No | Comma-separated channel custom types to filter on. | |
| url_contains | No | Substring match on channel URL. | |
| name_contains | No | Substring match on channel name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint=true, and the description adds genuinely useful behavior: the underlying Platform API endpoint (GET /open_channels) and the return envelope { channels[], next }, which tells the agent pagination is cursor-based. It does not state auth requirements, but for a read-only list endpoint the added context is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: purpose first, then endpoint, then return shape. Every sentence carries information and the most important clause is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the return shape ({ channels[], next }) and the endpoint, and the fully documented schema covers all parameters. It is nearly complete for a simple read-only list tool, though it could note the read-only nature explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (limit, token, custom_types, url_contains, name_contains) are already documented in the schema. The description adds no extra filter syntax or default behavior beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List open (public, participant-based) channels') and clarifies what 'open' means, which lets an agent distinguish it from sendbird_list_group_channels. It does not explicitly name the sibling alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no routing to alternatives such as sendbird_list_group_channels or sendbird_get_open_channel for a single channel. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_list_usersList usersARead-onlyInspect
List the users in the application. Supports filtering by activity, nickname, ids, and metadata. Platform API: GET /users. Returns { users[], next }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. Default 10. | |
| token | No | Pagination token from a previous response's `next`. | |
| nickname | No | Exact nickname match. | |
| show_bot | No | Include bot users. Default true. | |
| user_ids | No | Comma-separated user ids to fetch specific users. | |
| active_mode | No | Filter by activation state. Default activated. | |
| metadatakey | No | Metadata key to filter on (pair with metadatavalues_in). | |
| metadatavalues_in | No | Comma-separated metadata values matching metadatakey. | |
| nickname_startswith | No | Prefix match on nickname. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value beyond that by disclosing the return shape ('{ users[], next }'), which matters because there is no output schema, and by flagging the pagination model via the 'next' token.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: purpose, capabilities, endpoint, and return shape, all front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with nine fully documented optional parameters, the definition covers purpose, endpoint, filtering, and the paginated return contract. Lack of explicit guidance on result size limits or how filters combine is a minor remaining gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (limit, token, nickname, active_mode, metadata pair, etc.) is already self-documented. The description's filter list maps to those parameters but adds no syntax or pairing detail beyond what the schema provides — the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the users in the application') and enumerates the filter dimensions, so an agent can distinguish this list operation from the singular sendbird_get_user. It stops short of naming that sibling explicitly, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists what can be filtered (activity, nickname, ids, metadata), which implies when the tool is useful, but it never says when to prefer it over sendbird_get_user or how filtering interacts with paging. Usage is inferable rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_requestRaw GET requestARead-onlyInspect
Power-user escape hatch: issue a raw GET to any Chat Platform API v3 path not wrapped by a dedicated tool (e.g. /group_channels/{url}/messages/{id}, /report, /applications/settings_global). READ-ONLY — GET only. Platform API: GET {path}.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | API path beginning with "/", relative to the /v3 base (e.g. "/users/alex%40x.com/blocked_users"). | |
| params | No | Optional JSON object (as a string) of query params, e.g. '{"limit":50}'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, and the description reinforces it with 'READ-ONLY — GET only', a minor restatement. It does add real context on the request shape (base is /v3, method is GET {path}), but says nothing about rate limits, error responses on invalid paths, or pagination behavior of raw results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses, front-loaded with the escape-hatch role before the constraint and the API template. No padding or redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a raw passthrough tool with no output schema, the definition supplies the essential invariants: /v3 base, GET-only, path and params shapes, and the fallback role. It omits only secondary details like error handling on malformed paths, which is forgivable for a raw HTTP escape hatch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'path' and 'params' are already documented, including format and the JSON-string encoding. The description's inline path examples add marginal flavor but no semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (issue a raw GET) and resource (any Chat Platform API v3 path), and explicitly frames itself as a fallback for endpoints 'not wrapped by a dedicated tool'. This distinguishes it immediately from the dedicated sibling tools like sendbird_get_group_channel or sendbird_list_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use condition ('paths not wrapped by a dedicated tool') and concrete example paths, plus the when-not implied by the escape-hatch framing. It stops short of naming which dedicated sibling to prefer for a given resource, so the routing decision still requires the agent to scan the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_send_messageSend a messageADestructiveInspect
MUTATES Sendbird data: sends a message into a channel as a user (MESG) or as an admin (ADMM). File/multipart messages are not supported. Platform API: POST /{channel_type}/{channel_url}/messages.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Additional structured data as a string (often JSON). | |
| message | Yes | The message text. | |
| user_id | No | Sender user id. REQUIRED when message_type is MESG. | |
| is_silent | No | If true, does not update channel's last message / unread counts. | |
| send_push | No | Whether to send push notifications. Default true. | |
| channel_url | Yes | Channel URL (percent-encoded automatically). | |
| custom_type | No | Custom type tag for the message. | |
| channel_type | Yes | Channel type: group_channels (member-based) or open_channels (public, participant-based). | |
| mention_type | No | Mention scope: specific users or the whole channel. | |
| message_type | No | MESG (user text, default) or ADMM (admin message, no sender). | |
| mentioned_user_ids | No | User ids to mention (when mention_type=users). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructiveHint=true; the description reinforces this with 'MUTATES Sendbird data' and adds two genuinely useful behavioral facts the annotations do not carry: file/multipart payloads are unsupported, and the operation maps to POST /{channel_type}/{channel_url}/messages. It stops short of auth requirements, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the ALL-CAPS mutation flag, then the two send modes, then the exclusion and endpoint. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema, the description covers the operation, the two modes, a key limitation, and the endpoint, while the schema fully documents parameters. Minor gaps remain around required permissions and what the response contains, but nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (user_id required for MESG, is_silent, send_push, mention_type, etc.) is already documented in the schema. The description's MESG/ADMM mention duplicates the message_type field description rather than adding new semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('sends a message into a channel') and further qualifies the two modes (MESG as user, ADMM as admin) plus the underlying endpoint. This clearly separates it from the sibling read tools like sendbird_list_messages or sendbird_get_group_channel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mutation framing and the MESG/ADMM distinction, and one exclusion is given ('File/multipart messages are not supported'). However, it never states when to pick this tool over an alternative, nor does it point to any sibling for the unsupported file case, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendbird_update_userUpdate a userADestructiveInspect
MUTATES Sendbird data: partially updates a user's profile. Only provided fields change. Platform API: PUT /users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Target user id (percent-encoded automatically). | |
| nickname | No | New display nickname. | |
| profile_url | No | New profile image URL. | |
| issue_access_token | No | If true, issues a new access token for the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructiveHint=true; the description adds real context on top of that, flagging the mutation ('MUTATES Sendbird data') and, importantly, the partial-update semantics ('Only provided fields change'), which tells the agent unspecified fields are left intact. It stops short of saying what permissions or side effects apply, or that issuing a token has consequences for existing sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: the mutation warning comes first, then the partial-update rule, then the API mapping. Nothing is redundant and no sentence could be dropped without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation with no output schema, the description covers the essentials: it mutates, it is partial, and it maps to a known endpoint. Minor gaps remain around authorization requirements and the effect of issue_access_token on existing tokens, but the operation is callable as documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, and the description adds only the global 'only provided fields change' rule rather than per-parameter meaning. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('partially updates a user's profile') and even names the underlying endpoint (PUT /users/{user_id}), which pins down exactly which operation this is. It does not explicitly contrast itself with siblings such as sendbird_create_user or sendbird_get_user, but the verb makes the distinction obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'partially updates' signals this is the tool for modifying an existing user rather than creating one, and 'only provided fields change' hints at the patch-style call. There is no explicit when-to-use statement, no mention of when to prefer create_user/get_user, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Sendbird chat infrastructure, enabling AI agents to provision users, create channels, fetch history, send admin messages, and moderate users via 5 tools.MIT
- AlicenseAqualityAmaintenanceAn MCP server that enables AI agents to send realtime messages, query channels, and manage users through Pusher Channels.753 npm3MIT

Chamade MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceMCP server for Chamade — a voice and chat gateway that lets your AI agent join meetings and DMs on Discord, Microsoft Teams, Google Meet, Telegram, SIP, Zoom, Nextcloud Talk, Slack, and WhatsApp.84 npmMIT- AlicenseAqualityDmaintenanceMCP server for Sendook - an AI email communication platform. Enables AI agents to send and receive emails, manage inboxes, threads, and webhooks programmatically.16MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.