Discord Decision MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Discord Decision MCPAsk on Discord whether to proceed with the database migration or cancel."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Discord Decision MCP
Claude Code가 tmux Teammate 모드로 자율 작업 중, 사용자 결정이 필요한 시점에 Discord를 통해 질문하고 응답을 받아 작업을 재개하는 MCP 서버입니다.
특징
프로젝트당 Bot 1개: 각 프로젝트는 독립된 Discord Bot 사용
무한 대기 기본값: Timeout 없이 사용자 응답 대기 (Claude가 독단 진행 금지)
상태 영속화: 프로세스 재시작 후에도 대기 상태 복원
한국어 친화적: 한글 선택지, Yes/No 응답 지원
Related MCP server: MCP Discord Agent Communication
설치
방법 1: uvx로 실행 (권장)
uv가 설치되어 있으면 별도 설치 없이 바로 실행할 수 있습니다.
# GitHub에서 직접 실행
uvx --from git+https://github.com/yarang/discord-decision-mcp discord-mcp
# 또는 PyPI 설치 후
uvx discord-decision-mcp방법 2: 로컬 개발용 설치
# 저장소 클론
git clone https://github.com/yarang/discord-decision-mcp
cd discord-decision-mcp
# 의존성 설치 및 가상환경 생성
uv sync
# 실행
uv run discord-mcpuv 설치
uv가 없다면:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# 또는 Homebrew
brew install uv설정
1. Discord Bot 생성
"New Application" 클릭하여 앱 생성
"Bot" 탭에서 봇 생성 및 Token 복사
"OAuth2 > URL Generator"에서 봇 초대 링크 생성
Scopes:
botPermissions:
Send Messages,Create Public Threads,Send Messages in Threads,Read Message History
2. 환경변수 설정
cp .env.example .env.env 파일 수정:
DISCORD_BOT_TOKEN=Bot YOUR_BOT_TOKEN
DISCORD_CHANNEL_ID=123456789012345678
PROJECT_NAME=my-project3. Claude Code MCP 설정
프로젝트 루트에 .mcp.json 생성:
uvx 사용 (PyPI 배포 후)
{
"$schema": "https://github.com/anthropics/claude-code/raw/main/schema/mcp.json",
"mcpServers": {
"discord-decision": {
"command": "uvx",
"args": ["discord-decision-mcp"],
"env": {
"DISCORD_BOT_TOKEN": "Bot YOUR_BOT_TOKEN",
"DISCORD_CHANNEL_ID": "123456789012345678",
"PROJECT_NAME": "my-project"
}
}
}
}GitHub 직접 사용
{
"$schema": "https://github.com/anthropics/claude-code/raw/main/schema/mcp.json",
"mcpServers": {
"discord-decision": {
"command": "uvx",
"args": ["--from", "git+https://github.com/yarang/discord-decision-mcp", "discord-mcp"],
"env": {
"DISCORD_BOT_TOKEN": "Bot YOUR_BOT_TOKEN",
"DISCORD_CHANNEL_ID": "123456789012345678",
"PROJECT_NAME": "my-project"
}
}
}
}로컬 개발용
{
"$schema": "https://github.com/anthropics/claude-code/raw/main/schema/mcp.json",
"mcpServers": {
"discord-decision": {
"command": "uv",
"args": ["run", "--directory", "/path/to/discord-decision-mcp", "discord-mcp"],
"env": {
"DISCORD_BOT_TOKEN": "Bot YOUR_BOT_TOKEN",
"DISCORD_CHANNEL_ID": "123456789012345678",
"PROJECT_NAME": "my-project"
}
}
}
}참고: enableAllProjectMcpServers: true 설정이 ~/.claude/settings.json에 있으면 .mcp.json의 서버들이 자동으로 로드됩니다.
MCP Tools
discord_ask_decision (블로킹)
사용자 결정이 필요할 때 Discord Thread에 질문 전송 후 응답 대기.
result = discord_ask_decision(
question="DB 마이그레이션을 실행할까요?",
context="v1→v2 스키마 변경. ⚠️ 되돌리기 어려움",
options=["A) 지금 실행", "B) 스테이징 먼저", "C) 보류"]
)
# result.answer → "A) 지금 실행"discord_notify (논블로킹)
진행 상황 알림.
discord_notify(
message="테스트 실행 중...",
level="info" # info/warning/success/error
)discord_report_progress
작업 완료 리포트.
discord_report_progress(
title="배포 완료",
summary="v2.0.0 배포 성공",
details=["✅ 테스트 통과", "✅ DB 마이그레이션 완료"]
)discord_check_pending
세션 시작 시 미해결 질문 확인.
result = discord_check_pending()
# result.has_pending → True/False
# result.pending_questions → [...]discord_read_inbox / discord_clear_inbox
Discord 감시 데몬이 수집한 메시지 확인 및 삭제.
result = discord_read_inbox(unread_only=True, mark_read=False)
discord_clear_inbox(read_only=True)감시 데몬 (Discord Watcher)
Claude Code 세션과 무관하게 Discord 채널을 감시하는 별도 프로세스입니다.
# tmux 세션에서 시작
./scripts/start-discord-watch.sh
# 또는 직접 실행
uv run discord-watch --interval 10
# 상태 확인
tmux attach -t discord-watch
# 중지
tmux kill-session -t discord-watch개발
# 테스트 실행
uv run pytest tests/ -v
# 타입 체크
uv run pyright discord_mcp/
# 포맷팅
uv run ruff format discord_mcp/
# 린트
uv run ruff check discord_mcp/배포
PyPI 배포
# 빌드
uv build
# TestPyPI 업로드 (테스트)
uv publish --index testpypi
# PyPI 업로드
uv publishGitHub 배포
git tag v1.0.0
git push origin v1.0.0라이선스
MIT
Available Tools
8 toolsdiscord_ask_decisionA
사용자의 결정이 필요할 때 Discord Thread에 질문을 전송하고 응답이 올 때까지 블로킹 대기한다.
timeout_seconds=None: 무한 대기 (기본값, 권장)
options=[] : 자유 텍스트 응답
options=[...]: 선택지 제시 (A/B/C 형식 권장)
Returns: { "success": bool, "answer": str | None, "selected_option": str | None, "question_id": str, "timed_out": bool, "aborted": bool, }
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | 사용자에게 물어볼 질문 내용 | |
| context | Yes | 현재 작업 상황. 사용자가 판단하기 충분한 정보를 담는다 | |
| options | No | 선택지 목록. 예: ['A) 지금 실행', 'B) 스테이징 먼저', 'C) 보류']. 자유 응답이면 빈 리스트. | |
| timeout_seconds | No | 응답 대기 Timeout(초). None이면 무한 대기 (기본값). 설정 시 해당 시간 후 작업 중단. | |
| thread_id | No | 기존 Discord Thread ID. None이면 새 Thread를 자동 생성한다. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: blocking behavior ('블로킹 대기'), timeout handling with defaults, and response format details in the Returns section. However, it doesn't mention authentication needs, rate limits, error conditions, or what happens if the thread_id is invalid. It adds useful context but leaves some behavioral aspects unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: a clear purpose statement followed by bullet points explaining key parameters and a Returns section. Every sentence earns its place—no redundant information. It's appropriately sized for a tool with 5 parameters and complex blocking behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (blocking wait, multiple parameters, interaction with Discord), the description is complete. With 100% schema coverage and an output schema provided (the Returns section), the description doesn't need to explain parameter details or return values. It focuses on the higher-level purpose, behavioral context, and usage guidelines, which is exactly what's needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly. The description adds meaningful semantic context beyond the schema: it explains that timeout_seconds=None means infinite wait (recommended), clarifies options=[] enables free-text response while options=[...] provides choices, and recommends A/B/C format for options. This provides valuable usage guidance that complements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '사용자의 결정이 필요할 때 Discord Thread에 질문을 전송하고 응답이 올 때까지 블로킹 대기한다' (sends a question to a Discord Thread when user decision is needed and blocks waiting for response). It specifies the exact action (send question to Discord Thread), resource (Discord Thread), and distinguishes from siblings like discord_notify (notification) or discord_report_progress (progress reporting).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: '사용자의 결정이 필요할 때' (when user decision is needed). It implies this is for interactive decision-making scenarios, but doesn't explicitly state when NOT to use it or name alternatives among sibling tools (e.g., discord_notify for one-way notifications). The guidance is helpful but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_check_pendingA
세션 시작 시 미해결 pending 질문이 있는지 확인한다. pending이 있으면 반드시 처리 후 새 작업을 시작해야 한다.
Returns: { "has_pending": bool, "pending_questions": list of { question_id, question, thread_id, asked_at, status } }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the tool's purpose and workflow implications, but doesn't disclose behavioral traits like whether it's read-only, authentication needs, rate limits, or error conditions. The description adds context about session timing and mandatory processing, but lacks operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with two sentences: one stating the purpose and timing, another establishing the workflow requirement. The return format is clearly documented in a separate section. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters, an output schema, and no annotations, the description provides good contextual completeness. It explains when to use the tool and what happens with pending questions. The output schema handles return values, so the description appropriately focuses on purpose and workflow rather than output details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description doesn't need to explain parameters, and it appropriately focuses on the tool's purpose and usage instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to check for unresolved pending questions at session start. It specifies the verb 'check' and resource 'pending questions', though it doesn't explicitly differentiate from sibling tools like 'discord_read_inbox' or 'discord_clear_inbox' which might handle similar concepts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines: '세션 시작 시' (at session start) and 'pending이 있으면 반드시 처리 후 새 작업을 시작해야 한다' (if pending exists, must process before starting new work). This clearly defines when to use it and establishes a workflow requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_clear_inboxC
Discord inbox에서 메시지를 삭제한다.
Args: read_only: true면 읽은 메시지만 삭제
Returns: {"success": true, "deleted_count": 5}
| Name | Required | Description | Default |
|---|---|---|---|
| read_only | No | true면 읽은 메시지만 삭제, false면 모든 메시지 삭제 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions deletion behavior but lacks critical details: it doesn't specify if this is reversible, what permissions are required, or any rate limits. The description adds minimal context beyond the basic action, leaving significant behavioral gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by structured Args and Returns sections. It avoids unnecessary fluff, but the Args section could be more integrated into the main description rather than a separate bullet. Overall, it's efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter with full schema coverage and an output schema, the description is minimally adequate. However, as a destructive tool with no annotations, it should provide more behavioral context (e.g., safety warnings, prerequisites). The output schema handles return values, but the description lacks completeness for informed usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'read_only' fully documented in the schema. The description briefly mentions the parameter in the Args section, but adds no additional meaning or examples beyond what the schema already provides. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('메시지를 삭제한다' - deletes messages) and resource ('Discord inbox'), making the purpose immediately understandable. However, it does not explicitly differentiate from sibling tools like discord_delete_message or discord_delete_messages, which likely handle message deletion in different contexts or scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like discord_delete_message and discord_delete_messages, there is no indication of how this tool differs (e.g., clearing an entire inbox vs. specific messages), leaving the agent to guess based on naming alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_messageA
Discord에서 메시지를 삭제한다.
⚠️ 주의: 삭제된 메시지는 복구할 수 없습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | 채널 ID 또는 Thread ID | |
| message_id | Yes | 삭제할 메시지 ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clearly discloses the destructive nature ('삭제된 메시지는 복구할 수 없습니다' - deleted messages cannot be recovered) and includes a warning symbol (⚠️). However, it doesn't mention authentication requirements, rate limits, error conditions, or what happens with insufficient permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with just two sentences - one stating the purpose, one providing critical warning. Every element earns its place, and the warning is appropriately highlighted with a symbol. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with 2 parameters, 100% schema coverage, and an output schema (though not shown), the description provides the essential warning about irreversibility. However, as a mutation tool with no annotations, it could benefit from mentioning authentication or permission requirements. The existence of an output schema means return values don't need explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (channel_id and message_id). The description adds no additional parameter information beyond what's in the schema, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('삭제한다' - deletes) and resource ('메시지' - message) in Discord. It directly distinguishes from sibling tools like discord_delete_messages (plural) by specifying single message deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like discord_delete_messages or other Discord operations. The description doesn't mention prerequisites, permissions needed, or contextual constraints beyond the warning about irreversibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_messagesA
Discord에서 여러 메시지를 일괄 삭제한다.
⚠️ 주의: 삭제된 메시지는 복구할 수 없습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | 채널 ID | |
| message_ids | Yes | 삭제할 메시지 ID 목록 (2-100개) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses a critical behavioral trait: '삭제된 메시지는 복구할 수 없습니다' (deleted messages cannot be recovered), which is essential for a destructive operation. However, it doesn't mention permissions, rate limits, or error conditions, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste: the first states the purpose, and the second provides a critical warning. It's appropriately sized and front-loaded, with every sentence earning its place by adding essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive bulk operation), no annotations, and an output schema (which handles return values), the description is fairly complete. It covers the irreversible nature of deletion, but could improve by addressing permissions or error handling. The output schema reduces the need to explain returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional meaning about parameters beyond what's in the schema (e.g., no extra context on channel_id or message_ids). Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('일괄 삭제한다' - bulk delete) and resource ('Discord에서 여러 메시지' - multiple messages in Discord). It distinguishes from sibling 'discord_delete_message' (singular) by specifying bulk deletion, making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'discord_delete_message' (for single messages) or 'discord_clear_inbox' (which might clear messages differently). It lacks explicit when/when-not instructions or named alternatives, offering only basic functional context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_notifyA
진행 상황을 Discord에 알린다 (논블로킹). 결정이 필요 없는 상태 업데이트, 경고, 완료 알림에 사용한다.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | 알림 메시지 내용 | |
| level | No | 알림 레벨 | info |
| thread_id | No | 전송할 Thread ID. None이면 기본 채널에 전송. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context beyond the schema: it specifies the tool is '논블로킹' (non-blocking), indicating it won't block execution while sending notifications. It also clarifies the tool's purpose is for notifications 'that don't require decisions,' which helps understand its scope. However, it doesn't mention authentication needs, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured. Two short sentences efficiently communicate the tool's purpose and usage guidelines. Every word earns its place, with no redundant information. The Korean language doesn't affect conciseness scoring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which means return values are documented elsewhere), no annotations, and 100% schema coverage, the description provides good contextual completeness. It covers purpose, key behavioral trait (non-blocking), and usage guidelines. For a notification tool with structured documentation elsewhere, this is reasonably complete, though it could mention more about error handling or performance characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions general use cases but doesn't explain parameter meanings or relationships. With complete schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '진행 상황을 Discord에 알린다 (논블로킹)' translates to 'Notify progress to Discord (non-blocking).' It specifies the action (notify), target (Discord), and a key behavioral trait (non-blocking). However, it doesn't explicitly differentiate from siblings like discord_report_progress, which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: '결정이 필요 없는 상태 업데이트, 경고, 완료 알림에 사용한다' translates to 'Use for status updates, warnings, and completion notifications that don't require decisions.' This gives good guidance on appropriate use cases. It doesn't explicitly mention when NOT to use it or name alternatives like discord_ask_decision for decision-related notifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_read_inboxA
Discord inbox에 저장된 메시지를 조회한다.
감시 데몬(discord-watch)이 수집한 Discord 메시지를 조회합니다. Claude Code는 이 Tool을 호출하여 사용자가 Discord에서 보낸 메시지를 확인할 수 있습니다.
Returns: { "success": true, "messages": [ { "message_id": "1234567890", "channel_id": "1234567890", "thread_id": null, "author": "username", "author_id": "1234567890", "content": "메시지 내용", "timestamp": "2024-01-01T00:00:00Z", "read": false } ], "count": 1, "unread_count": 1 }
| Name | Required | Description | Default |
|---|---|---|---|
| unread_only | No | true면 읽지 않은 메시지만 반환, false면 모든 메시지 반환 | |
| mark_read | No | true면 조회한 메시지를 읽음으로 표시 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool retrieves messages collected by a monitoring daemon and can return read/unread status. However, it doesn't mention behavioral aspects like rate limits, authentication requirements, potential side effects (e.g., marking messages as read via the mark_read parameter), or error handling. The description adds some context but lacks depth on operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences plus a Returns section. The first sentence states the purpose, the second provides context, and the third gives usage guidance. The Returns section is front-loaded but could be integrated more seamlessly. Minimal waste, though the structure slightly separates the output example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with output schema), the description is fairly complete. It explains what the tool does, its source, and usage context. The output schema in the description details the return format, reducing the need for further explanation. However, it could better address behavioral aspects like side effects or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (unread_only, mark_read) well-documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3. No compensation is needed since schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '조회한다' (retrieve/query) messages stored in the Discord inbox. It specifies the source ('감시 데몬(discord-watch)이 수집한 Discord 메시지') and distinguishes it from siblings by focusing on reading inbox messages rather than deleting (discord_delete_message), clearing (discord_clear_inbox), or notifying (discord_notify).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: 'Claude Code는 이 Tool을 호출하여 사용자가 Discord에서 보낸 메시지를 확인할 수 있습니다' (Claude Code can call this tool to check messages sent by the user on Discord). However, it doesn't explicitly state when to use this tool versus alternatives like discord_check_pending or provide exclusions. The guidance is present but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_report_progressA
작업 완료 또는 단계 완료 시 결과를 Discord에 리포트한다. 결정 질문 없이 진행 상황만 공유할 때 사용한다.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | 리포트 제목 | |
| summary | Yes | 작업 결과 요약 | |
| details | No | 세부 항목 목록 | |
| thread_id | No | 전송할 Thread ID. None이면 기본 채널. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool reports results to Discord but doesn't disclose behavioral traits like whether it's a read-only operation, if it requires specific permissions, rate limits, or what happens when thread_id is null. The description is minimal and lacks crucial operational context for a tool that interacts with an external service.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just two sentences in Korean, front-loaded with the core purpose followed by usage guidance. Every sentence earns its place with no wasted words, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (context signals indicate 'Has output schema: true'), the description doesn't need to explain return values. However, for a tool with no annotations and interaction with an external service like Discord, the description is too minimal—it lacks context on authentication, error handling, or integration specifics. It's adequate but has clear gaps in operational completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing good documentation for all parameters (title, summary, details, thread_id). The description doesn't add any parameter-specific semantics beyond what the schema already explains, such as clarifying the format of details or when to use thread_id. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '작업 완료 또는 단계 완료 시 결과를 Discord에 리포트한다' (Reports results to Discord when a task or step is completed). It specifies the verb '리포트한다' (reports) and the resource 'Discord', but doesn't explicitly differentiate from siblings like discord_notify or discord_ask_decision beyond a brief usage guideline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: '결정 질문 없이 진행 상황만 공유할 때 사용한다' (Use when sharing progress without decision questions). This distinguishes it from discord_ask_decision (which likely involves questions) and implies it's for progress updates rather than notifications or inbox management, though it doesn't explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
discord_ask_decision - First observed
discord_check_pending - First observed
discord_clear_inbox - First observed
discord_delete_message - First observed
discord_delete_messages - First observed
discord_notify - First observed
discord_read_inbox - First observed
discord_report_progress
TDQS
Scored across 8 tools
Most tools have distinct purposes, but discord_notify and discord_report_progress could be confused as both handle non-blocking notifications. The others clearly target different actions like asking decisions, checking pending items, reading/deleting messages, and clearing inboxes.
All tools follow a consistent discord_verb_noun naming pattern with snake_case throughout. The naming is predictable and readable, making it easy to understand each tool's function at a glance.
With 8 tools, this server is well-scoped for Discord interaction and decision management. Each tool serves a specific purpose in the workflow, from asking decisions to managing messages and notifications, without feeling bloated or sparse.
The toolset covers core Discord interaction needs well, including decision-making, message management, and notifications. A minor gap exists in message creation/sending tools, but the described domain focuses more on receiving and managing user input, which is adequately covered.
Maintenance
Related MCP Connectors
Human approvals, notifications, inbound webhooks, wake-ups for headless agents. Free trial: /try
Reach your own phone from an AI agent: notifications, approval questions, reminders, ring, files.
Human-in-the-loop for AI coding agents — ask questions, get approvals via Slack.
Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to send messages to human users via chat platforms (currently Discord) and optionally wait for human responses, facilitating human-in-the-loop interactions.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to send notifications and request user input via Discord during long-running tasks. It allows users to remotely interact with their AI assistants and provide feedback through the Discord messaging platform.262MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Discord by sending notifications, creating channels, and managing interactive questions with support for two-way responses. It allows for streamlined communication through channel keys and supports various question types like multiple-choice and extended-answer modals.-
- AlicenseNot gradedqualityAmaintenanceEnables comprehensive interaction with Discord servers to manage guilds, channels, messages, and members through an agentic workflow. It supports RAG capabilities, rate-limited message operations, and includes a React-based dashboard for monitoring and configuration.2MIT