discord-rpc-mcp
<p align="center">
English · <a href="./README.ja.md">日本語</a>
</p>
<p align="center">
<img src="assets/icon.svg" width="128" alt="Discord RPC MCP">
</p>
# discord-rpc-mcp
<div align="center">
https://github.com/user-attachments/assets/5c26f647-2953-4cdc-b2e6-b7ea76578f2c
</div>
A server that exposes the Discord desktop app's RPC through MCP. (Functionality follows Discord's RPC capabilities, so features such as searching past chats are not available.)
Ask it to read a channel, receive new messages, or turn down someone's volume in a call.
## Setup
To store authorization tokens securely, an OS credential store is required (Secret Service on Linux).
With Node.js 22+, npm and Git installed, register the MCP with your agent client as follows.
```sh
# Codex
codex mcp add discord-rpc-mcp -- npx -y github:ver-1000000/discord-rpc-mcp
# Claude Code
claude mcp add --scope user discord-rpc-mcp -- npx -y github:ver-1000000/discord-rpc-mcp
```
Clients that support [MCPB](https://github.com/modelcontextprotocol/mcpb) can install the `.mcpb` file from [Releases](https://github.com/ver-1000000/discord-rpc-mcp/releases).
Once the MCP is installed and enabled, tell your agent: **Set up discord-rpc-mcp.**
The `setup` tool opens a local page that guides you through creating your own Discord application, enabling **Public Client** and entering its Client ID.
For manual installation or detailed instructions, see the [installation guide](docs/installation.md).
## What you can do
| Tools | Purpose |
| --- | --- |
| `get_guilds`, `get_guild`, `get_channels` | Get server and channel information |
| `get_channel` | Read a channel, DM or group DM; optionally select response fields |
| `get_selected_voice_channel`, `get_voice_settings` | Check your voice channel and settings |
| `subscribe`, `unsubscribe`, `get_events` | Subscribe to and read messages, voice events and more |
| `select_text_channel`, `select_voice_channel` | Switch channels, join or leave a call |
| `set_voice_settings`, `set_user_voice_settings` | Adjust your audio settings or another participant's local volume |
| `toggle_video`, `toggle_screenshare` | Toggle the camera or screen sharing in a call |
| `set_activity` | Set or clear Rich Presence |
| `send_activity_join_invite`, `close_activity_request` | Accept or reject activity join requests |
| `set_certified_devices` | Set device information |
---
[Usage](docs/usage.md) · [Development](docs/development.md) · [Discord RPC access requirements](https://docs.discord.com/developers/topics/rpc#restrictions) · [Terms of Use](docs/terms.md) · [Privacy Policy](docs/privacy.md)
## License
[MIT](LICENSE)
TDQS
Scored across 9 tools
Each tool targets a distinct concern: voice state, event subscription, guild/channel lookup, and the event buffer. The singular/plural pairs like get_guild vs get_guilds and get_channel vs get_channels are clearly separated by their descriptions.
The retrieval tools consistently follow a get_<resource> pattern using lowercase snake_case. subscribe and unsubscribe deviate by being verb-only, but they form a clear paired command group, so the mix is minor rather than confusing.
Nine tools is a well-scoped size for a Discord RPC client surface: voice/event tools plus guild/channel lookup tools cover the core use case without redundancy. Each tool has a clear purpose and the set does not feel bloated.
The set covers the main read-only Discord RPC workflows: retrieving guilds, channels, voice state, and subscribing to/reading events. It lacks mutating RPC operations like set_voice_settings or activity control, but those appear to be outside the server's apparent monitoring-oriented scope.