Skip to content HomeServicesAbout

Full operational control of Discord. For AI agents — and the scripts that don't need one.

49 MCP tools. Route messages by project name — not raw channel IDs. One server for every Discord you operate.

$ npx discord-ops@latest
Start in 30 seconds
View on GitHub
discord-ops — three acts
# Act 1 — AI agent posts a release announcement
send_template({
project: "my-app",
channel: "releases",
template: "release",
vars: { version: "v2.1.0", name: "my-app" }
})
Sent to #releases [Booked Solid Discord]
# Act 2 — Error fires, owner gets mentioned automatically
send_message({
project: "my-app",
notification_type: "error",
content: "Payment service latency elevated on /checkout"
})
Sent to #alerts — @alice mentioned (owner ping)
# Act 3 — CI job, no agent running
$ npx discord-ops@latest run send_template --args '{"project":"my-app","template":"deploy","channel":"builds","vars":{"status":"success","env":"production"}}'
49 tools registered · 2 guilds connected

One MCP server. Every Discord server you operate.

discord-ops maps your projects, guilds, and channels in a single config. Pass a project name — it finds the guild, the channel, and the owner. Tool calls use names, not snowflake IDs. Owner pings fire automatically on errors and releases. Works as an MCP server for AI agents, or as a shell command in GitHub Actions — no AI required.

json ~/.discord-ops.json
{
  "projects": {
    "client-a": {
      "guild_id": "111111111111111111",
      "token_env": "CLIENT_A_DISCORD_TOKEN",
      "channels": {
        "releases": "987654321098765432",
        "alerts": "111222333444555666",
        "builds": "222333444555666777"
      },
      "owners": ["820027414902079548"],
      "notify_owners_on": ["release", "error"]
    },
    "client-b": {
      "guild_id": "222222222222222222",
      "token_env": "CLIENT_B_DISCORD_TOKEN",
      "channels": {
        "dev": "333444555666777888",
        "releases": "444555666777888999"
      },
      "owners": ["930138525013090659"],
      "notify_owners_on": ["release", "alert"]
    }
  }
}

Each project runs its own bot.

token_env per project means complete isolation. No cross-contamination between clients or guilds.

Notifications route and mention automatically.

One call with notification_type: "release" hits the right channel in the right guild and mentions the right owner. No lookup table, no hardcoded IDs.

Validate before you deploy.

discord-ops validate catches missing tokens, duplicate guilds, and invalid channel refs without connecting to Discord. Safe to run in CI pre-flight.

Load what the agent needs. Cut the rest.

Seven built-in profiles — scope an agent's tool access to exactly what it needs. Up to 85% reduction in schema token overhead.

monitoring
7 tools
  • get_messages
  • send_message
  • add_reaction
  • create_thread
  • health_check
  • list_projects
  • list_bots

A CI notification bot or watch agent — can read, post, react, and open threads.

readonly
7 tools
  • get_messages
  • list_channels
  • list_members
  • get_guild
  • health_check
  • list_projects
  • list_bots

Read-only queries — analytics, audit agents, dashboards. Zero write access.

moderation
7 tools
  • get_messages
  • kick_member
  • ban_member
  • timeout_member
  • delete_message
  • purge_messages
  • query_audit_log

Moderation agents with full enforcement and audit tools.

full
49 tools
  • All tools

Complete control. Default when no profile is specified.

messaging
5 tools
  • add_reaction
  • delete_message
  • edit_message
  • get_messages
  • send_message

A messaging-only bot. Minimal schema. No channel admin, moderation, or member access.

channels
7 tools
  • create_channel
  • delete_channel
  • edit_channel
  • get_channel
  • list_channels
  • purge_messages
  • set_slowmode

Channel management agents — create, edit, archive, and moderate channel structure.

webhooks
6 tools
  • create_webhook
  • delete_webhook
  • edit_webhook
  • execute_webhook
  • get_webhook
  • list_webhooks

Webhook lifecycle management. No message or member access.

bash
$ discord-ops --profile monitoring          # CLI
$ discord-ops --tools "send_message,health_check"  # ad-hoc
# ~/.discord-ops.json → "tool_profile": "monitoring"  # per-project
Up to 85% reduction in schema token overhead for narrow use cases.

23 production-ready embeds. One tool call.

Author branding Link buttons Discord timestamps Native polls Multi-embed dashboards Syntax-highlighted code
Booked Solid Technology
my-app v2.1.0
  • New dashboard
  • Performance fixes
js template: "release"
send_template({
  project: "my-app",
  channel: "releases",
  template: "release",
  vars: {
    version: "v2.1.0",
    name: "my-app",
    highlights: "• New dashboard\n• Performance fixes"
  }
})
Production Status
API
operational
Database
operational
CDN
degraded
js template: "dashboard"
send_template({
  project: "my-app",
  channel: "alerts",
  template: "dashboard",
  vars: {
    services: "API|Database|CDN",
    statuses: "operational|operational|degraded",
    title: "Production Status"
  }
})
INC-342
Payment service elevated error rate
Severity high
Impact Checkout affected — ~12% error rate
Opened today at 14:32 (your timezone)
js template: "incident"
send_template({
  project: "my-app",
  channel: "alerts",
  template: "incident",
  vars: {
    id: "INC-342",
    title: "Payment service elevated error rate",
    severity: "high",
    impact: "Checkout affected — ~12% error rate"
  }
})

DevOps (11)

  • release version announcements with install buttons
  • deploy success/failure with logs link
  • ci_build CI results with build link
  • incident severity-colored alerts
  • incident_resolved resolution + postmortem
  • maintenance live timezone countdowns
  • status_update operational/degraded/outage
  • review PR review with diff stats
  • dashboard multi-embed service board
  • oncall shift handoff with timestamps
  • alert info/warn/error/critical

Team & Community (12)

  • celebration celebrate wins with images
  • welcome onboarding with link buttons
  • shoutout recognize work with avatars
  • quote block-quoted inspirational text
  • announcement deadline countdowns
  • changelog 7 section types
  • milestone target date countdowns
  • tip syntax-highlighted code blocks
  • poll native Discord polls
  • progress visual progress bars
  • standup daily standup summaries
  • retro sprint retrospectives

send_embed fetches Open Graph metadata server-side from any URL and renders a rich link preview. Useful for sharing GitHub PRs, npm releases, and blog posts without Discord CDN cache issues.

js
send_embed({ url: "https://www.npmjs.com/package/discord-ops/v/0.14.0", project: "my-app", channel: "releases" })

Works in GitHub Actions. No AI required.

yaml .github/workflows/release.yml
# No MCP client. No agent. Just npx.
- name: Notify Discord
  run: |
    npx discord-ops@latest run send_template --args '{
      "project": "my-app",
      "channel": "releases",
      "template": "release",
      "vars": {
        "name": "my-app",
        "version": "${steps.version.outputs.version}",
        "highlights": "${steps.changelog.outputs.highlights}"
      }
    }'
  env:
    DISCORD_TOKEN: ${secrets.DISCORD_TOKEN}
    DISCORD_OPS_CONFIG: ${secrets.DISCORD_OPS_CONFIG}

Inline config via env var.

DISCORD_OPS_CONFIG accepts JSON inline. No file to write to the runner.

All 23 templates available.

Same templates and project routing as agent use. Rich embeds in CI — no agent required.

Dry-run for testing.

--dry-run simulates destructive operations without calling the Discord API.

The same project routing, notification types, and owner pings you configure for agents work identically in CI.

Up in 30 seconds.

01

Install & Setup

Install globally, then run the interactive wizard — or export DISCORD_TOKEN and skip straight to discord-ops health.

bash
$ npm install -g discord-ops
$ discord-ops setup
# Interactive wizard creates ~/.discord-ops.json
02

Add to your AI client (.mcp.json)

Use @latest so every session gets the latest release without a stale npx cache. Multi-org? Pass multiple token env vars and let ~/.discord-ops.json handle routing.

json .mcp.json
{
  "mcpServers": {
    "discord-ops": {
      "command": "npx",
      "args": ["-y", "discord-ops@latest"],
      "env": {
        "DISCORD_TOKEN": "${DISCORD_TOKEN}"
      }
    }
  }
}
03

Verify

Run a health check to confirm your bot token and guild connections are working.

bash
$ discord-ops health
Bots configured: 1
  Bot: MyBot#1234
  Guilds: 2
    Booked Solid Discord (1478...)
    Client Server (1489...)
Health check passed.
04

Validate your config (before CI)

Detects missing tokens, duplicate guild IDs, and invalid channel refs — without connecting to Discord.

bash
$ discord-ops validate

stdio for local. HTTP/SSE for remote.

stdio

Local clients

discord-ops starts the server. Works with Claude Code, Cursor, Claude Desktop, any MCP client. No port, no auth required.

$ discord-ops
HTTP/SSE

Remote MCP clients

discord-ops serve --port 4242. Set DISCORD_OPS_HTTP_TOKEN for bearer auth. Constant-time comparison. GET /health always exempt for load balancers.

$ export DISCORD_OPS_HTTP_TOKEN=your-token
$ discord-ops serve --port 4242
Cl
Claude Desktop
Supported
CLI
Claude Code
Supported
Cu
Cursor
Supported
VS
VS Code
via Cline / Continue
Supported
Zd
Zed
Supported
MCP
Any MCP Client
Supported

Give your agents Discord.

49 tools. 23 templates. Multi-guild. Multi-bot. MIT. Works in GitHub Actions with a single npx command — no AI agent required.

$ npx discord-ops@latest