Skip to content

Existing server changes

Use guild_change_plan when the request is to improve a server that already exists. The caller supplies the natural-language request and a typed change set for existing channel IDs, role IDs, and permission overwrites. The plan reads a live snapshot, preserves IDs and omitted fields, reports the before/after operations, and stores an authenticated private plan_ref.

Review plan_id, snapshot_id, approval_id, operations, blockers, and risks before applying. guild_change_apply requires the same guild, bot, plan reference, approval ID, MCP_DRY_RUN=false, and the normal payload confirmation fields. It checks the caller bot identity, rejects external drift per operation, checkpoints before and after each write, and reads each changed resource back. If a process ends after Discord accepted a write, the next call recognizes the expected after-state and does not repeat it.

The change surface is intentionally bounded: it edits existing roles, channels, category parent/position, and permission overwrites. It does not create or delete resources. Role edits must be below the caller bot’s highest role; Permission overwrites require MANAGE_ROLES; role targets must be an existing role or @everyone, while member targets use type: 1. Category moves require an existing category ID.

guild_change_restore restores selected operation indexes only after the operation was applied and the live resource still equals the expected after state. It writes only the fields that the original operation changed and reads them back. Unsupported or externally changed resources are reported as blocked; this is not a whole-guild rollback guarantee.

For a member’s actual perspective, use permissions_member_access_report with a bounded channel selection. It reports view/send/manage as allowed, denied, or unknown, marks missing role data and ambiguous thread inheritance unknown, and never treats incomplete Discord payloads as permission to mutate.