Skip to content
MCP ThesaurusMCP Thesaurus

Discord MCP

CommunityIncomplete39/100Claim

npm @hypark5540/discord-mcpstdioMITupdated 8d ago

Discord ์„œ๋ฒ„์™€ ์ฑ„๋„์„ ์ฝ๊ณ , ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋กœ์ปฌ Model Context Protocol ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

SourceWebsite

What can you do with Discord MCP?

Discord MCP

CI Coverage CodeQL Deploy npm PyPI License: MIT

Discord ์„œ๋ฒ„์™€ ์ฑ„๋„์„ ์ฝ๊ณ , ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋กœ์ปฌ Model Context Protocol ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

  • TypeScript + MCP SDK v1
  • ๋กœ์ปฌ stdio ์ „์†ก
  • Discord REST API v10 (Gateway ์—ฐ๊ฒฐ ๋ถˆํ•„์š”)
  • ์„œ๋ฒ„/์ฑ„๋„ allowlist
  • ๊ธฐ๋ณธ read-only
  • ๋ฉ˜์…˜ ์•Œ๋ฆผ ๊ฐ•์ œ ์ฐจ๋‹จ
  • ์ž๊ธฐ ๋ด‡์ด ์ž‘์„ฑํ•œ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์ •/์‚ญ์ œ

TypeScript ๊ตฌํ˜„ ํ•˜๋‚˜๋ฅผ npm, PyPI, OCI ์ด๋ฏธ์ง€์™€ Claude Desktop MCPB๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. PyPI ํŒจํ‚ค์ง€๋„ ์„œ๋ฒ„๋ฅผ Python์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•  ๋•Œ npx @latest๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ , ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ๊ณ ์ •๋œ ๊ฐ™์€ JS ์ฝ”๋“œ๋ฅผ wheel ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TypeScript source
  โ”œโ”€ esbuild โ†’ bundle/discord-mcp.cjs
  โ”‚              โ”œโ”€ npm (npx / pnpm / Yarn / bunx)
  โ”‚              โ”œโ”€ PyPI wheel (uvx / pipx / pip launcher)
  โ”‚              โ”œโ”€ GHCR image (Docker)
  โ”‚              โ””โ”€ MCPB (Claude Desktop one-click bundle)
  โ””โ”€ server.json โ†’ MCP Registry์—์„œ npm / PyPI / OCI ์ขŒํ‘œ๋ฅผ ํ•œ ํ•ญ๋ชฉ์œผ๋กœ ์—ฐ๊ฒฐ

๋„ค ๋ฐฐํฌ ์‚ฐ์ถœ๋ฌผ์€ ๋™์ผํ•œ ์„œ๋ฒ„ ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฒˆ๋“ค์— ์‹ค์ œ ํฌํ•จ๋œ ์˜์กด์„ฑ์˜ ๋ผ์ด์„ ์Šค ์›๋ฌธ๊ณผ ๊ฒฐ์ •์ ์ธ CycloneDX 1.6 SBOM๋„ esbuild metafile์—์„œ ํ•จ๊ป˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์ด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ „์ด ์˜์กด์„ฑ์„ ๋‹ค์‹œ ํ•ด์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ณต ๊ธฐ๋Šฅ

์ฝ๊ธฐ ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
discord_get_bot ๋ด‡ ๊ณ„์ •๊ณผ ํ˜„์žฌ ์•ˆ์ „ ์„ค์ • ํ™•์ธ
discord_list_guilds ๋ด‡์ด ์ฐธ์—ฌํ•œ ์„œ๋ฒ„ ๋ชฉ๋ก ์กฐํšŒ
discord_get_guild ์„œ๋ฒ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ
discord_list_channels ์„œ๋ฒ„์˜ ์ฑ„๋„ ๋ชฉ๋ก ์กฐํšŒ
discord_get_channel ์ฑ„๋„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ
discord_get_messages ์ฑ„๋„ ๋ฉ”์‹œ์ง€ ์ตœ๋Œ€ 100๊ฐœ ์กฐํšŒ
discord_get_message ๋‹จ์ผ ๋ฉ”์‹œ์ง€ ์กฐํšŒ

DISCORD_ENABLE_WRITES=true์ผ ๋•Œ ๋‹ค์Œ ๋„๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
discord_send_message ์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€ ๋˜๋Š” ๋‹ต๊ธ€ ์ „์†ก
discord_edit_own_message ์ด ๋ด‡์ด ์ง์ ‘ ์ž‘์„ฑํ•œ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์ •

DISCORD_ENABLE_DELETES=true๊นŒ์ง€ ์„ค์ •ํ•˜๋ฉด discord_delete_own_message๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ ํ˜ธ์ถœ์—๋Š” confirm: true๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

MCP resource๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • discord://bot
  • discord://guilds
  • discord://guilds/{guild_id}
  • discord://guilds/{guild_id}/channels
  • discord://channels/{channel_id}
  • discord://channels/{channel_id}/messages/{message_id}

1. Discord ๋ด‡ ์ค€๋น„

  1. Discord Developer Portal์—์„œ Application์„ ๋งŒ๋“ค๊ณ  Bot ๋ฉ”๋‰ด์—์„œ ๋ด‡์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Bot Token์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋‚˜ Git์— ๋„ฃ์ง€ ๋งˆ์„ธ์š”.
  3. ์ผ๋ฐ˜ ์ฑ„๋„์˜ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ฝ์œผ๋ ค๋ฉด Bot ๋ฉ”๋‰ด์˜ Message Content Intent๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. REST๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ๋•Œ๋„ ์ด ์„ค์ •์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  4. OAuth2 URL Generator์—์„œ bot scope๋ฅผ ์„ ํƒํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์— ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ์žฅ ์ตœ์†Œ ๊ถŒํ•œ:

  • ์ฝ๊ธฐ: View Channels, Read Message History
  • ๋ฉ”์‹œ์ง€ ์ „์†ก๋„ ์‚ฌ์šฉํ•  ๋•Œ: Send Messages
  • thread์— ์ „์†กํ•  ๋•Œ: Send Messages in Threads
  • voice channel์˜ ํ…์ŠคํŠธ ํƒ€์ž„๋ผ์ธ์„ ์ฝ์„ ๋•Œ: Connect

Administrator, Manage Messages, Mention Everyone ๊ถŒํ•œ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฑ„๋„๋ณ„ permission overwrite๊ฐ€ ์„œ๋ฒ„ ๊ถŒํ•œ๋ณด๋‹ค ์šฐ์„ ํ•˜๋ฏ€๋กœ, ํŠน์ • ์ฑ„๋„์ด ๋ณด์ด์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์ฑ„๋„ ๊ถŒํ•œ๋„ ํ™•์ธํ•˜์„ธ์š”.

2. ์„ค์น˜

๊ถŒ์žฅ ๋Ÿฐํƒ€์ž„์€ Node.js 22 ์ด์ƒ์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌ ์ฑ„๋„์— ๋”ฐ๋ผ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ MCP ์„ค์ •์„ ์œ„ํ•ด latest ๋Œ€์‹  ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜์„ธ์š”.

์ฑ„๋„ ์‹คํ–‰ ๋ช…๋ น ํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„
npm / npx npx -y @hypark5540/discord-mcp@0.1.1 Node.js 22+
pnpm pnpm dlx --package=@hypark5540/discord-mcp@0.1.1 discord-mcp Node.js 22+
Yarn yarn dlx -p @hypark5540/discord-mcp@0.1.1 discord-mcp Node.js 22+
Bun ํŒจํ‚ค์ง€ ์‹คํ–‰๊ธฐ bunx --package @hypark5540/discord-mcp@0.1.1 discord-mcp Bun + Node.js 22+
PyPI / uvx uvx --from hypark-discord-mcp==0.1.1 discord-mcp Python 3.9+ + Node.js 22+
PyPI / pipx pipx run --spec hypark-discord-mcp==0.1.1 discord-mcp Python 3.9+ + Node.js 22+
Docker / GHCR ์•„๋ž˜ docker run ์˜ˆ์‹œ Docker
Claude Desktop MCPB GitHub Release์˜ discord-mcp-0.1.1.mcpb Claude Desktop
MCP Registry io.github.hypark5540/discord-mcp ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํƒํ•œ ํŒจํ‚ค์ง€์— ๋”ฐ๋ฆ„

bunx๋Š” npm ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋ŸฐํŠธ์—”๋“œ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Node shebang์„ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฉฐ Bun ์ž์ฒด ๋Ÿฐํƒ€์ž„์„ ๊ฐ•์ œํ•˜๋Š” bunx --bun ๋ชจ๋“œ๋Š” ์ง€์› ๋ฒ”์œ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ „์—ญ ์„ค์น˜๋Š” ๊ธฐ์กด discord-mcp ๋ช…๋ น์ด ์—†๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋‹ค์Œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm install --global @hypark5540/discord-mcp@0.1.1
pip install hypark-discord-mcp==0.1.1
hypark-discord-mcp --version

npm๊ณผ Python ์ฑ„๋„ ๋ชจ๋‘ ๊ณ ์œ ํ•œ hypark-discord-mcp ๋ช…๋ น alias๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ œ3์ž์˜ ๊ธฐ์กด npm/PyPI ํŒจํ‚ค์ง€๋„ discord-mcp๋ผ๋Š” ์ „์—ญ ๋ช…๋ น์„ ์„ค์น˜ํ•˜๋ฏ€๋กœ, ์ „์—ญ ์„ค์น˜ ๊ณผ์ • ์ž์ฒด๊ฐ€ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‰์†Œ์—๋Š” ๊ฒฉ๋ฆฌ๋œ npx/uvx ์‹คํ–‰์„ ๊ถŒ์žฅํ•˜๊ณ , ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ๊ณ ์œ  alias๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. Python ํŒจํ‚ค์ง€๋Š” Node๋ฅผ ๋‚ด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ•„์š”ํ•˜๋ฉด DISCORD_MCP_NODE=/path/to/node๋กœ ์‹คํ–‰ ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker์—์„œ๋Š” -i๋กœ stdio๋ฅผ ์œ ์ง€ํ•˜๊ณ  -t๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker run --rm -i \
  -e DISCORD_TOKEN \
  -e DISCORD_ENABLE_WRITES=false \
  ghcr.io/hypark5540/discord-mcp:0.1.1

3. ํด๋ผ์ด์–ธํŠธ ์›ํ„ฐ์น˜ ์—ฐ๊ฒฐ

Cursor

์•„๋ž˜ ๊ณต์‹ ๋ฒ„ํŠผ์€ ์ •ํ™•ํžˆ ๊ณ ์ •๋œ npm ํŒจํ‚ค์ง€๋ฅผ stdio MCP ์„œ๋ฒ„๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํ† ํฐ์€ ๋งํฌ์— ๋“ค์–ด ์žˆ์ง€ ์•Š๊ณ  ${env:DISCORD_TOKEN}์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ, Cursor๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ์— ๋จผ์ € ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์ •ํ•˜์„ธ์š”.

Add to Cursor

PyPI์ฒ˜๋Ÿผ cursor:// ๋งํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ ๋ณด๊ณ  ์žˆ๋‹ค๋ฉด GitHub README์˜ Cursor ์„น์…˜์—์„œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์„ธ์š”.

Claude Desktop

Claude Desktop์šฉ discord-mcp-0.1.1.mcpb๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๋’ค ํŒŒ์ผ์„ ์—ด๋ฉด ์„ค์น˜ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Discord Bot Token์€ MCPB ์•ˆ์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ์„ค์น˜ ํ™”๋ฉด์˜ sensitive ์ž…๋ ฅ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ keychain/credential manager์— ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฆด๋ฆฌ์Šค์˜ SHA-256 ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ๋ฒˆ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub CLI๊ฐ€ ์žˆ์œผ๋ฉด gh attestation verify --repo hypark5540/discord-mcp discord-mcp-0.1.1.mcpb๋กœ ๋ฆด๋ฆฌ์Šค ์›Œํฌํ”Œ๋กœ์˜ ์„œ๋ช…๋œ provenance๋„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Gemini CLI

Gemini CLI๋Š” ์ €์žฅ์†Œ์˜ ๊ณต์‹ Extension ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gemini extensions install https://github.com/hypark5540/discord-mcp --ref=v0.1.1

์„ค์น˜ ์ค‘ Token ์„ค์ •์€ sensitive: true์ด๋ฏ€๋กœ ์‹œ์Šคํ…œ keychain์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ™•์ธ ํ™”๋ฉด์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ์˜ต์…˜์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

ChatGPT Desktop, Codex์™€ ๋‚˜๋จธ์ง€ ํด๋ผ์ด์–ธํŠธ

ํด๋ผ์ด์–ธํŠธ ๊ถŒ์žฅ ์—ฐ๊ฒฐ ๋น„๋ฐ€ ์ „๋‹ฌ
ChatGPT Desktop / Codex CLIยทIDE ๊ณต์œ  ~/.codex/config.toml local stdio ์„ค์ • env_vars = ["DISCORD_TOKEN"]
Claude Code / ๊ธฐํƒ€ stdio MCP ๊ณ ์ • ๋ฒ„์ „ npx ์„ค์ • ํด๋ผ์ด์–ธํŠธ secret store
ChatGPT ์›น local stdio ๋ฏธ์ง€์› ๋ณ„๋„์˜ hosted remote MCP ํ•„์š”

์ •ํ™•ํ•œ ์„ค์ •์€ ํด๋ผ์ด์–ธํŠธ๋ณ„ ๊ฐ€์ด๋“œ, keychainยทํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ํ† ํฐ ํšŒ์ „์€ ๋น„๋ฐ€ ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ChatGPT, Claude, Cursor, Gemini ๊ฐ™์€ ์—์ด์ „ํŠธ์—๊ฒŒ ์„ค์น˜ ์ž์ฒด๋ฅผ ๋งก๊ธธ ๋•Œ๋Š” AI ์„ค์น˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์†Œ์Šค์—์„œ ์‹คํ–‰

Node.js 22 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

npm run deps:locked
cp .env.example .env
npm run build

deps:locked๋Š” ๋ชจ๋“  ์˜์กด์„ฑ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐจ๋‹จํ•œ ๋’ค, ์ž ๊ธˆยท๊ฒ€ํ† ๋œ esbuild@0.28.1๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์žฌ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

.env์—์„œ ์ตœ์†Œํ•œ ํ† ํฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

DISCORD_TOKEN=your-bot-token
DISCORD_ENABLE_WRITES=false
DISCORD_ENABLE_DELETES=false
DISCORD_ALLOW_UNRESTRICTED_WRITES=false

์ง์ ‘ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm start

stdio๋Š” MCP ํ”„๋ ˆ์ž„ ์ „์šฉ์ด๋ฏ€๋กœ ์‹คํ–‰ ํ›„ ์ผ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ๋กœ๊ทธ๋Š” stderr์—๋งŒ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

5. MCP ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ

npm ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋“ฑ๋กํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ์„ค์ • ํŒŒ์ผ ์œ„์น˜๋Š” ๋‹ค๋ฅด์ง€๋งŒ ์„ค์ • ํ˜•ํƒœ๋Š” ๋Œ€์ฒด๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "mcpServers": {
    "discord": {
      "command": "npx",
      "args": ["-y", "@hypark5540/discord-mcp@0.1.1"],
      "env": {
        "DISCORD_TOKEN": "<use-the-client-secret-store>",
        "DISCORD_ENABLE_WRITES": "false",
        "DISCORD_ALLOW_UNRESTRICTED_WRITES": "false",
        "DISCORD_ALLOWED_GUILD_IDS": "123456789012345678",
        "DISCORD_ALLOWED_CHANNEL_IDS": "234567890123456789"
      }
    }
  }
}

uvx๋ฅผ ์„ ํ˜ธํ•˜๋ฉด ์‹คํ–‰ ๋ถ€๋ถ„๋งŒ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "command": "uvx",
  "args": ["--from", "hypark-discord-mcp==0.1.1", "discord-mcp"]
}

์†Œ์Šค ๋นŒ๋“œ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ๊ธฐ์กด์ฒ˜๋Ÿผ command๋ฅผ node, args๋ฅผ ["/absolute/path/to/discord-mcp/dist/index.js"]๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

MCP ์„ค์ •์˜ env๊ฐ€ .env๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” env์— ํ† ํฐ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ native keychain์ด๋‚˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฐธ์กฐ๋ฅผ ์ง€์›ํ•˜๋ฉด ์œ„ ์ž๋ฆฌ์—๋Š” ํ† ํฐ ์›๋ฌธ์„ ์ €์žฅํ•˜์ง€ ๋ง๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์šฐ์„  ์‚ฌ์šฉํ•˜์„ธ์š”.

ํ™˜๊ฒฝ๋ณ€์ˆ˜

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
DISCORD_TOKEN ํ•„์ˆ˜ Discord Bot Token
DISCORD_BOT_TOKEN - DISCORD_TOKEN์˜ ํ˜ธํ™˜ alias
DISCORD_ENABLE_WRITES false ์ „์†ก/์ˆ˜์ • ๋„๊ตฌ ๋“ฑ๋ก
DISCORD_ENABLE_DELETES false ์‚ญ์ œ ๋„๊ตฌ ๋“ฑ๋ก. writes๋„ true์—ฌ์•ผ ํ•จ
DISCORD_ALLOW_UNRESTRICTED_WRITES false allowlist ์—†๋Š” ์ „์ฒด ์ฑ„๋„ ์“ฐ๊ธฐ๋ฅผ ์˜๋„์ ์œผ๋กœ ํ—ˆ์šฉ
DISCORD_ALLOWED_GUILD_IDS ๋น„์–ด ์žˆ์Œ ์‰ผํ‘œ ๊ตฌ๋ถ„ ์„œ๋ฒ„ ID. ๋น„์šฐ๋ฉด ๋ด‡์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์„œ๋ฒ„ ํ—ˆ์šฉ
DISCORD_ALLOWED_CHANNEL_IDS ๋น„์–ด ์žˆ์Œ ์‰ผํ‘œ ๊ตฌ๋ถ„ ์ฑ„๋„ ID. ๋น„์šฐ๋ฉด ํ—ˆ์šฉ ์„œ๋ฒ„์˜ ๋ชจ๋“  guild channel ํ—ˆ์šฉ
DISCORD_MAX_RESPONSE_CHARS 50000 ์ง๋ ฌํ™”๋œ tool/resource ๊ฒฐ๊ณผ ์ตœ๋Œ€ ๋ฌธ์ž ์ˆ˜ (1000~200000)
DISCORD_MCP_NODE PATH์˜ node PyPI ๋Ÿฐ์ฒ˜์—์„œ ์‚ฌ์šฉํ•  Node.js ์‹คํ–‰ ํŒŒ์ผ ๊ฒฝ๋กœ

์„œ๋ฒ„ ID์™€ ์ฑ„๋„ ID๋Š” Discord์˜ Developer Mode๋ฅผ ์ผ  ๋’ค Copy ID๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ allowlist๋ฅผ ๋ชจ๋‘ ์„ค์ •ํ•˜๋ฉด ๊ต์ง‘ํ•ฉ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. DM๊ณผ ๊ทธ๋ฃน DM์€ ํ•ญ์ƒ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋ชจ๋“œ์—์„œ๋Š” allowlist๊ฐ€ ๋ชจ๋‘ ๋น„์–ด ์žˆ์œผ๋ฉด ๋ด‡์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  guild channel์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๋ชจ๋“œ๋Š” allowlist๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ์š”๊ตฌํ•˜๋ฉฐ, ์ด ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ œํ•˜๋ ค๋ฉด DISCORD_ALLOW_UNRESTRICTED_WRITES=true๋ฅผ ๋ณ„๋„๋กœ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ์ „ ์„ค๊ณ„

  • Bot Token๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ํ† ํฐ/self-bot์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ž„์˜ Discord API endpoint๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฒ”์šฉ ๋„๊ตฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์“ฐ๊ธฐ์™€ ์‚ญ์ œ ๋„๊ตฌ๋Š” ์‹œ์ž‘ ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ณ„๋„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ „์†ก/์ˆ˜์ • ์š”์ฒญ์€ allowed_mentions: { parse: [] }๋ฅผ ๊ฐ•์ œํ•˜๋ฏ€๋กœ @everyone, ์—ญํ• , ์‚ฌ์šฉ์ž ๋ฌธ์ž์—ด์ด ์žˆ์–ด๋„ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ „์†ก์—๋Š” Discord nonce ์ค‘๋ณต ๋ฐฉ์ง€๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆ˜์ •/์‚ญ์ œ ์ „ ์ž‘์„ฑ์ž ID๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉฐ webhook ๋ฉ”์‹œ์ง€์™€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  • Discord ๋ฉ”์‹œ์ง€๋Š” ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ ์‘๋‹ต์„ ๋กœ์ปฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์บ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ฑ„๋„์„ ์ฐธ์กฐํ•˜๋Š” Discord ๋‹ต๊ธ€/์Šค๋ ˆ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ณธ๋ฌธ์„ ์ œ๊ฑฐํ•ด allowlist ๊ฒฝ๊ณ„๋ฅผ ์šฐํšŒํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • API ์˜ค๋ฅ˜๋Š” ํ† ํฐ, ์š”์ฒญ ํ—ค๋”, ์›๋ฌธ ์‘๋‹ต body๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š” ๋ฌธ๊ตฌ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Discord์˜ guild channel ๋ชฉ๋ก API๋Š” ๋ด‡์ด ์‹ค์ œ๋กœ View Channel ๊ถŒํ•œ์„ ๊ฐ–์ง€ ์•Š์€ ์ฑ„๋„์˜ ์ด๋ฆ„์ด๋‚˜ topic ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ์„œ๋ฒ„์—์„œ๋Š” guild allowlist๋งŒ ๋‘์ง€ ๋ง๊ณ  channel allowlist๋„ ํ•จ๊ป˜ ์„ค์ •ํ•˜์„ธ์š”. ์ฑ„๋„ ๋ชฉ๋ก์—๋Š” ์ผ๋ฐ˜ ์ฑ„๋„๊ณผ ํ˜„์žฌ active thread๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, archived thread๋Š” ID๋กœ ์ง์ ‘ ์กฐํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

allowlist ์—†์ด๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ ์‚ฌ์šฉ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ด‡ ์ „์šฉ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์™€ DISCORD_ALLOWED_GUILD_IDS, DISCORD_ALLOWED_CHANNEL_IDS๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ

npm run dev
npm run typecheck
npm test
npm run build
npm run check
npm run build:mcpb
npm run verify:mcpb
npm run build:pypi

ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ Discord ํ˜ธ์ถœ ์—†์ด ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

Vitest๋Š” import ๊ฐ€๋Šฅํ•œ src ๋ชจ๋“ˆ์— ๋Œ€ํ•ด statements, branches, functions, lines๋ฅผ ํŒŒ์ผ๋ณ„ 100%๋กœ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. ์–‡์€ process bootstrap์ธ src/index.ts๋Š” ์ปค๋ฒ„๋ฆฌ์ง€ ๊ณ„์‚ฐ ๋Œ€์‹  ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์™€ ๋ฒˆ๋“ค์— ๋Œ€ํ•œ ์‹ค์ œ stdio handshake๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. Codecov์˜ project/patch ์ƒํƒœ๋„ ํ—ˆ์šฉ ์˜ค์ฐจ ์—†์ด 100%๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

  • MCP initialize, tool/resource ๋ชฉ๋ก๊ณผ ํ˜ธ์ถœ
  • feature flag์— ๋”ฐ๋ฅธ ์“ฐ๊ธฐ/์‚ญ์ œ ๋„๊ตฌ ๋…ธ์ถœ
  • Snowflake, pagination cursor, ๋ฉ”์‹œ์ง€ ๊ธธ์ด ๊ฒ€์ฆ
  • guild/channel allowlist ์„ ์ฐจ๋‹จ
  • ํƒ€์ธ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ๊ฑฐ๋ถ€์™€ ์‚ญ์ œ ํ™•์ธ
  • ๋ฉ˜์…˜ ์ฐจ๋‹จ ๋ฐ nonce ์ ์šฉ
  • ์ตœ๋Œ€ ์‘๋‹ต ํฌ๊ธฐ ์ œํ•œ
  • ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์™€ PyPI์šฉ ๋ฒˆ๋“ค์˜ ์‹ค์ œ MCP initialize/tools handshake
  • Claude MCPB์˜ ๊ณต์‹ CLI pack/unpack/manifest ๊ฒ€์ฆ, ๊ฒฐ์ •์  ๋ฐ”์ดํŠธ์™€ stdio handshake
  • npm, PyPI, MCP Registry, OCI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ฒ„์ „ ์ผ์น˜

CI๋Š” Node.js 22/24์—์„œ ๊ฒ€์‚ฌํ•˜๊ณ , ์ƒ์„ฑ๋œ npm tarball๊ณผ Python wheel์„ ๊ฐ๊ฐ ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์— ์„ค์น˜ํ•œ ๋’ค stdio handshake๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Python wheel ๋Ÿฐ์ฒ˜๋Š” Ubuntu/Windows์˜ Python 3.9/3.14์—์„œ๋„ ๋ณ„๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. MCPB๋„ ๋…๋ฆฝ์ ์œผ๋กœ ๋‘ ๋ฒˆ ๋นŒ๋“œํ•ด ๋ฐ”์ดํŠธ๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ณ , ๊ณต์‹ CLI๋กœ ๋‹ค์‹œ ์••์ถ• ํ•ด์ œํ•œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ์ค€๋น„์™€ OIDC Trusted Publishing ์„ค์ •์€ docs/releasing.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ฐœ์ธ์ •๋ณด์™€ ๋ณด์•ˆ ๋ณด๊ณ 

์ด ์„œ๋ฒ„๋Š” telemetry๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ Discord ์‘๋‹ต์„ ๋ณ„๋„๋กœ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ MCP ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ํ•„์š”ํ•œ Discord REST ํ˜ธ์ถœ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ๋ณด๊ด€ ๋ฒ”์œ„๋Š” PRIVACY.md, ์ทจ์•ฝ์  ๋น„๊ณต๊ฐœ ์ œ๋ณด ๋ฐฉ๋ฒ•์€ SECURITY.md๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ๊ณต๊ฐœ issue๋‚˜ ๋กœ๊ทธ์—๋Š” Bot Token์„ ์ ˆ๋Œ€ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐ

  • 401 / ํ† ํฐ ๊ฑฐ๋ถ€: Bot ๋ฉ”๋‰ด์—์„œ ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ํ•˜๊ณ  DISCORD_TOKEN์„ ๊ฐฑ์‹ ํ•˜์„ธ์š”. Bot ์ ‘๋‘์‚ฌ๋Š” ์ง์ ‘ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 403 / ๊ถŒํ•œ ์—†์Œ: ์ฑ„๋„์˜ View Channel, Read Message History, ํ•„์š” ์‹œ Send Messages๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ๋น„์–ด ์žˆ์Œ: Developer Portal์—์„œ Message Content Intent๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ์“ฐ๊ธฐ ๋„๊ตฌ๊ฐ€ ๋ชฉ๋ก์— ์—†์Œ: MCP ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค์˜ DISCORD_ENABLE_WRITES๊ฐ€ ๋ฌธ์ž์—ด true์ธ์ง€ ํ™•์ธํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์„ธ์š”.
  • allowlist ์˜ค๋ฅ˜: ID๋Š” ์ด๋ฆ„์ด๋‚˜ URL์ด ์•„๋‹ˆ๋ผ 17~20์ž๋ฆฌ ์ˆซ์ž ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Discord์˜ ๊ณต์‹ ๊ถŒํ•œยทintentยทrate limit ์„ธ๋ถ€์‚ฌํ•ญ์€ OAuth2 and Permissions, Gateway Intents, Message Resource, Rate Limits์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.