refactor: split mcporter-slack skill into mcporter and slack
mcporter CLI syntax (call, --args, key=value coercion) is stable and
applies to any MCP server. Slack tools change as the upstream server
evolves and belong in a self-improving skill.

Assisted-by: Claude Opus 4.6 via Claude Code
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
change qqrmpouvzrwkrwmytnrnwrrowvopwyll
commit 683f0e5ca786d46534b0129d05cc48e054502ce1
author Alpha Chen <alpha@kejadlen.dev>
date
parent mvxwrkmq
diff --git a/ai/skills/mcporter/SKILL.md b/ai/skills/mcporter/SKILL.md
new file mode 100644
index 00000000..2e379eda
--- /dev/null
+++ b/ai/skills/mcporter/SKILL.md
@@ -0,0 +1,44 @@
+---
+name: mcporter
+description: Use when calling MCP tools via the mcporter CLI — covers call syntax, argument formats, timestamp handling, and tool discovery.
+---
+
+# mcporter
+
+CLI for calling MCP server tools. Run commands via Bash.
+
+## Syntax
+
+```bash
+mcporter call <server>.<tool> key=value key2=value2
+mcporter call <server>.<tool> --args '{"key":"value"}'
+```
+
+Both `key=value` and `--args` JSON work. Prefer `key=value` for simple
+calls. Use `--args` JSON when any parameter is a string that looks
+numeric — `key=value` coerces values, which breaks schema validation
+for string-typed fields like timestamps.
+
+```bash
+# key=value coerces 1772034831.268949 to a number — fails validation.
+mcporter call slack.get_thread_messages channel=general thread_ts=1772034831.268949
+
+# --args preserves the string type.
+mcporter call slack.get_thread_messages --args '{"channel":"general","thread_ts":"1772034831.268949"}'
+```
+
+## Discovering tools
+
+```bash
+mcporter list                    # List configured servers
+mcporter list <server> --schema  # Show all tools with full parameter schemas
+```
+
+## Quick reference
+
+| Command | Purpose |
+|---------|---------|
+| `mcporter list` | List servers |
+| `mcporter list <server> --schema` | Tool docs and parameter schemas |
+| `mcporter call <server>.<tool> ...` | Call a tool |
+| `mcporter call --help` | Full call syntax |
diff --git a/ai/skills/mcporter-slack/SKILL.md b/ai/skills/slack/SKILL.md
similarity index 81%
rename from ai/skills/mcporter-slack/SKILL.md
rename to ai/skills/slack/SKILL.md
index ad3bb0ce..1b6d73e5 100644
--- a/ai/skills/mcporter-slack/SKILL.md
+++ b/ai/skills/slack/SKILL.md
@@ -1,29 +1,14 @@
 ---
-name: mcporter-slack
+name: slack
 description: Use when searching Slack, finding messages, sending messages, checking channel history, getting thread replies, listing channels, or getting user profiles via mcporter CLI.
 ---
 
-# Slack via mcporter
+# Slack
 
-Use the mcporter CLI to interact with Slack. Run commands via Bash.
+Slack tools via mcporter. Prefix all calls with `slack.`.
 
 *This is a self-improving skill — see the `self-improving-skills` skill.*
 
-## Syntax
-
-```bash
-mcporter call slack.<tool> key=value key2=value2
-```
-
-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.get_thread_messages --args '{"channel":"C0ABC123","thread_ts":"1772034831.268949"}'
-```
-
 ## Available tools
 
 | Tool | Purpose |
@@ -44,6 +29,9 @@ mcporter call slack.get_thread_messages --args '{"channel":"C0ABC123","thread_ts
 | `get_reactions` | Get emoji reactions on a message |
 | `add_reaction` | Add an emoji reaction to a message |
 
+Run `mcporter list slack --schema` if a tool's parameters aren't
+listed here.
+
 ## Channels
 
 Most tools accept a `channel` parameter that takes either a channel
@@ -52,17 +40,6 @@ names are resolved automatically.
 
 For private channels, the Slack MCP app must be invited to the channel.
 
-## 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`.
-- Parentheses in OR queries silently fail. Write `from:me OR to:me`,
-  not `(from:me OR to:me)`.
-- Passing timestamps as `key=value` coerces them to numbers and fails
-  schema validation. Use `--args` JSON instead.
-- Using `message` instead of `text` in `send_message`. The parameter
-  is `text`.
-
 ## Search queries
 
 ```bash
@@ -82,10 +59,7 @@ or `timestamp`), `sort_dir` (`asc` or `desc`).
 ### Find and read a conversation
 
 ```bash
-# Search for messages.
 mcporter call slack.search query="keyword in:#channel"
-
-# Read a thread (use --args for timestamps).
 mcporter call slack.get_thread_messages --args '{"channel":"C0ABC123","thread_ts":"1234567890.123456"}'
 ```
 
@@ -107,7 +81,7 @@ mcporter call slack.fetch --args '{"channel":"general","ts":"1234567890.123456"}
 # New message.
 mcporter call slack.send_message channel=general text="Hello"
 
-# Thread reply (use --args for timestamps).
+# Thread reply.
 mcporter call slack.send_message --args '{"channel":"C0ABC123","text":"Reply","thread_ts":"1234567890.123456"}'
 
 # Broadcast reply (also posts to channel).
@@ -124,4 +98,14 @@ mcporter call slack.add_reaction --args '{"channel":"general","timestamp":"12345
 
 Slack timestamps look like `1234567890.123456` (Unix seconds with
 microseconds). They appear as `ts`, `thread_ts`, or `message_ts` in
-message objects. Always pass them as strings via `--args` JSON.
+message objects. Always pass them via `--args` JSON (see the `mcporter`
+skill for why).
+
+## 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`.
+- Parentheses in OR queries silently fail. Write `from:me OR to:me`,
+  not `(from:me OR to:me)`.
+- Using `message` instead of `text` in `send_message`. The parameter
+  is `text`.