Skip to content

intelligence_moderate_content

Intelligence Read only

Apply a plain-language moderation policy to a piece of text using the client’s LLM. No Discord API call - purely a moderation utility.

pre-check user-submitted content; second-opinion on AutoMod decisions; classify ambiguous messages.

{
"name": "intelligence_moderate_content",
"arguments": {
"content": "Hello from discord-mcp"
}
}
Field Type Required Constraints Description
content string yes min length: 1; max length: 4000 Text to moderate
policy string no default: "Reject hate speech, doxxing, spam, and explicit content."; min length: 10; max length: 2000 Moderation policy in plain language
Complete input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"content": {
"type": "string",
"minLength": 1,
"maxLength": 4000,
"description": "Text to moderate"
},
"policy": {
"default": "Reject hate speech, doxxing, spam, and explicit content.",
"description": "Moderation policy in plain language",
"type": "string",
"minLength": 10,
"maxLength": 2000
}
},
"required": [
"content"
]
}

{decision: "allow"|"flag"|"block", reasons[], confidence, sampling_used}.

{
"decision": "allow",
"reasons": [],
"confidence": 0.95,
"sampling_used": true
}
Field Type Required Constraints Description
decision “allow” | “flag” | “block” no one of allow, flag, block
reasons array<string> no
confidence number no min: 0; max: 1
sampling_used boolean no
content string no
policy 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": {
"decision": {
"type": "string",
"enum": [
"allow",
"flag",
"block"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string"
}
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sampling_used": {
"type": "boolean"
},
"content": {
"type": "string"
},
"policy": {
"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
}
Property Value
Read-only yes
Destructive no
Idempotent yes
Open-world yes
Confirmation required no
  • The intelligence category must be enabled by MCP_CATEGORIES when an allowlist is set.
  • Access contract: scope=external; this tool uses no Discord credential (local or external operation) and is scoped to an external provider response.
  • 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.

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.

packages/mcp-core/src/tools/intelligence/moderate_content.ts