Generalizes error messages since this parser is now shared between
reactions_add and reactions_remove. Both tools use the same guardrail
(SLACK_MCP_ADD_MESSAGE_TOOL env var).
Companion to reactions_add (merged in #141). Allows removing emoji
reactions from messages using the same channel/timestamp/emoji params.
Tested with xoxb, xoxc/xoxd token types.
Add readOnlyHint and destructiveHint annotations to all tools
to help LLMs better understand tool behavior and make safer decisions.
Changes:
- Added readOnlyHint: true to read-only tools (conversations_history,
conversations_replies, conversations_search_messages, channels_list)
- Added destructiveHint: true to conversations_add_message tool
- Added title annotations for human-readable display
This improves tool safety metadata for MCP clients by providing
semantic hints about whether tools modify data or just read it.
Co-Authored-By: Claude <noreply@anthropic.com>
Fixes error when Slack API returns errors as strings instead of objects:
"json: cannot unmarshal string into Go struct field chatResponseFull.SlackResponse.errors of type map[string]interface{}"
The bug was in SlackResponseErrors.UnmarshalJSON which didn't handle
string error values. This was fixed in slack-go/slack v0.17.2+.
Added test case to verify the fix works.
DM channels now show proper names like @testuser instead of just @
after cache reload. Fixed by adding User and Members fields to Channel struct
and updating IM/UserBootChannel conversion methods.
- Add support for bot tokens as an alternative authentication method
- Conditionally register search tool only for non-bot tokens (bots cannot use search.messages API)
- Update isOAuth definition to include both xoxp and xoxb tokens for cleaner implementation
- Add bot token configuration to manifest-dxt.json for DXT extension
- Document bot token limitations in README and authentication setup guide
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>