This gives Claude direct access to Discord's v10 API for managing servers, channels, and messages through your bot token. You can send messages (plain text or embeds), read channel history, manage reactions, pull server info, create webhooks, and handle basic admin tasks like creating channels. The examples are all curl commands, which is helpful for understanding what Claude will actually execute. It covers the essentials well, though you'll need to ensure your bot has the right permissions and intents enabled in Discord's developer portal. Worth noting that it handles rate limiting awareness but doesn't implement automatic retry logic, so you'll want to watch for those headers if you're doing high volume operations.
npx -y skills add vm0-ai/vm0-skills --skill discord --agent claude-codeInstalls into .claude/skills of the current project.
If requests fail, run zero doctor check-connector --env-name DISCORD_BOT_TOKEN or zero doctor check-connector --url https://discord.com/api/v10/users/@me --method GET
Base URL: https://discord.com/api/v10
Authorization header: Authorization: Bot YOUR_TOKEN
curl -s "https://discord.com/api/v10/users/@me" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '{id, username, discriminator}'
Write to /tmp/discord_request.json:
{
"content": "Hello from bot!"
}
Then run (replace <your-channel-id> with the actual channel ID):
curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/messages" -H "Authorization: Bot $DISCORD_BOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/discord_request.json
Write to /tmp/discord_request.json:
{
"embeds": [
{
"title": "Bot Message",
"description": "This is from the bot API",
"color": 5793266
}
]
}
Then run (replace <your-channel-id> with the actual channel ID):
curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/messages" -H "Authorization: Bot $DISCORD_BOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/discord_request.json
Replace <your-channel-id> with the actual channel ID:
curl -s "https://discord.com/api/v10/channels/<your-channel-id>" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '{id, name, type, guild_id}'
Replace <your-channel-id> with the actual channel ID:
curl -s "https://discord.com/api/v10/channels/<your-channel-id>/messages?limit=10" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '.[] | {id, author: .author.username, content}'
Replace <your-channel-id> and <your-message-id> with the actual IDs:
curl -s "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '{id, content, author: .author.username}'
Replace <your-channel-id> and <your-message-id> with the actual IDs:
curl -s -X DELETE "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>" -H "Authorization: Bot $DISCORD_BOT_TOKEN"
Replace <your-channel-id> and <your-message-id> with the actual IDs:
curl -s -X PUT "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>/reactions/%F0%9F%91%8D/@me" -H "Authorization: Bot $DISCORD_BOT_TOKEN" -H "Content-Length: 0"
Note: Emoji must be URL encoded (👍 = %F0%9F%91%8D)
Replace <your-guild-id> with the actual guild ID:
curl -s "https://discord.com/api/v10/guilds/<your-guild-id>" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '{id, name, member_count, owner_id}'
Replace <your-guild-id> with the actual guild ID:
curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/channels" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '.[] | {id, name, type}'
Replace <your-guild-id> with the actual guild ID:
curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/members?limit=10" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '.[] | {user: .user.username, nick, joined_at}'
Replace <your-guild-id> with the actual guild ID:
curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/roles" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '.[] | {id, name, color, position}'
Write to /tmp/discord_request.json:
{
"name": "My Webhook"
}
Then run (replace <your-channel-id> with the actual channel ID):
curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/webhooks" -H "Authorization: Bot $DISCORD_BOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/discord_request.json | jq '{id, token, url: "https://discord.com/api/webhooks/\(.id)/\(.token)"}'
Replace <your-channel-id> with the actual channel ID:
curl -s "https://discord.com/api/v10/channels/<your-channel-id>/webhooks" -H "Authorization: Bot $DISCORD_BOT_TOKEN" | jq '.[] | {id, name, token}'
Write to /tmp/discord_request.json:
{
"name": "new-channel",
"type": 0
}
Then run (replace <your-guild-id> with the actual guild ID):
curl -s -X POST "https://discord.com/api/v10/guilds/<your-guild-id>/channels" -H "Authorization: Bot $DISCORD_BOT_TOKEN" -H "Content-Type: application/json" -d @/tmp/discord_request.json | jq '{id, name}'
| Type | Description |
|---|---|
| 0 | Text channel |
| 2 | Voice channel |
| 4 | Category |
| 5 | Announcement |
| 13 | Stage |
| 15 | Forum |
X-RateLimit-* headers; implement backoff/v10 for latest stable APIjuliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills