Skip to content

discord_intent_plan

Meta Read only

Normalize a small, explicit Discord outcome into a deterministic, reviewable plan.

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).

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.

{
"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"
]
}

A target-bound step list, aggregated access requirements, warnings, and a stable SHA-256 plan digest.

{
"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"
]
}
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
}
Property Value
Read-only yes
Destructive no
Idempotent yes
Open-world no
Confirmation required no
  • The meta category remains available even when MCP_CATEGORIES is 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 403 or 404.

packages/mcp-core/src/tools/meta/discord_intent_plan.ts