Skip to main content
Glama
DonghwanJeong

Discord Message Finder MCP

Discord Message Finder MCP

Read-only MCP server for finding Discord messages. It does not send, edit, delete, react to, or moderate messages. The tools are built around answering questions like "where was this discussed?", "which channel has the message?", and "show the context around this result."

Features

  • Search guild messages with Discord's native search filters.

  • Locate a message from a Discord jump URL or channel/message IDs.

  • Read context before and after a message.

  • List searchable channels and active threads.

  • Scan recent channel history when native guild search is not enough.

  • Return stable Discord jump links, timestamps, channel IDs, author IDs, attachments, embeds, and readable snippets.

Related MCP server: melty

Requirements

  • Node.js 20 or newer.

  • A Discord bot token.

  • The bot must be in the target guild and have View Channel and Read Message History where you want to search.

  • For message content search/results, enable the Discord MESSAGE CONTENT INTENT privileged intent for the application.

Setup

npm install
npm run build

Create an environment file or configure your MCP client with these variables:

DISCORD_BOT_TOKEN=your_bot_token
DISCORD_DEFAULT_GUILD_ID=optional_default_guild_id
DISCORD_ALLOWED_GUILD_IDS=optional_comma_separated_allowlist

Example MCP client configuration:

{
  "mcpServers": {
    "discord-search": {
      "command": "node",
      "args": ["/Users/dh/work/discord-mcp/build/index.js"],
      "env": {
        "DISCORD_BOT_TOKEN": "YOUR_BOT_TOKEN",
        "DISCORD_DEFAULT_GUILD_ID": "YOUR_GUILD_ID"
      }
    }
  }
}

Tools

check_discord_access

Checks whether the token works and whether a guild can be read.

list_guild_channels

Lists guild channels and optionally active threads, with IDs and parent/category context.

search_guild_messages

Uses Discord guild search to find messages by content, author, channel, mentions, attachments, links, pin status, and time/message bounds.

find_in_recent_history

Scans recent message history across selected channels or matching channel names. This is useful when Discord search indexing is delayed or when you want a bounded recent-history search.

locate_message

Fetches one exact message from a jump URL or channel/message IDs and returns where it lives.

get_message_context

Fetches an exact message plus surrounding messages before and after it.

read_channel_messages

Reads recent messages from a channel with Discord's before, after, or around pagination.

Notes

Discord's native search can return an indexing response with a retry delay, and search access depends on the application's Message Content privileged intent. The server surfaces those responses explicitly instead of hiding them.

Available Tools

7 tools
check_discord_accessA

Check whether the Discord bot token works and whether a guild can be read.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.

TDQS

A3.5/5.0
Behavior3/5

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

Description implies a read operation but does not specify return format (e.g., boolean, error messages) or behavior on failure. No annotations provided, so description carries full burden but falls short of full 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?

Single sentence, front-loaded, no superfluous words. Efficiently conveys 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?

For a simple diagnostic tool with one optional parameter and no output schema, the description states what it checks but lacks output format and usage context. Adequate but with gaps.

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 has 100% coverage, so baseline is 3. Description adds no additional parameter meaning beyond schema, but schema already adequately describes the one optional parameter.

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 clearly states the tool checks Discord bot token and guild readability, using specific verb+resource. It distinguishes from sibling tools that focus on message retrieval and channel listing.

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 vs alternatives like list_guild_channels or search_guild_messages. Missing context on 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.

find_in_recent_historyA

Scan recent channel history locally. Useful when native Discord search indexing is delayed or a bounded recent search is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
queryYes
match_modeNoall_terms
case_sensitiveNo
channel_idsNo
channel_name_queryNo
include_threadsNo
max_channelsNo
messages_per_channelNo
before_message_idNo
limitNo

TDQS

A3.7/5.0
Behavior3/5

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

Discloses that scanning is local, which is valuable given no annotations. However, misses detail on limitations, permissions, or memory impact; half the burden is carried by description.

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, front-loaded sentences. Each 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?

Missing key context for a complex 11-parameter tool: how 'recent' is defined, result format, pagination beyond before_message_id, and local scanning scope. Inadequate without output schema or annotations.

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 only 9%, and the tool description adds no parameter details. Agents must infer meaning from names alone, which is insufficient for 11 parameters.

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 tool scans recent channel history locally, differentiating it from siblings like search_guild_messages by specifying 'local' and mentioning use when native search indexing is delayed.

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?

Provides clear context: useful when native Discord search indexing is delayed or a bounded recent search is needed. Does not explicitly exclude alternative tools but implies it is for quick local scans.

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

get_message_contextB

Fetch one Discord message plus surrounding messages before and after it.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_urlNo
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
channel_idNo
message_idNo
beforeNo
afterNo

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 must carry the full burden of behavioral disclosure. It only states that the tool fetches the target message with surrounding messages, but omits details about rate limits, required permissions, error handling, or the nature of the returned data. The schema indicates default values for before/after, but the description does not mention them.

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 wordiness. Every word is meaningful, and there is no redundancy.

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 6 parameters, no output schema, and no annotations, the description is too brief. It does not clarify how the surrounding messages are ordered, what format the response takes, or any limits beyond schema constraints. The tool's core purpose (providing context) is stated, but critical details for correct invocation are missing.

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 only 17% (only guild_id has a description). The description adds minimal meaning by referencing 'surrounding messages before and after', which hints at the 'before' and 'after' parameters but does not explain their syntax, range, or behavior. With low schema coverage, the description fails to compensate adequately.

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 'fetch', the resource 'one Discord message plus surrounding messages', and the scope 'before and after it'. This distinguishes it from sibling tools like read_channel_messages which likely fetches messages without context around a specific one.

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 provides no explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or which sibling tools to choose for different contexts. The agent is left to infer usage from the description alone.

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 Discord guild channels and active threads so the assistant can identify where to search.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
include_active_threadsNo
only_message_channelsNo
name_queryNoOptional case-insensitive match against channel name or topic.

TDQS

B3/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 does not disclose whether the operation is read-only, required permissions, rate limits, or any side effects. The description is minimal and lacks essential behavioral context.

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, efficient sentence with no extraneous information. The key verb 'List' is front-loaded, making the purpose immediately clear.

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 4 parameters, no output schema, and no annotations, the description is too brief. It does not address return values, pagination, sorting, or any constraints. For a listing tool, more detail is needed for effective use.

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 50% (2 of 4 parameters have descriptions). The tool description adds no additional meaning beyond the schema; it does not explain parameter usage, defaults, or interactions. For a tool with moderate coverage, the description should compensate but fails to do so.

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 it lists Discord guild channels and active threads, with a purpose of identifying where to search. The verb 'list' is specific, but it doesn't explicitly distinguish from sibling tools like read_channel_messages or search_guild_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?

The phrase 'so the assistant can identify where to search' implies usage before searching, but there is no guidance on when not to use this tool or when to use alternatives such as check_discord_access or find_in_recent_history.

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

locate_messageC

Locate one exact Discord message from a jump URL or channel/message IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_urlNo
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
channel_idNo
message_idNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavior. It only says 'locate' which implies reading, but doesn't state if it modifies state, requires permissions, or rate limits. Lacks crucial behavioral details.

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?

A single sentence that efficiently conveys the tool's core purpose. However, it sacrifices detail for brevity, leaving gaps in completeness.

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?

With 4 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain return format, error scenarios, or how to use parameters together, leaving the agent with insufficient 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?

Schema coverage is 25% (only guild_id has description). The description mentions 'jump URL or channel/message IDs' but doesn't explain each parameter's role or constraints beyond what's in schema. Fails to compensate for low coverage.

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 it locates one exact Discord message using a jump URL or IDs. This distinguishes it from siblings like 'read_channel_messages' which retrieves multiple messages, but doesn't explicitly differentiate from 'get_message_context'.

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 vs alternatives like 'get_message_context' or 'search_guild_messages'. No mention of prerequisites or conditions.

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

read_channel_messagesC

Read messages from a Discord channel with before/after/around pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
channel_idYes
limitNo
before_message_idNo
after_message_idNo
around_message_idNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavioral traits. It only mentions pagination but omits details like read-only nature, rate limits, order of messages, or what happens when no messages match. Lacks sufficient transparency.

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?

Description is a single concise sentence, front-loading the key action and pagination feature. No wasted words, though additional detail could be incorporated without losing conciseness.

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?

With 6 parameters, low schema coverage, no output schema, and no annotations, the description is too minimal. It does not explain return format, ordering, or behavior for empty results. Given the tool's complexity and lack of structured metadata, more details are needed.

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 only 17% (only guild_id has description). The description adds no parameter-specific meaning beyond mentioning before/after/around pagination. It does not explain limit, before_message_id, after_message_id, or around_message_id semantics, leaving the agent without sufficient guidance.

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 clearly states the tool reads messages from a Discord channel and specifies the pagination options (before/after/around). This distinguishes it from sibling tools like search_guild_messages (searching) or get_message_context (single message context).

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. The description only states functionality without indicating prerequisites, exclusions, or preferred scenarios.

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

search_guild_messagesB

Search Discord guild messages with native Discord search. Best for finding where a past discussion happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
guild_idNoDiscord guild/server ID. Uses DISCORD_DEFAULT_GUILD_ID when omitted.
queryNoContent query. Omit when filtering only by author, attachment, pin, link, etc.
channel_idsNo
author_typesNo
author_idsNo
mentionsNo
mentions_role_idsNo
replied_to_user_idsNo
replied_to_message_idsNo
pinnedNo
hasNo
link_hostnamesNo
attachment_filenamesNo
attachment_extensionsNo
before_message_idNo
after_message_idNo
before_timestampNoISO timestamp. Converted to Discord max_id.
after_timestampNoISO timestamp. Converted to Discord min_id.
sort_byNotimestamp
sort_orderNodesc
include_nsfwNo
limitNo
offsetNo
slopNo

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 must carry the burden. It only states 'native Discord search' which is vague. No mention of limitations, rate limits, authentication, or results format. Lacks behavioral detail.

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?

Description is very concise at one sentence, but it lacks structure like bullet points or emphasis on key aspects. It's efficient but could be better organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 24 parameters, no output schema, and no annotations, the description is highly incomplete. It does not explain return values, pagination (offset/limit), or filtering options, leaving the agent with insufficient guidance.

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?

Description adds no meaning to the 24 parameters. Schema coverage is only 17%, so the description should compensate but does not. No parameter names or details mentioned.

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 clearly states 'Search Discord guild messages' with a specific use case: 'Best for finding where a past discussion happened.' This is a specific verb and resource, and it distinguishes the tool's purpose from siblings like read_channel_messages or locate_message.

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?

Description gives a clear context for when to use: 'Best for finding where a past discussion happened.' However, it does not explicitly state when not to use or mention alternatives, but the sibling list provides some implicit differentiation.

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. 7 tool updatesv0.1.0
    • First observedcheck_discord_access
    • First observedfind_in_recent_history
    • First observedget_message_context
    • First observedlist_guild_channels
    • First observedlocate_message
    • First observedread_channel_messages
    • First observedsearch_guild_messages

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool serves a distinct purpose: access check, channel listing, two search methods (native and recent history), reading with pagination, context retrieval, and message location from URL. There is no functional overlap that would cause confusion for an agent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., check_discord_access, list_guild_channels, search_guild_messages), making it predictable for an agent to infer functionality.

Tool Count5/5

With 7 tools, the server is well-scoped for its domain of Discord message finding. Each tool addresses a core operation without redundancy or unnecessary complexity.

Completeness5/5

The tool surface covers the full lifecycle of message discovery: access verification, channel enumeration, multiple search methods, paginated reading, context around a message, and pinpoint location from a URL. No obvious gaps are present.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    MCP server that exposes Discord and Twitch/Chatty chat log query tools to Claude Code, enabling searching messages, channel stats, user messages, and events from chat logs.
    7
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server with FTS5 full-text search over a SQLite export of a discord server.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for Discord that lists guilds, channels, and reads or searches messages using a self-bot account via discord.py-self.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables searching Discord messages using Discord's native search API. Designed for use with Claude Code to find project decisions and communications in Discord.
    -