Install any skill in seconds. Free to start, no credit card required.
Get Started Free →List all channels in a Discord guild/server via the Discord API. Use this skill when the user wants to see all channels, find specific channels, or audit server structure.
.claude/skills/evolution-foundation-discord-list-channels/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 190% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 121% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 47% | 0% |
List all channels in a Discord guild (server) using the Discord API v10. This skill retrieves all channels including text channels, voice channels, categories, announcement channels, and stage channels.
Use this skill when the user wants to:
DISCORD_BOT_TOKEN environment variable must be setChannels are returned with the following type values:
| Type | Value | Description | |------|-------|-------------| | GUILD_TEXT | 0 | Text channel | | GUILD_VOICE | 2 | Voice channel | | GUILD_CATEGORY | 4 | Category (organizes channels) | | GUILD_ANNOUNCEMENT | 5 | Announcement channel | | GUILD_STAGE_VOICE | 13 | Stage channel | | GUILD_FORUM | 15 | Forum channel |
When the user requests to list Discord channels:
DISCORD_BOT_TOKEN is set in environmentUse the following curl command structure:
bash curl -X GET "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"
Replace {GUILD_ID} with the actual guild ID.
Each channel object contains:
json{ "id": "123456789012345678", "type": 0, "guild_id": "987654321098765432", "position": 0, "permission_overwrites": [], "name": "general", "topic": "General discussion", "nsfw": false, "last_message_id": "111222333444555666", "parent_id": null }
Additional fields for voice channels:
json{ "bitrate": 64000, "user_limit": 0, "rtc_region": null }
Filter channels to show only specific types:
bash# Get all channels then filter by type curl -s "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \ jq '.[] | select(.type == 0)' # Text channels only
Type filters:
.type == 0 - Text channels.type == 2 - Voice channels.type == 4 - Categories.type == 5 - Announcement channels.type == 13 - Stage channelsSearch for channels by name:
bash# Get channels and search by name curl -s "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \ jq '.[] | select(.name | contains("general"))'
List channels in a specific category:
bash# Get channels in category with parent_id curl -s "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \ jq '.[] | select(.parent_id == "category_id_here")'
Organize channels by their parent category:
bash# List all channels grouped by category CHANNELS=$(curl -s "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}") # Get categories echo "$CHANNELS" | jq -r '.[] | select(.type == 4) | .name + " (ID: " + .id + ")"' # Get channels in each category for CATEGORY_ID in $(echo "$CHANNELS" | jq -r '.[] | select(.type == 4) | .id'); do echo "Channels in category $CATEGORY_ID:" echo "$CHANNELS" | jq -r ".[] | select(.parent_id == \"$CATEGORY_ID\") | \" - \" + .name" done
Channels have a position field for sorting:
bashcurl -s "https://discord.com/api/v10/guilds/{GUILD_ID}/channels" \ -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \ jq 'sort_by(.position)'
Channels in server 123456789012345678:
- general (text)
- announcements (announcement)
- voice-chat (voice)
- Community (category)=== Text Channels ===
general (ID: 111222333444555666)
Topic: General discussion
NSFW: No
announcements (ID: 111222333444555667)
Topic: Server updates
NSFW: No
=== Voice Channels ===
voice-chat (ID: 111222333444555668)
User Limit: None
Bitrate: 64kbps
=== Categories ===
Community (ID: 111222333444555669)📁 Community (Category)
💬 general-chat (Text)
💬 help (Text)
🔊 Voice Room 1 (Voice)
📁 Administration (Category)
💬 mod-chat (Text)
💬 admin-only (Text)
💬 welcome (Text) - No category
📢 announcements (Announcement) - No categorycsvChannel ID,Name,Type,Category,Topic 111222333444555666,general,text,Community,General discussion 111222333444555667,voice-chat,voice,Community, 111222333444555668,announcements,announcement,,Server updates
When displaying channels, use these labels:
| Type Value | Display Label | Emoji | |------------|---------------|-------| | 0 | Text | 💬 | | 2 | Voice | 🔊 | | 4 | Category | 📁 | | 5 | Announcement | 📢 | | 13 | Stage | 🎙️ | | 15 | Forum | 💭 |
401 Unauthorized
DISCORD_BOT_TOKEN is set correctly403 Forbidden
404 Not Found
User wants to find a channel ID by its name.
User wants to see all channels organized by category.
User wants to see only voice channels or only text channels.
User wants to export all channel names and IDs for documentation.
User wants to see which channels the bot has access to.
See examples.md for detailed usage scenarios.
GET /guilds/{guild.id}/channels| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | pass→pass | 13,677 | 7,354 | -46% | 1 | 1 | 0% | 2,301 | 3,771 | +64% | 0 | 0 | — |
case-01 | fail→pass | 9,227 | 17,474 | +89% | 1 | 1 | 0% | 1,800 | 5,223 | +190% | 0 | 0 | — |
case-02 | fail→pass | 9,524 | 10,631 | +12% | 1 | 1 | 0% | 2,012 | 4,530 | +125% | 0 | 0 | — |
case-03 | fail→fail | 5,582 | 7,372 | +32% | 1 | 1 | 0% | 1,042 | 2,806 | +169% | 0 | 0 | — |
case-04 | pass→pass | 4,446 | 3,698 | -17% | 1 | 1 | 0% | 974 | 3,052 | +213% | 0 | 0 | — |
case-05 | pass→pass | 6,878 | 5,354 | -22% | 1 | 1 | 0% | 1,367 | 3,520 | +157% | 0 | 0 | — |
case-06 | pass→pass | 7,861 | 4,731 | -40% | 1 | 1 | 0% | 1,490 | 3,287 | +121% | 0 | 0 | — |
case-07 | pass→pass | 7,119 | 3,887 | -45% | 1 | 1 | 0% | 1,325 | 3,063 | +131% | 0 | 0 | — |
case-08 | pass→pass | 3,874 | 2,597 | -33% | 1 | 1 | 0% | 670 | 2,864 | +327% | 0 | 0 | — |
case-09 | pass→pass | 2,379 | 1,504 | -37% | 1 | 1 | 0% | 386 | 2,630 | +581% | 0 | 0 | — |
case-10 | fail→pass | 7,483 | 4,167 | -44% | 1 | 1 | 0% | 1,467 | 3,245 | +121% | 0 | 0 | — |
case-11 | pass→pass | 6,308 | 3,294 | -48% | 1 | 1 | 0% | 1,326 | 3,007 | +127% | 0 | 0 | — |
case-12 | fail→pass | 13,768 | 9,933 | -28% | 1 | 1 | 0% | 2,571 | 4,312 | +68% | 0 | 0 | — |
case-13 | pass→pass | 10,447 | 6,346 | -39% | 1 | 1 | 0% | 1,878 | 3,467 | +85% | 0 | 0 | — |
case-14 | pass→pass | 14,064 | 5,731 | -59% | 1 | 1 | 0% | 2,360 | 3,370 | +43% | 0 | 0 | — |
case-15 | pass→pass | 8,064 | 5,412 | -33% | 1 | 1 | 0% | 1,247 | 3,281 | +163% | 0 | 0 | — |
case-16 | fail→pass | 11,050 | 1,836 | -83% | 1 | 1 | 0% | 1,766 | 2,590 | +47% | 0 | 0 | — |
case-17 | pass→pass | 3,368 | 2,603 | -23% | 1 | 1 | 0% | 546 | 2,826 | +418% | 0 | 0 | — |
case-18 | pass→pass | 6,614 | 4,002 | -39% | 1 | 1 | 0% | 1,140 | 3,148 | +176% | 0 | 0 | — |
case-19 | pass→pass | 8,084 | 4,661 | -42% | 1 | 1 | 0% | 1,554 | 3,306 | +113% | 0 | 0 | — |
case-20 | pass→pass | 8,221 | 4,966 | -40% | 1 | 1 | 0% | 1,519 | 3,416 | +125% | 0 | 0 | — |
case-21 | pass→pass | 9,180 | 6,949 | -24% | 1 | 1 | 0% | 1,856 | 3,810 | +105% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.