Run your first Discord tools
This is the shortest verified path from a local install to a real Discord tool call. You will first prove the connection with a read-only request, then send one message to a test channel.
Before you begin
- Keep the bot installed in your private test server.
- Confirm that your restarted MCP client lists the seven progressive tools described in Client setup when guild architecture is authorized (or the four search/dispatcher tools otherwise), or the allowed direct tools if you deliberately selected the compatibility surface.
- Have the bot token and test server ID available privately.
-
Validate the token against Discord.
doctorreads the current terminal environment, not the client config. Set the token only for this terminal and run the online checks:Bash read -rsp 'Discord bot token: ' DISCORD_TOKEN && printf '\n'export DISCORD_TOKENdiscord-mcp doctor --profile devbot --onlineunset DISCORD_TOKENPowerShell $env:DISCORD_TOKEN = Read-Host 'Discord bot token' -MaskInputdiscord-mcp doctor --profile devbot --onlineRemove-Item Env:DISCORD_TOKENThe first example requires Bash; the second requires PowerShell 7. If neither is available, skip this optional diagnostic rather than placing the token in a command or shell history.
Find the
token-onlinerow with statusOKand the messageDiscord accepted tokenin the report. Exit1can still mean the online token check passed with another warning; inspect every line. Fix failures on exit2. -
Prove the client connection read-only.
In the MCP client you restarted during Unit 2, ask:
First call
mcp_tools_searchwithqueryusers_get_current. Confirm that the exact match namesmcp_tools_readas its dispatcher, then callmcp_tools_readwithtoolusers_get_currentandargs{}. Tell me the bot username and ID. Do not invoke any other Discord tool.The hidden Discord tool needs no arguments. A successful dispatched result identifies the same bot you created in the Developer Portal.
-
Discover the channel ID.
Replace the example with your copied server ID:
First call
mcp_tools_searchwithquerychannels_list. Confirm that the exact match namesmcp_tools_readas its dispatcher, then callmcp_tools_readwithtoolchannels_listandargs{"guild_id":"999000999000999000"}. Return the ID forgeneral. Do not invoke any other Discord tool.The result includes
channels[].id. Keep the ID for the next step. -
Send one test message.
First call
mcp_tools_searchwithquerymessages_send. Confirm that the exact match namesmcp_tools_writeas its dispatcher, then callmcp_tools_writewithtoolmessages_sendandargs{"channel_id":"112233445566778899","content":"hello from discord-mcp"}. Do not invoke any other Discord tool.A successful result contains
message_id,channel_id,jump_url, andtimestamp. Openjump_urlto verify the message in Discord.
Checklist for moving on
Section titled “Checklist for moving on”- Exact searches returned the expected read or write dispatcher and input contract.
-
mcp_tools_readreturned my bot account and the channel ID from my private test server. -
mcp_tools_writereturnedmessage_id,channel_id,jump_url, andtimestampfrommessages_send. - I opened
jump_urland verified the test message in Discord.
Next, read How a tool call works or open the tool reference.

