Skip to main content
Glama
DonghwanJeong

Discord Message Finder MCP

README.md
# 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.

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

```bash
npm install
npm run build
```

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

```bash
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:

```json
{
  "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.

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