Skip to main content
Glama
taka392

discord-mcp

by taka392

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_TOKEN only via your MCP client env block (see examples/).

  • 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

verify

GET /users/@me

list_guilds

GET /users/@me/guilds

get_guild

GET /guilds/{id}

list_guild_channels

GET /guilds/{id}/channels

get_channel

GET /channels/{id}

list_channel_messages

GET /channels/{id}/messages

create_channel_message

POST /channels/{id}/messages

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-mcp

OpenClaw Gatewayopenclaw 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:

  1. In the Developer Portal → your app → Bot, enable Message Content Intent (Privileged Gateway Intents).

  2. 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-bot

uvx のデフォルトでは reply-bot 用の discord.py は入りません。リポジトリを clone しない場合は例えば次でも可です。

pip install "discord-mcp[reply-bot] @ git+https://github.com/taka392/discord-mcp.git"
DISCORD_BOT_TOKEN='…' discord-reply-bot

Behavior:

  • 既定は OpenClaw のみです。OPENCLAW_GATEWAY_URLOPENCLAW_GATEWAY_TOKEN(または OPENCLAW_GATEWAY_PASSWORD)を discord-reply-bot に渡すと、OpenClaw GatewayPOST /v1/chat/completions にユーザ文を送り、アシスタント本文を Discord に返信します。Cursor ゲートウェイには送りません.envCURSOR_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.jsonopenclawOPENCLAW_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で動かしているとき): .envDISCORD_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 composediscord-reply-bot の 1 サービスのみです。OpenClaw Gateway 本体は 含みません(ホスト上の openclaw gateway / systemd と同居させます)。

  • network_mode: host のため、.envOPENCLAW_GATEWAY_URLhttp://127.0.0.1:<port>(例: http://127.0.0.1:18789)。ポートはその VM で Gateway が待ち受けているものに合わせる。

  • Mac で docker compose up だけだとコンテナは立ちません(profile prod)。誤実行でリソースを食わないため。

  • 本番 VMでは .envCOMPOSE_PROFILES=prod.env.example に同梱)か、./scripts/homelab_docker_up.sh

  • ローカル試験のみ: COMPOSE_PROFILES=prod docker compose up -d --build(Linux が前提。Docker Desktop の挙動は環境による)。

  • 必須: .envDISCORD_BOT_TOKENOPENCLAW_GATEWAY_URL(ループバック) / OPENCLAW_GATEWAY_TOKEN(または PASSWORD)。

  • Cursor 経路に切り替えるときだけ .envDISCORD_LLM_BACKEND=cursor と、到達可能な CURSOR_AGENT_GATEWAY_URL

  • DISCORD_BOT_TOKENOPENCLAW_GATEWAY_TOKEN は Git に載せないこと。

旧構成(別 VM に Discord ボットだけ置く)をやめた場合: もう使わない VM 上で docker compose down のうえ、コンテナ/compose を削除してください。Tailscale 越し URL は不要になるため、.envOPENCLAW_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 --build

restart: unless-stopped なのでゲスト再起動後もコンテナが戻る(Docker が起動時に有効な前提)。

Proxmox QEMU VM(ゲストエージェント)

OpenClaw Gateway を動かしている QEMU VM(Discord 専用 VM など 別 vmid ではない)に discord-mcp を clone し、Mac から .env を流し込んで docker compose まで実行します。

  1. ~/.cursor/mcp.jsonmcpServers.discord.env.DISCORD_BOT_TOKENopenclaw のトークン(またはパスワード)を用意する。

  2. proxmox-mcp と同じ PROXMOX_* をシェルにエクスポートする。

  3. --vmid には その OpenClaw ホストの vmid を渡す。毎回省略したい場合は export OPENCLAW_QEMU_VMID=<vmid>

  4. 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:18789

Mac から OpenClaw VM へ SSH でデプロイ

scripts/deploy_remote.shリモートで git pullscp.envhomelab_docker_up.sh まで行います。生成する OPENCLAW_GATEWAY_URL はデフォルトで http://127.0.0.1:18789OPENCLAW_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 に接続できない と出るときの整理:

  1. **127.0.0.1 は「そのプロセスが動いているマシン自身」**です。Discord ボットが VM100 など別ホストで動いていて、OpenClaw が VM105 だけなら、.envhttp://127.0.0.1:18789VM100 の自分自身 を指し、OpenClaw には届きません。

  2. ボットも OpenClaw も VM105 に置くなら、同じゲストで OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789 が正しく、VM105 上で ss -tlnp | grep 18789 に Gateway が見える必要があります。

  3. ボットだけ別 VM のままにするなら、.envhttp://<VM105 の tailscale IPv4>:18789(105 上で tailscale ip -4)か、mcp.json の HTTPS の Gateway URLpush_gateway_env_guest_exec.py --use-mcp-gateway-url)にしてください。

  4. 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.check

Cursor 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 tools
create_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
limitNo
beforeNo
afterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.).

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
beforeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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