fix: update mcporter-slack skill to match current MCP server tools
Tool names, parameters, and available tools all diverged from the
actual server. Verified against `mcporter list slack --schema`.
Assisted-by: Claude Opus 4.6 via Claude Code
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
diff --git a/ai/skills/mcporter-slack/SKILL.md b/ai/skills/mcporter-slack/SKILL.md
index 089041c4..ad3bb0ce 100644
--- a/ai/skills/mcporter-slack/SKILL.md
+++ b/ai/skills/mcporter-slack/SKILL.md
@@ -7,50 +7,52 @@ description: Use when searching Slack, finding messages, sending messages, check
Use the mcporter CLI to interact with Slack. Run commands via Bash.
+*This is a self-improving skill — see the `self-improving-skills` skill.*
+
## Syntax
```bash
mcporter call slack.<tool> key=value key2=value2
```
-Timestamp parameters (`message_ts`, `thread_ts`, `oldest`, `latest`) are
-typed as strings in the schema, but `key=value` syntax coerces them to
-numbers. Use `--args` JSON for any call that includes timestamps:
+Timestamp parameters (`thread_ts`, `oldest`, `latest`, `ts`,
+`timestamp`) are typed as strings in the schema, but `key=value` syntax
+coerces them to numbers. Use `--args` JSON for any call that includes
+timestamps:
```bash
-mcporter call slack.slack_read_thread --args '{"channel_id":"C0ABC123","message_ts":"1772034831.268949"}'
+mcporter call slack.get_thread_messages --args '{"channel":"C0ABC123","thread_ts":"1772034831.268949"}'
```
-## Available Tools
+## Available tools
| Tool | Purpose |
|------|---------|
-| `slack_search_public` | Search messages in public channels |
-| `slack_search_public_and_private` | Search messages across all channels |
-| `slack_search_channels` | Find channels by name |
-| `slack_search_users` | Find users by name or email |
-| `slack_read_channel` | Read messages from a channel |
-| `slack_read_thread` | Read a thread (parent + replies) |
-| `slack_read_user_profile` | Get a user's profile |
-| `slack_send_message` | Send a message or thread reply |
-| `slack_send_message_draft` | Draft a message for user review |
-| `slack_schedule_message` | Schedule a message for later |
-
-## Channel IDs
-
-All tools take `channel_id`, not channel names. Look up the ID first:
-
-```bash
-mcporter call slack.slack_search_channels query="general"
-```
-
-ID formats: `C` + 10 chars for channels, `D` + 10 chars for DMs,
-`G` + 10 chars for groups. Never pass user IDs (`U` + 10 chars) as
-`channel_id` — look up the DM channel ID instead.
+| `search` | Search messages across all channels (public, private, DMs) |
+| `list_channels` | List all channels in the workspace |
+| `get_channel` | Get channel details (name, purpose, topic, member count) |
+| `get_channel_history` | Read recent messages from a channel |
+| `get_thread_messages` | Read a thread (parent + replies) |
+| `fetch` | Fetch a specific message by channel and timestamp |
+| `get_conversation_members` | List user IDs in a channel |
+| `list_users` | List all users in the workspace |
+| `get_profile` | Get a user's profile by username or user ID |
+| `get_team_info` | Get workspace/team information |
+| `list_usergroups` | List user groups (@engineering, etc.) |
+| `get_usergroup_members` | Get members of a user group |
+| `send_message` | Send a message or thread reply |
+| `get_reactions` | Get emoji reactions on a message |
+| `add_reaction` | Add an emoji reaction to a message |
+
+## Channels
+
+Most tools accept a `channel` parameter that takes either a channel
+name (`general`, `#general`) or a channel ID (`C1234567890`). Channel
+names are resolved automatically.
For private channels, the Slack MCP app must be invited to the channel.
-## Common Mistakes
+## Common mistakes
- The `@` prefix on `from:` and `to:` modifiers doesn't work reliably.
Use bare names: `from:me to:martin.emde`, not `from:@me to:@Martin Emde`.
@@ -58,49 +60,64 @@ For private channels, the Slack MCP app must be invited to the channel.
not `(from:me OR to:me)`.
- Passing timestamps as `key=value` coerces them to numbers and fails
schema validation. Use `--args` JSON instead.
-- Sending to user IDs instead of channel IDs. Always resolve the channel
- ID through `slack_search_channels` or `slack_search_users` first.
+- Using `message` instead of `text` in `send_message`. The parameter
+ is `text`.
-## Search Queries
+## Search queries
```bash
-mcporter call slack.slack_search_public query="from:user OR to:user after:2025-01-01 before:2025-01-07"
-mcporter call slack.slack_search_public query="from:user on:2025-01-15"
+mcporter call slack.search query="from:user OR to:user after:2025-01-01 before:2025-01-07"
+mcporter call slack.search query="from:user on:2025-01-15"
```
Modifiers: `from:user`, `to:user`, `mentions:user`, `in:#channel`,
`before:` / `after:` / `on:` with `YYYY-MM-DD` or `today`,
`is:thread`, `has:pin`.
-## Common Workflows
+Optional parameters: `count` (default 20, max 100), `sort` (`score`
+or `timestamp`), `sort_dir` (`asc` or `desc`).
+
+## Common workflows
-### Find and Read a Conversation
+### Find and read a conversation
```bash
-# Search for messages
-mcporter call slack.slack_search_public query="keyword in:#channel"
+# Search for messages.
+mcporter call slack.search query="keyword in:#channel"
-# Read a thread (use --args for timestamps)
-mcporter call slack.slack_read_thread --args '{"channel_id":"C0ABC123","message_ts":"1234567890.123456"}'
+# Read a thread (use --args for timestamps).
+mcporter call slack.get_thread_messages --args '{"channel":"C0ABC123","thread_ts":"1234567890.123456"}'
```
-### Browse a Channel
+### Browse a channel
```bash
-mcporter call slack.slack_read_channel channel_id=C0ABC123 limit=50
+mcporter call slack.get_channel_history channel=general limit=50
```
-### Send Messages
+### Fetch a specific message
```bash
-# New message
-mcporter call slack.slack_send_message channel_id=C0ABC123 message="Hello"
+mcporter call slack.fetch --args '{"channel":"general","ts":"1234567890.123456"}'
+```
+
+### Send messages
+
+```bash
+# New message.
+mcporter call slack.send_message channel=general text="Hello"
-# Thread reply (use --args for timestamps)
-mcporter call slack.slack_send_message --args '{"channel_id":"C0ABC123","message":"Reply","thread_ts":"1234567890.123456"}'
+# Thread reply (use --args for timestamps).
+mcporter call slack.send_message --args '{"channel":"C0ABC123","text":"Reply","thread_ts":"1234567890.123456"}'
-# Broadcast reply (also posts to channel)
-mcporter call slack.slack_send_message --args '{"channel_id":"C0ABC123","message":"Reply","thread_ts":"1234567890.123456","reply_broadcast":true}'
+# Broadcast reply (also posts to channel).
+mcporter call slack.send_message --args '{"channel":"C0ABC123","text":"Reply","thread_ts":"1234567890.123456","reply_broadcast":true}'
+```
+
+### React to a message
+
+```bash
+mcporter call slack.add_reaction --args '{"channel":"general","timestamp":"1234567890.123456","name":"thumbsup"}'
```
## Timestamps