dooray-mcp

tallpizza/dooray-mcp

3.2

If you are the rightful owner of dooray-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

Dooray MCP Server integrates Dooray API with Claude Code using the Model Context Protocol (MCP) server.

Tools
5
Resources
0
Prompts
0

Dooray MCP Server

Dooray API๋ฅผ Claude Code์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ MCP (Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ

์ด MCP ์„œ๋ฒ„๋Š” Dooray์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ 6๊ฐœ์˜ ํ†ตํ•ฉ ๋„๊ตฌ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  1. dooray_tasks - ์—…๋ฌด ๊ด€๋ฆฌ (๋ชฉ๋ก ์กฐํšŒ, ์ƒ์„ธ ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ, ์ƒํƒœ ๋ณ€๊ฒฝ, ๋‹ด๋‹น์ž ์ง€์ •)
  2. dooray_comments - ๋Œ“๊ธ€ ๊ด€๋ฆฌ (๋ชฉ๋ก ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ, ๋ฉ˜์…˜ ์ง€์›)
  3. dooray_tags - ํƒœ๊ทธ ๊ด€๋ฆฌ (๋ชฉ๋ก ์กฐํšŒ, ์ƒ์„ฑ, ์—…๋ฌด์— ํƒœ๊ทธ ์ถ”๊ฐ€/์ œ๊ฑฐ)
  4. dooray_search - ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (์—…๋ฌด ๊ฒ€์ƒ‰, ๋‹ด๋‹น์ž๋ณ„/์ƒํƒœ๋ณ„/ํƒœ๊ทธ๋ณ„/๊ธฐ๊ฐ„๋ณ„ ๊ฒ€์ƒ‰)
  5. dooray_members - ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ (์ด๋ฉ”์ผ/ID ๊ฒ€์ƒ‰, ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ, ํ”„๋กœ์ ํŠธ ๋ฉค๋ฒ„ ๋ชฉ๋ก)
  6. dooray_files - ํŒŒ์ผ ๋ฐ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ (์—…๋ฌด ํŒŒ์ผ ๋ชฉ๋ก, ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ํŒŒ์ผ ์ฝ˜ํ…์ธ  ๋‹ค์šด๋กœ๋“œ, Content ID๋กœ ์ง์ ‘ ์ ‘๊ทผ)

๋น ๋ฅธ ์„ค์น˜

GitHub์—์„œ ์ž๋™ ์„ค์น˜

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/tallpizza/dooray-mcp.git
cd dooray-mcp

# 2. ์ž๋™ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
./install.sh

# 3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (.env ํŒŒ์ผ ์ˆ˜์ •)
# DOORAY_API_TOKEN๊ณผ DOORAY_DEFAULT_PROJECT_ID๋ฅผ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

# 4. Claude Code์— ์ถ”๊ฐ€
claude mcp add-json dooray "$(cat .mcp.json | jq -c .dooray)"

์ƒ์„ธ ์„ค์น˜ ๋ฐ ์„ค์ •

1. GitHub์—์„œ ์„ค์น˜

# GitHub์—์„œ ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone https://github.com/tallpizza/dooray-mcp.git
cd dooray-mcp

# ์ข…์†์„ฑ ์„ค์น˜
uv sync

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

.env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋‚ด์šฉ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค:

# .env.example์„ ๋ณต์‚ฌ
cp .env.example .env

# .env ํŒŒ์ผ ๋‚ด์šฉ
DOORAY_API_TOKEN=your-actual-dooray-api-token
DOORAY_BASE_URL=https://api.dooray.com
DOORAY_DEFAULT_PROJECT_ID=your-default-project-id

LOG_LEVEL=INFO

3. Claude Code MCP ์„œ๋ฒ„ ์ถ”๊ฐ€

๋ฐฉ๋ฒ• 1: JSON์œผ๋กœ ์ถ”๊ฐ€ (๊ถŒ์žฅ)
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ ์™„์ „ํ•œ ์„ค์ •
claude mcp add-json dooray '{
  "type": "stdio",
  "command": "uv",
  "args": ["run", "python", "-m", "dooray_mcp.server"],
  "env": {
    "DOORAY_API_TOKEN": "your-actual-dooray-api-token",
    "DOORAY_BASE_URL": "https://api.dooray.com",
    "DOORAY_DEFAULT_PROJECT_ID": "your-default-project-id"
  }
}'
๋ฐฉ๋ฒ• 2: ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ
# .mcp.json ์„ค์ • ํŒŒ์ผ ์ค€๋น„
cp .mcp.json.example .mcp.json
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ ๊ฐ’์œผ๋กœ ์ˆ˜์ •

# Claude Code์—์„œ ์‚ฌ์šฉ
claude --mcp-config .mcp.json

4. ์—ฐ๊ฒฐ ํ™•์ธ

# MCP ์„œ๋ฒ„ ๋ชฉ๋ก ํ™•์ธ
claude mcp list

# Dooray ์„œ๋ฒ„๊ฐ€ โœ“ Connected๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ

5. ๋„๊ตฌ ํ…Œ์ŠคํŠธ

# ์—…๋ฌด ๋ชฉ๋ก ์กฐํšŒ ํ…Œ์ŠคํŠธ
claude --print "dooray_tasks๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—…๋ฌด ๋ชฉ๋ก์„ ์กฐํšŒํ•ด์ฃผ์„ธ์š”."

# ๋Œ“๊ธ€ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
claude --print "dooray_comments๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋Œ“๊ธ€์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”."

์‚ฌ์šฉ๋ฒ•

๋„๊ตฌ๋ณ„ ์‚ฌ์šฉ ์˜ˆ์ œ

1. dooray_tasks (์—…๋ฌด ๊ด€๋ฆฌ)

// ์—…๋ฌด ๋ชฉ๋ก ์กฐํšŒ
{
  "action": "list",
  "projectId": "project-123"  // ์„ ํƒ์‚ฌํ•ญ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
}

// ์—…๋ฌด ์ƒ์„ฑ
{
  "action": "create",
  "projectId": "project-123",
  "title": "์ƒˆ ์—…๋ฌด",
  "description": "์—…๋ฌด ์„ค๋ช…",
  "priority": "normal"
}

2. dooray_comments (๋Œ“๊ธ€ ๊ด€๋ฆฌ)

// ๋Œ“๊ธ€ ์ƒ์„ฑ (๋ฉ˜์…˜ ํฌํ•จ)
{
  "action": "create",
  "taskId": "task-456",
  "content": "๋Œ“๊ธ€ ๋‚ด์šฉ",
  "mentions": ["user1", "user2"]  // ์„ ํƒ์‚ฌํ•ญ
}

3. dooray_tags (ํƒœ๊ทธ ๊ด€๋ฆฌ)

// ์ƒˆ ํƒœ๊ทธ ์ƒ์„ฑ
{
  "action": "create",
  "projectId": "project-123",
  "tagName": "๊ธด๊ธ‰",
  "tagColor": "#FF0000"  // # ํฌํ•จ ๊ฐ€๋Šฅ, ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋จ
}

// ์—…๋ฌด์— ํƒœ๊ทธ ์ถ”๊ฐ€
{
  "action": "add_to_task",
  "taskId": "task-456",
  "tagName": "๊ธด๊ธ‰"
}

4. dooray_search (๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ)

// ์—…๋ฌด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰
{
  "searchType": "tasks",
  "projectId": "project-123",
  "query": "๋ฒ„๊ทธ ์ˆ˜์ •"
}

// ์ƒํƒœ๋ณ„ ๊ฒ€์ƒ‰
{
  "searchType": "by_status",
  "projectId": "project-123",
  "status": "์™„๋ฃŒ"
}

5. dooray_members (์‚ฌ์šฉ์ž ๊ด€๋ฆฌ)

// ์ด๋ฉ”์ผ๋กœ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰
{
  "action": "search_by_email",
  "email": "user@company.com"
}

// ํ”„๋กœ์ ํŠธ ๋ฉค๋ฒ„ ๋ชฉ๋ก
{
  "action": "list_project_members",
  "projectId": "project-123"
}

6. dooray_files (ํŒŒ์ผ ๋ฐ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ)

// ์—…๋ฌด ํŒŒ์ผ ๋ชฉ๋ก ์กฐํšŒ
{
  "action": "list_task_files",
  "taskId": "task-456",
  "projectId": "project-123"  // ์„ ํƒ์‚ฌํ•ญ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
}

// ์—…๋ฌด ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ
{
  "action": "get_task_file_metadata",
  "taskId": "task-456",
  "fileId": "file-789",
  "projectId": "project-123"
}

// ์—…๋ฌด ํŒŒ์ผ ์ฝ˜ํ…์ธ  ๋‹ค์šด๋กœ๋“œ (base64 ์ธ์ฝ”๋”ฉ)
{
  "action": "get_task_file_content",
  "taskId": "task-456",
  "fileId": "file-789",
  "projectId": "project-123"
}

// Content ID๋กœ ์ง์ ‘ ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ (Drive API)
{
  "action": "get_drive_file_metadata",
  "fileId": "content-id-xyz"
}

// Content ID๋กœ ์ง์ ‘ ํŒŒ์ผ ์ฝ˜ํ…์ธ  ๋‹ค์šด๋กœ๋“œ (Drive API)
{
  "action": "get_drive_file_content",
  "fileId": "content-id-xyz"
}

API ์ •๋ณด

  • Base URL: https://api.dooray.com
  • ์ธ์ฆ: Authorization: dooray-api {TOKEN}
  • ์—…๋ฌด ๊ด€๋ฆฌ: /project/v1/projects/{projectId}/posts
  • ๋Œ“๊ธ€ ๊ด€๋ฆฌ: /project/v1/projects/{projectId}/posts/{taskId}/logs
  • ํƒœ๊ทธ ๊ด€๋ฆฌ: /project/v1/projects/{projectId}/tags
  • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ: /common/v1/members
  • ํŒŒ์ผ ๊ด€๋ฆฌ: /project/v1/projects/{projectId}/posts/{taskId}/files
  • Drive ํŒŒ์ผ: /drive/v1/files/{fileId}

๋ฌธ์ œ ํ•ด๊ฒฐ

์—ฐ๊ฒฐ ๋ฌธ์ œ

  1. ์ธ์ฆ ์˜ค๋ฅ˜: DOORAY_API_TOKEN์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ
  2. ํ”„๋กœ์ ํŠธ ID ์˜ค๋ฅ˜: DOORAY_DEFAULT_PROJECT_ID๊ฐ€ ์กด์žฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ธ์ง€ ํ™•์ธ
  3. ๊ถŒํ•œ ์˜ค๋ฅ˜: API ํ† ํฐ์ด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ

MCP ์—ฐ๊ฒฐ ๋ฌธ์ œ

  1. ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹คํŒจ: claude mcp list์—์„œ ์ƒํƒœ ํ™•์ธ
  2. ๋„๊ตฌ ์ธ์‹ ์‹คํŒจ: MCP ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ๋˜๋Š” Claude Code ์žฌ์‹œ์ž‘
  3. ๊ถŒํ•œ ๋ฌธ์ œ: --dangerously-skip-permissions ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ (๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ)

๊ฐœ๋ฐœ ๋ฐ ๊ธฐ์—ฌ

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค ํ•˜์— ๋ฐฐํฌ๋˜๋ฉฐ, ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ์™€ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ์ •๋ณด

  • ๋ฒ„์ „: 1.0.0
  • Python: 3.8+
  • MCP: 1.0.0+
  • HTTP ํด๋ผ์ด์–ธํŠธ: httpx 0.25.0+