Skip to main content
Glama
swaritsoni6-lgtm

Discord MCP Server

Discord MCP Server πŸ€–πŸ’¬

A lightweight, zero-external-dependency Model Context Protocol (MCP) server for interacting with Discord through AI assistants like Google Antigravity, Claude Desktop, Cursor, and other MCP-compliant clients.

✨ Features

  • πŸ’¬ Messages: Read recent chat history, send messages, reply to threads/messages, edit and delete messages.

  • 🏒 Servers & Guilds: List servers the bot belongs to, inspect member lists, roles, and guild details.

  • πŸ“ Channels & Categories: Inspect channels, channel topics, and message metadata.

  • 🧡 Threads: Create and participate in channel threads.

  • πŸ“Œ Pins: Read, add, and remove pinned messages.

  • πŸ‘ Reactions: Add and remove reactions with unicode and custom emojis.

  • πŸš€ Zero External Dependencies: Built entirely with Python's standard library (urllib, json).


Related MCP server: Discord MCP Server

πŸ› οΈ Tool Reference

Tool

Description

get_me

Get profile information and status of the authenticated bot user.

list_guilds

List all Discord servers (guilds) the bot is a member of.

get_guild

Get details of a guild (members, roles, channels, emojis).

list_channels

List all channels in a guild.

get_channel

Get details of a specific channel or thread.

list_messages

Retrieve recent messages from a channel (supports limit, before, after, around).

get_message

Retrieve a single message by channel ID and message ID.

send_message

Send text messages, replies (reply_to_message_id), or rich embeds to a channel.

edit_message

Edit messages sent by the bot.

delete_message

Delete a message in a channel.

add_reaction

Add emoji reactions to messages.

delete_reaction

Remove bot reactions from messages.

list_members

List members of a guild.

get_pinned_messages

List all pinned messages in a channel.

pin_message

Pin a message in a channel.

unpin_message

Unpin a message in a channel.

create_thread

Create a new thread in a channel or from an existing message.


πŸš€ Quickstart & Configuration

1. Prerequisites

  • Python 3.10+

  • A Discord Bot Token (obtain one from the Discord Developer Portal).

    • Ensure your bot has appropriate permissions (e.g. Read Messages/View Channels, Send Messages, Read Message History, Add Reactions, etc.).

2. Installation & Running

Clone the repository:

git clone https://github.com/swaritsoni6-lgtm/discord-mcp-server.git
cd discord-mcp-server

Set your token and run:

export DISCORD_BOT_TOKEN="your-bot-token-here"
python3 server.py

βš™οΈ Client Configurations

Antigravity / Gemini CLI (~/.gemini/config/mcp_config.json)

{
  "mcpServers": {
    "discord": {
      "command": "python3",
      "args": ["/path/to/discord-mcp-server/server.py"],
      "env": {
        "DISCORD_BOT_TOKEN": "your-bot-token-here"
      }
    }
  }
}

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "discord": {
      "command": "python3",
      "args": ["/path/to/discord-mcp-server/server.py"],
      "env": {
        "DISCORD_BOT_TOKEN": "your-bot-token-here"
      }
    }
  }
}

πŸ“„ License

MIT License

Available Tools

17 tools
add_reactionA

Adds a reaction emoji to a message in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiYesThe emoji to react with (e.g. 'πŸ‘' or 'custom_name:123456789').
channel_idYesThe ID of the channel.
message_idYesThe ID of the message.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic effect and does not mention permission requirements, rate limits, idempotency, custom emoji constraints, or what happens on failure. This is a meaningful gap for a mutation tool.

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 a single, direct sentence with no filler or repetition. It front-loads the action and resource, making it immediately scannable and efficient.

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?

For a simple three-parameter write operation, the description and schema together provide enough to invoke the tool, but the lack of annotations and behavioral nuance leaves gaps around permissions, error handling, and when to prefer alternatives. It is minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters clearly, including an example for emoji. The description adds no additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

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 identifies the specific operation (adding a reaction emoji), the target resource (a message in a Discord channel), and is distinct from sibling tools like delete_reaction or send_message. It leaves no ambiguity about what the tool does.

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 operation itself implies when to use the tool: when a reaction should be added to a message. However, there is no explicit guidance about alternatives or exclusions, such as noting that delete_reaction removes reactions or that send_message handles message creation. The usage context is understandable but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_threadA

Creates a new public thread in a Discord channel or from a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes1-100 character thread title.
channel_idYesThe ID of the channel.
message_idNoOptional message ID to start thread from.
auto_archive_durationNoDuration in minutes to auto-archive (60, 1440, 4320, 10080).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It reveals that the thread is public and that creation can occur from a channel or a message, but it does not mention permissions, side effects, response format, or failure conditions. This is a meaningful gap for a mutation tool.

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 a single front-loaded sentence with no filler or redundant information. It efficiently states the action, resource, and the two creation contexts in the fewest possible 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 schema fully covers inputs, and the description clarifies the dual modes of thread creation, which is helpful. However, the absence of an output schema and annotations means the description should probably disclose what the tool returns and any authorization requirements. For a simple create operation, it is minimally sufficient but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no additional parameter-level detail beyond the schema; the mention of 'or from a message' lightly reinforces the optional message_id parameter but does not enrich it.

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 uses a specific verb ('Creates') and resource ('new public thread'), and further specifies the context: 'in a Discord channel or from a message.' This clearly distinguishes it from siblings like send_message or get_message, even without naming an alternative.

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 when to use the tool: when a new public thread needs to be created. However, it provides no explicit guidance about when not to use it, prerequisites, or alternatives. There is no direct mention of scenarios where another tool would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_messageB

Deletes a message in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.
message_idYesThe ID of the message to delete.

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 must carry the behavioral burden. It only restates the destructive action and does not disclose irreversibility, required permissions, limitations (e.g., age of message), or error behavior. This is a meaningful gap for a delete operation.

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?

A single clear sentence with no filler or redundant explanation. The core action and target are front-loaded, and every word contributes to comprehension.

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?

For a simple two-parameter tool with full schema coverage, the description is mostly adequate. However, because it is a destructive operation with no annotations and no usage guidance, the overall context is incomplete even if the basic call is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the two parameters are self-explanatory. The description adds no additional parameter meaning, so the baseline score of 3 is appropriate.

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 states a specific verb ('Deletes') and a clear resource ('a message in a Discord channel'). It is unambiguous and naturally distinguishes the tool from siblings like send_message, edit_message, and delete_reaction.

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?

The description gives no guidance on when to use this tool versus alternatives, nor does it mention prerequisites like permissions or whether the message must be authored by the calling user. There are no exclusions or alternative tool references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_reactionB

Deletes the bot's reaction on a message in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiYesThe emoji reaction to remove.
channel_idYesThe ID of the channel.
message_idYesThe ID of the message.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states the core action but does not mention idempotency, what happens if the bot has no such reaction, permission requirements, rate limits, or whether the action is reversible. These are relevant operational details for an agent invoking a destructive Discord API call.

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?

A single sentence with no redundant words. The verb, object, and scope are front-loaded and immediately actionable.

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?

For a simple 3-parameter tool with full schema coverage, the description is minimally sufficient. However, no annotations and no output schema mean key behavioral contextβ€”such as no-op behavior or result semanticsβ€”is missing, so the agent must infer expected API behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema; it essentially restates that the emoji is the reaction to remove. It does not clarify emoji format (e.g., unicode vs. custom emoji ID) or constraints.

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 states a specific verb ('deletes'), a precise resource ('the bot's reaction on a message'), and the context ('in a Discord channel'). It clearly differentiates from sibling tools like delete_message and add_reaction by scoping to the bot's own reaction.

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 is given about when to use this tool versus alternatives, such as add_reaction for adding reactions or delete_message for removing the message itself. The wording implies the bot can only remove its own reaction, but no explicit selection criteria or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_messageB

Edits a previously sent message by the bot in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
embedsNoOptional new rich embed objects.
contentNoThe new message content.
channel_idYesThe ID of the channel.
message_idYesThe ID of the message to edit.

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 of disclosing behavior. It only says 'Edits', which signals mutation, but omits important behavioral details such as whether existing fields are replaced, what happens if only content or only embeds is provided, and what failure modes exist (e.g., attempting to edit a non-bot or deleted message). This is a significant gap for a mutation operation.

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 a single sentence that leads with the verb 'Edits' and packs the resource scope into a compact phrase. There is no filler, redundant wording, or repetition of schema details.

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 tool is simple and the schema fully documents its parameters, but with no output schema and no annotations, an agent still lacks information about return values, failure conditions, and how content and embeds interact when only one is supplied. The description is sufficient to attempt a call, but it is not fully self-sufficient for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, as all four parameters (channel_id, message_id, content, embeds) are already documented in the input schema. The description adds no extra parameter semantics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Edits') and a specific resource ('previously sent message by the bot in a Discord channel'), so the core action is unambiguous. It implicitly differentiates this from send_message and delete_message through the phrase 'previously sent', but it does not explicitly name sibling alternatives, so it falls just short of a 5.

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?

'Previously sent message by the bot' gives useful context and implies that the bot can only edit its own prior messages, which is a relevant constraint. However, the description does not explicitly state when to choose this over send_message or delete_message, nor does it mention that content and embeds are optional replacements. The usage guidance is mostly implied rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_channelA

Gets details of a specific Discord channel or thread by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. It only restates the action of retrieving details and adds no information about return shape, error behavior, permissions, or potential side effects. The mention of threads is mildly useful but does not qualify as substantive behavioral disclosure.

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 a single, efficiently worded sentence that communicates the action, target, and input criterion without any redundant or filler content.

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?

For a simple single-parameter get operation, the description is sufficient for basic invocation. However, with no output schema and no annotations, the word 'details' gives no indication of what fields are returned or what happens for invalid/private channels, leaving some contextual ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the channel_id parameter is already documented as 'The ID of the channel.' The description's 'by its ID' phrase adds little beyond the schema, so the baseline of 3 is appropriate.

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 states a specific verb ('Gets details'), a specific resource ('specific Discord channel or thread'), and the lookup method ('by its ID'). This clearly distinguishes it from listing tools like list_channels and other get tools like get_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 intended use is implied: call this when you already have a channel or thread ID and need its details. However, it gives no explicit guidance about when to prefer list_channels or get_guild, nor when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_guildA

Gets details of a specific Discord guild (server) by its ID, including roles, emojis, and member count.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idYesThe ID of the guild/server.
with_countsNoWhether to include approximate member and presence counts.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It correctly implies a read-only detail fetch and lists what kinds of data are included, but it does not mention errors for invalid IDs, permissions requirements, rate limits, or how with_counts changes the response. It provides some behavioral context but leaves notable gaps.

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 a single well-structured sentence with no filler. It front-loads the primary action and resource, then gives concrete examples of what the details include. Every phrase 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?

For a relatively simple getter with fully documented parameters, the description provides enough to understand the tool's role and expected output shape. Since there is no output schema, the enumerated response contents (roles, emojis, member count) help compensate for that absence, though error and edge-case behavior is not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description reinforces that guild_id identifies the target server but adds no new meaning for with_counts. Baseline 3 is appropriate because the schema already does the work.

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 names a specific verb ('gets'), a specific resource ('details of a specific Discord guild/server by its ID'), and concrete detail categories (roles, emojis, member count). This clearly distinguishes it from list_guilds, which would be about multiple guilds rather than one targeted by ID.

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 establishes clear context: use this when you have a specific guild ID and need its details, rather than listing guilds. It does not explicitly name the sibling list_guilds as the alternative or state when not to use it, but the 'by its ID' phrasing makes the intended scope obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_meA

Gets information about the current authenticated Discord bot user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. 'Gets information' clearly signals a read-only operation, but the description does not mention authentication failure behavior, rate limits, or what fields are returned. It is adequate but not deeply transparent.

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 a single, front-loaded, concise sentence with no filler. It directly states the action and the target resource, and every word contributes meaning.

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?

For a zero-parameter read-only tool, the description names the target resource and implies safe reading. However, with no output schema and no annotations, the word 'information' is vague: an agent cannot anticipate the exact response shape or whether specific fields like bot user ID, username, or avatar will be present.

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?

The tool has zero parameters and 100% schema description coverage, so there are no parameter semantics for the description to add. The description nevertheless clarifies that the call is scoped to the authenticated bot user, which is the only context an agent needs for a no-argument call.

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 uses a specific verb ('Gets information') and identifies the exact resource ('current authenticated Discord bot user'), which clearly distinguishes it from sibling tools that operate on guilds, channels, messages, and reactions. No ambiguity remains about what the tool does.

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 is for retrieving data about the bot's own identity; no sibling tool targets the bot user itself, so the intended use is fairly evident. However, it does not explicitly state when to prefer this over alternatives or provide exclusions, so guidance is implied rather than fully stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_messageA

Retrieves a specific message by channel ID and message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.
message_idYesThe ID of the message.

TDQS

A3.6/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 the full burden. 'Retrieves' conveys read-only behavior, but the description does not disclose error handling, auth requirements, or whether the returned message is a full object or a summary. For a simple get-by-ID operation this is adequate but minimal.

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 a single concise, front-loaded sentence with no filler. It states exactly what the tool does and the two required identifiers, earning every word.

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?

The tool is low in complexity, has only two required parameters, and those parameters are fully documented in the schema. The description makes the purpose unambiguous. The only minor gaps are the lack of return-value and error-behavior details, which are not critical for a simple retrieval action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, since both channel_id and message_id have descriptions in the schema. The tool description merely restates that these IDs are used and adds no new semantic detail beyond the schema, so baseline 3 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 uses a specific verb ('Retrieves'), specifies the exact resource ('a specific message'), and names the two identifying inputs (channel ID and message ID). This clearly distinguishes it from the sibling list_messages tool and from message mutations like send_message, edit_message, and delete_message.

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 is given about when to choose this tool over alternatives. The sibling list_messages is the obvious alternative for getting multiple messages, but the description does not mention this relationship or any prerequisites such as having valid IDs beforehand.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pinned_messagesA

Gets all pinned messages in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. 'Gets all' signals a read-only operation and a list-style result, but ordering, pagination, errors, and permissions are not mentioned.

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?

A single sentence states the action, target, and scope with no filler. The key information is front-loaded and every word contributes.

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 one-parameter, read-only tool, the description plus schema provide enough to invoke it correctly. The lack of output-format details and alternative routing is minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes channel_id at 100% coverage as 'The ID of the channel.' The description adds no parameter-level meaning beyond the schema.

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 uses a specific verb and resource: 'Gets all pinned messages in a Discord channel.' The 'pinned' qualifier makes it clearly distinct from list_messages and get_message.

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 is given about when to choose this tool over list_messages or get_message. An agent must infer the intended use from the tool name and the 'pinned' qualifier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channelsA

Lists all channels in a specific Discord guild/server.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idYesThe ID of the guild/server.

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 must carry the full burden. It conveys a read-only listing operation and clarifies the required scope. It does not address pagination, permissions, or error behavior, but for a straightforward list tool these omissions are moderate.

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?

One sentence with no filler. The core action and scope are front-loaded, making it easy to parse at a glance.

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?

This is a simple list tool with one required parameter fully documented. The description explains what it returns (all channels) and the required scope. It does not detail channel types or return object shape, but with no output schema and low complexity, the definition is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% β€” the only parameter guild_id is already described. The description reinforces that the guild is a Discord server but adds no additional format or semantics beyond the schema.

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?

Description states a specific verb ('Lists'), resource ('channels'), and scope ('in a specific Discord guild/server'). This clearly distinguishes it from siblings like list_guilds and get_channel, which operate on different resources or granularity.

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 clearly implies the appropriate use case: when you need all channels for a given guild. However, it does not explicitly mention alternatives like get_channel for a single channel, so no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_guildsA

Lists all Discord guilds (servers) the bot is currently a member of.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoGet guilds after this guild ID.
limitNoMax number of guilds to return (1-200). Defaults to 200.
beforeNoGet guilds before this guild ID.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It usefully clarifies that only guilds the bot is a member of are returned and that this is a listing operation. However, it does not disclose pagination behavior, default ordering, or response shape.

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 a single, compact sentence that front-loads the verb and resource, adds a helpful parenthetical clarification, and contains no filler or redundant schema content.

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 read-only listing tool, the description plus the fully documented schema is largely sufficient. The main gap is the lack of an explicit response format or pagination explanation, but the optional after/before/limit parameters already imply pagination exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for all three parameters, so the description does not need to repeat their meaning. The description adds no additional parameter-level nuance beyond the schema, so the baseline score of 3 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 states a specific verb ('Lists'), a clear resource ('all Discord guilds (servers)'), and a precise scope ('the bot is currently a member of'). This clearly distinguishes it from sibling tools like get_guild and list_channels.

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 this tool is for enumerating the guilds the bot can access, but it does not explicitly state when to prefer it over alternatives such as get_guild. No exclusion criteria or alternative tool guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_membersB

Lists members of a Discord guild/server.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoThe highest user ID in the previous page.
limitNoMax number of members to return (1-1000). Default is 50.
guild_idYesThe ID of the guild/server.

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 of behavioral disclosure. It only states that the tool lists members; it does not discuss pagination behavior, response format, sorting, rate limits, or whether the operation is read-only in any explicit way. 'Lists' implies a read operation, but beyond that, behavior is opaque.

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 a single sentence that immediately states the action and target. There is no fluff, redundant phrasing, or unnecessary preamble. It is as concise as possible while still conveying the core purpose.

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 minimally viable for a simple list operation: the agent knows what the tool does and which parameters to provide. However, with no annotations and no output schema, the description leaves pagination behavior and return details under-specified. It is adequate for selecting the tool, but not fully complete for using it without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (guild_id, after, limit) is already documented. The description adds no extra parameter semantics, but the baseline of 3 applies because the schema does the heavy lifting for parameter understanding.

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 is specific and unambiguous: it states the verb 'lists', the resource 'members', and the scope 'Discord guild/server'. This clearly distinguishes it from sibling tools like list_guilds, list_channels, and list_messages, which operate on different resource types.

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 usage context is provided. The description does not mention when to prefer this tool over alternatives, nor does it describe any prerequissites or exclusions. While the purpose is clear, there is no guidance on when this is the right choice relative to get_guild or other list operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_messagesB

Fetches recent messages from a Discord channel or thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoGet messages after this message ID.
limitNoNumber of messages to retrieve (1-100). Default is 50.
aroundNoGet messages around this message ID.
beforeNoGet messages before this message ID.
channel_idYesThe ID of the channel.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. It only says 'fetches' which suggests a read operation, but it does not clarify ordering, pagination behavior, permissions needed, or whether the operation has any side effects. This is minimal coverage for a tool with no annotation support.

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 a single, front-loaded sentence with no wasted words. It conveys the core action and target resource efficiently.

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 simple nature of the tool and full parameter documentation, the description is adequate for basic invocation. However, there is no output schema and the description does not mention return format, message ordering, or the relationship between 'recent' and the before/after/around parameters, leaving some ambiguity for an agent choosing and calling the tool.

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 100%, so the schema already documents all five parameters. The description adds meaningful value by specifying 'channel or thread,' which expands the semantic scope of channel_id beyond the schema's 'The ID of the channel.' It also implies that limit and before/after/around control the 'recent' result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it fetches recent messages from a Discord channel or thread. It is distinguishable from sibling get_message because it describes plural recent messages rather than a single message, though it does not explicitly name the alternative.

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?

There is no guidance on when to use this tool versus siblings like get_message, send_message, or get_pinned_messages. The word 'recent' implies a use case but no explicit context, exclusions, or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pin_messageA

Pins a message in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.
message_idYesThe ID of the message to pin.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states the mutation effect ('pins a message') but does not mention permission requirements, idempotency, or failure cases such as the channel pin limit. This is a significant gap for a tool that changes server state.

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 a single, front-loaded sentence with zero wasted words. It conveys the core operation immediately and is easy to parse.

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?

For a simple two-parameter mutation, the description is adequately clear about the operation, and the schema documents all parameters. However, the lack of any permission or prerequisite guidance, combined with no annotations or output schema, leaves room for avoidable failed calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both channel_id and message_id, so the baseline is 3. The description adds no additional parameter meaning beyond what the schema already provides.

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 specific action ('Pins') and the resource ('a message in a Discord channel'). It is immediately distinguishable from the sibling unpin_message and get_pinned_messages, so an agent can identify what this tool does without opening the schema.

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 usage: it is for pinning messages in Discord. However, it does not explicitly state when to use it versus unpin_message, nor does it mention any prerequisites such as required permissions or the message needing to already exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Sends a message to a specified Discord text channel or thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttsNoWhether this is a Text-to-Speech message.
embedsNoOptional embedded rich content objects.
contentNoThe message text content (up to 2000 characters).
channel_idYesThe ID of the channel or thread to send to.
reply_to_message_idNoOptional message ID to reply to.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It only states the core action and target, but does not mention required permissions, rate limits, public visibility of the message, or what happens on failure. For a mutating tool with zero annotation coverage, this is a notable gap.

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 a single sentence with no filler. It front-loads the main action and target, making it immediately scannable for an agent.

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?

With 5 parameters, no annotations, and no output schema, the description provides a minimal but functional summary. The schema robustly documents the parameters, but the description omits operational context like return value, permission requirements, and potential errors, so the agent is left to infer these important details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a small clarification that channel_id refers to text channels or threads, but it does not otherwise elaborate on tts, embeds, content, or reply_to_message_id beyond what the schema already provides.

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 uses a specific verb ('Sends') and identifies both the action and the resource ('a message to a specified Discord text channel or thread'). This clearly differentiates it from sibling tools like edit_message, delete_message, or create_thread.

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 whenever you need to send a message to a Discord text channel or thread, but it does not explicitly state when not to use it or name alternatives. No exclusions or comparative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpin_messageB

Unpins a message in a Discord channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesThe ID of the channel.
message_idYesThe ID of the message to unpin.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must disclose behavioral traits. It only states the basic action and omits side effects (the message remains in the channel), permission requirements, idempotency, and behavior when the message is not currently pinned.

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 a single sentence with no filler, and the action is front-loaded. It communicates the essential purpose without wasting tokens.

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?

For a simple two-parameter mutation tool, the description is minimally adequate, and the schema covers parameter intent. However, with no annotations and no output schema, the description leaves behavioral context and error/precondition details unaddressed, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both channel_id and message_id fully. The description adds no parameter-level meaning beyond that, which is acceptable per the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Unpins') and identifies the resource ('a message in a Discord channel'), making the core action immediately clear. It does not explicitly call out sibling tools or scope differences, so it stops just short of full differentiation.

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?

There is no guidance on when to choose this tool over alternatives like pin_message or delete_message. The description implies use when a message should be unpinned, but it doesn't mention preconditions such as the message already being pinned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 17 tool updatesv1.0.0
    • First observedadd_reaction
    • First observedcreate_thread
    • First observeddelete_message
    • First observeddelete_reaction
    • First observededit_message
    • First observedget_channel
    • First observedget_guild
    • First observedget_me
    • First observedget_message
    • First observedget_pinned_messages
    • First observedlist_channels
    • First observedlist_guilds
    • First observedlist_members
    • First observedlist_messages
    • First observedpin_message
    • First observedsend_message
    • First observedunpin_message

TDQS

A3.7/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair: guild, channel, message, reaction, pin, or thread. Even similar tools like list_messages and get_message are clearly differentiated by scope, so an agent should not confuse them.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern, such as get_, list_, send_, edit_, delete_, add_, pin_, and create_. The naming is uniform and predictable across the entire set.

Tool Count4/5

At 17 tools, the server is slightly above the ideal 3-15 tool range but each tool maps to a concrete Discord API operation and earns its place. The count is heavy but still navigable and well-scoped for a Discord bot.

Completeness4/5

The set covers core Discord workflows well: guild/channel reads, full message CRUD, reactions, pins, and thread creation. Obvious gaps like channel creation/deletion, member management, and thread editing/deleting are notable but not critical for the primary message-interaction use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Discord through the REST API and real-time events, supporting message management, user info, channel operations, and more with security controls.
    9 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to send and read messages in Discord channels, manage servers, channels, and roles via Discord's API.
    7 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Discord servers, including listing servers/channels, sending messages, and managing reaction-based opt-in campaigns.
    MIT