# Limitless Reign MCP ## AI-Powered Discord Bot Control | 280+ Tools | Works with Claude, ChatGPT, Cursor

npm downloads stars discord.js

Let AI manage your Discord server with natural language

Quick Start • Features • All Tools • Connect AI • Support

--- ## Why Limitless Reign MCP? Stop writing Discord bot commands. Just tell AI what you want. ``` You: "Set up my gaming server with channels and automod" AI: ✓ Created #rules, #announcements, #general ✓ Created Gaming voice channels ✓ Set up automod for spam/slurs ✓ Created Moderator and Member roles Done! Your server is ready. ``` **The most complete Discord MCP integration:** - **116 Discord tools** - Every Discord.js v14 API - **Any AI client** - Claude, ChatGPT, Cursor, Windsurf, GPT Actions - **Zero config** - One command to start - **Open source** - MIT license, free forever --- ## 🚀 One Command Setup ```bash npx limitless-reign --token YOUR_BOT_TOKEN ``` **That's it.** Server runs at `http://localhost:3000`. Connect your AI and go.
Get your bot token 1. Go to [discord.com/developers/applications](https://discord.com/developers/applications) 2. Create app or select existing 3. Go to **Bot** → **Reset Token** → Copy 4. Add bot to server with **Administrator** permission
--- ## 🎯 What AI Can Do ### Messages & Content | Ask AI | What Happens | |--------|--------------| | "Announce the new update in #general" | Sends formatted message | | "Create a poll: What game tonight?" | Creates interactive poll | | "Delete spam from the last hour" | Bulk deletes messages | | "Pin the rules message" | Pins to channel | ### Server Setup | Ask AI | What Happens | |--------|--------------| | "Create a gaming server layout" | Creates categories + channels | | "Set up roles for staff and members" | Creates role hierarchy | | "Make #admin visible only to mods" | Sets channel permissions | | "Add automod to block spam" | Creates automod rules | ### Member Management | Ask AI | What Happens | |--------|--------------| | "Timeout toxic_user for 1 day" | Applies timeout | | "Give VIP role to our supporters" | Adds roles to members | | "Kick inactive members" | Removes members | | "Who has the Admin role?" | Lists members | ### Advanced | Ask AI | What Happens | |--------|--------------| | "Create a /announce command" | Registers slash command | | "Set up a webhook for alerts" | Creates webhook | | "Schedule game night for Friday" | Creates event | | "Add trending emojis from emoji.gg" | Imports emojis | --- ## 📋 All 283 Tools
Bot & Gateway Connection (5) | Tool | Description | |------|-------------| | `discord_get_bot_info` | Bot user details, guild count, uptime, and ready status | | `discord_get_gateway_info` | Gateway ping, connection status, shard count | | `discord_set_presence` | Online/idle/dnd/invisible status | | `discord_set_activity` | Playing/streaming/listening/watching/custom activity | | `discord_disconnect` | Gracefully disconnect bot from gateway |
Direct Messages / DMs (4) | Tool | Description | |------|-------------| | `discord_send_dm` | Send a private DM to a user | | `discord_edit_dm` | Edit a private DM | | `discord_delete_dm` | Delete a private DM | | `discord_get_dms` | Read DM message history with user |
Servers & Community (33) | Tool | Description | |------|-------------| | `get_allowed_guilds` | List your authorized servers | | `discord_list_guilds` | List accessible servers | | `discord_get_guild` | Server details & features | | `discord_edit_guild` | Edit server settings & icons | | `discord_get_server_stats` | Comprehensive stats (humans, bots, voice active, channels, boost tier) | | `discord_get_guild_preview` | Get public preview of discoverable server | | `discord_get_guild_regions` | List voice RTC regions | | `discord_get_guild_active_threads` | List all active threads across server | | `discord_edit_vanity_url` | Modify vanity invite code | | `discord_get_guild_incidents` | Get raid alerts & incident state | | `discord_edit_guild_incidents` | Configure raid alerts & disable invites/DMs | | `discord_get_member_safety_settings` | Get verification & safety requirements | | `discord_get_mfa_level` | Get server 2FA/MFA moderation level | | `discord_get_guild_nsfw_level` | Get server NSFW classification | | `discord_get_guild_channels` | List channels | | `discord_get_guild_roles` | List roles | | `discord_get_guild_emojis` | List emojis | | `discord_get_guild_stickers` | List stickers | | `discord_get_guild_invites` | List invites | | `discord_get_guild_webhooks` | List webhooks | | `discord_get_guild_bans` | List bans | | `discord_get_audit_log` | Audit log | | `discord_get_vanity_url` | Vanity URL | | `discord_leave_guild` | Leave server | | `discord_apply_template` | Apply predefined template | | `discord_get_guild_prune_count` | Preview inactive member prune count | | `discord_begin_guild_prune` | Prune inactive members | | `discord_get_guild_widget` | Get server widget embed & settings | | `discord_edit_guild_widget` | Enable/disable widget & channel | | `discord_get_guild_welcome_screen` | Community welcome screen info | | `discord_edit_guild_welcome_screen` | Edit welcome screen & channels | | `discord_get_guild_onboarding` | Get community onboarding flow | | `discord_edit_guild_onboarding` | Edit onboarding questions & default channels | | `discord_get_guild_integrations` | List Twitch/YouTube/bot integrations | | `discord_delete_guild_integration` | Delete server integration |
Native Discord Server Templates (7) | Tool | Description | |------|-------------| | `discord_get_template` | Get native template by code | | `discord_list_guild_templates` | List server's native templates | | `discord_create_guild_template` | Create template from server | | `discord_sync_guild_template` | Sync template with server layout | | `discord_edit_guild_template` | Edit template name & description | | `discord_delete_guild_template` | Delete server template | | `discord_create_guild_from_template` | Create new guild from template |
Channels, Voice & Stage (22) | Tool | Description | |------|-------------| | `discord_create_channel` | Create any channel type | | `discord_edit_channel` | Edit settings | | `discord_delete_channel` | Delete channel | | `discord_clone_channel` | Clone with settings | | `discord_find_channel` | Find channel by name & type | | `discord_get_channel_info` | Get channel details | | `discord_move_channel` | Move channel to category/position | | `discord_lock_channel` | Lock channel to prevent member messages | | `discord_unlock_channel` | Unlock a locked channel | | `discord_set_slowmode` | Set or remove channel slowmode delay | | `discord_set_channel_topic` | Update channel topic | | `discord_modify_channel_positions` | Reorder multiple channels | | `discord_sync_channel_permissions` | Sync permissions with parent category | | `discord_create_voice_channel` | Create voice channel | | `discord_create_stage_channel` | Create stage channel | | `discord_edit_voice_channel` | Edit voice/stage settings | | `discord_get_voice_channel_members` | List connected members in voice channel with audio/video status | | `discord_get_guild_voice_states` | Snapshot of all active voice channels & users in server | | `discord_set_channel_permissions` | Set permissions overwrite | | `discord_list_channel_permissions` | List channel overwrites | | `discord_delete_channel_permissions` | Delete channel overwrite | | `discord_create_invite` | Create invite link | | `discord_delete_invite` | Revoke invite link | | `discord_get_invite_details` | Get invite details & stats |
Categories (5) | Tool | Description | |------|-------------| | `discord_create_category` | Create new category | | `discord_edit_category` | Edit category name/position | | `discord_delete_category` | Delete category | | `discord_find_category` | Find category by name | | `discord_list_channels_in_category` | List category's channels |
Forums & Threads (24) | Tool | Description | |------|-------------| | `discord_create_forum_channel` | Create forum channel | | `discord_edit_forum_channel` | Edit forum settings/tags | | `discord_list_forum_channels` | List forum channels | | `discord_get_forum_channel_info` | Forum settings & tags | | `discord_list_forum_tags` | List available tags | | `discord_list_forum_posts` | List active posts | | `discord_create_forum_post` | Create forum post | | `discord_modify_forum_post` | Edit tags, pin/unpin, lock, archive forum post | | `discord_create_thread` | Create thread | | `discord_get_thread` | Get full thread metadata & counts | | `discord_edit_thread` | Edit thread | | `discord_delete_thread` | Delete thread | | `discord_lock_thread` | Lock thread to prevent new replies | | `discord_unlock_thread` | Unlock thread | | `discord_archive_thread` | Archive thread | | `discord_unarchive_thread` | Unarchive thread | | `discord_get_active_threads` | List active threads | | `discord_list_archived_public_threads` | List public archived threads | | `discord_list_archived_private_threads` | List private archived threads | | `discord_list_joined_private_threads` | List joined private archived threads | | `discord_join_thread` | Bot joins thread | | `discord_leave_thread` | Bot leaves thread | | `discord_add_thread_member` | Add user to thread | | `discord_remove_thread_member` | Remove user from thread | | `discord_get_thread_member` | Get user thread membership | | `discord_list_thread_members` | List all thread members |
Messages (29) | Tool | Description | |------|-------------| | `discord_send_message` | Send with embeds/buttons | | `discord_send_embed` | Rich embed | | `discord_send_components_v2` | Components V2 | | `discord_get_message` | Fetch single message | | `discord_reply_to_message` | Referenced inline reply | | `discord_send_typing` | Trigger typing indicator | | `discord_send_attachment` | Upload files with message | | `discord_download_attachment` | Retrieve file attachment metadata & URL | | `discord_forward_message` | Forward message using snapshots | | `discord_edit_message` | Edit message | | `discord_delete_message` | Delete message | | `discord_bulk_delete_messages` | Bulk delete | | `discord_get_messages` | Fetch messages | | `discord_search_messages` | Search messages across channel or server with keyword & author filters | | `discord_get_user_messages` | Fetch last 100-500 messages sent by a specific user across channels | | `discord_export_channel_transcript` | Export full message transcript from channel | | `discord_crosspost_message` | Publish announcement message to follower channels | | `discord_create_announcement_follower` | Follow announcement channel to auto-receive posts | | `discord_get_pinned_messages` | Get all pinned messages in channel | | `discord_pin_message` | Pin message | | `discord_unpin_message` | Unpin message | | `discord_get_reactions` | Get users who reacted with emoji | | `discord_add_reaction` | Add reaction | | `discord_remove_reaction` | Remove reaction | | `discord_clear_reaction_emoji` | Clear all reactions for emoji | | `discord_clear_all_reactions` | Remove every reaction from message | | `discord_create_poll` | Create poll | | `discord_end_poll` | Immediately expire active poll | | `discord_get_poll_voters` | List voters for poll answer |
Users & Members (27) | Tool | Description | |------|-------------| | `discord_get_user` | Fetch global Discord user profile, avatar, banner | | `discord_get_user_profile` | Full profile: bio, custom status, rich presence games/Spotify, desktop/mobile status | | `discord_edit_bot_profile` | Edit bot username or avatar globally | | `discord_get_current_member` | Get bot's server member & permissions | | `discord_edit_current_member` | Change bot server nickname | | `discord_get_member` | Member info | | `discord_search_members` | Search members | | `discord_list_members` | List members | | `discord_get_user_id_by_name` | Get user ID for `<@id>` ping | | `discord_get_member_roles` | Get expanded role list for member | | `discord_list_role_members` | Find all members holding a role | | `discord_get_member_avatar` | Resolve server-specific avatar/banner | | `discord_get_member_permissions_in_channel` | Calculate channel effective permissions | | `discord_kick_member` | Kick | | `discord_ban_member` | Ban | | `discord_bulk_ban_members` | Native bulk ban multiple users | | `discord_unban_member` | Unban | | `discord_timeout_member` | Timeout | | `discord_remove_timeout` | Remove timeout | | `discord_add_role` | Add role | | `discord_remove_role` | Remove role | | `discord_set_nickname` | Set nickname | | `discord_move_member_voice` | Move to voice | | `discord_disconnect_member` | Disconnect from voice | | `discord_server_mute_member` | Server mute | | `discord_server_deafen_member` | Server deafen | | `discord_modify_voice_state` | Mute/deafen/suppress in voice |
Roles & Permissions (12) | Tool | Description | |------|-------------| | `discord_create_role` | Create role | | `discord_get_role` | Get detailed role settings, permissions, icon | | `discord_edit_role` | Edit role | | `discord_delete_role` | Delete role | | `discord_modify_single_role_position` | Set single role position | | `discord_modify_role_positions` | Reorder role hierarchy | | `discord_get_role_members` | List members holding role | | `discord_get_default_everyone_role` | Get @everyone role & permissions | | `discord_set_role_icon` | Set role icon image | | `discord_set_role_unicode_emoji` | Set role emoji | | `discord_get_member_permissions` | Compute effective member permissions | | `discord_list_permissions` | List permissions |
Emojis & Stickers (10) | Tool | Description | |------|-------------| | `discord_create_emoji` | Create emoji | | `discord_get_emoji_details` | Emoji details & author | | `discord_edit_emoji` | Rename or role-restrict emoji | | `discord_delete_emoji` | Delete emoji | | `discord_create_sticker` | Create sticker | | `discord_get_sticker` | Get sticker details | | `discord_edit_sticker` | Edit sticker name/description/tags | | `discord_delete_sticker` | Delete sticker | | `discord_search_emojigg` | Search emoji.gg | | `discord_add_emojigg` | Add from emoji.gg |
Webhooks (13) | Tool | Description | |------|-------------| | `discord_create_webhook` | Create webhook | | `discord_get_webhook` | Get webhook details by ID | | `discord_get_channel_webhooks` | List all webhooks in channel | | `discord_edit_webhook` | Edit webhook name, avatar, or channel | | `discord_delete_webhook` | Delete webhook | | `discord_execute_webhook` | Send via webhook | | `discord_execute_webhook_wait` | Send webhook message & return created object | | `discord_execute_webhook_in_thread` | Send into thread or create forum post | | `discord_execute_webhook_slack` | Send Slack-compatible webhook payload | | `discord_execute_webhook_github` | Send GitHub-compatible webhook payload | | `discord_get_webhook_message` | Fetch webhook message | | `discord_edit_webhook_message` | Edit webhook message | | `discord_delete_webhook_message` | Delete webhook message |
AutoMod (5) | Tool | Description | |------|-------------| | `discord_get_automod_rules` | List rules | | `discord_get_automod_rule` | Get single rule details | | `discord_create_automod_rule` | Create rule | | `discord_edit_automod_rule` | Edit rule & filters | | `discord_delete_automod_rule` | Delete rule |
Stage Instances (4) | Tool | Description | |------|-------------| | `discord_get_stage_instance` | Get active stage instance details | | `discord_create_stage_instance` | Start/open a stage instance with topic | | `discord_edit_stage_instance` | Edit active stage topic/privacy | | `discord_delete_stage_instance` | Close/end a stage instance |
Soundboard (7) | Tool | Description | |------|-------------| | `discord_list_soundboard_sounds` | List custom soundboard sounds | | `discord_get_soundboard_sound` | Get soundboard sound details | | `discord_create_soundboard_sound` | Upload custom soundboard audio | | `discord_edit_soundboard_sound` | Edit sound name/volume/emoji | | `discord_delete_soundboard_sound` | Delete soundboard sound | | `discord_send_soundboard_sound` | Play soundboard audio in voice channel | | `discord_list_default_soundboard_sounds` | List Discord default soundboard sounds |
Scheduled Events (6) | Tool | Description | |------|-------------| | `discord_create_scheduled_event` | Create event | | `discord_get_scheduled_event` | Fetch event details & interested user count | | `discord_edit_scheduled_event` | Edit event & status | | `discord_get_scheduled_events` | List events | | `discord_get_scheduled_event_users` | List interested users | | `discord_delete_scheduled_event` | Delete event |
Slash Commands (15) | Tool | Description | |------|-------------| | `discord_create_global_command` | Create global command | | `discord_get_global_command` | Fetch single global command | | `discord_get_global_commands` | List global commands | | `discord_edit_global_command` | Edit global command | | `discord_delete_global_command` | Delete global command | | `discord_bulk_overwrite_global_commands` | Bulk overwrite all global commands | | `discord_create_guild_command` | Create guild command | | `discord_get_guild_command` | Fetch single guild command | | `discord_get_guild_commands` | List guild commands | | `discord_edit_guild_command` | Edit guild command | | `discord_delete_guild_command` | Delete guild command | | `discord_bulk_overwrite_guild_commands` | Bulk overwrite all guild commands | | `discord_get_command_permissions` | Get command permissions | | `discord_edit_command_permissions` | Set command permissions | | `discord_batch_edit_command_permissions` | Batch edit permissions for commands |
Interactions & Activities (11) | Tool | Description | |------|-------------| | `discord_reply_interaction` | Reply to interaction | | `discord_defer_interaction` | Defer interaction ("thinking...") | | `discord_edit_interaction_reply` | Edit initial interaction reply | | `discord_delete_interaction_reply` | Delete initial interaction reply | | `discord_send_interaction_followup` | Send interaction follow-up | | `discord_get_interaction_followup` | Fetch interaction follow-up | | `discord_edit_interaction_followup` | Edit interaction follow-up | | `discord_delete_interaction_followup` | Delete interaction follow-up | | `discord_reply_autocomplete` | Respond to autocomplete suggestions | | `discord_show_modal` | Open modal popup | | `discord_launch_activity` | Create activity link in voice channel |
Gateway Event Subscriptions & Automations (12) | Tool | Description | |------|-------------| | `discord_subscribe_events` | Subscribe to gateway events | | `discord_unsubscribe_events` | Unsubscribe from gateway events | | `discord_list_event_subscriptions` | List active event subscriptions | | `discord_wait_for_event` | Wait/poll until specific event occurs | | `discord_get_recent_events` | Query recent events buffer with filters | | `discord_register_message_handler` | Automated message handler | | `discord_register_reaction_handler` | Automated reaction handler | | `discord_register_member_handler` | Automated member join/leave handler | | `discord_register_voice_handler` | Automated voice state handler | | `discord_register_thread_handler` | Automated thread handler | | `discord_register_interaction_handler` | Automated interaction handler | | `discord_unregister_handler` | Remove automated handler |
Live Voice Connection, Audio Streaming & Recording (14) | Tool | Description | |------|-------------| | `discord_join_voice_channel` | Connect bot to voice or stage channel (Opcode 4 Gateway WebRTC) | | `discord_leave_voice_channel` | Disconnect bot from active voice channel | | `discord_get_bot_voice_state` | Get bot voice state, active playback track, and volume | | `discord_play_audio` | Stream audio from YouTube, Spotify, SoundCloud, or direct URLs | | `discord_play_audio_url` | Stream direct audio URL (.mp3, .wav, .ogg, .aac, .mp4 stream) | | `discord_play_local_audio` | Play local sound file from disk into voice channel | | `discord_speak_tts` | Synthesize text to speech and speak in voice channel | | `discord_pause_audio` | Pause active audio playback | | `discord_resume_audio` | Resume paused audio playback | | `discord_stop_audio` | Stop audio playback and clear track | | `discord_set_audio_volume` | Adjust playback volume (0–200%) | | `discord_start_voice_recording` | Multi-track voice recording (all speakers + separate per-user tracks + user filters) | | `discord_stop_voice_recording` | Stop recording, finalize `.opus` files, and get duration & file size | | `discord_list_voice_recordings` | List saved voice channel audio recordings on disk |
Database & Scheduled Tasks (8) | Tool | Description | |------|-------------| | `db_query` | SQL query on local SQLite | | `db_execute` | Execute SQL statement | | `db_list_tables` | List tables in DB | | `db_get_schema` | Get table schema | | `discord_get_logs` | Query action logs | | `discord_get_guild_config` | Get guild config | | `discord_set_guild_config` | Update guild config | | `discord_get_db_stats` | Database stats | | `schedule_task` | Schedule cron task | | `list_scheduled_tasks` | List scheduled tasks | | `cancel_scheduled_task` | Cancel scheduled task |
High-Leverage Power Primitives (7) | Tool | Description | |------|-------------| | `discord_resolve` | Universal parser for URLs, mentions (`<#id>`, `<@id>`, `<@&id>`), IDs, and names into Discord entities | | `discord_permission_check` | Preflight check for bot permissions & role hierarchy before executing destructive actions | | `discord_batch` | Execute multiple independent MCP tool calls concurrently with per-operation results | | `discord_get_api_capabilities` | Inspect active Gateway intents, privileged flags, voice readiness, and REST API version | | `discord_asset_to_data_uri` | Convert web URLs or local images into Discord base64 Data URIs for emojis/stickers/icons | | `discord_add_guild_member` | Add OAuth2-authorized user to a server using their OAuth access token | | `discord_api_call` | Raw Discord REST API call (`GET`, `POST`, `PATCH`, `PUT`, `DELETE`) with query params & audit log reason |
--- ## 🎙️ Live Voice Streaming & Multi-Track Audio Recording Limitless Reign includes a full **WebRTC Audio Pipeline (`@discordjs/voice`)** allowing AI models to stream music, speak TTS, and record multi-user voice conversations with individual per-speaker tracks. ### 1. Connect & Stream Music / Audio ```json // 1. Join Voice Channel { "tool": "discord_join_voice_channel", "arguments": { "guildId": "1532381127564857484", "channelId": "1537206459102666803" } } // 2. Stream YouTube, Spotify, or Direct MP3 { "tool": "discord_play_audio", "arguments": { "guildId": "1532381127564857484", "source": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "title": "Never Gonna Give You Up" } } // 3. Adjust Volume { "tool": "discord_set_audio_volume", "arguments": { "guildId": "1532381127564857484", "volume": 75 } } ``` ### 2. Pure In-Memory Multi-Track Recording (Zero Disk Required) ```json // Start Recording (buffered purely in memory with optional exclusion filters) { "tool": "discord_start_voice_recording", "arguments": { "guildId": "1532381127564857484", "multiTrack": true, "excludedUserIds": ["123456789012345678"] // Ignore bots or noisy users } } // Stop Recording & optionally upload directly to a Discord text channel { "tool": "discord_stop_voice_recording", "arguments": { "guildId": "1532381127564857484", "sendToChannelId": "1532381127564857486" // Optional: uploads in-memory buffer as Discord attachment message } } ``` **Response Output (In-Memory Base64 Data URIs & CDN Attachment):** ```json { "success": true, "data": { "recording": { "id": "rec_1788029582", "durationSeconds": 45, "sizeBytes": 542100, "status": "completed", "attachmentUrl": "https://cdn.discordapp.com/attachments/.../rec_1788029582_recording.opus", "dataUri": "data:audio/ogg;codecs=opus;base64,T3B1c0hlYWQ...", "tracks": [ { "name": "Master Combined Track (All Speakers)", "sizeBytes": 542100, "dataUri": "data:audio/ogg;codecs=opus;base64,..." }, { "userId": "1136967689517142087", "name": "Speaker Track (User 1136967689517142087)", "sizeBytes": 271000, "dataUri": "data:audio/ogg;codecs=opus;base64,..." } ] } } } ``` --- ## 🔌 Connect Any AI ### Claude Desktop Edit `claude_desktop_config.json`: **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` **Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json` ```json { "mcpServers": { "discord": { "url": "http://localhost:3000" } } } ``` ### Claude Code Install package and use the skill: ```bash npm install limitless-reign-mcp ``` Then type `/limitless-reign` in Claude Code. ### ChatGPT **Web Plugin:** Settings → Security → Developer Mode → Plugins → Add: ``` http://localhost:3000/sse ``` **Desktop:** Settings → Integrations → Add MCP Server → Streamable HTTP: ``` http://localhost:3000 ``` ### Cursor / Windsurf Settings → Features → MCP → Add Server: ``` URL: http://localhost:3000 ``` ### GPT Actions Get OpenAPI schema: ``` GET http://localhost:3000?format=openapi ``` Paste in Custom GPT → Configure → Actions --- ## 💻 SDK Usage Works with **any** backend framework. Just create the MCP server and mount it. ### Core Setup (All Frameworks) ```typescript import { Client, GatewayIntentBits } from 'discord.js' import { createMCPServer } from 'limitless-reign-mcp' const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers] }) const mcp = createMCPServer({ client, validateAccess: async (apiKey, guildId) => { // Your auth logic return { valid: true, userId: 'user-id' } }, getAllowedGuilds: async (apiKey) => { return [{ id: '123', name: 'My Server', icon: null }] } }) await client.login(process.env.DISCORD_TOKEN) ``` --- ### Express ```typescript import express from 'express' import { expressMiddleware } from 'limitless-reign-mcp' const app = express() app.use(express.json()) app.use('/mcp', expressMiddleware(mcp)) app.listen(3000) ``` --- ### Next.js (App Router) ```typescript // lib/mcp.ts import { createMCPServer } from 'limitless-reign-mcp' let mcp: ReturnType export async function getMCP() { if (!mcp) { // ... setup client mcp = createMCPServer({ client, validateAccess, getAllowedGuilds }) } return mcp } ``` ```typescript // app/api/mcp/route.ts import { createNextjsRoute } from 'limitless-reign-mcp' import { getMCP } from '@/lib/mcp' export const { GET, POST, OPTIONS } = createNextjsRoute(getMCP) ``` ```typescript // app/api/mcp/sse/route.ts import { createNextjsSSERoute } from 'limitless-reign-mcp' import { getMCP } from '@/lib/mcp' export const { GET, POST, OPTIONS } = createNextjsSSERoute(getMCP) ``` --- ### Fastify ```typescript import Fastify from 'fastify' import { handleHTTPRequest } from 'limitless-reign-mcp' const app = Fastify() app.all('/mcp', async (req, reply) => { const result = await handleHTTPRequest(mcp, { method: req.method, url: req.url, headers: req.headers as Record, body: req.body, basePath: '/mcp' }) reply.status(result.status).send(result.body) }) app.listen({ port: 3000 }) ``` --- ### Hono ```typescript import { Hono } from 'hono' import { handleHTTPRequest } from 'limitless-reign-mcp' const app = new Hono() app.all('/mcp', async (c) => { const result = await handleHTTPRequest(mcp, { method: c.req.method, url: c.req.url, headers: Object.fromEntries(c.req.raw.headers), body: await c.req.json().catch(() => null), basePath: '/mcp' }) return c.json(result.body, result.status) }) export default app ``` --- ### Koa ```typescript import Koa from 'koa' import Router from '@koa/router' import bodyParser from 'koa-bodyparser' import { handleHTTPRequest } from 'limitless-reign-mcp' const app = new Koa() const router = new Router() router.all('/mcp', async (ctx) => { const result = await handleHTTPRequest(mcp, { method: ctx.method, url: ctx.href, headers: ctx.headers as Record, body: ctx.request.body, basePath: '/mcp' }) ctx.status = result.status ctx.body = result.body }) app.use(bodyParser()) app.use(router.routes()) app.listen(3000) ``` --- ### Bun ```typescript import { handleHTTPRequest } from 'limitless-reign-mcp' Bun.serve({ port: 3000, async fetch(req) { const url = new URL(req.url) if (url.pathname.startsWith('/mcp')) { const result = await handleHTTPRequest(mcp, { method: req.method, url: req.url, headers: Object.fromEntries(req.headers), body: await req.json().catch(() => null), basePath: '/mcp' }) return Response.json(result.body, { status: result.status }) } return new Response('Not found', { status: 404 }) } }) ``` --- ### Deno ```typescript import { handleHTTPRequest } from 'npm:limitless-reign-mcp' Deno.serve({ port: 3000 }, async (req) => { const url = new URL(req.url) if (url.pathname.startsWith('/mcp')) { const result = await handleHTTPRequest(mcp, { method: req.method, url: req.url, headers: Object.fromEntries(req.headers), body: await req.json().catch(() => null), basePath: '/mcp' }) return Response.json(result.body, { status: result.status }) } return new Response('Not found', { status: 404 }) }) ``` --- ### Node.js HTTP (No Framework) ```typescript import http from 'http' import { handleHTTPRequest } from 'limitless-reign-mcp' http.createServer(async (req, res) => { let body = '' for await (const chunk of req) body += chunk const result = await handleHTTPRequest(mcp, { method: req.method!, url: `http://localhost:3000${req.url}`, headers: req.headers as Record, body: body ? JSON.parse(body) : null, basePath: '/mcp' }) res.writeHead(result.status, { 'Content-Type': 'application/json' }) res.end(JSON.stringify(result.body)) }).listen(3000) ``` --- ## 🧩 Adding Custom & External Tools Limitless Reign MCP is fully extensible. You can add custom tools, external HTTP REST APIs, bridge remote MCP servers, and write modular plugins using 6 different methods: ### 1. Server Configuration (`customTools` option) Pass custom tools directly when creating your server: ```typescript import { createMCPServer } from 'limitless-reign-mcp' const mcp = createMCPServer({ client, validateAccess: async (key) => ({ valid: true }), customTools: [ { name: 'calculate_stats', description: 'Compute server analytics score', inputSchema: { type: 'object', properties: { multiplier: { type: 'number', description: 'Score multiplier' } }, required: ['multiplier'] }, handler: async (args, { client, database }) => { const memberCount = client.guilds.cache.reduce((acc, g) => acc + g.memberCount, 0) return { totalMembers: memberCount, score: memberCount * args.multiplier } } } ] }) ``` --- ### 2. Runtime Registration (`mcp.registerTool` & `mcp.registerTools`) Register or unregister custom tools dynamically at any point: ```typescript import { defineTool } from 'limitless-reign-mcp' // Register a single custom tool mcp.registerTool( defineTool({ name: 'custom_send_alert', description: 'Send high priority alert to moderator channel', inputSchema: { type: 'object', properties: { channelId: { type: 'string' }, alertMessage: { type: 'string' } }, required: ['channelId', 'alertMessage'] }, handler: async (args, { client }) => { const channel = await client.channels.fetch(args.channelId) if (channel?.isTextBased()) { await channel.send(`🚨 **ALERT:** ${args.alertMessage}`) return { success: true, delivered: true } } return { success: false, error: 'Channel is not text-based' } } }) ) // Check or unregister tools mcp.hasTool('custom_send_alert') // true mcp.unregisterTool('custom_send_alert') ``` --- ### 3. External HTTP / REST API Tools (`createHttpTool`) Turn any REST API endpoint or Webhook into an MCP tool with schema validation and authentication: ```typescript import { createHttpTool } from 'limitless-reign-mcp' const weatherTool = createHttpTool({ name: 'get_weather_report', description: 'Fetch current weather for a city', url: (args) => `https://api.weatherapi.com/v1/current.json?q=${encodeURIComponent(args.city)}&key=YOUR_API_KEY`, method: 'GET', inputSchema: { type: 'object', properties: { city: { type: 'string', description: 'City name' } }, required: ['city'] }, transformResponse: (data) => ({ city: data.location?.name, temp_c: data.current?.temp_c, condition: data.current?.condition?.text }) }) mcp.registerTool(weatherTool) ``` --- ### 4. Bridge & Proxy External MCP Servers (`registerExternalMCP`) Seamlessly connect remote MCP servers (such as GitHub MCP, Database MCP, or Web Search MCP) and merge their tools into your Discord MCP catalog: ```typescript // Proxy an external MCP server over HTTP/SSE await mcp.registerExternalMCP({ url: 'http://localhost:8080/mcp', prefix: 'ext_', // Optional prefix to avoid tool name clashes headers: { 'Authorization': 'Bearer YOUR_REMOTE_TOKEN' }, filterTools: (toolName) => !toolName.startsWith('dangerous_') }) ``` --- ### 5. Modular Plugins (`mcp.use`) Package and organize custom tools into reusable plugins: ```typescript import type { DiscordMCPServer } from 'limitless-reign-mcp' function moderationPlugin(server: DiscordMCPServer) { server.registerTool({ name: 'auto_quarantine_user', description: 'Move user to isolated quarantine role', inputSchema: { type: 'object', properties: { guildId: { type: 'string' }, userId: { type: 'string' } }, required: ['guildId', 'userId'] }, handler: async (args, { client }) => { // Your custom quarantine logic return { quarantined: true, userId: args.userId } } }) } mcp.use(moderationPlugin) ``` --- ### 6. CLI Dynamic Loading (`--tools`, `--plugin`, `--external-mcp`) When using the standalone CLI, pass custom tools, plugins, or external MCP servers via command line flags or environment variables: ```bash # Load custom tools file npx limitless-reign --token YOUR_BOT_TOKEN --tools ./my-tools.js # Load a plugin npx limitless-reign --token YOUR_BOT_TOKEN --plugin ./my-plugin.js # Proxy a remote MCP server npx limitless-reign --token YOUR_BOT_TOKEN --external-mcp http://localhost:8000/mcp ``` --- ## 🛡️ Access Control Built-in permission system: ```typescript validateAccess: async (apiKey, guildId) => { const user = await db.users.findByApiKey(apiKey) if (!user) { return { valid: false, error: 'Invalid API key' } } if (guildId && !user.hasAccessTo(guildId)) { return { valid: false, error: 'No access to this server' } } return { valid: true, userId: user.id } } ``` --- ## 📦 What's Included | File | Purpose | |------|---------| | `dist/cli.js` | CLI - `npx limitless-reign` | | `dist/index.js` | SDK exports | | `.claude/skills/` | Claude Code skill | | `CLAUDE.md` | AI instructions | | `AGENTS.md` | Agent documentation | --- ## 🔗 Links - **GitHub:** [github.com/aayushchouhan24/limitless-reign-mcp](https://github.com/aayushchouhan24/limitless-reign-mcp) - **npm:** [npmjs.com/package/limitless-reign-mcp](https://npmjs.com/package/limitless-reign-mcp) - **Issues:** [Report bugs](https://github.com/aayushchouhan24/limitless-reign-mcp/issues) - **Limitless Reign App:** [github.com/aayushchouhan24/limitless-reign-mcp](https://github.com/aayushchouhan24/limitless-reign-mcp) --- ## ⭐ Star This Repo If this helped you, give it a star! It helps others find it. [![Star](https://img.shields.io/github/stars/aayushchouhan24/limitless-reign?style=social)](https://github.com/aayushchouhan24/limitless-reign-mcp) --- ## 🌟 Author
Aayush Chouhan
Aayush Chouhan

--- ## 🤝 Contributing Contributions are welcome! Feel free to: 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request --- ## 📄 License MIT © [Aayush Chouhan](https://github.com/aayushchouhan24) ---

Built with ❤️ using Discord.js • Node.js • TypeScript