# OrygnsCode/Omnicord [Health: Active]

**Category:** 💬 Communication  
**Repository:** https://github.com/OrygnsCode/Omnicord  
**GitHub Stars:** 7  
**npm Downloads (last month):** 752  
**Views:** 8  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/orygnscode-omnicord

## Description
Hands your AI an entire Discord server: 148 tools covering chat, moderation, automod, events, and full administration, up to building a complete community server from one paragraph. One-command guided setup, and every destructive action previews and waits for your confirmation.

## Tools
Capabilities this server exposes over MCP:

- **get_rate_limit_status** — How rate limiting has been going: how many times Discord asked Omnicord to slow down (the request layer waits automatically), and the invalid-request counter that matters because Discord temporarily bans an IP after 10,000 invalid responses in ten minutes. Useful when calls feel slow.
- **get_bot_info** — Identity and status of a connected Discord bot: bot user, application, guild count, enabled gateway intents, and the Omnicord version. With more than one bot configured, pass bot to pick which (list_servers shows the configured bots). Use run_setup_check for a full health check with fix instructions.
- **run_setup_check** — End-to-end health check of the Omnicord setup: token presence and validity, privileged gateway intent toggles, guild count against Discord's verification thresholds, and default guild membership. Every failed check comes with instructions for fixing it. With more than one bot configured, pass bot to check a specific one. Run this first when anything misbehaves.
- **get_server_overview** — Structured snapshot of a server: identity, member counts, boost status, channel outline grouped by category, and role count. The natural first call when starting work on a server.
- **list_channels** — All channels in a server grouped by category, with type and topic. Filter by type: text, voice, forum, stage, announcement, category.
- **list_roles** — All roles in a server, highest first, with color, position, and a plain-language digest of their key permissions.
- **read_messages** — Recent messages from a channel as a digest: author, time, content, attachments, reactions, and resolved reply references. Returns oldest first. Use next_before to page further back.
- **search_messages** — Search the server's message history through Discord's native search index. Covers every channel the bot can read, or one channel if you name it, and looks inside embeds and polls, not just plain text. Matching is whole-word full text, not substring, so search for words rather than fragments. Filter by author, by what a message carries (image, link, file, and so on), or by pinned state, and order by newest first or by relevance.
- **search_members** — Find specific members by a name fragment, or list those holding a given role. For the whole roster use list_members; for one member's full profile use get_member; to turn a fuzzy name into an id use find. Name search uses Discord's member search; role filtering walks the member list and reports if it hit the paging cap.
- **get_member** — One member in detail: identity, nickname, roles by name, join date, and timeout state. Accepts a user ID or a name.
- **find** — Universal name resolver. Give it a name fragment and get ranked candidates across channels, roles, and members with their IDs. Use this when unsure what an entity is called or to grab an ID once and reuse it.
- **send_message** — Send a message to a channel, optionally as a reply or with embeds. For a private message to one person use send_dm; to post under a custom name and avatar use send_webhook_message; to send later use schedule_message. Mentions are suppressed by default; raise the mentions mode only deliberately. Supports dry_run.
- **forward_message** — Forward a message from one channel into another, the way the Discord client's forward does: the original travels along as a quoted snapshot. Works across channels in the server. An optional note is posted as its own message just before the forward, since Discord does not allow text on the forward itself.
- **create_channel** — Create a text, voice, forum, stage, announcement, or category channel, optionally inside a category. Permission overwrites come with the permissions tools in a later phase. Supports dry_run.
- **create_role** — Create a role from a vetted preset (none, member, moderator, admin) and/or an explicit list of permission names. Administrator is never granted by a preset; it must be spelled out explicitly. Supports dry_run.
- **assign_role** — Give a member a role. Preflights the bot's role hierarchy so the failure mode is an explanation, not a 403. Supports dry_run.
- **delete_message** — Delete one message. Safe to call directly: the first call deletes nothing and returns a preview plus a confirm_token, and the deletion only happens when the call is repeated with that token. Use this two-step flow to let the user approve through the conversation rather than telling them to delete things by hand in Discord. Supports dry_run.
- **list_reference_layouts** — Curated server blueprints to start from: vetted structures for common server kinds. Fetch one with get_reference_layout, adapt names and channels to the user's theme, then stage it with plan_server_build.
- **get_reference_layout** — One reference layout in full: the blueprint plus the reasoning behind its structure. Adapt it rather than applying it verbatim; the user's theme and wording should win.
- **plan_server_build** — Validate a blueprint against the live server and stage an ordered build plan. Checks Discord limits, name collisions, role references, feature requirements, and the bot's permissions, and reports every problem at once. Changes nothing. Compose the blueprint from the user's request, optionally starting from a reference layout. Existing channels and roles with matching names are reused, never duplicated.
- **execute_build_plan** — Execute a staged plan by plan_id, or pass a blueprint directly. Either way the blueprint is re-validated against the live server at this moment, then built in dependency order: roles, then categories, then channels, with private_to and read_only compiled into permission overwrites at creation. Strictly additive: existing entities are reused, nothing is deleted or modified. If a step fails, the run stops and the report says exactly what was created, what failed, and what was never attempted. Re-running after a fix resumes naturally because finished work is reused.
- **update_channel** — Edit a channel's name, topic, slowmode, NSFW flag, or category. Only passed fields change. Pass category "none" to move a channel out of its category. Supports dry_run.
- **delete_channel** — Delete a channel or category. Safe to call directly: the first call deletes nothing and returns a preview plus a confirm_token, and the deletion only happens when the call is repeated with that token. When the user asks to delete something, call this and relay the preview for their go-ahead instead of sending them to do it manually in Discord; the gate exists exactly so deletion can be approved through the conversation. Deleting a category leaves its channels in place, uncategorized.
- **update_role** — Edit a role's name, color, hoist, mentionable flag, or permissions. Passing preset and/or permissions replaces the role's permission set with the named bundle plus listed names. Only passed fields change. Supports dry_run.
- **delete_role** — Delete a role. Members holding it simply lose it; nothing else changes. Safe to call directly: the first call deletes nothing and returns a preview plus a confirm_token, and the deletion only happens when the call is repeated with that token. Prefer this gated flow over telling the user to delete the role manually.
- **edit_message** — Edit a message the bot itself sent. Discord does not allow editing anyone else's messages, no matter the permission level.
- **pin_message** — Pin a message in a channel. Needs the Pin Messages permission (split from Manage Messages in 2026). Channels hold at most 50 pins.
- **unpin_message** — Unpin a message. The message itself is untouched.
- **list_pinned_messages** — Pinned messages in a channel, newest pin first.
- **set_voice_channel_status** — Set the short status line shown on a voice channel, a note about what is happening in it right now, up to 500 characters. Pass an empty status to clear it. This is the live status, not the topic.
- **timeout_member** — Time a member out so they cannot talk, react, or join voice, for up to 28 days. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token applies the timeout. Relay the preview for the user's go-ahead. The reason lands in the audit log.
- **remove_timeout** — Lift an active timeout from a member early.
- **kick_member** — Remove a member from the server. They can rejoin with a new invite. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token performs the kick. Relay the preview for the user's go-ahead instead of doing nothing.
- **ban_member** — Ban a user from the server, optionally deleting their recent messages. Works on users who already left (pass their user ID). Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token performs the ban. Relay the preview for the user's go-ahead.
- **unban_member** — Lift a ban so the user can rejoin with an invite.
- **bulk_ban** — Ban up to 200 users at once by ID, for raid cleanup. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token performs the bans. Reports which bans succeeded and which failed.
- **list_bans** — Current bans with reasons, paged.
- **get_audit_log** — Discord's historical record of administrative actions: who did what, to what, when, and why. Use this to investigate what already happened; for activity as it happens use subscribe_events. Filter by action name (like channel_create, member_ban_add, message_delete) or by the acting user.
- **set_incident_actions** — Discord's raid-defense security actions for the whole server. Pause new invites, and pause DMs between members who are not friends, each for up to 24 hours, to lock the server down during a raid. Give a number of hours to pause, 0 to lift a pause, or omit a field to leave it unchanged. Called with neither field, it reports the current state, including any raid or DM spam Discord detected on its own.
- **add_reactions** — Add one or more reactions to a message in a single call. Takes unicode emoji directly or custom emoji by name.
- **remove_reaction** — Remove a reaction: the bot's own by default, or another user's (which needs Manage Messages).
- **clear_reactions** — Clear all reactions from a message, or all of one emoji. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token executes. Relay the preview for the user's go-ahead.
- **get_reactions** — Who reacted to a message with a given emoji.
- **create_poll** — Post a native Discord poll: a question, two to ten answers, and a duration of up to 32 days.
- **get_poll_results** — Current tallies for a poll message.
- **end_poll** — Close one of the bot's own polls early and finalize the results.
- **create_invite** — Create an invite link for a channel. Defaults are deliberate: expires in 24 hours, unlimited uses. A never-expiring invite must be asked for explicitly with max_age_seconds 0.
- **list_invites** — Active invites for the server or one channel.
- **get_invite** — Inspect an invite code: where it leads and how used it is.
- **delete_invite** — Revoke an invite link. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token revokes it.
- **list_webhooks** — Webhooks in the server or one channel. Tokens are never included.
- **create_webhook** — Create an incoming webhook on a channel. Webhooks post with any display name and avatar, which is how messages 'as someone' work legitimately.
- **update_webhook** — Rename a webhook, change its avatar, or move it to another channel.
- **delete_webhook** — Delete a webhook. Anything still posting through it stops working. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **send_webhook_message** — Post through a webhook with an optional display name and avatar override. Mentions are suppressed.
- **list_emojis** — Custom emojis in the server, with usage syntax.
- **create_emoji** — Upload a custom emoji from an image URL. Discord's limit for emoji files is 256 KB; png, jpeg, gif, and webp work.
- **update_emoji** — Rename a custom emoji.
- **delete_emoji** — Delete a custom emoji. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **list_events** — Scheduled community events (the kind members RSVP to), with type, time, status, and interest counts. For pending scheduled messages see list_scheduled_messages; for live event subscriptions see list_event_subscriptions.
- **get_event** — One scheduled event in detail.
- **create_event** — Create a Discord scheduled community event that members see on the events list and can mark interest in: a voice, stage, or external (in-person or off-platform) event. This is not for sending a message later (use schedule_message) or watching live activity (use subscribe_events). Voice and stage events need a channel; external events need a location and an end time.
- **update_event** — Edit a scheduled event's details, or move it through its lifecycle: status start makes it live, status end completes it.
- **cancel_event** — Cancel and remove a scheduled event. Interested members lose the listing. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token cancels it.
- **get_event_attendees** — Members who marked themselves interested in an event.
- **subscribe_events** — Watch the server live: start recording real-time activity as it happens (messages, joins and leaves, reactions, channel and role changes, bans, voice movement) into a buffer you then read with get_recent_events. Use this to observe what is going on now. It is not for scheduled community events (create_event) or timed messages (schedule_message). Available types: message_created, message_deleted, member_joined, member_left, reaction_added, reaction_removed, channel_created, channel_deleted, role_created, role_updated, role_deleted, ban_added, ban_removed, voice_state_changed.
- **get_recent_events** — Read and clear buffered events from a subscription, oldest first.
- **list_event_subscriptions** — Active event subscriptions and their buffer sizes.
- **unsubscribe_events** — Stop recording and discard a subscription's buffer.
- **create_thread** — Start a thread in a text or announcement channel: standalone, branched from a message when message_id is given, or private (invite-only) when asked. For a post in a forum channel, use create_forum_post instead.
- **list_threads** — Active threads across the server or one channel. Archived threads come from a specific channel with include_archived.
- **get_thread** — One thread's settings, state, and counts.
- **update_thread** — Rename a thread, archive or unarchive it, lock or unlock it, or change its slowmode and auto-archive window.
- **delete_thread** — Delete a thread and its messages. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it. Archiving is the reversible alternative.
- **list_thread_members** — Who is in a thread.
- **add_thread_member** — Pull a member into a thread.
- **remove_thread_member** — Remove a member from a thread. Needs Manage Threads.
- **create_forum_post** — Start a post in a forum channel: a title, the opening message, and optional tags from the forum's tag list.
- **list_forum_posts** — Posts in a forum, filterable by tag, optionally archived too.
- **reply_to_forum_post** — Add a reply inside a forum post.
- **update_forum_post** — Edit a post's title or tags, pin or unpin it within the forum, lock or unlock replies, or archive it.
- **delete_forum_post** — Delete a forum post and every reply in it. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **create_forum_tag** — Add a tag to a forum's tag list. Moderated tags can only be applied by people with Manage Threads.
- **update_forum_tag** — Rename a forum tag or change its moderated flag.
- **delete_forum_tag** — Remove a tag from a forum; posts carrying it simply lose it. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token removes it.
- **list_automod_rules** — Server-side automatic moderation rules and what they do.
- **create_automod_rule** — Create a server-side moderation rule that runs on Discord's own infrastructure: Discord-maintained preset word lists (slurs, profanity, sexual content), custom keyword filters (with optional regex), spam detection, mention-flood limits, or member_profile checks on usernames, nicknames, and bios (Community servers only). For slur or hate-speech filtering prefer trigger keyword_preset with the slurs preset: Discord maintains the word list, so none needs to be written. Actions: block the message, alert a channel, and/or time the sender out (timeout is not available on spam, keyword_preset, or member_profile rules). On member_profile rules block quarantines the member until they fix their profile.
- **update_automod_rule** — Rename a rule, enable or disable it, or replace its keyword list.
- **delete_automod_rule** — Delete an AutoMod rule; its protection stops immediately. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it. Disabling is the reversible alternative.
- **update_server** — Edit server settings: name, description, AFK behavior, system and rules channels, verification level. Only passed fields change. Descriptions need a Community server.
- **get_server_preview** — A server's preview: name, description, and approximate member counts. Works for servers the bot is in; other servers need to be discoverable.
- **get_server_widget** — Widget settings: enabled state and invite channel.
- **update_server_widget** — Enable or disable the widget, or point its invite channel.
- **get_welcome_screen** — The Community welcome screen, when the server has one.
- **update_welcome_screen** — Edit the Community welcome screen: the description and up to five channel cards.
- **get_onboarding** — The new-member onboarding flow, when configured.
- **update_onboarding** — Configure the new-member onboarding flow on a Community server: prompts with options that grant channels and roles, the default channels every member sees, and the enabled state. Discord's app asks for at least seven default channels when configuring this by hand; the API has been observed to accept fewer.
- **list_integrations** — Installed integrations: bots, Twitch and YouTube links.
- **delete_integration** — Remove an integration from the server. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token removes it.
- **list_server_templates** — Discord templates created from this server.
- **create_server_template** — Snapshot this server's structure as a Discord template others can create servers from. One template per server.
- **sync_server_template** — Update a template to match the server's current structure.
- **delete_server_template** — Delete a server template; its share link stops working. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **prune_members** — Remove members inactive for a number of days who hold no roles. Safe to call directly: the first call counts who would go using Discord's own preview and returns a confirm_token; repeating the call with the token prunes for real.
- **set_bot_presence** — Change the bot's status dot and custom status text. Needs the gateway connection that Omnicord keeps by default.
- **list_stickers** — Custom stickers in the server.
- **create_sticker** — Upload a custom sticker from an image URL. Discord requires png, apng, or gif at 320x320 pixels and up to 512 KB. Servers start with five sticker slots; boosts add more.
- **update_sticker** — Rename a sticker or change its description and tags.
- **delete_sticker** — Delete a custom sticker. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **list_soundboard_sounds** — Custom soundboard sounds in the server.
- **create_soundboard_sound** — Upload a soundboard sound from an audio URL: mp3 or ogg, up to 512 KB and 5.2 seconds. Servers start with eight sound slots; boosts add more.
- **update_soundboard_sound** — Rename a soundboard sound or change its volume.
- **delete_soundboard_sound** — Delete a soundboard sound. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it.
- **save_blueprint** — Save a blueprint to the local store for reuse: apply it to other servers with execute_build_plan or track drift with diff_blueprint. Names are unique.
- **list_blueprints** — Saved blueprints in the local store.
- **get_blueprint** — One saved blueprint in full, by name or ID.
- **delete_blueprint** — Delete a saved blueprint from the local store. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token deletes it. Servers built from it are untouched.
- **export_server_blueprint** — Snapshot a live server's structure into a blueprint: roles, categories, channels, and their visibility, with permission overwrites decompiled back into private_to and read_only where they fit and warnings where they do not. Optionally save the result straight to the store with save_as.
- **diff_blueprint** — Compare a saved blueprint against the live server: what the blueprint expects but the server lacks (missing), what exists but differs (changed, with the fields), and what the server has that the blueprint never mentioned (extra, informational). The drift detector for config-as-code workflows.
- **get_message** — Fetch one message in full: author, content, timestamps, attachments, embeds, reactions, and any reply reference.
- **send_dm** — Send a direct message from the bot to a member who shares a server with it. Fails gracefully when the recipient has DMs closed. The message comes from the bot, never from a user account.
- **bulk_delete_messages** — Delete many recent messages at once (2 to 100), optionally filtered by author or text. Discord cannot bulk delete messages older than 14 days. Safe to call directly: the first call returns the exact list it would remove plus a confirm_token; repeating the call with the token deletes them.
- **crosspost_message** — Publish a message in an announcement channel out to every server that follows it.
- **schedule_message** — Post a text message to a channel at a later time, once or on a daily or weekly repeat. This sends an ordinary message; for a community event members can RSVP to, use create_event. Omnicord sends it when the time comes. One limit worth knowing: delivery needs the Omnicord process to be running at that moment, so always-on scheduling wants the hosted or Docker deployment rather than a laptop that sleeps. A message that came due during downtime is sent at the next start.
- **list_scheduled_messages** — Pending timed messages waiting to send, soonest first. These are messages queued with schedule_message, not Discord community events (list_events).
- **cancel_scheduled_message** — Cancel a pending scheduled message by its id.
- **update_member** — Edit a member's nickname or voice state. Voice changes (server mute, server deafen, move to another voice channel) only apply while the member is connected to voice. Role changes go through assign_role and remove_role.
- **disconnect_member** — Remove a member from whatever voice channel they are in. They stay in the server; only the voice connection ends.
- **list_voice_members** — Who is currently in a voice or stage channel, with their mute and deafen state. This reads the live voice presence the gateway tracks, so it reflects the time since Omnicord connected.
- **remove_role** — Take a role away from a member. Preflights the bot's role hierarchy so a failure is an explanation, not a 403.
- **get_member_permissions** — The effective permissions a member has, server-wide or in a specific channel once role and overwrite resolution is applied, in plain language.
- **get_channel_permissions** — The permission overwrites on a channel, resolved into plain language per role and member.
- **set_channel_permissions** — Set a permission overwrite on a channel for one role or member: which permissions are explicitly allowed and which are denied. Permission names like manage_messages or send_messages.
- **clear_channel_permissions** — Remove a role's or member's permission overwrite from a channel, restoring inheritance from the category and roles.
- **lock_channel** — Lock a channel by denying everyone the ability to send messages. Existing role overwrites that allow posting still apply, so moderators keep access. Reverse with unlock_channel.
- **unlock_channel** — Reverse lock_channel by removing the send-message denial from the everyone overwrite.
- **explain_permissions** — Answer whether an actor (the bot, or a member) has a given permission, server-wide or in a channel, and explain the result through the role and overwrite chain. The preflight engine, made directly askable.
- **get_channel** — Full detail for one channel: type, topic, category, slowmode, NSFW flag, and a count of its permission overwrites.
- **clone_channel** — Copy a channel's settings and permission overwrites into a new channel in the same category.
- **clone_role** — Copy a role's permissions, color, and settings into a new role.
- **reorder_channels** — Move channels to new positions, and optionally into a different category, in one call.
- **reorder_roles** — Move roles to new hierarchy positions in one call. Higher positions sit higher in the list and outrank lower ones.
- **follow_announcement_channel** — Subscribe a channel to an announcement channel, so crossposted messages from the source appear in the target.
- **bulk_update_roles** — Add or remove a role across every member matching a filter. Safe to call directly: the first call returns the affected count and a confirm_token; repeating the call with the token applies the change. Walks up to 3000 members and reports if it hits the cap.
- **list_stages** — Stage channels that currently have a live stage running.
- **start_stage** — Open a live stage on a stage channel with a topic. Members can then be invited to speak.
- **update_stage** — Change the topic of a live stage.
- **end_stage** — End the live stage on a stage channel.
- **list_servers** — Every server your bots are in, each labeled with which bot reaches it, with approximate member counts. When more than one bot is configured this is the map for choosing which one acts. Use get_server_overview for one server's full detail.
- **list_members** — A paged roster of server members. Pass after with the last id to continue. For finding specific people, search_members is better.
- **get_role_members** — The members who currently hold a given role.
- **list_app_commands** — The slash commands this bot's application has registered. Omit guild for the global set, or pass a guild for that server's set. Guild commands and global commands are separate lists; a name can exist in both.
- **register_app_command** — Register a slash command, or update it in place if the name is already taken. Pass a guild while iterating: guild commands appear immediately, while global commands can take up to an hour to show up everywhere and are rate limited per day. Subcommands and subcommand groups are not supported here.
- **update_app_command** — Change a registered command's description or options. Anything not passed is left as it is. Replacing options replaces the whole list, so send every option you want to keep.
- **delete_app_command** — Unregister a slash command so it no longer appears for users. Safe to call directly: the first call changes nothing and returns a preview plus a confirm_token; repeating the call with the token removes it.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "omnicord": {
    "command": "npx",
    "args": ["-y","@orygn/omnicord"],
    "env": {
      "DISCORD_TOKEN": ""
    }
  }
}
```

**Requires environment variables:** `DISCORD_TOKEN` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What OrygnsCode/Omnicord MCP server does

OrygnsCode/Omnicord MCP server connects an MCP client to Discord through a bot that you control. It covers routine server operations such as reading channel history, searching messages, resolving members and roles, sending messages, managing channels and roles, and checking bot health. The repository describes a larger tool catalog covering moderation, AutoMod, events, threads, forums, invites, onboarding, expressions, audit information, and live server events; the supplied tool list includes representative tools for these areas.

The server can also help create a community structure from a blueprint. Reference layouts provide starting points, while planning validates names, limits, dependencies, features, and bot permissions before changing anything. Execution is additive: matching channels and roles are reused, and existing entities are not deleted or modified by a build.

## How it works

An AI client supplies the reasoning, and Omnicord performs Discord API operations through the configured bot. It does not contain its own language model or depend on a hosted cloud service. The default transport is stdio for desktop clients. Streamable HTTP is also available for self-hosting, with configurable binding, port, bearer authentication, and browser-origin restrictions.

Safety checks are part of the server. Delete operations first return a readable preview and a short-lived confirmation token; the action runs only when the same request is repeated with that token. The README also states that destructive moderation actions are preflighted against Discord hierarchy, owner, and self-protection rules. Rate-limit handling waits when Discord asks the client to slow down, and setup diagnostics report token, intent, guild, and membership problems with repair guidance.

## Setup and configuration

OrygnsCode/Omnicord MCP server requires Node.js 20 or newer and a Discord account. The documented setup command is `npx @orygn/omnicord init`; the wizard accepts the bot token, verifies it, checks privileged intents, creates an invite, stores local configuration, and can add the MCP entry to detected client configuration files. Claude Desktop, Cursor, Windsurf, and project-level Claude Code are detected automatically. Other MCP clients receive a configuration snippet.

For a source checkout, the documented sequence is to clone the repository, run `npm install`, run `npm run build`, and start `node dist/index.js`. The bot token is provided through `DISCORD_TOKEN`, with optional defaults and behavior controlled by variables such as `OMNICORD_GUILD`, `OMNICORD_TOOLS`, `OMNICORD_SAFE_MODE`, and `OMNICORD_GATEWAY`. Multiple bots can be configured in `bots.json`; each can serve a different Discord server.

## Tools and capabilities

The supplied catalog supports:

- Inspecting bot identity, gateway intents, guild count, rate limits, server structure, channels, roles, members, messages, and pins.
- Searching message history and members, resolving names to IDs, and reading detailed member profiles.
- Sending, forwarding, editing, pinning, and unpinning messages, including replies and embeds; other documented capabilities include DMs, webhooks, reactions, polls, and scheduled messages.
- Creating, updating, and deleting channels and roles, assigning roles, and setting voice-channel status.
- Planning and executing additive server builds from blueprints, with validation and resumable execution.
- Running setup checks before diagnosing a misconfigured bot.

## Limitations and notes

The bot can act only where Discord grants it access and permissions. Message search covers channels the bot can read, and role-based member searches may report when a paging cap is reached. Discord does not allow the bot to edit messages sent by other users. Channel pinning requires the Pin Messages permission and is subject to Discord's 50-pin limit.

HTTP mode needs additional protection when exposed beyond localhost: the README requires `OMNICORD_HTTP_TOKEN` for non-loopback binding. The default safe mode previews destructive actions; disabling that behavior is available through configuration but is intended only for trusted automation. OrygnsCode/Omnicord MCP server is therefore best suited to deployments where the bot permissions, token storage, and confirmation flow can be controlled.

_Full upstream README: https://allmcps.com/mcp/orygnscode-omnicord/readme_

