[BUG] Slack connector: `slack_read_channel` drops `sh_room_ended` events, making huddle duration inaccessible
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The slack_read_channel tool silently drops sh_room_ended system events from Slack's conversations.history response. These events contain the exact huddle duration that the Slack client displays as:
"A huddle happened - You and [name] were in the huddle for 24m."
Only the huddle start ("A huddle started") is returned as a plain Slackbot message. The end event and duration are completely absent - even when scanning 6+ hours past the huddle start time.
slack_search_public_and_private also returns no results when searching for this event type.
What Should Happen?
slack_read_channel should return the sh_room_ended event (or the "A huddle happened" Slackbot summary message) so that huddle duration is accessible. The data exists - Slack stores it, and the client renders it - but the MCP does not expose it. At minimum, the summary message visible in the Slack UI should be returned like any other Slackbot message.
Error Messages/Logs
No error is thrown. The event is silently absent from the response.
slack_read_channel response (truncated):
- Slackbot 12:58:06 IST: "A huddle started" ← present
- [sh_room_ended event for same huddle] ← missing
- Next user message: 13:16:40 IST
Verified by scanning oldest=huddle_start, latest=huddle_start+25200 (7 hours).
Zero results for slack_search query: "were in the huddle for" in the same DM.
Steps to Reproduce
- Start and end a Slack Huddle in a DM channel (note the duration shown in the Slack client - e.g. "You and X were in the huddle for 24m.").
- Call
slack_read_channelwith:
````
channel_id = <DM channel ID>
oldest = <huddle start timestamp>
latest = <huddle start timestamp + 25200> (7 hours)
limit = 100
- Observe: only the "A huddle started" Slackbot message appears. No end event, no duration, no "A huddle happened" summary - anywhere in the response.
- Call
slack_search_public_and_privatewith:
````
query = "were in the huddle for in:<@PARTNER_USER_ID>"
include_bots = true
channel_types = im
- Observe: 0 results returned despite the message being clearly visible in the Slack desktop client.
Claude Model
Sonnet (default)
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.175
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
The Slack client renders huddle end events from the sh_room_ended message subtype, which contains room.date_start, room.date_end, and room.duration fields. The MCP appears to filter out messages with this subtype entirely.
Workaround currently in use: Estimating duration from the timestamp of the last in-call message before a 10+ minute gap - this gives an approximation but not the actual duration.
Affected connector: Slack (slack-by-salesforce Claude connector).
Tested on: DM channels (channel IDs starting with D). Likely affects public/private channel huddles too.
Note: sh_room_ended is an undocumented Slack internal subtype - it appears in conversations.history responses but has no official API reference page.
The closest related official docs:
- conversations.history: https://api.slack.com/methods/conversations.history
- user_huddle_changed event: https://api.slack.com/events/user_huddle_changed