MCP Tools (mcp_*)

This page is for application developers using Discord MCP-local tools that are available to normal, non-privileged apps.

These tools are part of the Discord MCP service itself. They do not proxy directly to Discord.

Access and Safety #

Most mcp_* tools require:

  • X-Owner-Access: 1 or X-Owner-Access: true

One exception exists:

  • mcp_get_access_context is callable without owner access.

Without owner access, the other mcp_* tools are hidden from /v1/tools/list and denied at execution.

X-Allowed-Methods behavior #

If X-Allowed-Methods is set, the Discord MCP applies it to mcp_* tools too:

  • read operations: require GET or POST
  • write operations: require POST

Operational mapping:

  • Read operations:
  • mcp_get_settings
  • mcp_get_runtime_settings
  • mcp_get_provider_settings
  • mcp_get_access_context
  • mcp_list_editable_options
  • mcp_validate_tool_call
  • Write operations:
  • mcp_set_option
  • mcp_set_provider_option

Tool Reference #

mcp_get_settings #

Read current app-specific settings.

  • Arguments: none

Example (/v1/tools/call):

{
  "name": "mcp_get_settings",
  "arguments": {}
}

mcp_get_runtime_settings #

Read the currently loaded runtime settings snapshot.

  • Arguments: none

Example:

{
  "name": "mcp_get_runtime_settings",
  "arguments": {}
}

mcp_get_access_context #

Debug helper: returns the evaluated access context for the current request/session.

  • Arguments: none
  • Includes:
  • app_id
  • owner_access
  • privileged_call
  • privileged_application
  • permission_bits
  • privileged_intents
  • current_user
  • current_guild
  • current_channel
  • current_message
  • allowed_mentions
  • target_users, target_guilds, target_channels
  • allowed_methods, allowed_paths
  • cache_max_ttl

Example:

{
  "name": "mcp_get_access_context",
  "arguments": {}
}

mcp_get_provider_settings #

Read provider configuration visible to the current app.

  • Arguments:
  • provider (required): provider name such as alibaba or discord
  • Returns:
  • service-level defaults for that provider
  • app-specific overrides for that provider
  • the merged effective settings

Example:

{
  "name": "mcp_get_provider_settings",
  "arguments": {
    "provider": "alibaba"
  }
}

mcp_validate_tool_call #

Dry-run preflight helper for model self-correction loops and operator debugging.

  • Arguments:
  • name (required): target tool name
  • arguments (optional): tool arguments object
  • Behavior:
  • runs the Discord MCP access/method/permission checks
  • runs route/target preflight for Discord tools
  • does not execute upstream Discord mutations

Example:

{
  "name": "mcp_validate_tool_call",
  "arguments": {
    "name": "delete_message",
    "arguments": {
      "guild_id": "123456789012345678",
      "channel_id": "223456789012345678",
      "message_id": "323456789012345678"
    }
  }
}

mcp_list_editable_options #

List the user-editable app options supported by mcp_set_option, with short format guidance.

  • Arguments: none

Example:

{
  "name": "mcp_list_editable_options",
  "arguments": {}
}

mcp_set_option #

Set one user-editable option for the current application.

  • Arguments:
  • option (required): one of:
    • notes
    • dm_prefix
    • default_allowed_methods
    • default_allowed_paths
    • default_target_users
    • default_target_guilds
    • default_target_channels
    • default_permission_bits
    • default_cache_max_ttl
    • event_webhook
  • value (required): string/number/boolean
  • value: "default" deletes the option

Example (notes):

{
  "name": "mcp_set_option",
  "arguments": {
    "option": "notes",
    "value": "On-call app for moderation workflows"
  }
}

Example (default_allowed_methods):

{
  "name": "mcp_set_option",
  "arguments": {
    "option": "default_allowed_methods",
    "value": "GET,POST"
  }
}

Example (default_permission_bits):

{
  "name": "mcp_set_option",
  "arguments": {
    "option": "default_permission_bits",
    "value": "8192"
  }
}

mcp_set_provider_option #

Set one app-specific provider override.

  • Arguments:
  • provider (required)
  • option (required)
  • value (required)
  • value: "default" deletes the override field

Use this when one application needs its own token, model, webhook URL, or other provider field without changing the global default for the whole Discord MCP service.

Whether a field can be edited here depends on the provider. Some providers allow every app-specific field, while others only allow a small safe subset.

Example:

{
  "name": "mcp_set_provider_option",
  "arguments": {
    "provider": "alibaba",
    "option": "model",
    "value": "your-image-model"
  }
}

Related Docs #