Threads and forums
list_active_threads returns a bounded view of active guild threads and can restrict results to one permitted parent. Forum and media posts are represented by Discord as public threads, so normalized results preserve their parent IDs and applied tag IDs.
list_channels reads the full guild-channel response, validates it, applies configured scope, and orders the visible result before returning a local page. A first call defaults to 50 compact records containing only ID, name, parent ID, position, numeric type, and named type; the maximum page is 100. Use get_channel for one exact metadata projection. Set detail: "full" only when a page needs forum tag definitions, default reaction, layout, sort order, auto-archive duration, slowmode, channel jump URLs, and the other normalized fields. The discord://guilds/{guildId}/channels resource deliberately remains the full unpaginated projection.
page.nextCursor is an HMAC-authenticated, process-local continuation bound to the guild, projection, offset, and complete ordered channel structure. Every page rechecks policy and Discord visibility. Tampering, another guild or projection, process restart, or structural drift rejects the cursor and requires pagination to restart; ordinary message activity does not invalidate it. The cursor grants no authority. The explicit inventory.completeness: "visibility-bounded" marker prevents callers from mistaking the result for proof that hidden channels do not exist.
list_archived_threads supports three views. public includes archived forum and media posts and uses an ISO 8601 timestamp cursor. private lists all private archived threads and additionally requires Discord's Manage Threads permission. joined-private lists only private threads joined by the bot and uses a thread-ID cursor. The result returns a visibility-tagged next cursor so callers cannot accidentally reuse the wrong cursor type.
threads.reads: "inherit" lets an allowlisted parent grant local message-read scope to its child threads; exact requires the child ID itself. threads.messageWrites makes an independent choice for message-class operations such as plain-text sends and edits, attachments, Components V2, static embeds, and native polls. Inherited access is never a blind string match: the connector freshly reads the child, validates its exact parent, guild, supported type, lifecycle, lock and archive state, private-thread membership where applicable, and effective parent-derived permissions. Deletion, pins, reactions, typing signals, thread governance, permission changes, and other administration still require their own exact child scope. Permission-overwrite mutation rejects threads entirely because Discord threads inherit their parent's overwrite set. Discord's channel resource reference documents thread and forum behavior.
Canonical source: docs/reference.md
Documentation generated for guildctl@0.3.1. Canonical source and edit history remain in the public repository. GuildControl is an independent project and is not affiliated with or endorsed by Discord Inc. Discord is used only to identify the platform that GuildControl connects to.