Slack workspace channel catalog
Purpose: Single place to discover Brainforge Slack channels: IDs (for bots, MCP, automation), stated purpose/topic, whether a channel is internal vs external-facing, membership signal, and recency (last message time). Teammates and agents use this to pick the right channel without hunting in the Slack UI.
Living data: The wide table is machine-generated — edit slack-workspace-channel-catalog.generated.md only by re-running the script, not by hand.
How to regenerate
- Use a Slack token with
conversations.list,conversations.history, andconversations.members.users.listis only needed whenSLACK_MEMBER_SAMPLEis greater than0(default6) so sample names can exclude bots. Use the sameSLACK_BOT_TOKENas platform Slack integrations when possible; the bot must be in private channels you want listed. - From the monorepo root:
node --env-file=apps/platform/.env.local knowledge/engineering/scripts/slack-channel-catalog.mjsOr:
SLACK_BOT_TOKEN=xoxb-… npm run slack:channel-catalog- Commit the updated
slack-workspace-channel-catalog.generated.mdon a branch when the catalog should advance (monthly, or after major channel churn).
Optional env:
| Variable | Meaning |
|---|---|
SLACK_CHANNEL_CATALOG_OUT | Override output path (default: knowledge/engineering/slack-workspace-channel-catalog.generated.md). |
SLACK_MEMBER_SAMPLE | Max sample member display names per channel (0 = skip; default 6). Full roster is not exported—use Slack for membership management. |
What each column means
| Column | Source / notes |
|---|---|
| Channel | Name with # prefix. |
| Channel ID | Stable ID (C…) for APIs, MCP slack_send_message, Railway envs, etc. |
| Purpose / topic | From Slack purpose and topic (truncated). May be empty if unset. |
| Audience | External (Slack Connect) when is_ext_shared. Otherwise a heuristic (Internal vs Mixed / external-facing) from channel name + purpose/topic keywords—not authoritative. Fix ambiguous channels here in prose or ask Ops to rename/clarify purpose in Slack. |
| Visibility | Public vs private channel. |
| Archived | Whether the channel is archived. |
| Slack Connect | Same as external shared indicator. |
| Members | num_members when the API returns it. |
| Sample members | Alphabetically sorted sample of display names (optional; see SLACK_MEMBER_SAMPLE). Bots are excluded using users.list is_bot when member sampling is enabled. |
| Created | Channel creation time (UTC). |
| Latest message | Timestamp of the latest message visible to the token (UTC), not “last read.” Empty channels show —. |
Limits and privacy
- Not all channels: Only channels the token can see appear (e.g. private channels the bot was never invited to are missing).
- Not a substitute for Slack: Membership changes, invites, and compliance live in Slack and IT policy.
- Internal use: Treat the generated file as internal; it may contain channel names tied to clients or partners.
Related
- Slack MCP fallback and discovery:
knowledge/standards/04-prompts/slack-mcp-context.md - Platform env vars for Slack:
apps/platform/.env.example(SLACK_BOT_TOKEN, etc.)