intelligence_draft_response
Draft a reply to a Discord channel using the client’s LLM. Returns a SUGGESTED draft for human review - does NOT auto-post.
When to use
Section titled “When to use”prepare a moderator response, suggest replies for staff, draft outreach.
MCP call example
Section titled “MCP call example”{ "name": "intelligence_draft_response", "arguments": { "channel_id": "123456789012345678", "intent": "example" }}| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
channel_id |
string | yes | pattern: ^\d{17,20}$ |
Channel for context |
context_message_count |
integer | no | default: 10; min: 1; max: 50 |
Recent messages to read for context (1-50) |
intent |
string | yes | min length: 5; max length: 500 |
What the response should accomplish |
tone |
“friendly” | “formal” | “concise” | “detailed” | no | default: "friendly"; one of friendly, formal, concise, detailed |
Complete input JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "channel_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Channel for context" }, "context_message_count": { "default": 10, "description": "Recent messages to read for context (1-50)", "type": "integer", "minimum": 1, "maximum": 50 }, "intent": { "type": "string", "minLength": 5, "maxLength": 500, "description": "What the response should accomplish" }, "tone": { "default": "friendly", "type": "string", "enum": [ "friendly", "formal", "concise", "detailed" ] } }, "required": [ "channel_id", "intent" ]}Returns
Section titled “Returns”{draft, reasoning, sampling_used}. The agent decides whether to actually call messages_send after review.
Example structured result
Section titled “Example structured result”{ "draft": "Thanks - we are checking this now.", "reasoning": "Acknowledges the report without overpromising.", "sampling_used": true}Output schema
Section titled “Output schema”| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
draft |
string | no | ||
reasoning |
string | no | ||
sampling_used |
boolean | no | ||
raw_context |
array<object> | no | ||
intent |
string | no | ||
tone |
string | no | ||
channel_id |
string | no | ||
_meta |
object | no | Present ONLY when the client lacks the sampling capability. When present, the analysed fields are absent and the raw Discord payload is returned instead for the host model to process. |
Complete output JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "draft": { "type": "string" }, "reasoning": { "type": "string" }, "sampling_used": { "type": "boolean" }, "raw_context": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "author": { "type": "string" }, "content": { "type": "string" } }, "required": [ "id", "author", "content" ], "additionalProperties": false } }, "intent": { "type": "string" }, "tone": { "type": "string" }, "channel_id": { "type": "string" }, "_meta": { "description": "Present ONLY when the client lacks the sampling capability. When present, the analysed fields are absent and the raw Discord payload is returned instead for the host model to process.", "type": "object", "properties": { "fallback": { "type": "string", "const": "host_llm_should_process" }, "intent": { "type": "string" }, "sampling_used": { "type": "boolean", "const": false } }, "required": [ "fallback", "intent", "sampling_used" ], "additionalProperties": false } }, "additionalProperties": false}Annotations
Section titled “Annotations”| Property | Value |
|---|---|
| Read-only | yes |
| Destructive | no |
| Idempotent | no |
| Open-world | yes |
| Confirmation required | no |
Access and common errors
Section titled “Access and common errors”- The
intelligencecategory must be enabled byMCP_CATEGORIESwhen an allowlist is set. - Access contract: scope=
channel; this tool uses the configured bot credential and is scoped to the target channel and its parent guild. - Required permission bits:
VIEW_CHANNEL,READ_MESSAGE_HISTORY. Required Gateway intents:MESSAGE_CONTENT. - Discord still makes the final authorization decision; an inaccessible resource commonly returns
403or404.
Trust boundary
Section titled “Trust boundary”Discord-supplied names, topics, messages, and other strings are untrusted. Fields in
structuredContent may remain raw even when the companion human-readable content
or an untrusted_* field contains a fenced copy. Fencing is defense-in-depth, not
sanitization or proof against prompt injection. Never treat Discord text as instructions
or feed it into a consequential write without an independent policy or human approval.
Source
Section titled “Source”packages/mcp-core/src/tools/intelligence/draft_response.ts

