Discord MCP Server
Pricing
from $2.00 / 1,000 discord data retrievals
Discord MCP Server
Discord MCP Server connects Claude, ChatGPT, Cursor and VS Code to Discord servers through an official read-only bot. It exposes 6 MCP tools for guilds, channels, threads, message history, message context and channel search, returning compact data for LLM summaries and Q&A.
Pricing
from $2.00 / 1,000 discord data retrievals
Rating
0.0
(0)
Developer
MrBridge
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Discord MCP Server is a read-only MCP server for Claude, ChatGPT, Cursor, VS Code, and other MCP-compatible AI clients. It runs on Apify Standby and exposes 6 Discord tools for listing guilds, listing channels and threads, reading messages, fetching message context, and scanning one channel for matching messages.
Ask your assistant to summarize the last 24 hours in #general, find what a teammate said about a project decision, or build a digest from one Discord thread. The server returns compact raw Discord data; summarization and reasoning stay inside your LLM client.
What Is Discord MCP Server?
Discord MCP Server connects an official Discord bot to AI clients through the Model Context Protocol. It is strictly read-only: it cannot send messages, add reactions, moderate users, delete content, or use user tokens.
- Read Discord guilds, channels, active threads, and message windows.
- Return chronological message blocks optimized for LLM context windows.
- Resolve user, channel, and role mentions into readable names when metadata is available.
- Include attachments, embeds, reactions, edit markers, replies, and optional jump URLs.
- Use Apify Standby for a persistent HTTPS endpoint at
/mcp. - Use Pay-per-Event billing only after successful tool results.
Quick Start
- Create a Discord application and bot in the Discord Developer Portal.
- Enable the privileged
Message Content Intentfor the bot. - Invite the bot to the target server with
View ChannelsandRead Message History. - Set
DISCORD_BOT_TOKENas a secret environment variable in the Apify Console. - Connect your MCP client to:
https://mrbridge--discord-mcp-server.apify.actor/mcp?fpr=mrbridge
Use your Apify API token for the Apify endpoint authorization. Use the Discord bot token only as the Actor secret environment variable; never paste it into client prompts, query parameters, logs, or Actor input.
Discord Bot Setup
Create the bot:
- Open the Discord Developer Portal.
- Create an application.
- Open Bot, then create or reset the bot token.
- Copy the token once and store it as
DISCORD_BOT_TOKENin the Actor environment variables. - In Bot settings, enable
Message Content Intent. Without this privileged intent, Discord can return emptycontentfields.
Invite the bot:
- Open OAuth2 -> URL Generator.
- Select
botscope. - Select these permissions:
View ChannelsandRead Message History. - Open the generated invite URL and add the bot to the server.
The bot must be able to see every channel you want to read. Discord channel-level permissions still apply.
Connection Setup
Claude Desktop
Use Streamable HTTP if your Claude client supports remote MCP servers:
{"mcpServers": {"discord": {"type": "http","url": "https://mrbridge--discord-mcp-server.apify.actor/mcp?fpr=mrbridge","headers": {"Authorization": "Bearer YOUR_APIFY_API_TOKEN"}}}}
Claude Code
claude mcp add --transport http --scope user discord \--header "Authorization: Bearer YOUR_APIFY_API_TOKEN" \https://mrbridge--discord-mcp-server.apify.actor/mcp?fpr=mrbridge
ChatGPT Custom Connector
Create a custom connector that targets the MCP endpoint:
https://mrbridge--discord-mcp-server.apify.actor/mcp?fpr=mrbridge
Use bearer token authentication with your Apify API token. The Discord bot token remains server-side in the Actor environment.
Cursor or VS Code
{"mcpServers": {"discord": {"type": "http","url": "https://mrbridge--discord-mcp-server.apify.actor/mcp?fpr=mrbridge","headers": {"Authorization": "Bearer YOUR_APIFY_API_TOKEN"}}}}
Tools Exposed
| Tool | When to use it | Main parameters | Returns |
|---|---|---|---|
list_guilds | Discover servers the bot can access. | none | Guild IDs and names. |
list_channels | Find text, announcement, forum, media, and thread channels in a guild. | guild_id, include_threads | Channel metadata and notes for forum/media channels. |
get_messages | Read a message window for summaries or Q&A. | channel_id, limit, before, after, since, until | Chronological messages plus compact text. |
get_message_context | Read around one known message ID. | channel_id, message_id, before, after | Context messages and target index. |
search_messages | Scan one channel/thread for a keyword when native bot search is unavailable. | channel_id, query, author, since, until, limit, scan_cap | Matches, scanned count, cap, and next_before. |
list_active_threads | Find active threads, especially forum posts. | guild_id | Active thread IDs and names. |
Search limits
Discord bot REST does not provide a native global message search endpoint. search_messages scans messages in one channel or thread and filters locally. The default scan_cap is 1000 messages and the maximum is 2000 messages. If the response includes next_before, call search_messages again with that cursor to continue.
Time bounds
since and until are ISO 8601 timestamps. They are converted to Discord snowflake cursors internally so the server can avoid unnecessary scanning where possible. Explicit before and after cursors take precedence over until and since.
Output Format
Every tool returns:
content: a compact text block for the LLM, for example[2026-07-09 14:32] @alice -> decision text.structuredContent: JSON containing IDs, timestamps, authors, messages, attachments, reactions, cursor metadata, and billing notes where relevant.
Message outputs include:
- UTC ISO timestamps.
editedmarker.- Reply parent IDs when Discord provides them.
- Attachments with filename, content type, URL, size, and
url_expires: true. - Embeds summarized into one line.
- Reactions aggregated as
emojixcount. - Optional stable Discord jump URLs.
Discord CDN attachment URLs can expire after a short period, often around 24 hours. Jump URLs are stable as long as the user has Discord permission to view the message.
Standby Mechanics
The Actor runs in Apify Standby mode as a persistent HTTP server. It listens on the Apify-provided Standby port and exposes MCP at /mcp and /mcp/ without redirects.
Cold starts depend on Apify platform state and image availability. Once warm, the server keeps a short in-memory metadata cache for guilds, channels, roles, and members. Message content is never durably cached.
The suggested baseline is 256 MB memory, 512 MB max, and a 5-minute idle timeout. Verify the effective memory and idle timeout in the Apify Console Standby settings after deployment.
Pricing
Discord MCP Server uses Apify Pay-per-Event billing. Users also pay Apify platform usage for the Standby run while it is warm; the event fees and platform usage are separate billing components.
See the live Pricing tab for event prices. The project follows the same MrBridge MCP pricing pattern as France Map and Open Science: tool-read for successful read tools and tool-analysis for search_messages. initialize, tools/list, failed tool calls, invalid input, permission errors, rate-limit errors, and missing-token errors are not charged. Returned matches from search_messages are included in the tool-analysis cost.
Set ACTOR_MAX_TOTAL_CHARGE_USD if you want a per-run cost cap. If the cap is reached, the server returns a clear MCP error instead of silently continuing unpaid work.
Known Limits
- Official Discord bot tokens only. User tokens and self-bots are not supported and should not be used.
Message Content Intentis required for reliable message text.- Discord returns at most 100 messages per REST request.
- Rate limits are bucketed by route and enforced by Discord; the REST client queues requests and respects 429 responses.
- Forum and media channels are containers. Read their posts by listing active threads and calling
get_messageson a thread ID. - The server intentionally does not call
List Guild Members, because that requires the privilegedGUILD_MEMBERSintent and is unnecessary for this read-only use case.
Local Development
npm installnpm run buildnpm testnpm run devnpm run inspector
Smoke test a local server:
$bash scripts/smoke-local.sh
The smoke script only calls http://localhost. It performs initialize, tools/list, and a list_guilds tool call. Without DISCORD_BOT_TOKEN, the tool call should return an actionable MCP error while the server remains healthy.
Legal And Responsible Use
Use this Actor only with Discord servers where you are authorized to install a bot and read message history. You are responsible for complying with Discord terms, workspace rules, privacy law, and internal data policies.
The Actor is read-only and does not store message content durably. Apify run logs must never include bot tokens or message content.
Read Apify's legal overview for broader context: Is web scraping legal?.
Feedback
Open an issue on the Actor's Issues tab if a Discord permission error, channel type, or MCP client behaves unexpectedly.
More tools, scrapers, MCP servers, and data studies from the same team: mr-bridge.com.