discord_intent_plan
Normalize a small, explicit Discord outcome into a deterministic, reviewable plan.
Supported intents
Section titled “Supported intents”lock_channel, announce, verify, and lock_and_announce (natural-language separators and the bounded Vietnamese aliases khóa kênh, thông báo, xác minh are accepted).
Safety
Section titled “Safety”This tool is strictly read-only. Its planner performs no Discord REST call, grants no approval, and never executes the returned steps; normal server scope middleware may perform a read-only target lookup.
MCP call example
Section titled “MCP call example”{ "name": "discord_intent_plan", "arguments": { "intent": "example", "guild_id": "123456789012345678", "channel_id": "123456789012345678" }}| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
intent |
string | yes | min length: 1; max length: 80 |
One supported explicit Discord intent. |
guild_id |
string | yes | pattern: ^\d{17,20}$ |
Target guild snowflake. |
channel_id |
string | yes | pattern: ^\d{17,20}$ |
Target channel snowflake. |
announcement |
string | no | max length: 2000 |
Announcement text for announce intents. |
allow |
string | no | pattern: ^\d+$ |
Allow bitfield for a reviewed channel overwrite. |
deny |
string | no | pattern: ^\d+$ |
Deny bitfield for a reviewed channel overwrite. |
Complete input JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "intent": { "type": "string", "minLength": 1, "maxLength": 80, "description": "One supported explicit Discord intent." }, "guild_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Target guild snowflake." }, "channel_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Target channel snowflake." }, "announcement": { "description": "Announcement text for announce intents.", "type": "string", "maxLength": 2000 }, "allow": { "description": "Allow bitfield for a reviewed channel overwrite.", "type": "string", "pattern": "^\\d+$" }, "deny": { "description": "Deny bitfield for a reviewed channel overwrite.", "type": "string", "pattern": "^\\d+$" } }, "required": [ "intent", "guild_id", "channel_id" ]}Returns
Section titled “Returns”A target-bound step list, aggregated access requirements, warnings, and a stable SHA-256 plan digest.
Example structured result
Section titled “Example structured result”{ "schema_version": "discord_intent_plan.v1", "status": "ready", "intent": "example", "target": { "guild_id": "123456789012345678", "channel_id": "123456789012345678" }, "steps": [ { "id": "123456789012345678", "action": "prepare", "tool": "example", "purpose": "example", "args": {}, "access": { "auth": "example", "permissions": [ "example" ], "intents": [ "example" ], "scope": "example", "hierarchy": "example" }, "depends_on": [ "example" ], "requires_approval": true } ], "access": { "permissions": [ "example" ], "scopes": [ "example" ] }, "approval_boundary": "per_write", "verification_step_id": "123456789012345678", "plan_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000", "warnings": [ "example" ]}Output schema
Section titled “Output schema”| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
schema_version |
“discord_intent_plan.v1” | yes | ||
status |
“ready” | “needs_input” | “unsupported” | yes | one of ready, needs_input, unsupported |
|
intent |
string | null | yes | ||
target |
object | yes | ||
steps |
array<object> | yes | ||
access |
object | yes | ||
approval_boundary |
“per_write” | “none” | yes | one of per_write, none |
|
verification_step_id |
string | null | yes | ||
plan_digest |
string | yes | pattern: ^sha256:[a-f0-9]{64}$ |
|
warnings |
array<string> | yes |
Complete output JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "schema_version": { "type": "string", "const": "discord_intent_plan.v1" }, "status": { "type": "string", "enum": [ "ready", "needs_input", "unsupported" ] }, "intent": { "type": [ "string", "null" ] }, "target": { "type": "object", "properties": { "guild_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Discord guild (server) ID" }, "channel_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Discord channel ID (snowflake)" } }, "required": [ "guild_id", "channel_id" ], "additionalProperties": false }, "steps": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "action": { "type": "string", "enum": [ "prepare", "write", "verify" ] }, "tool": { "type": "string" }, "purpose": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "access": { "type": "object", "properties": { "auth": { "type": "string" }, "permissions": { "type": "array", "items": { "type": "string" } }, "intents": { "type": "array", "items": { "type": "string" } }, "scope": { "type": "string" }, "hierarchy": { "type": "string" } }, "required": [ "auth", "permissions", "intents", "scope", "hierarchy" ], "additionalProperties": false }, "depends_on": { "type": "array", "items": { "type": "string" } }, "requires_approval": { "type": "boolean" } }, "required": [ "id", "action", "tool", "purpose", "args", "access", "depends_on", "requires_approval" ], "additionalProperties": false } }, "access": { "type": "object", "properties": { "permissions": { "type": "array", "items": { "type": "string" } }, "scopes": { "type": "array", "items": { "type": "string" } } }, "required": [ "permissions", "scopes" ], "additionalProperties": false }, "approval_boundary": { "type": "string", "enum": [ "per_write", "none" ] }, "verification_step_id": { "type": [ "string", "null" ] }, "plan_digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }, "warnings": { "type": "array", "items": { "type": "string" } } }, "required": [ "schema_version", "status", "intent", "target", "steps", "access", "approval_boundary", "verification_step_id", "plan_digest", "warnings" ], "additionalProperties": false}Annotations
Section titled “Annotations”| Property | Value |
|---|---|
| Read-only | yes |
| Destructive | no |
| Idempotent | yes |
| Open-world | no |
| Confirmation required | no |
Access and common errors
Section titled “Access and common errors”- The
metacategory remains available even whenMCP_CATEGORIESis restricted. - Access contract: scope=
local; this tool uses no Discord credential (local or external operation) and is scoped to the local compiler/validator only. - No named Discord permission bit is asserted by this contract.
- Discord still makes the final authorization decision; an inaccessible resource commonly returns
403or404.
Source
Section titled “Source”packages/mcp-core/src/tools/meta/discord_intent_plan.ts

