discord-mcp
This server provides a bot-token-based interface to interact with the Discord REST API, enabling programmatic access to Discord guilds, channels, and messages. It does not support real-time message listening or replies without the optional companion reply bot.
Verify Bot Token (
verify): Confirm the bot token is valid and retrieve the bot's user info (id, username, discriminator, flags, etc.).List Guilds (
list_guilds): Retrieve all Discord servers the bot is a member of, with pagination vialimitandbeforecursor.Get Guild (
get_guild): Fetch detailed information about a specific guild by its ID.List Guild Channels (
list_guild_channels): List all channels in a guild (text, voice, categories, etc.).Get Channel (
get_channel): Retrieve details about a specific channel by its ID.List Channel Messages (
list_channel_messages): Fetch recent messages from a channel (newest first), with pagination usingbefore/aftermessage IDs and a configurablelimit(1–100). Requires Read Message History permission.Create Channel Message (
create_channel_message): Send a text message (up to 2000 characters) to a channel. Requires Send Messages permission.
For DM or @mention replies, you can optionally run the companion reply-bot, which forwards messages to an LLM backend and posts responses back to Discord.
Provides tools to interact with the Discord REST API, including listing guilds, channels, messages, and sending messages, as well as an optional reply bot for automatic responses.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@discord-mcplist my Discord guilds"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
discord-mcp
MCP server that wraps a subset of the Discord REST API v10 using a bot token.
Security
Never commit the bot token. Pass
DISCORD_BOT_TOKENonly via your MCP clientenvblock (seeexamples/).If a token was pasted into chat or committed anywhere, reset it in the Discord Developer Portal and use the new token locally.
Related MCP server: discord-mcp
Tools
Tool | Description |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Gateway intents (Presence, Server Members, Message Content) apply to the Gateway websocket. This MCP uses HTTP only; channel permissions still apply (e.g. Read Message History, Send Messages).
OpenClaw 公式の Discord(推奨)
OpenClaw と Discord をつなぐ正式な方法は、Gateway の channels.discord です。Bot トークンと openclaw config patch だけで Gateway が Discord に接続し、DM・サーバーでエージェントが応答します。手順は Discord — OpenClaw をそのまま実行してください。サンプルパッチは ../openclaw-mcp/examples/discord_channel.patch.json5 を参照。
同じ
DISCORD_BOT_TOKENで、下記のreply-bot(別プロセス)と同時に動かさないでください。WebSocket が二重になり競合します。HTTP の
/v1/chat/completions経由で返したい場合だけ、従来どおり reply-bot を使います(別経路)。
公式 Discord のみ使う: VM から discord-mcp(reply-bot)を削除する
OpenClaw の channels.discord だけ運用するなら、ゲスト上の clone + Docker / reply-bot は不要です。次で止めて消して構いません(パスは環境に合わせて読み替え)。
# ゲスト SSH 内
cd /root/discord-mcp # または clone したディレクトリ(例: ~/discord-mcp)
COMPOSE_PROFILES=prod docker compose down
docker rm -f discord-reply-bot 2>/dev/null || true
docker rmi discord-reply-bot:latest 2>/dev/null || true
cd .. && rm -rf discord-mcpOpenClaw Gateway(openclaw gateway / systemd)はそのまま。DISCORD_BOT_TOKEN は Gateway の環境(例: ~/.openclaw/.env)に残し、公式手順の config patch だけで Discord に接続します。
Reply bot(補助: HTTP で OpenClaw に転送)
The MCP alone cannot listen for messages. For DMs and @mentions (and replies to the bot when Discord fills the reference), run the optional Gateway bot:
In the Developer Portal → your app → Bot, enable Message Content Intent (Privileged Gateway Intents).
Install extras and start the process (keep this terminal open, or run under
tmux/ a process manager):
cd projects/discord-mcp
source .venv/bin/activate
pip install -e ".[reply-bot]"
export DISCORD_BOT_TOKEN='…' # same token as MCP
python -m discord_mcp.reply_bot
# or: discord-reply-botuvx のデフォルトでは reply-bot 用の discord.py は入りません。リポジトリを clone しない場合は例えば次でも可です。
pip install "discord-mcp[reply-bot] @ git+https://github.com/taka392/discord-mcp.git"
DISCORD_BOT_TOKEN='…' discord-reply-botBehavior:
既定は OpenClaw のみです。
OPENCLAW_GATEWAY_URLとOPENCLAW_GATEWAY_TOKEN(またはOPENCLAW_GATEWAY_PASSWORD)をdiscord-reply-botに渡すと、OpenClaw Gateway のPOST /v1/chat/completionsにユーザ文を送り、アシスタント本文を Discord に返信します。Cursor ゲートウェイには送りません(.envにCURSOR_AGENT_GATEWAY_URLが残っていても無視されます)。Gateway で
gateway.http.endpoints.chatCompletions.enabledを有効にしてください(無効だと HTTP 404 などになります)。主な環境変数:
OPENCLAW_GATEWAY_URL,OPENCLAW_GATEWAY_TOKEN, 任意でOPENCLAW_CHAT_MODEL(未指定時はgoogle/gemini-3.1-pro-preview)、OPENCLAW_SESSION_USER(未設定時はdiscord:<Discord ユーザー ID>)、OPENCLAW_MESSAGE_CHANNEL(既定discord)、OPENCLAW_SESSION_KEY,OPENCLAW_MODEL_HEADER,OPENCLAW_PROMPT_PREFIX,OPENCLAW_GATEWAY_TIMEOUT_SEC。Gemini を使うには Gateway 側に Google プロバイダの認証(GEMINI_API_KEY等)が必要です。Cursor の
mcp.jsonのopenclawのOPENCLAW_GATEWAY_TOKEN(または PASSWORD)を reply-bot の.envに同じ値で渡してください。URL は OpenClaw と同じホストならhttp://127.0.0.1:<gateway-port>(Mac の MCP が使う Tailscale URL と同じである必要はありません)。OpenClaw が未設定のときは、DM/メンションでも 設定不足の説明が返ります(旧来の短文エコーはしません)。
Cursor の HTTP ゲートウェイだけ使う場合(
cursor-cli-homelabを別ホスト/別 composeで動かしているとき):.envにDISCORD_LLM_BACKEND=cursorと、到達可能なCURSOR_AGENT_GATEWAY_URL(例:http://192.168.x.x:9888)を書いてください。**POST /v1/prompt** でagent -p` の標準出力を返します。ゲートウェイ側に
CURSOR_API_KEY、任意でAGENT_APPROVE_MCPS=trueなど。リポジトリ付属のdocker composeには agent-gateway は含みません(agent_gateway/は手動同期用の参照実装のまま残しています)。
DM と サーバー(@またはボットへの返信) の両方で上記のいずれかが使われます。
Discord の本文に含まれる <@…> 形式のメンションは、LLM に渡す前にプレースホルダへ置き換えます(モデルが「ユーザーIDは解決できない」と返すのを防ぐため)。
Docker(reply-bot を OpenClaw と同一 VM で動かす場合のみ・任意)
channels.discord だけで足りるなら VM に置く必要はありません(上の「VM から削除する」を参照)。docker compose は discord-reply-bot の 1 サービスのみです。OpenClaw Gateway 本体は 含みません(ホスト上の openclaw gateway / systemd と同居させます)。
network_mode: hostのため、.envのOPENCLAW_GATEWAY_URLはhttp://127.0.0.1:<port>(例:http://127.0.0.1:18789)。ポートはその VM で Gateway が待ち受けているものに合わせる。Mac で
docker compose upだけだとコンテナは立ちません(profileprod)。誤実行でリソースを食わないため。本番 VMでは
.envのCOMPOSE_PROFILES=prod(.env.exampleに同梱)か、./scripts/homelab_docker_up.sh。ローカル試験のみ:
COMPOSE_PROFILES=prod docker compose up -d --build(Linux が前提。Docker Desktop の挙動は環境による)。必須:
.envにDISCORD_BOT_TOKENとOPENCLAW_GATEWAY_URL(ループバック) /OPENCLAW_GATEWAY_TOKEN(またはPASSWORD)。Cursor 経路に切り替えるときだけ
.envにDISCORD_LLM_BACKEND=cursorと、到達可能なCURSOR_AGENT_GATEWAY_URL。DISCORD_BOT_TOKEN・OPENCLAW_GATEWAY_TOKENは Git に載せないこと。
旧構成(別 VM に Discord ボットだけ置く)をやめた場合: もう使わない VM 上で docker compose down のうえ、コンテナ/compose を削除してください。Tailscale 越し URL は不要になるため、.env の OPENCLAW_GATEWAY_URL はループバックに統一します。
ゲスト(OpenClaw VM)での手順例:
git clone https://github.com/taka392/discord-mcp.git
cd discord-mcp
./scripts/homelab_docker_up.sh
# 初回は .env が無いので .env.example がコピーされる → DISCORD_BOT_TOKEN と OPENCLAW_* を編集して再度手動でも同じです。
cp .env.example .env
# DISCORD_BOT_TOKEN, OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789, OPENCLAW_GATEWAY_TOKEN
COMPOSE_PROFILES=prod docker compose up -d --build
docker compose logs -f停止・更新:
COMPOSE_PROFILES=prod docker compose down
COMPOSE_PROFILES=prod docker compose up -d --buildrestart: unless-stopped なのでゲスト再起動後もコンテナが戻る(Docker が起動時に有効な前提)。
Proxmox QEMU VM(ゲストエージェント)
OpenClaw Gateway を動かしている QEMU VM(Discord 専用 VM など 別 vmid ではない)に discord-mcp を clone し、Mac から .env を流し込んで docker compose まで実行します。
~/.cursor/mcp.jsonにmcpServers.discord.env.DISCORD_BOT_TOKENとopenclawのトークン(またはパスワード)を用意する。proxmox-mcpと同じPROXMOX_*をシェルにエクスポートする。--vmidには その OpenClaw ホストの vmid を渡す。毎回省略したい場合はexport OPENCLAW_QEMU_VMID=<vmid>。Gateway ポートが 18789 でないときは
OPENCLAW_GATEWAY_LOCAL_URLまたは--local-gateway-urlを指定。
cd projects/discord-mcp
export PROXMOX_BASE_URL=... PROXMOX_TOKEN_ID=... PROXMOX_TOKEN_SECRET=... PROXMOX_VERIFY_TLS=false
export OPENCLAW_QEMU_VMID=101 # OpenClaw が乗っている VM(例。100 とは限らない)
python3 scripts/push_gateway_env_guest_exec.py --vmid 101
# 例: python3 scripts/push_gateway_env_guest_exec.py --vmid 101 --repo-dir /root/discord-mcp --local-gateway-url http://127.0.0.1:18789Mac から OpenClaw VM へ SSH でデプロイ
scripts/deploy_remote.sh は リモートで git pull → scp で .env → homelab_docker_up.sh まで行います。生成する OPENCLAW_GATEWAY_URL はデフォルトで http://127.0.0.1:18789(OPENCLAW_GATEWAY_LOCAL_URL で変更可)。Gateway が別ホストのときは export DISCORD_USE_MCP_GATEWAY_URL=1 とすると mcp.json の OPENCLAW_GATEWAY_URL を書き込みます。
cd /path/to/discord-mcp
export HOMELAB_SSH='root@<OpenClaw-VM の IP or tailscale>'
# optional: export OPENCLAW_GATEWAY_LOCAL_URL='http://127.0.0.1:18789'
# optional: export DISCORD_USE_MCP_GATEWAY_URL=1 # Gateway が別マシン(MCP の URL を .env に)
# optional: export HOMELAB_REPO_DIR='/root/discord-mcp'
./scripts/deploy_remote.sh注意: DISCORD_BOT_TOKEN だけ export したモードでは、リモート .env にトークンとループバック URLだけ入り OPENCLAW_GATEWAY_TOKEN は手で追記してください。
Discord から 「ゲートウェイが利用できません (503)」 は DISCORD_LLM_BACKEND=cursor かつ CURSOR_API_KEY 未設定なときに出やすいです(Cursor 経路)。
OpenClaw 既定では、同一 VM 上で Gateway が待ち受けているか(ss -tlnp 等)、OPENCLAW_GATEWAY_URL / トークン、Gateway の chat completions 有効化を確認してください。
127.0.0.1:18789 に接続できない と出るときの整理:
**
127.0.0.1は「そのプロセスが動いているマシン自身」**です。Discord ボットが VM100 など別ホストで動いていて、OpenClaw が VM105 だけなら、.envのhttp://127.0.0.1:18789は VM100 の自分自身 を指し、OpenClaw には届きません。ボットも OpenClaw も VM105 に置くなら、同じゲストで
OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789が正しく、VM105 上でss -tlnp | grep 18789に Gateway が見える必要があります。ボットだけ別 VM のままにするなら、
.envはhttp://<VM105 の tailscale IPv4>:18789(105 上でtailscale ip -4)か、mcp.json の HTTPS の Gateway URL(push_gateway_env_guest_exec.py --use-mcp-gateway-url)にしてください。VM105 に
discord-mcpを clone して compose する場合、ゲストに Docker(と compose プラグイン) が必要です。無いとdocker: command not foundで失敗します。
Local check
cd projects/discord-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
DISCORD_BOT_TOKEN='your token' python -m discord_mcp.checkCursor registration
After publishing to GitHub, merge the snippet from examples/cursor_mcp_config.example.json into ~/.cursor/mcp.json and reload Cursor.
License
MIT
Available Tools
7 toolscreate_channel_messageA
Send a text message to a channel.
Requires Send Messages. Respect server rules and rate limits; content is limited to 2000 characters for plain text.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the need for a specific permission, respects rate limits, and content length limitation. However, it does not describe the return value or side effects (e.g., whether it returns the created message). Still provides useful behavioral context beyond basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: two sentences plus a bullet of constraints. All information is relevant and front-loaded with the action. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, has output schema), the description covers purpose, permission, and constraints adequately. However, it omits any mention of the output (what the tool returns), which is relevant for an agent using it. The presence of an output schema is not leveraged in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It only adds that content is limited to 2000 characters, but provides no explanation for channel_id or additional details for content (e.g., formatting, allowed characters). This adds minimal value beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states it sends a text message to a channel, with a clear verb and resource. Siblings are all read/list operations, so this is uniquely identified as the write operation for messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions required permission 'Send Messages' and constraints like rate limits and 2000 character limit. While it doesn't explicitly compare to siblings, the context makes it clear when to use this tool (to create a message) vs others (to read). A clear when-to-use is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channelB
Get a single channel object by id.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only indicates a read operation but does not mention permissions, rate limits, error handling (e.g., if channel not found), or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. It is front-loaded and contains no unnecessary words, though it could be slightly expanded without losing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return values, but it lacks information about error conditions or usage context. It is acceptable but minimal for a simple get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'channel_id' has no description in the schema (0% coverage). The description adds only 'by id', which does not clarify the expected format (e.g., string representation, snowflake) or provide examples. More detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('a single channel object'), and the retrieval method ('by id'). This distinguishes it from sibling tools like 'get_guild' or 'list_channel_messages'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'list_guild_channels' or 'list_channel_messages'. The description lacks any contextual hints about prerequisites or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guildB
Get a guild by id. The bot must be a member of that guild.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states a prerequisite and the basic action, but does not disclose any behavioral traits such as error handling, rate limits, or whether the operation is idempotent. For a read tool, this is minimally adequate but lacks detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no wasted words. The purpose is stated first, followed by the critical prerequisite. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the existence of an output schema, the description is incomplete. It fails to describe the parameter meaning (guild_id) and does not mention what the tool returns (though output schema may cover that). The prerequisite is helpful, but overall the description lacks sufficient context for an agent to use the tool correctly without inferring.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for the single parameter 'guild_id'. The description does not explain what the guild ID is, its format, or how to obtain it. The agent receives no additional meaning beyond the raw schema field name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a guild') and the resource ('by id'), and implicitly differentiates from sibling 'list_guilds' by specifying a single guild lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage condition: 'The bot must be a member of that guild.' This tells the agent when the tool can be used, though it does not mention when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channel_messagesA
List recent messages in a channel (newest first in the response).
Requires Read Message History and access to the channel. limit is
1–100. Use before / after message ids for pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| limit | No | ||
| before | No | ||
| after | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description transparently discloses the required permissions and the ordering behavior. It does not mention potential side effects or rate limits, but as a read-only list tool, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and contains no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters) and the existence of an output schema, the description covers the key aspects: purpose, ordering, permissions, and pagination. It does not describe the output fields, but the output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds crucial meaning beyond the input schema: it specifies the valid range for 'limit' (1-100) and explains that 'before' and 'after' are message IDs for pagination. This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'messages in a channel', and specifies ordering ('newest first'). It distinguishes from sibling tools like 'create_channel_message' effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions required permissions ('Read Message History and access to the channel') and provides pagination guidance ('Use before/after message ids for pagination'). It does not explicitly exclude alternatives but gives sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_guild_channelsB
List channels in a guild (text, voice, categories, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits like read-only nature, rate limits, or permissions. It only states the operation without any such context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, one sentence, and front-loaded with the core action and resource. It efficiently communicates the purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but functional for a simple listing tool with a self-explanatory parameter and an existing output schema. However, it lacks details about the return format or any additional behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter (guild_id) with 0% description coverage. The description does not explain the parameter beyond what the schema provides, failing to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list channels) and the resource (guild), and it distinguishes from siblings by specifying it returns all types of channels. Other tools like get_channel or list_channel_messages serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when a user needs a list of all channels in a guild, but it does not explicitly mention when to use alternatives (e.g., get_channel for a single channel) or provide any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_guildsA
List guilds the bot is in (GET /users/@me/guilds).
Args: limit: Max guilds per request (1–200). before: Optional guild id cursor for pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses pagination behavior (cursor and limit) but does not mention rate limits, authentication requirements, or output format (though output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences and an argument list. Every sentence provides essential information with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema, the description covers purpose and parameter usage well. Could mention that it returns guild objects, but overall fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds significant value: specifies limit range (1–200) and before as a guild ID cursor for pagination, beyond the basic parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List guilds the bot is in' with a specific verb and resource. It distinguishes from sibling tools like get_guild (single guild) and list_guild_channels (channels within a guild).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for listing all guilds but does not explicitly state when to use it versus alternatives like get_guild or when not to use it. Pagination parameters hint at usage context but lack explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifyA
Verify the bot token by calling GET /users/@me.
Returns the bot user object (id, username, discriminator flags, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals the HTTP method (GET), the endpoint (/users/@me), and the return object structure (id, username, etc.). No annotations are provided, but the description fully discloses the behavior without contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no fluff, directly communicates purpose and output. Perfectly sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema exists, the description covers the return object fields and the endpoint. No additional context needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100% (empty). The description adds no parameter details, but that is appropriate since no parameters exist. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it verifies the bot token via GET /users/@me and returns the bot user object. This differentiates it from sibling tools which deal with channels, guilds, and messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or not use this tool versus alternatives. However, the context (no parameters, token verification) implies it's for checking token validity or setup, but lack of explicit instructions leaves room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource or action: guild, channel, message, and authentication. No two tools have overlapping purposes, making it easy for an agent to select the correct one.
Tool names consistently follow a verb_noun pattern in snake_case (e.g., create_channel_message, get_guild, list_guilds), with 'verify' being the only outlier but acceptable as a standalone action.
Seven tools is well-scoped for a Discord MCP server that covers basic guild, channel, and message operations plus authentication. The count feels neither too sparse nor overloaded.
The set covers reading guilds, channels, messages, and sending a message, but lacks important operations like editing/deleting messages, creating/deleting channels, or managing reactions. Notable gaps exist for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that integrates with Discord to provide AI-powered features.
A basic MCP server to operate on the Postman API.
The official MCP Server for the Mux API
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server for interacting with Discord.1934811MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Discord communications, enabling listing guilds and channels, reading and sending messages, creating threads, and adding reactions.MIT
- AlicenseBqualityDmaintenanceEnables MCP clients to interact with Discord servers, allowing operations such as sending messages and reading message history through the Discord API.23348MIT
- AlicenseAqualityDmaintenanceAn MCP server for Discord that enables AI assistants to interact with Discord servers, channels, and messages via the Discord API.614MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/taka392/discord-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server