Find Discord Tools
Immutable Catalog Entry
This descriptor comes from the active versioned Portal catalog.
- Contract tier:
agent_ready - Risk:
read - Catalog version:
discord-2026.07.12.3 - Descriptor hash:
fd92b7592be432edb71a5b8c3a436ac99fd4293b3db9d8507458fda2e3bef738
Use this when you need ranked tools for a multi-word task or alias. This searches the deterministic catalog in memory through Discord's API and returns compact ranked matches with risk, category, tier, and next action. It requires an authenticated MAD MCP Portal request, but does not contact Discord.
Request Body
{
"jsonrpc": "2.0",
"id": "discord-find-tools-example",
"method": "tools/call",
"params": {
"name": "discord.find_tools",
"arguments": {
"query": "query_example",
"risk": "",
"limit": 1,
"category": "category_example",
"include_legacy": ""
}
}
}
Arguments Schema
{
"type": "object",
"title": "find_tools input",
"required": [
"query"
],
"properties": {
"risk": {
"enum": [
"",
"read",
"write",
"destructive"
],
"type": "string",
"title": "Risk",
"default": "",
"description": "Optional risk filter: read, write, or destructive."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 8,
"description": "Maximum records or matches, expressed as a positive decimal string unless typed as integer."
},
"query": {
"type": "string",
"title": "Query",
"description": "Punctuation-normalized multi-token search text; all terms must match."
},
"category": {
"type": "string",
"title": "Category",
"default": "",
"description": "Optional exact manifest category filter; empty includes every category."
},
"include_legacy": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string"
}
],
"title": "Include Legacy",
"default": false,
"description": "When true, include legacy matches; hidden tools remain excluded."
}
},
"description": "Validated input for the Discord MCP find_tools tool."
}
Output Schema
{
"oneOf": [
{
"type": "object",
"required": [
"ok",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"count": {
"type": [
"integer",
"null"
],
"description": "Provider data field count returned by find_tools."
},
"query": {
"type": [
"string",
"null"
],
"description": "Provider data field query returned by find_tools."
},
"filters": {
"type": [
"object",
"null"
],
"description": "Provider data field filters returned by find_tools.",
"additionalProperties": true
},
"matches": {
"type": "array",
"items": {},
"description": "Provider data field matches returned by find_tools."
}
},
"description": "compact ranked matches with risk, category, tier, and next action",
"additionalProperties": true
},
"meta": {
"type": "object",
"required": [
"duration_ms",
"rate_limit",
"warnings"
],
"properties": {
"guild_id": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"thread_id": {
"type": "string"
},
"channel_id": {
"type": "string"
},
"rate_limit": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string"
},
"duration_ms": {
"type": "integer",
"minimum": 0
}
},
"description": "Safe execution metadata containing no credentials or raw headers.",
"additionalProperties": true
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"error",
"meta"
],
"properties": {
"ok": {
"const": false
},
"meta": {
"type": "object",
"required": [
"duration_ms",
"rate_limit",
"warnings"
],
"properties": {
"guild_id": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"thread_id": {
"type": "string"
},
"channel_id": {
"type": "string"
},
"rate_limit": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string"
},
"duration_ms": {
"type": "integer",
"minimum": 0
}
},
"description": "Safe execution metadata containing no credentials or raw headers.",
"additionalProperties": true
},
"error": {
"type": "object",
"required": [
"type",
"message"
],
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
},
"diagnostics": {
"type": "object",
"additionalProperties": true
},
"required_perms": {
"type": "array",
"items": {
"type": "string"
}
},
"discord_error_code": {
"type": "integer"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"title": "Discord MCP provider result",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Normalized success or semantic-error response; ok=false is a failed call."
}
Code Examples
- cURL
- Node.js
- Python
curl -X POST 'https://portal.madpanda3d.com/api/mcp' \
-H 'Authorization: Bearer mad_live_***' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": "discord-find-tools-example",
"method": "tools/call",
"params": {
"name": "discord.find_tools",
"arguments": {
"query": "query_example",
"risk": "",
"limit": 1,
"category": "category_example",
"include_legacy": ""
}
}
}'
const response = await fetch('https://portal.madpanda3d.com/api/mcp', {
method: 'POST',
headers: {
Authorization: 'Bearer mad_live_***',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": "discord-find-tools-example",
"method": "tools/call",
"params": {
"name": "discord.find_tools",
"arguments": {
"query": "query_example",
"risk": "",
"limit": 1,
"category": "category_example",
"include_legacy": ""
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://portal.madpanda3d.com/api/mcp'
headers = {
'Authorization': 'Bearer mad_live_***',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": "discord-find-tools-example",
"method": "tools/call",
"params": {
"name": "discord.find_tools",
"arguments": {
"query": "query_example",
"risk": "",
"limit": 1,
"category": "category_example",
"include_legacy": ""
}
}
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())
Example Responses
- 200 Success
- 502 Upstream Error
{
"ok": true,
"message": "Tool discord.find_tools executed successfully.",
"note": "Response shape varies by MCP tool. Inspect live responses for exact fields."
}
{
"ok": false,
"classification": "upstream_http_error",
"message": "Upstream MCP returned a non-success status."
}