{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "const": "https://raw.githubusercontent.com/j-256/guildcontrol/main/guildcontrol.config.schema.json",
      "description": "Editor schema identifier for this configuration format"
    },
    "capabilities": {
      "default": {},
      "type": "object",
      "properties": {
        "administration": {
          "type": "boolean",
          "description": "Enable administration policy"
        },
        "applicationCommandChanges": {
          "type": "boolean",
          "description": "Enable reviewed exact-guild application-command creation, complete-state update, and exact-ID deletion"
        },
        "globalApplicationCommandChanges": {
          "type": "boolean",
          "description": "Enable reviewed application-wide global command creation, complete-state update, and exact-ID deletion"
        },
        "applicationEmojiAudit": {
          "type": "boolean",
          "description": "Enable application emoji audit policy"
        },
        "applicationEmojiChanges": {
          "type": "boolean",
          "description": "Enable application emoji changes policy"
        },
        "applicationEntitlementConsumption": {
          "type": "boolean",
          "description": "Enable reviewed exact-user consumable entitlement fulfillment acknowledgement and consumption"
        },
        "applicationMonetizationAudit": {
          "type": "boolean",
          "description": "Enable exact-beneficiary entitlement and exact-user subscription lifecycle audits"
        },
        "applicationTestEntitlementChanges": {
          "type": "boolean",
          "description": "Enable reviewed subscription test-entitlement creation and receipt-proven deletion"
        },
        "applicationIntentChanges": {
          "type": "boolean",
          "description": "Enable reviewed additive application privileged-intent enablement"
        },
        "applicationRoleConnectionMetadataChanges": {
          "type": "boolean",
          "description": "Enable reviewed complete current-application linked-role metadata replacement and clearance"
        },
        "botProfileAudit": {
          "type": "boolean",
          "description": "Enable privacy-bounded reads of the authenticated current bot profile"
        },
        "botProfileChanges": {
          "type": "boolean",
          "description": "Enable reviewed application-wide current-bot username, avatar, and banner changes"
        },
        "announcementCrossposts": {
          "type": "boolean",
          "description": "Enable announcement crossposts policy"
        },
        "announcementSubscriptionAudit": {
          "type": "boolean",
          "description": "Enable announcement subscription audit policy"
        },
        "announcementSubscriptionChanges": {
          "type": "boolean",
          "description": "Enable announcement subscription changes policy"
        },
        "attachments": {
          "type": "boolean",
          "description": "Enable attachments policy"
        },
        "automodAudit": {
          "type": "boolean",
          "description": "Enable automod audit policy"
        },
        "automodChanges": {
          "type": "boolean",
          "description": "Enable automod changes policy"
        },
        "banAudit": {
          "type": "boolean",
          "description": "Enable ban audit policy"
        },
        "bulkBanAudit": {
          "type": "boolean",
          "description": "Enable reviewed exact-target Bulk Guild Ban planning"
        },
        "bulkBans": {
          "type": "boolean",
          "description": "Enable reviewed exact-target Bulk Guild Ban execution"
        },
        "bulkMemberRoleChanges": {
          "type": "boolean",
          "description": "Enable reviewed exact-target bulk member-role changes"
        },
        "channelCreation": {
          "type": "boolean",
          "description": "Enable channel creation policy"
        },
        "channelDeletionAudit": {
          "type": "boolean",
          "description": "Enable channel deletion audit policy"
        },
        "channelDeletions": {
          "type": "boolean",
          "description": "Enable channel deletions policy"
        },
        "channelCloneAudit": {
          "type": "boolean",
          "description": "Enable channel clone audit policy"
        },
        "channelCloning": {
          "type": "boolean",
          "description": "Enable channel cloning policy"
        },
        "channelMetadataChanges": {
          "type": "boolean",
          "description": "Enable reviewed channel metadata and exact ordinary voice-channel status policy"
        },
        "channelOrderingAudit": {
          "type": "boolean",
          "description": "Enable channel ordering audit policy"
        },
        "channelOrderingChanges": {
          "type": "boolean",
          "description": "Enable channel ordering changes policy"
        },
        "deletions": {
          "type": "boolean",
          "description": "Enable deletions policy"
        },
        "directMessageAudit": {
          "type": "boolean",
          "description": "Enable exact-recipient one-to-one direct-message reads without content persistence"
        },
        "directMessageAttachments": {
          "type": "boolean",
          "description": "Enable reviewed owned local-file attachments in exact-recipient direct messages"
        },
        "directMessageDeletion": {
          "type": "boolean",
          "description": "Enable reviewed deletion of exact connector-authored direct messages"
        },
        "directMessageDelivery": {
          "type": "boolean",
          "description": "Enable reviewed plain-text direct-message sends and replies"
        },
        "directMessageEditing": {
          "type": "boolean",
          "description": "Enable reviewed edits of exact connector-authored direct messages"
        },
        "embedMessages": {
          "type": "boolean",
          "description": "Enable reviewed remote-free static rich-embed message creation and exact bot-owned replacement"
        },
        "forumPosts": {
          "type": "boolean",
          "description": "Enable forum posts policy"
        },
        "forumTagAudit": {
          "type": "boolean",
          "description": "Enable forum tag audit policy"
        },
        "forumTagChanges": {
          "type": "boolean",
          "description": "Enable forum tag changes policy"
        },
        "guildExpressionAudit": {
          "type": "boolean",
          "description": "Enable guild expression audit policy"
        },
        "guildExpressionChanges": {
          "type": "boolean",
          "description": "Enable guild expression changes policy"
        },
        "guildCommunityAudit": {
          "type": "boolean",
          "description": "Enable privacy-minimized Discord Community routing and authority audits"
        },
        "guildCommunityChanges": {
          "type": "boolean",
          "description": "Enable reviewed monotonic Community enablement and exact routing changes"
        },
        "guildDepartures": {
          "type": "boolean",
          "description": "Enable reviewed exact-guild connector departure with access-loss, re-entry, and quiescence acknowledgments"
        },
        "guildIncidentAudit": {
          "type": "boolean",
          "description": "Enable guild incident audit policy"
        },
        "guildIncidentChanges": {
          "type": "boolean",
          "description": "Enable guild incident changes policy"
        },
        "guildProfileAudit": {
          "type": "boolean",
          "description": "Enable guild profile audit policy"
        },
        "guildProfileChanges": {
          "type": "boolean",
          "description": "Enable guild profile changes policy"
        },
        "guildPruneAudit": {
          "type": "boolean",
          "description": "Enable reviewed non-exact guild prune planning"
        },
        "guildPrunes": {
          "type": "boolean",
          "description": "Enable reviewed non-exact guild prune execution"
        },
        "guildScaffolds": {
          "type": "boolean",
          "description": "Enable guild scaffolds policy"
        },
        "guildSettingsAudit": {
          "type": "boolean",
          "description": "Enable guild settings audit policy"
        },
        "guildSettingsChanges": {
          "type": "boolean",
          "description": "Enable guild settings changes policy"
        },
        "guildTemplateAudit": {
          "type": "boolean",
          "description": "Enable guild template audit policy"
        },
        "guildTemplateChanges": {
          "type": "boolean",
          "description": "Enable guild template changes policy"
        },
        "integrationAudit": {
          "type": "boolean",
          "description": "Enable integration audit policy"
        },
        "integrationDeletions": {
          "type": "boolean",
          "description": "Enable integration deletions policy"
        },
        "interactions": {
          "type": "boolean",
          "description": "Enable interactions policy"
        },
        "inviteAudit": {
          "type": "boolean",
          "description": "Enable invite audit policy"
        },
        "inviteCreation": {
          "type": "boolean",
          "description": "Enable reviewed finite invite creation with private-file capability delivery"
        },
        "inviteRoleAssignment": {
          "type": "boolean",
          "description": "Enable reviewed persistent role assignment through finite privately delivered invites"
        },
        "inviteDeletions": {
          "type": "boolean",
          "description": "Enable invite deletions policy"
        },
        "memberDirectory": {
          "type": "boolean",
          "description": "Enable member directory policy"
        },
        "nicknameChanges": {
          "type": "boolean",
          "description": "Enable nickname changes policy"
        },
        "otherMemberNicknameChanges": {
          "type": "boolean",
          "description": "Enable other member nickname changes policy"
        },
        "memberRoleChanges": {
          "type": "boolean",
          "description": "Enable member role changes policy"
        },
        "memberVerificationChanges": {
          "type": "boolean",
          "description": "Enable reviewed exact-member changes to Discord's named BYPASSES_VERIFICATION state"
        },
        "memberVoiceAudit": {
          "type": "boolean",
          "description": "Enable member voice audit policy"
        },
        "memberVoiceChanges": {
          "type": "boolean",
          "description": "Enable member voice changes policy"
        },
        "messageForwarding": {
          "type": "boolean",
          "description": "Enable message forwarding policy"
        },
        "crossGuildMessageForwarding": {
          "type": "boolean",
          "description": "Enable cross guild message forwarding policy"
        },
        "nativeCommandChanges": {
          "type": "boolean",
          "description": "Enable native command changes policy"
        },
        "nativeInteractions": {
          "type": "boolean",
          "description": "Enable native interactions policy"
        },
        "onboardingAudit": {
          "type": "boolean",
          "description": "Enable onboarding audit policy"
        },
        "onboardingChanges": {
          "type": "boolean",
          "description": "Enable onboarding changes policy"
        },
        "pinManagement": {
          "type": "boolean",
          "description": "Enable pin management policy"
        },
        "permissionOverwrites": {
          "type": "boolean",
          "description": "Enable permission overwrites policy"
        },
        "permissionSyncs": {
          "type": "boolean",
          "description": "Enable reviewed complete parent-category permission synchronization with explicit replacement and future-propagation acknowledgment"
        },
        "pollAudit": {
          "type": "boolean",
          "description": "Enable poll audit policy"
        },
        "pollCreation": {
          "type": "boolean",
          "description": "Enable poll creation policy"
        },
        "pollEnding": {
          "type": "boolean",
          "description": "Enable poll ending policy"
        },
        "pollVoterAudit": {
          "type": "boolean",
          "description": "Enable poll voter audit policy"
        },
        "reactionModeration": {
          "type": "boolean",
          "description": "Enable reaction moderation policy"
        },
        "reactionUserAudit": {
          "type": "boolean",
          "description": "Enable reaction user audit policy"
        },
        "roleCreation": {
          "type": "boolean",
          "description": "Enable role creation policy"
        },
        "roleConfiguration": {
          "type": "boolean",
          "description": "Enable role configuration policy"
        },
        "roleDeletionAudit": {
          "type": "boolean",
          "description": "Enable role deletion audit policy"
        },
        "roleDeletions": {
          "type": "boolean",
          "description": "Enable role deletions policy"
        },
        "roleOrderingAudit": {
          "type": "boolean",
          "description": "Enable role ordering audit policy"
        },
        "roleOrderingChanges": {
          "type": "boolean",
          "description": "Enable role ordering changes policy"
        },
        "scheduledEventAudit": {
          "type": "boolean",
          "description": "Enable scheduled event audit policy"
        },
        "scheduledEventUserAudit": {
          "type": "boolean",
          "description": "Enable scheduled event user audit policy"
        },
        "scheduledEventChanges": {
          "type": "boolean",
          "description": "Enable scheduled event changes policy"
        },
        "soundboardAudit": {
          "type": "boolean",
          "description": "Enable soundboard audit policy"
        },
        "soundboardChanges": {
          "type": "boolean",
          "description": "Enable soundboard changes policy"
        },
        "soundboardPlayback": {
          "type": "boolean",
          "description": "Enable exact-scope guarded soundboard playback with live voice-state and permission proof"
        },
        "stageInstanceAudit": {
          "type": "boolean",
          "description": "Enable stage instance audit policy"
        },
        "stageInstanceChanges": {
          "type": "boolean",
          "description": "Enable stage instance changes policy"
        },
        "stageStartNotifications": {
          "type": "boolean",
          "description": "Enable stage start notifications policy"
        },
        "threadCreation": {
          "type": "boolean",
          "description": "Enable thread creation policy"
        },
        "threadAudit": {
          "type": "boolean",
          "description": "Enable thread audit policy"
        },
        "threadChanges": {
          "type": "boolean",
          "description": "Enable thread changes policy"
        },
        "welcomeScreenAudit": {
          "type": "boolean",
          "description": "Enable welcome screen audit policy"
        },
        "welcomeScreenChanges": {
          "type": "boolean",
          "description": "Enable welcome screen changes policy"
        },
        "webhookAudit": {
          "type": "boolean",
          "description": "Enable webhook audit policy"
        },
        "webhookChanges": {
          "type": "boolean",
          "description": "Enable webhook changes policy"
        },
        "webhookCreation": {
          "type": "boolean",
          "description": "Enable webhook creation policy"
        },
        "webhookDeletions": {
          "type": "boolean",
          "description": "Enable webhook deletions policy"
        },
        "webhookMessageAudit": {
          "type": "boolean",
          "description": "Enable exact credential-safe Incoming-webhook message lookup without content persistence"
        },
        "webhookMessageChanges": {
          "type": "boolean",
          "description": "Enable exact credential-safe Incoming-webhook message edits with one-shot coordination"
        },
        "webhookMessageDeletions": {
          "type": "boolean",
          "description": "Enable reviewed exact Incoming-webhook message deletion with transient content-bound planning"
        },
        "webhookMessageDelivery": {
          "type": "boolean",
          "description": "Enable bounded plain-text Incoming-webhook message delivery with mention containment and one-shot coordination"
        },
        "widgetPublicExposure": {
          "type": "boolean",
          "description": "Enable widget public exposure policy"
        },
        "widgetSettingsAudit": {
          "type": "boolean",
          "description": "Enable widget settings audit policy"
        },
        "widgetSettingsChanges": {
          "type": "boolean",
          "description": "Enable widget settings changes policy"
        }
      },
      "additionalProperties": false,
      "description": "Explicit capability gates; omitted gates remain disabled"
    },
    "credential": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "const": "environment"
            },
            "variable": {
              "type": "string",
              "maxLength": 128,
              "pattern": "^DISCORD_(?:[A-Z0-9]+_)*TOKEN$"
            }
          },
          "required": [
            "provider",
            "variable"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "Absolute canonical path to a bounded externally managed Discord token file"
            },
            "provider": {
              "type": "string",
              "const": "file"
            }
          },
          "required": [
            "path",
            "provider"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Environment or bounded file reference for the Discord bot token"
    },
    "gateway": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Enable the optional privacy-safe Discord Gateway client"
        },
        "eventBufferSize": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000,
          "description": "Maximum bounded Gateway event buffer size"
        }
      },
      "required": [
        "enabled",
        "eventBufferSize"
      ],
      "additionalProperties": false,
      "description": "Optional Discord Gateway policy"
    },
    "identity": {
      "type": "object",
      "properties": {
        "applicationId": {
          "type": "string",
          "pattern": "^[0-9]{1,20}$",
          "description": "Expected Discord application identity"
        },
        "botId": {
          "type": "string",
          "pattern": "^[0-9]{1,20}$",
          "description": "Expected Discord bot user identity"
        }
      },
      "required": [
        "applicationId",
        "botId"
      ],
      "additionalProperties": false,
      "description": "Pinned Discord application and bot identity"
    },
    "limits": {
      "default": {},
      "type": "object",
      "properties": {
        "attachmentMaxBytes": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for attachment max bytes"
        },
        "guildPruneMaxMembers": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for guild prune max members"
        },
        "interactionMaxWritesPerMinute": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for interaction max writes per minute"
        },
        "interactionMinWriteIntervalMs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for interaction min write interval ms"
        },
        "mcpReadResponseMaxBytes": {
          "type": "integer",
          "minimum": 65536,
          "maximum": 8388608,
          "description": "Maximum UTF-8 bytes for one complete redacted MCP read result"
        },
        "nativeInteractionMaxPending": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for native interaction max pending"
        },
        "nativeInteractionTtlSeconds": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Numeric policy limit for native interaction ttl seconds"
        }
      },
      "additionalProperties": false,
      "description": "Optional numeric policy limits"
    },
    "name": {
      "type": "string",
      "pattern": "^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$",
      "description": "Bounded lowercase identifier for this policy"
    },
    "observability": {
      "default": {},
      "type": "object",
      "properties": {
        "compression": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Common OTLP compression mode"
        },
        "endpoint": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Common credential-free absolute OTLP endpoint"
        },
        "exportEnabled": {
          "type": "boolean",
          "description": "Enable OTLP export"
        },
        "headers": {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "const": "environment"
            },
            "variable": {
              "type": "string",
              "maxLength": 128,
              "pattern": "^[A-Z][A-Z0-9_]{0,118}_HEADERS$"
            }
          },
          "required": [
            "provider",
            "variable"
          ],
          "additionalProperties": false,
          "description": "Environment reference for an OTLP header string"
        },
        "jsonLogsEnabled": {
          "type": "boolean",
          "description": "Enable content-free JSON operational logs"
        },
        "metrics": {
          "type": "object",
          "properties": {
            "compression": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "OTLP compression mode"
            },
            "endpoint": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "Credential-free absolute OTLP endpoint"
            },
            "headers": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "const": "environment"
                },
                "variable": {
                  "type": "string",
                  "maxLength": 128,
                  "pattern": "^[A-Z][A-Z0-9_]{0,118}_HEADERS$"
                }
              },
              "required": [
                "provider",
                "variable"
              ],
              "additionalProperties": false,
              "description": "Environment reference for an OTLP header string"
            },
            "protocol": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "OTLP transport protocol"
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "OTLP request timeout in milliseconds"
            }
          },
          "additionalProperties": false
        },
        "protocol": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Common OTLP transport protocol"
        },
        "serviceName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Bounded non-identifying telemetry service name"
        },
        "timeoutMs": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "description": "Common OTLP request timeout in milliseconds"
        },
        "traceSampleRatio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Trace sampling ratio"
        },
        "traceSampler": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Trace sampler name"
        },
        "traces": {
          "type": "object",
          "properties": {
            "compression": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "OTLP compression mode"
            },
            "endpoint": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "Credential-free absolute OTLP endpoint"
            },
            "headers": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "const": "environment"
                },
                "variable": {
                  "type": "string",
                  "maxLength": 128,
                  "pattern": "^[A-Z][A-Z0-9_]{0,118}_HEADERS$"
                }
              },
              "required": [
                "provider",
                "variable"
              ],
              "additionalProperties": false,
              "description": "Environment reference for an OTLP header string"
            },
            "protocol": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "description": "OTLP transport protocol"
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "OTLP request timeout in milliseconds"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false,
      "description": "Optional content-free local and OTLP observability policy"
    },
    "readScope": {
      "type": "object",
      "properties": {
        "channelIds": {
          "minItems": 0,
          "maxItems": 500,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Optional exact channel allowlist inside the guild boundary"
        },
        "guildIds": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild allowlist forming the outer read boundary"
        }
      },
      "required": [
        "channelIds",
        "guildIds"
      ],
      "additionalProperties": false,
      "description": "Required outer Discord read boundary"
    },
    "runtime": {
      "default": {},
      "type": "object",
      "properties": {
        "nativeCommandName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Runtime setting for native command name"
        }
      },
      "additionalProperties": false,
      "description": "Optional non-secret runtime settings"
    },
    "schemaVersion": {
      "type": "number",
      "const": 2,
      "description": "Configuration format version"
    },
    "scopes": {
      "default": {},
      "type": "object",
      "properties": {
        "adminGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for admin guild ids"
        },
        "applicationCommandGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed application-command changes"
        },
        "applicationConsumableEntitlementSkuIds": {
          "minItems": 0,
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact current-application consumable SKU ID allowlist for reviewed entitlement consumption"
        },
        "applicationConsumableEntitlementUserIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact user beneficiary ID allowlist for reviewed entitlement consumption"
        },
        "applicationEntitlementGuildIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild beneficiary ID allowlist for application entitlement audit"
        },
        "applicationEntitlementUserIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact user beneficiary ID allowlist for application entitlement audit"
        },
        "applicationMonetizationSkuIds": {
          "minItems": 0,
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact current-application SKU ID evidence allowlist shared by monetization audit and reviewed entitlement lifecycle changes"
        },
        "applicationSubscriptionUserIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact user ID allowlist for application subscription lifecycle audit"
        },
        "applicationTestEntitlementGuildIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild beneficiary ID allowlist for reviewed subscription test entitlements"
        },
        "applicationTestEntitlementSkuIds": {
          "minItems": 0,
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact current-application subscription SKU ID allowlist for reviewed test entitlements"
        },
        "applicationTestEntitlementUserIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact user beneficiary ID allowlist for reviewed subscription test entitlements"
        },
        "announcementCrosspostChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for announcement crosspost channel ids"
        },
        "announcementSubscriptionSourceChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for announcement subscription source channel ids"
        },
        "announcementSubscriptionTargetChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for announcement subscription target channel ids"
        },
        "attachmentChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for attachment channel ids"
        },
        "automodAlertChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for automod alert channel ids"
        },
        "automodGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for automod guild ids"
        },
        "banAuditGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for ban audit guild ids"
        },
        "bulkBanGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed Bulk Guild Ban planning and execution"
        },
        "bulkMemberRoleGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed bulk member-role changes"
        },
        "bulkMemberRoleIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact role ID allowlist for reviewed bulk member-role changes"
        },
        "channelCreationGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for channel creation guild ids"
        },
        "channelDeletionIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for channel deletion ids"
        },
        "channelCloneGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for channel clone guild ids"
        },
        "channelCloneSourceIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for channel clone source ids"
        },
        "channelMetadataIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for reviewed channel metadata and ordinary voice-channel status"
        },
        "channelOrderingGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for channel ordering guild ids"
        },
        "componentLinkOrigins": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 512,
            "pattern": "^https:\\/\\/[^/?#@\\s]+$"
          },
          "description": "Exact canonical HTTPS origin allowlist for Components V2 link buttons"
        },
        "deleteChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for delete channel ids"
        },
        "directMessageUserIds": {
          "minItems": 0,
          "maxItems": 25,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact ordinary Discord user ID allowlist for isolated one-to-one direct-message access"
        },
        "embedMessageChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord channel or thread ID allowlist for reviewed static rich-embed messages"
        },
        "forumPostChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for forum post channel ids"
        },
        "forumTagChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for forum tag channel ids"
        },
        "guildScaffoldGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild scaffold guild ids"
        },
        "guildCommunityGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for Discord Community audit and reviewed changes"
        },
        "guildDepartureGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed connector departure"
        },
        "guildExpressionGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild expression guild ids"
        },
        "guildIncidentGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild incident guild ids"
        },
        "guildProfileGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild profile guild ids"
        },
        "guildPruneGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed guild prune planning and execution"
        },
        "guildPruneIncludeRoleIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact role ID allowlist for optional reviewed guild prune cohort widening"
        },
        "guildSettingsGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild settings guild ids"
        },
        "guildTemplateGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for guild template guild ids"
        },
        "integrationGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for integration guild ids"
        },
        "integrationIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for integration ids"
        },
        "interactionChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for interaction channel ids"
        },
        "inviteCreationChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact direct guild-channel ID allowlist for reviewed finite invite creation"
        },
        "inviteRoleIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact role ID allowlist for reviewed persistent invite role assignment"
        },
        "inviteGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for invite guild ids"
        },
        "mentionUserIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for mention user ids"
        },
        "memberDirectoryGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for member directory guild ids"
        },
        "nicknameGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for nickname guild ids"
        },
        "memberRoleGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for member role guild ids"
        },
        "memberRoleIds": {
          "minItems": 0,
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for member role ids"
        },
        "memberVerificationGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact guild ID allowlist for reviewed member verification-bypass changes"
        },
        "memberVoiceChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for member voice channel ids"
        },
        "memberVoiceGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for member voice guild ids"
        },
        "messageForwardSourceChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for message forward source channel ids"
        },
        "messageForwardTargetChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for message forward target channel ids"
        },
        "nativeInteractionChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for native interaction channel ids"
        },
        "nativeInteractionGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for native interaction guild ids"
        },
        "nativeInteractionUserIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for native interaction user ids"
        },
        "onboardingGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for onboarding guild ids"
        },
        "protectedUserIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for protected user ids"
        },
        "pinChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for pin channel ids"
        },
        "pollChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for poll channel ids"
        },
        "reactionChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for reaction channel ids"
        },
        "permissionOverwriteChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for permission overwrite channel ids"
        },
        "permissionSyncChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact direct child channel ID allowlist for reviewed parent-category permission synchronization"
        },
        "roleCreationGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for role creation guild ids"
        },
        "roleConfigurationIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for role configuration ids"
        },
        "roleDeletionIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for role deletion ids"
        },
        "roleOrderingGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for role ordering guild ids"
        },
        "scheduledEventGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for scheduled event guild ids"
        },
        "soundboardGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for soundboard guild ids"
        },
        "soundboardPlaybackChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact ordinary voice-channel ID allowlist for guarded soundboard playback"
        },
        "soundboardPlaybackSourceGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact custom-sound source guild ID allowlist for guarded soundboard playback"
        },
        "stageChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for stage channel ids"
        },
        "threadParentIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for thread parent ids"
        },
        "threadGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for thread guild ids"
        },
        "threadIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for thread ids"
        },
        "threadMemberUserIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for thread member user ids"
        },
        "welcomeScreenGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for welcome screen guild ids"
        },
        "webhookChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for webhook channel ids"
        },
        "webhookGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for webhook guild ids"
        },
        "webhookMessageChannelIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact direct text or announcement channel ID allowlist for privately credentialed Incoming-webhook message access"
        },
        "widgetSettingsGuildIds": {
          "minItems": 0,
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[0-9]{1,20}$"
          },
          "description": "Exact Discord ID allowlist for widget settings guild ids"
        }
      },
      "additionalProperties": false,
      "description": "Exact per-feature Discord ID and HTTPS origin allowlists"
    },
    "storage": {
      "default": {},
      "type": "object",
      "properties": {
        "applicationEmojiRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Owned local roots for application emoji roots"
        },
        "attachmentRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Owned local roots for attachment roots"
        },
        "auditFile": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Absolute path for the content-free activity log"
        },
        "botProfileRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Canonical process-owned roots for reviewed current-bot avatar and banner images"
        },
        "guildExpressionRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Owned local roots shared by guild-expression creation and reviewed role-icon images"
        },
        "inviteCapabilityRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Canonical process-owned roots for exclusive private invite capability files"
        },
        "scheduledEventRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Owned local roots for scheduled event roots"
        },
        "soundboardRoots": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "description": "Owned local roots for soundboard roots"
        },
        "webhookCredentialRoot": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096,
          "description": "Canonical process-owned 0700 root for exact-ID webhook credential files with stable 0600 custody"
        }
      },
      "additionalProperties": false,
      "description": "Local content-free activity and owned-file paths"
    },
    "tools": {
      "type": "object",
      "properties": {
        "surface": {
          "type": "string",
          "enum": [
            "full",
            "progressive"
          ],
          "description": "MCP tool discovery surface"
        },
        "toolsets": {
          "minItems": 1,
          "maxItems": 72,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "activity",
              "application-commands",
              "application-emojis",
              "application-entitlement-changes",
              "application-monetization",
              "application-security",
              "announcement-crossposts",
              "announcement-subscriptions",
              "attachments",
              "audit-logs",
              "automod",
              "bans",
              "bot-profile",
              "bulk-bans",
              "channel-creation",
              "channel-deletion",
              "channel-cloning",
              "channel-metadata",
              "channel-ordering",
              "connector",
              "coordination",
              "deletion",
              "direct-messages",
              "embed-messages",
              "forum-posts",
              "forum-tags",
              "gateway",
              "guild-blueprints",
              "guild-community",
              "guild-departure",
              "guild-expressions",
              "guild-incidents",
              "guild-profile",
              "guild-prunes",
              "guild-scaffolds",
              "guild-settings",
              "guild-templates",
              "guilds",
              "integrations",
              "interactions",
              "invites",
              "linked-roles",
              "member-nicknames",
              "member-roles",
              "member-verification",
              "members",
              "message-forwarding",
              "message-writes",
              "messages",
              "moderation",
              "native-interactions",
              "observability",
              "onboarding",
              "permission-overwrites",
              "permission-sync",
              "permissions",
              "pins",
              "polls",
              "role-configuration",
              "role-creation",
              "role-deletion",
              "role-ordering",
              "roles",
              "scheduled-events",
              "soundboard",
              "stage-instances",
              "thread-governance",
              "threads",
              "voice-moderation",
              "welcome-screen",
              "webhooks",
              "widget-settings"
            ]
          },
          "description": "Canonical MCP toolset selection"
        }
      },
      "required": [
        "surface",
        "toolsets"
      ],
      "additionalProperties": false,
      "description": "Advertised MCP tool surface"
    }
  },
  "required": [
    "capabilities",
    "credential",
    "gateway",
    "identity",
    "limits",
    "name",
    "observability",
    "readScope",
    "runtime",
    "schemaVersion",
    "scopes",
    "storage",
    "tools"
  ],
  "additionalProperties": false,
  "description": "Strict non-secret configuration for guildcontrol",
  "title": "guildcontrol configuration",
  "$id": "https://raw.githubusercontent.com/j-256/guildcontrol/main/guildcontrol.config.schema.json"
}
