Skip to main content
Glama
ferelking242

Discord MCP Ultimate

discord_read_messages

Read-only

Read a Discord text channel or thread oldest-to-newest, paging backwards past the 100-message cap via message IDs. Returns message content, author, timestamp, attachments, and pinned status.

Instructions

Read messages from a text channel or thread, oldest-to-newest. Page backwards by re-calling with before set to the id of the oldest message you received, which walks a channel past the 100-message per-call cap. Requires the View Channel and Read Message History permissions. Returns { messages: [...] } with id, author, content, timestamp, attachment count, pinned flag. Use discord_search_messages to filter by keyword, or discord_fetch_pinned_messages for pinned messages only.

Input Schema

NameRequiredDescriptionDefault
afterNoReturn only messages newer than this message ID (snowflake). Page forwards by passing the id of the newest message from the previous call.
limitNoHow many messages to fetch per call (1–100). Default 20.
sinceNoReturn only messages posted after this instant, as an ISO 8601 date or a date-time with an explicit offset (e.g. "2026-08-01" or "2026-08-01T09:00:00Z"). Convenience form of `after`: the call yields the oldest `limit` messages after that instant, so page forwards with `after` set to the newest id received.
aroundNoReturn messages centered on this message ID (snowflake): Discord splits `limit` either side of it, and an even `limit` puts the extra message on the newer side. Use it to read outward from a known message, such as a discord_search_guild_messages hit.
beforeNoReturn only messages older than this message ID (snowflake). Page backwards through history by passing the id of the oldest message from the previous call.
channel_idYesID (snowflake) of the channel or thread to read from.

Output Schema

NameRequiredDescriptionDefault
messagesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv3.0.0

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, so the safety profile is covered; the description adds the non-obvious behavioral facts that matter: the 100-message per-call cap, the backwards-paging recipe, and the required permissions. It stops short of any comment on rate limits or behavior when a channel is empty/inaccessible, keeping it off a 5.

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?

Three tightly packed sentences, front-loaded with scope and paging before moving to permissions and alternatives. The one wasted element is the enumeration of returned fields (id, author, content, timestamp, attachment count, pinned flag), which duplicates the output schema and is repeated nowhere else the agent needs it.

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

Completeness5/5

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

For a 6-parameter read tool with full schema coverage and an output schema, everything an agent needs is present: what it reads, in what order, how to paginate past the cap, what permissions are required, and which siblings to prefer for other intents. No material gap remains.

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 baseline is 3; the description earns above that by explaining the cross-parameter paging workflow ('re-calling with before set to the id of the oldest message you received'), which the per-field schema descriptions state individually but never compose into a procedure. It doesn't add anything about the around/since interplay beyond what the schema already says.

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?

Specific verb+resource ('Read messages from a text channel or thread') plus an explicit ordering guarantee (oldest-to-newest). It names the sibling tools it is not (discord_search_messages, discord_fetch_pinned_messages), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use-what: use this to walk a channel, use discord_search_messages for keyword filtering, use discord_fetch_pinned_messages for pinned-only. It also states the prerequisite permissions (View Channel, Read Message History), which is the main condition for failure.

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

Deploy Server

Other Tools