Dooray MCP Server
The Dooray MCP Server enables AI assistants to integrate with Dooray's project management platform for comprehensive task, project, wiki, and collaboration management.
Core Capabilities:
User & Project Management: Retrieve authenticated user information and member details, list active projects with detailed information, view project members and member groups, and extract project IDs from Dooray URLs.
Task Management: Create, read, update, and search tasks with powerful filtering by assignees, status, due dates, tags, and milestones. Access complete task details including body content, attachments, and hierarchy. Manage task comments (create, list, and update discussions excluding email-based comments). Update workflow status and track task progress through different states (backlog, registered, working, closed).
Templates: List, view, create, update, and delete project task templates. Use templates for standardized task creation with guided interactive workflows including template selection, member assignment, and mandatory tag handling.
Tags & Organization: List tags organized by groups, handle mandatory tag requirements for task creation/updates, and manage milestones for organizing tasks by releases or sprints.
File Management: Upload, list, download, and delete attachments with metadata retrieval. Attach files to tasks and comments.
Wiki Management: Create, read, update, and manage wiki pages and comments with full markdown/HTML content support.
Advanced Features: URL pattern recognition for automatic project and task ID extraction, pagination support for list operations with configurable page sizes, and advanced filtering and sorting capabilities for tasks by date ranges, members, status, and tags.
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., "@Dooray MCP Servershow me all open tasks in the marketing project"
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.
Dooray MCP Server
MCP server for Dooray! - enabling AI assistants to interact with Dooray projects, tasks, wikis, and more.
설치
NPM (권장)
npm install -g @jhl8041/dooray-mcpSmithery
npx -y @smithery/cli install @jhl8041/dooray-mcp --client claudeRelated MCP server: Dooray MCP Server
설정
1. API 토큰 발급 (필수)
두레이 개인설정 > API > 개인 인증 토큰 메뉴에서 생성할 수 있습니다. 가이드
2. 환경변수 등록 (필수)
export DOORAY_API_TOKEN=<발급 받은 API 토큰>MCP 등록
1. Claude Code 등록
claude mcp add -s user dooray-mcp npx @jhl8041/dooray-mcp@latest2. Claude Desktop 설정
설정 파일 위치: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"dooray": {
"command": "npx @jhl8041/dooray-mcp@latest",
"env": { "DOORAY_API_TOKEN": "발급받은_토큰" }
}
}
}Tool 목록
공통
get-my-member-info- 사용자 정보 조회
프로젝트
get-project-list- 프로젝트 목록get-project- 프로젝트 상세정보get-project-workflow-list- 업무 상태 목록get-task-list- 업무 검색/필터링get-task- 업무 상세정보create-task- 업무 생성update-task- 업무 수정create-task-comment- 댓글 작성get-task-comment-list- 댓글 목록update-task-comment- 댓글 수정 (이메일 댓글 수정 불가)get-milestone-list- 마일스톤 목록get-tag-list- 태그 목록get-tag- 태그 상세정보create-tag- 태그 생성 (개별/그룹 태그)update-tag-group- 태그 그룹 설정 수정get-project-template-list- 템플릿 목록get-project-template- 템플릿 상세정보create-project-template- 템플릿 생성update-project-template- 템플릿 수정delete-project-template- 템플릿 삭제get-project-member-list- 프로젝트 멤버 목록get-project-member-group-list- 멤버 그룹 목록
첨부파일
upload-attachment- 파일 업로드get-attachment-list- 첨부파일 목록get-attachment-metadata- 첨부파일 메타데이터download-attachment- 파일 다운로드 (savePath 옵션으로 로컬 저장 지원)delete-attachment- 첨부파일 삭제
드라이브
get-drive-list- 드라이브 목록 (개인/프로젝트)get-drive-file-list- 파일/폴더 목록 조회get-drive-file-meta- 파일 메타정보 조회 (file ID만으로)create-drive-folder- 폴더 생성rename-drive-file- 파일/폴더 이름 변경move-drive-file- 파일/폴더 이동 (휴지통 이동 포함)copy-drive-file- 파일 복사delete-drive-file- 휴지통 파일 영구삭제upload-drive-file- 파일 업로드download-drive-file- 파일 다운로드 (savePath 옵션으로 로컬 저장 지원)update-drive-file- 파일 새버전 업로드
위키
get-wiki-list- 위키 목록get-wiki-page-list- 위키 페이지 목록get-wiki-page- 위키 페이지 상세정보create-wiki-page- 위키 페이지 생성update-wiki-page- 위키 페이지 수정get-wiki-page-comment-list- 위키 페이지 댓글 목록get-wiki-page-comment- 위키 페이지 댓글 상세정보create-wiki-page-comment- 위키 페이지 댓글 작성update-wiki-page-comment- 위키 페이지 댓글 수정delete-wiki-page-comment- 위키 페이지 댓글 삭제
위키 파일
upload-wiki-file- 위키에 파일 업로드 (페이지 생성 전 pre-upload용, attachFileId 반환)upload-wiki-page-file- 기존 위키 페이지에 파일 업로드download-wiki-page-file- 위키 페이지 첨부파일 다운로드 (fileId 사용, savePath 옵션으로 로컬 저장 지원)download-wiki-attach-file- 위키 첨부파일 다운로드 (attachFileId 사용, savePath 옵션으로 로컬 저장 지원)delete-wiki-page-file- 위키 페이지 첨부파일 삭제
개발
npm run build # 빌드
npm run dev # 개발 모드
npm run watch # Watch 모드Prompts (프롬프트)
사전 정의된 프롬프트 템플릿을 제공합니다:
Prompt | 설명 |
| 구조화된 템플릿으로 새 업무 생성 (bug, feature, improvement, general) |
| 주간 업무 요약 생성 |
| 프로젝트 상태 리포트 생성 |
| 업무 검토 체크리스트 생성 |
Resources (리소스)
컨텍스트 데이터를 제공하는 리소스:
URI | 설명 |
| Dooray API 정보 및 사용 가능한 도구 목록 |
| 워크플로우 상태 참조 가이드 (backlog, registered, working, closed) |
| 업무 우선순위 참조 가이드 |
라이선스
MIT
참고
Available Tools
17 toolscreate-taskA
Create a new task (업무) in a Dooray project. Required fields: projectId and subject.
RECOMMENDED INTERACTIVE WORKFLOW (ask user questions step by step):
Templates: Call get-project-template-list, ask user if they want to use a template
If yes: Call get-project-template to get full details, use as defaults for subject/body/tags/assignees/cc/priority
Extract tag IDs: template.tags.map(t => t.id)
Transform members: template.users.to/cc to {id, type} format
Title & Body: Ask for task title (subject) and content (body)
If template selected: Elaborate user's content to fit template structure
If no template and no body provided: Ask user for body content before creating task
Body format: {"mimeType": "text/x-markdown", "content": "..."}
Assignees & CC: Ask for "to" (담당자) and "cc" (참조)
Get options: get-my-member-info (current user), get-project-member-list (members), get-project-member-group-list (groups)
Member types: {"id": "...", "type": "member|group|email"}
"member": organizationMemberId, "group": group id, "email": email address
Tags: Call get-tag-list, ask which tags to register
CRITICAL: Check tagGroup.mandatory=true - MUST select from these groups or task creation fails (500 error)
tagGroup.selectOne=true: Select exactly ONE tag from group
tagGroup.selectOne=false: Select one or MORE tags from group
Key Settings:
Priority: Default "none" if not specified
Subtasks: Set parentPostId to create 하위업무
URL extraction: "https://nhnent.dooray.com/task/PROJECT_ID" → extract PROJECT_ID
Examples:
Simple: {"projectId": "123", "subject": "Fix bug", "tagIds": ["tag1"]}
With template: {"projectId": "123", "subject": "[SMS] Issue", "body": {...}, "assignees": [{...}], "tagIds": ["tag1", "tag2"]}
Full: {"projectId": "123", "subject": "Deploy", "assignees": [{"id": "user1", "type": "member"}], "cc": [{"id": "user2", "type": "member"}], "priority": "high", "tagIds": ["tag1"]}
Returns: Created task with ID and number.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the task will be created | |
| parentPostId | No | Parent task ID to create this as a subtask (하위업무). Omit to create a regular task. | |
| subject | Yes | Task subject/title (required) | |
| body | No | Task body with formatted content. IMPORTANT: If user has not provided body content and no template is selected, ask the user for task details/description before creating the task. | |
| assignees | No | List of assignees (담당자). To get assignee options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each assignee object has {id: string, type: "member"|"group"|"email"}. | |
| cc | No | List of CC recipients (참조). To get CC options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each CC object has {id: string, type: "member"|"group"|"email"}. | |
| dueDate | No | Due date in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) | |
| milestoneId | No | Milestone ID to associate with this task | |
| tagIds | No | Array of tag IDs to apply to this task. IMPORTANT: Check for mandatory tag groups using get-tag-list tool. Projects may require specific tags from mandatory tag groups. | |
| priority | No | Task priority level (highest, high, normal, low, lowest, none). Default: "none" if not specified by user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels by disclosing critical behavioral traits: it warns of potential errors (e.g., 500 error if mandatory tags are not selected), explains default behaviors (priority defaults to 'none'), describes the return format ('Created task with ID and number'), and details workflow constraints like body content requirements. This goes beyond what the input schema alone provides.
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 well-structured with sections like workflow, key settings, and examples, but it is overly verbose (over 400 words). While most content is useful, some details (e.g., step-by-step interactive workflow) might be better suited for external documentation, reducing front-loaded clarity. It earns its place but could be more streamlined.
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 (10 parameters, nested objects, no output schema, and no annotations), the description is highly complete. It covers purpose, usage, behavioral details, parameter semantics, and provides examples. It compensates for the lack of annotations and output schema by explaining return values and error conditions, making it sufficient for an agent to use the tool effectively.
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 input schema has 100% description coverage, so the baseline is 3. The description adds significant value by elaborating on parameter usage: it explains how to derive values (e.g., using sibling tools for assignees/cc, extracting projectId from URLs), provides examples with context, and clarifies critical constraints (e.g., tag selection rules). However, it doesn't cover all parameters equally (e.g., dueDate, milestoneId get less attention), preventing a perfect score.
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 verb 'Create' and the resource 'new task (업무) in a Dooray project', distinguishing it from sibling tools like update-task or get-task-list. It specifies the required fields (projectId and subject), making the purpose specific and actionable.
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 guidance on when and how to use this tool through a detailed 'RECOMMENDED INTERACTIVE WORKFLOW', including step-by-step instructions and references to sibling tools (e.g., get-project-template-list, get-tag-list). It clearly outlines prerequisites and alternatives, such as using templates or handling mandatory tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-task-commentA
Add a comment (댓글) to an existing Dooray task.
This tool creates a comment on a task, separate from editing the task body itself. Use this for:
Adding progress updates or status notes
Responding to questions or discussions
Logging information related to the task
Attaching files with context
When to Use:
create-task-comment: For adding discussion, updates, or notes (댓글)
update-task: For modifying the task description, title, or metadata
URL Pattern Recognition: When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID":
Extract the first numeric ID after "/task/" as projectId
Extract the second numeric ID as taskId
File Attachments:
To attach files, first upload them using the file upload API
Then provide the returned file IDs in the attachFileIds parameter
See: https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419
Content Format:
Use "text/x-markdown" for markdown formatting (recommended)
Use "text/html" for rich HTML content
Body format: {"mimeType": "text/x-markdown", "content": "..."}
Examples:
Simple comment: { "projectId": "123456", "taskId": "789012", "body": {"mimeType": "text/x-markdown", "content": "Progress update: Completed initial implementation"} }
With markdown: { "projectId": "123456", "taskId": "789012", "body": { "mimeType": "text/x-markdown", "content": "## Test Results\n\n- ✅ All unit tests passing\n- ✅ Integration tests passed\n- ⏳ Performance testing in progress" } }
With file attachments: { "projectId": "123456", "taskId": "789012", "body": {"mimeType": "text/x-markdown", "content": "See attached screenshots"}, "attachFileIds": ["file123", "file456"] }
Returns: Created comment with ID.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the task belongs | |
| taskId | Yes | Task ID to add comment to | |
| body | Yes | Comment content with format | |
| attachFileIds | No | Array of file IDs to attach (optional). Files must be uploaded first using the file upload API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers substantial behavioral context: it explains the separation from task body editing, provides URL pattern recognition guidance for extracting IDs, details file attachment workflow (upload first then attach), specifies content format options with recommendations, and mentions the return value ('Created comment with ID'). It doesn't cover error conditions or rate limits, but provides comprehensive operational guidance.
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?
Well-structured with clear sections (purpose, use cases, when to use, URL patterns, file attachments, content format, examples, return value). While comprehensive, some sections like the detailed examples could be slightly condensed. Every sentence serves a purpose, but the length approaches the upper bound of appropriate conciseness.
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 creation tool with no annotations and no output schema, the description provides excellent context: clear purpose, usage guidelines, behavioral details, parameter guidance, and examples. The main gap is the lack of output schema documentation (only mentions 'Created comment with ID' without structure), but given the comprehensive input guidance and sibling tool context, this is largely mitigated.
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 baseline is 3. The description adds significant value beyond the schema: it explains how to extract projectId and taskId from URLs, provides detailed file attachment workflow with external reference, gives content format recommendations (markdown preferred), and includes multiple concrete examples showing parameter usage in context. This compensates well for the schema-only documentation.
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 ('creates a comment on a task') and resource ('Dooray task'), distinguishing it from sibling tools like 'update-task' (for modifying task description) and 'update-task-comment' (for editing existing comments). The Korean term '댓글' reinforces the purpose as adding discussion content separate from the main task body.
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?
Explicit 'When to Use' section provides clear alternatives: use this tool for adding comments versus 'update-task' for modifying task description or metadata. It also lists specific use cases (progress updates, responding to questions, logging information, attaching files) that help the agent understand appropriate contexts for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-milestone-listA
Get list of milestones for a project.
Milestones are used to organize and track tasks by release or sprint. This tool retrieves all milestones in a project.
Note: Returns compact response with essential fields only.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
Examples:
Get all milestones: {"projectId": "123456"}
Get only open milestones: {"projectId": "123456", "status": "open"}
Get only closed milestones: {"projectId": "123456", "status": "closed"}
Returns an array of milestones with id, name, description, dates, and status. Use milestone IDs when creating or updating tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get milestones from | |
| status | No | Filter by milestone status (open or closed) |
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 effectively describes key behaviors: returns a 'compact response with essential fields only', specifies the return format ('array of milestones with id, name, description, dates, and status'), and provides guidance on how to use the output ('Use milestone IDs when creating or updating tasks'). It doesn't mention rate limits, authentication needs, or pagination, but covers the essential operational behavior well.
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 well-structured with clear sections (purpose, note, URL guidance, examples, return format) and appropriately sized. Most sentences earn their place, though the 'URL Pattern Recognition' section could be slightly more concise. The information is front-loaded with the core purpose stated first.
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 read-only list tool with no annotations and no output schema, the description provides good completeness: it explains the purpose, provides usage examples, describes the return format and fields, and gives context about how the output relates to other operations. The main gap is the lack of explicit information about authentication requirements or error conditions, but overall it's quite comprehensive for this type of tool.
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. The description adds minimal value beyond the schema by providing examples of parameter usage in different scenarios (all milestones, open only, closed only), but doesn't explain parameter semantics or constraints that aren't already in the schema descriptions. This meets the baseline expectation when 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 with specific verb ('Get list of') and resource ('milestones for a project'), and distinguishes it from siblings by focusing on milestones rather than tasks, projects, or other entities. It explains what milestones are used for ('organize and track tasks by release or sprint'), which helps differentiate from task-related tools.
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 about when to use this tool (to retrieve milestones for organizing/tracking tasks) and includes URL pattern recognition guidance for extracting projectId from Dooray URLs. However, it doesn't explicitly state when NOT to use this tool or mention specific alternatives among the sibling tools for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-my-member-infoA
Get information about the authenticated user.
This tool retrieves your Dooray member profile using your API token. Most importantly, it returns your member ID which is needed for other operations like filtering tasks by assignee.
No parameters needed - it automatically uses your authentication token.
Examples:
Get my info: {} (empty parameters)
"What's my Dooray member ID?"
"Show my Dooray profile"
Returns your complete member profile including:
id: Your member ID (important for task queries)
name, email, organization
locale, timezone settings
display preferences
This is often the first tool to call to get your member ID for use in other tools like list-tasks.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 effectively explains that the tool uses the API token automatically, requires no parameters, and returns the complete member profile. However, it doesn't mention potential limitations like rate limits or error conditions.
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 well-structured and front-loaded with the core purpose, followed by usage guidance, examples, and return details. Every sentence adds value without redundancy, and the bulleted list efficiently presents return fields without unnecessary elaboration.
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 0-parameter tool with no annotations and no output schema, the description provides excellent context about what the tool does, when to use it, and what it returns. The only minor gap is the lack of explicit output structure documentation, though the bulleted list partially compensates for this.
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 input schema has 0 parameters with 100% coverage, so the baseline would be 3. The description adds significant value by explicitly stating 'No parameters needed - it automatically uses your authentication token' and providing example usage with empty parameters, which helps the agent understand how to invoke it correctly.
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 ('Get information about the authenticated user') and resource ('Dooray member profile'), distinguishing it from sibling tools like get-task or get-project-list by focusing on the user's own profile rather than project/task data. It explicitly mentions retrieving the member ID for use in other operations.
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 guidance on when to use this tool ('often the first tool to call to get your member ID for use in other tools like list-tasks') and includes practical examples of use cases. It clearly differentiates this from other tools by emphasizing its role in obtaining authentication context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-projectA
Get detailed information about a specific Dooray project.
This tool retrieves complete details of a single project including its configuration, scope, organization, and category information.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID" or "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
IMPORTANT: When a specific project URL is provided, use this tool directly instead of calling get-project-list first.
Examples:
From URL: Extract "1769381697328002548" from "https://nhnent.dooray.com/task/1769381697328002548" → {"projectId": "1769381697328002548"}
From URL with task: Extract "1769381697328002548" from "https://nhnent.dooray.com/task/1769381697328002548/4143841687558152504" → {"projectId": "1769381697328002548"}
Direct ID: {"projectId": "123456"}
"Show me details of project 123456"
Returns project information including:
id, code, name: Basic project identifiers
description: Project description
scope: private or public
organizationId: Organization this project belongs to
projectCategoryId: Category ID (null if no category)
projectType: default, task, or issue
state: active or archived
Use this to get full details about a specific project when you have its project ID or URL.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to retrieve details for |
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 does well by explaining URL pattern recognition for parameter extraction, providing concrete examples of input handling, and detailing the return structure (listing specific fields like id, code, name, description, scope, etc.). However, it doesn't mention potential error conditions, rate limits, or authentication requirements.
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 well-structured with clear sections (purpose, URL pattern recognition, important usage note, examples, return details, and usage summary). While comprehensive, it maintains focus with each section serving a clear purpose. Some minor trimming could improve conciseness, but overall it's efficiently 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?
For a single-parameter read operation with no output schema, the description provides excellent context. It explains the tool's purpose, usage guidelines, parameter handling with examples, and detailed return structure. The only gaps are the lack of error handling information and authentication requirements, but given the tool's simplicity and the comprehensive description, it's mostly complete.
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 baseline would be 3. However, the description adds significant value beyond the schema by explaining how to extract the projectId from Dooray URLs with multiple examples, and providing natural language usage patterns ('Show me details of project 123456'). This enhances understanding of parameter semantics beyond the basic schema description.
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 with specific verbs ('retrieves', 'get detailed information') and resources ('Dooray project', 'complete details including configuration, scope, organization, and category information'). It distinguishes itself from sibling tools like 'get-project-list' by focusing on a single project rather than listing multiple projects.
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 guidance on when to use this tool versus alternatives. It states: 'When a specific project URL is provided, use this tool directly instead of calling get-project-list first.' This directly addresses the sibling tool 'get-project-list' and gives clear conditions for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-listA
Get list of active projects that you belong to.
This tool retrieves only active projects where you are a member. Archived projects are excluded.
Note: Returns compact response with essential fields only. For complete project details, use get-project.
IMPORTANT: When the user provides a specific Dooray URL (e.g., "https://nhnent.dooray.com/task/PROJECT_ID"), do NOT use this tool. Instead, extract the PROJECT_ID from the URL and call get-project directly to get information about that specific project.
This tool is for browsing your active projects when no specific project URL or ID is provided.
Examples:
Get all your active projects: {} (empty parameters)
Get second page with 50 items: {"page": 1, "size": 50}
Returns a paginated list with project id and name (project code) for each project.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default: 0) | |
| size | No | Number of items per page (default: 20, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it discloses that it returns only active projects (filtering behavior), excludes archived projects, returns compact response with essential fields, is paginated, and has default values. It doesn't mention rate limits or auth needs, but covers key behavioral traits adequately for a read 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?
Well-structured with clear sections (purpose, note, important warning, usage context, examples, return format). Some redundancy exists (e.g., 'Get list' and 'retrieves' in first two sentences), but overall it's appropriately sized and front-loaded with critical 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?
For a read-only list tool with 2 fully documented parameters and no output schema, the description is complete: it explains what the tool does, when to use it, behavioral constraints (active-only, compact response), pagination, and distinguishes from alternatives. No significant gaps given the tool's complexity.
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. The description adds minimal value beyond the schema by providing usage examples with parameters, but doesn't explain semantics or constraints beyond what's in the schema. Baseline 3 is appropriate when 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 verb ('Get list', 'retrieves') and resource ('active projects that you belong to'), specifying the scope (active projects where user is a member, excluding archived). It distinguishes from sibling 'get-project' by noting this is for listing vs. getting details.
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?
Explicitly states when to use ('for browsing your active projects when no specific project URL or ID is provided') and when not to use (when user provides a specific Dooray URL, use 'get-project' instead). It names the alternative tool and provides clear context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-member-group-listA
Get list of member groups in a project.
Member groups are collections of members that can be assigned to tasks as a group. This tool retrieves all member groups configured in a project.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
Pagination:
Default page size is 20 (maximum: 100)
Use page parameter to get additional pages if totalCount > size
Note: Returns compact response with essential fields only (id and code).
Examples:
Get all member groups: {"projectId": "123456"}
Get with pagination: {"projectId": "123456", "page": 0, "size": 50}
Returns a paginated response with totalCount and array of member groups containing:
id: Member group ID
code: Member group name/code
Use this tool to find member groups for assigning tasks to groups of members.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get member groups from | |
| page | No | Page number for pagination (default: 0) | |
| size | No | Number of items per page (default: 20, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers well. It discloses pagination behavior (default page size 20, max 100, page parameter usage), URL pattern recognition for extracting projectId, and response format details (compact response with id and code only). No contradictions exist since annotations are absent.
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?
Well-structured with clear sections (description, URL pattern, pagination, note, examples, returns, usage). While comprehensive, some sections like the detailed examples and returns explanation could be slightly condensed. Every sentence adds value, but it's moderately verbose rather than maximally concise.
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 read-only list tool with no annotations and no output schema, the description provides excellent completeness. It covers purpose, usage context, behavioral details (pagination, URL parsing, response format), parameter guidance, and examples. The agent has all necessary information to use this tool effectively.
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 solid baseline documentation for all three parameters. The description adds some value with URL pattern recognition guidance for extracting projectId and pagination context, but doesn't significantly enhance parameter meaning beyond what the schema already provides.
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 verb 'Get list' and resource 'member groups in a project', with additional context about what member groups are ('collections of members that can be assigned to tasks as a group'). It distinguishes from siblings like 'get-project-member-list' by focusing specifically on groups rather than individual members.
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?
Explicit guidance is provided: 'Use this tool to find member groups for assigning tasks to groups of members.' This gives clear context for when to use this tool versus alternatives like 'get-project-member-list' for individual members or other sibling tools for different resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-member-listA
Get list of members in a project with their details.
This tool fetches project members and enriches each member with detailed information including name and email address.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
Role Filtering:
Optionally filter by roles: ["admin"], ["member"], or ["admin", "member"]
If not specified, returns all members regardless of role
Pagination:
Default page size is 20 (maximum: 100)
Use page parameter to get additional pages if totalCount > size
Note: Returns compact response with essential fields only (id, name, externalEmailAddress).
Examples:
Get all members: {"projectId": "123456"}
Get only admins: {"projectId": "123456", "roles": ["admin"]}
Get with pagination: {"projectId": "123456", "page": 0, "size": 50}
Returns a paginated response with totalCount and array of members containing:
id: Member ID (organizationMemberId)
name: Member's display name
externalEmailAddress: Member's email address
Use this tool to find project members for assigning tasks or understanding team composition.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get members from | |
| roles | No | Filter by roles (optional) | |
| page | No | Page number for pagination (default: 0) | |
| size | No | Number of items per page (default: 20, max: 100) |
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 and does so effectively. It explains pagination behavior (default page size, maximum, how to get additional pages), URL pattern recognition for extracting project IDs, role filtering options and defaults, and the compact response format. The only minor gap is lack of explicit mention about authentication requirements or rate limits.
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 well-structured with clear sections (URL Pattern Recognition, Role Filtering, Pagination, Note, Examples, Returns) and front-loads the core purpose. While comprehensive, some sections could be slightly more concise, but every sentence adds meaningful information that helps the agent understand how to use the tool effectively.
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 tool with 4 parameters, no annotations, and no output schema, the description provides excellent context. It explains the response format in detail, includes multiple usage examples, covers behavioral aspects like pagination and filtering, and gives practical guidance. The only minor gap is the lack of explicit error handling or edge case information, but overall it's highly complete.
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?
Despite 100% schema description coverage, the description adds significant value beyond the schema. It provides concrete examples of parameter usage, explains the URL pattern recognition for obtaining projectId, clarifies role filtering behavior ('If not specified, returns all members regardless of role'), and gives practical guidance on pagination usage. This goes well beyond the basic parameter descriptions in 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 with specific verbs ('Get list of members', 'fetches project members and enriches each member') and identifies the resource ('project members'). It distinguishes from siblings like 'get-project' or 'get-project-list' by focusing specifically on members rather than projects themselves.
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 guidance on when to use this tool ('Use this tool to find project members for assigning tasks or understanding team composition') and includes practical examples. It also distinguishes from potential alternatives by specifying the tool's specific scope (members with details) rather than other project-related information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-templateA
Get detailed information about a specific project template.
This tool retrieves complete template details including body, guide, subject, users, tags, and milestone. The returned data is intended for creating new tasks from templates.
IMPORTANT - Full Details Returned: This tool returns ALL template fields (not filtered) because:
Template data will be used for creating new tasks
Need body, guide, subject, users, tags, milestone for task creation
This is a detail view, not a list view
Template Macros: Template macros like ${year}, ${month}, etc. are returned as-is (not interpolated). These can be processed when creating tasks if needed.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
How to get template IDs:
Use the get-project-template-list tool to list all templates in a project and get their IDs.
Examples:
Get template details: {"projectId": "123456", "templateId": "789012"}
"Show me details of template 789012 in project 123456"
Returns complete template information including:
id: Template ID
templateName: Template name
project: Project info (id, code)
body: Template body with mimeType and content (markdown or HTML)
guide: Template guide/instructions with mimeType and content
subject: Default task subject
users: Default assignees (to) and CC
tags: Default tag IDs
milestone: Default milestone (id, name)
priority: Default priority level
dueDate, dueDateFlag: Default due date settings
isDefault: Whether this is the default template
Use this tool to get full template details before creating a new task from the template.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the template belongs | |
| templateId | Yes | Template ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does so effectively. It discloses important behavioral traits: 'returns ALL template fields (not filtered)', explains why ('Template data will be used for creating new tasks'), describes template macro handling ('returned as-is, not interpolated'), and explains URL pattern recognition for parameter extraction. It doesn't mention error conditions or rate limits, but provides substantial behavioral context.
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 well-structured with clear sections (purpose, important details, macros, URL patterns, how to get IDs, examples, return fields, usage guidance). While somewhat lengthy, each section adds value. The front-loaded purpose statement is clear, and the information is organized for easy scanning.
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 (retrieving detailed template data for task creation), no annotations, and no output schema, the description provides excellent completeness. It explains the purpose, usage context, behavioral details, parameter guidance, relationship to sibling tools, and comprehensively lists all return fields with explanations of their significance for task creation.
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 input schema has 100% description coverage, so baseline is 3. The description adds significant value beyond the schema by explaining 'URL Pattern Recognition' - how to extract projectId from Dooray URLs, and providing concrete examples of parameter usage. It also clarifies the relationship between parameters and template identification.
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: 'Get detailed information about a specific project template' and 'retrieves complete template details'. It distinguishes from its sibling 'get-project-template-list' by specifying this is a detail view, not a list view, and explicitly mentions the sibling tool for obtaining template IDs.
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 guidance: 'Use this tool to get full template details before creating a new task from the template' and 'Use the `get-project-template-list` tool to list all templates in a project and get their IDs'. It clearly states when to use this tool versus the sibling list tool and connects it to task creation workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-template-listA
Get list of project task templates.
Templates are pre-created task structures with predefined title and body content. This tool retrieves all available templates in a project.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
Note: Returns compact response with essential fields only (id and templateName).
Pagination:
Default page size is 20 (maximum: 100)
Use page parameter to get additional pages if totalCount > size
Set size parameter to control items per page (max: 100)
Examples:
Get all templates (first page): {"projectId": "123456"}
Get second page: {"projectId": "123456", "page": 1, "size": 20}
Get with custom page size: {"projectId": "123456", "page": 0, "size": 50}
Returns a paginated response with totalCount and an array of templates containing id and templateName.
Templates help users quickly create tasks with predefined structure and content, useful for common task types like bug reports, feature requests, or documentation tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get templates from | |
| page | No | Page number for pagination (default: 0) | |
| size | No | Number of items per page (default: 20, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and excels. It discloses key behavioral traits: URL pattern recognition for parameter extraction, compact response format (id and templateName only), detailed pagination behavior (defaults, maximums, usage examples), and the purpose/benefit of templates. This goes well beyond basic functionality.
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 well-structured with clear sections (URL Pattern Recognition, Note, Pagination, Examples) and front-loaded core purpose. While somewhat lengthy, every sentence adds value—no waste. It could be slightly more concise in the final explanatory paragraph.
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 3 parameters with 100% schema coverage but no annotations or output schema, the description provides excellent completeness. It covers purpose, usage context, behavioral details, parameter semantics with examples, and response format. For a read-only list tool, this is comprehensive and leaves no significant gaps.
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 baseline is 3. The description adds significant value beyond the schema: it explains how to derive projectId from URLs, provides concrete examples of parameter combinations, and clarifies pagination logic (e.g., 'if totalCount > size'). This enhances understanding but doesn't fully explain all edge cases.
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 verb 'retrieves' and resource 'all available templates in a project', specifying it's about 'project task templates' with 'predefined title and body content'. It distinguishes from siblings like get-project-template (singular) by emphasizing it retrieves a list of all templates, not a specific one.
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: to get templates for a project, with URL pattern recognition guidance for extracting projectId. It doesn't explicitly state when not to use it or name alternatives among siblings, but the context is sufficiently clear for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-workflow-listA
Get list of workflow statuses (업무 상태) for a project.
Workflows represent the task statuses available in a project. There are four workflow classes:
backlog: 대기 (waiting/backlog)
registered: 등록/할 일 (registered/to-do)
working: 진행 중 (in progress)
closed: 완료 (completed/done)
Each project may have custom workflows within these classes. Use workflow IDs when creating or updating tasks (e.g., in create-task or update-task tools).
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the numeric ID after "/task/") and use it as the projectId parameter.
Examples:
Get all workflows: {"projectId": "1769381697328002548"}
Returns: Array of workflows with id, name, order, and class.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get workflow statuses from |
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 effectively explains what the tool returns (array of workflows with specific fields), the structure of workflow classes, and how workflows relate to task operations, though it doesn't mention potential rate limits or authentication requirements.
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 well-structured with clear sections (purpose, workflow classes, usage guidance, URL pattern, examples, return format), front-loads key information, and every sentence contributes meaningfully without redundancy.
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 (1 parameter, no output schema, no annotations), the description is complete: it explains purpose, parameter semantics, usage context, return format, and practical examples, leaving no significant gaps for an AI agent to understand and invoke the tool correctly.
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 baseline is 3. The description adds value by explaining how to obtain the projectId parameter through URL pattern recognition with concrete examples, which enhances understanding beyond the schema's basic description.
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 ('Get list of workflow statuses') and resource ('for a project'), distinguishing it from sibling tools like get-project or get-task-list by focusing specifically on workflow statuses rather than general project or task information.
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 guidance on when to use this tool ('Use workflow IDs when creating or updating tasks') and includes practical examples like URL pattern recognition for extracting project IDs from Dooray URLs, which helps differentiate usage from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-tag-listA
Get list of tags for a project, grouped by tag groups.
Tags are used to categorize and label tasks. This tool retrieves all available tags organized by their tag groups for better clarity.
Response Format: Returns tags grouped by their tagGroup:
{
"tagGroups": [
{
"id": "group1",
"name": "Type",
"mandatory": true,
"selectOne": true,
"tags": [
{ "id": "tag1", "name": "Bug" },
{ "id": "tag2", "name": "Feature" }
]
}
]
}CRITICAL - Mandatory Tag Groups: When creating/updating tasks, you MUST include tags from all mandatory tag groups:
mandatory: true - At least one tag from this group is required
selectOne: true - Exactly ONE tag must be selected from this group
selectOne: false - One OR MORE tags must be selected from this group
Failing to provide required tags will result in a 500 error.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter.
Pagination:
Default page size is 100 (maximum) to retrieve all tags
Use page parameter to get additional pages if totalCount > 100
Examples:
Get all tags: {"projectId": "123456"}
Get second page: {"projectId": "123456", "page": 1, "size": 100}
Use tag IDs when creating or updating tasks with create-task or update-task tools.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get tags from | |
| page | No | Page number for pagination (default: 0) | |
| size | No | Number of items per page (default: 100, max: 100) |
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 and does so comprehensively. It explains the response format with a detailed JSON example, documents critical constraints (mandatory tag groups and 500 error consequences), provides URL pattern recognition guidance for parameter extraction, and details pagination behavior including defaults and maximums. This goes well beyond basic functionality description.
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 well-structured with clear sections (Response Format, CRITICAL, URL Pattern Recognition, Pagination, Examples) that make information easy to find. While longer than minimal, every section adds value: the JSON example clarifies output, critical warnings prevent errors, and examples demonstrate usage. The information is front-loaded with the core purpose first, though some redundancy exists in explaining tag purposes.
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 tool with 3 parameters, no annotations, and no output schema, the description provides exceptional completeness. It covers the tool's purpose, detailed output format, critical constraints for downstream usage, parameter extraction patterns, pagination behavior, and practical examples. The description compensates fully for the lack of structured metadata, making the tool's behavior and integration context completely understandable.
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?
While the schema has 100% description coverage for all 3 parameters, the description adds significant practical context beyond the schema. It explains how to extract projectId from Dooray URLs, provides concrete examples of parameter usage, clarifies that page defaults to 0 (not just 'default: 0'), and emphasizes that size defaults to maximum 100 'to retrieve all tags.' This operational guidance enhances understanding beyond the schema's basic definitions.
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: 'Get list of tags for a project, grouped by tag groups.' It specifies the verb ('Get'), resource ('tags'), and organizational aspect ('grouped by tag groups'), distinguishing it from sibling tools like get-task-list or get-project-list which handle different resources. The description immediately clarifies what the tool retrieves and how it's structured.
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 guidance on when to use this tool: 'Use tag IDs when creating or updating tasks with create-task or update-task tools.' It also explains the critical relationship between this tool's output and other operations by detailing mandatory tag group requirements for task creation/updates, preventing errors. This creates clear context for when this tool is necessary versus when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-taskA
Get detailed information about a specific task.
This tool retrieves complete details of a task including its full body content, attachments, workflow status, assignees, and all metadata.
URL Pattern Recognition - Two formats supported:
Project-scoped URL: "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID"
Extract the first numeric ID after "/task/" as projectId (optional)
Extract the second numeric ID as taskId (required)
Example: "https://nhnent.dooray.com/task/1769381697328002548/4206132384174602537" → {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
Task-only URL: "https://nhnent.dooray.com/project/tasks/TASK_ID"
Extract the numeric ID after "/tasks/" as taskId
Example: "https://nhnent.dooray.com/project/tasks/4206132384174602537" → {"taskId": "4206132384174602537"}
IMPORTANT:
taskId is REQUIRED, projectId is OPTIONAL
The taskId is the unique identifier (ID) from the URL, NOT the sequential task number shown in the UI
You can fetch task details with just the taskId without knowing the projectId
When a specific task URL is provided, use this tool directly instead of calling get-project-list first
To find taskId from task descriptions, use get-task-list to search and get task IDs
Examples:
From URL pattern 1: {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
From URL pattern 2: {"taskId": "4206132384174602537"}
Just taskId: {"taskId": "789012345"}
With both IDs: {"taskId": "789012345", "projectId": "123456"}
Returns complete task information including:
Basic info: id, number, subject, taskNumber (PROJECT-CODE/NUMBER format)
Project: project object with id and code
Status: workflowClass (registered/working/closed), workflow (id and name), closed flag, priority
Dates: createdAt, updatedAt, dueDate, dueDateFlag
Content: body with mimeType (text/x-markdown or text/html) and content
Hierarchy: parent task information (id, number, subject) if this is a subtask
People: users object with from (creator), to (assignees), cc (watchers)
Organization: milestone (id, name), tags array (id, name)
Files: files array with attachments (id, name, size)
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task ID (unique identifier, REQUIRED) | |
| projectId | No | Project ID (optional, can be omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it explains URL pattern recognition, clarifies that taskId is the unique identifier (not UI number), states projectId is optional, and details what information is returned. It doesn't mention rate limits, auth needs, or error handling, but provides substantial operational context.
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 well-structured with clear sections (purpose, URL patterns, important notes, examples, return details). It's appropriately sized for a tool with complex parameter extraction logic, though some sentences could be tightened (e.g., the examples section is quite detailed).
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 read operation with 2 parameters (100% schema coverage) and no output schema, the description is quite complete: it explains purpose, usage guidelines, parameter extraction from URLs, important clarifications, and detailed return structure. The main gap is lack of explicit behavioral notes like rate limits or error cases, but it covers most operational needs.
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 baseline is 3. The description adds significant value: it explains two URL formats for extracting parameters, provides concrete examples, clarifies that taskId is required and projectId optional, and warns that taskId is the unique identifier (not UI number). This goes well beyond the schema's basic descriptions.
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 verb 'retrieves' and resource 'complete details of a task', specifying it includes body content, attachments, workflow status, assignees, and metadata. It distinguishes from sibling tools like get-task-list (which searches/lists) and get-project (which gets project info).
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?
Explicit guidance is provided: 'When a specific task URL is provided, use this tool directly instead of calling get-project-list first' and 'To find taskId from task descriptions, use get-task-list to search and get task IDs.' It clearly differentiates when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-task-comment-listA
Get list of comments (댓글) on a specific Dooray task.
This tool fetches all comments that have been added to a task. Comments are discussions, updates, or notes added by team members.
URL Pattern Recognition: When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID" or "https://nhnent.dooray.com/project/tasks/TASK_ID":
Extract the first numeric ID after "/task/" as projectId (if present)
Extract the second numeric ID (or the ID after "/tasks/") as taskId
IMPORTANT: Both projectId and taskId are REQUIRED.
Pagination:
Default page size is 20 (maximum: 100)
Use page parameter to get additional pages if totalCount > size
Sorting:
Default: createdAt (oldest comments first)
Use "-createdAt" to get newest comments first
Note: Returns filtered response with essential fields only (id, creator, body).
Examples:
Get all comments (first page): {"projectId": "123456", "taskId": "789012"}
Get newest comments first: {"projectId": "123456", "taskId": "789012", "order": "-createdAt"}
Get second page: {"projectId": "123456", "taskId": "789012", "page": 1, "size": 20}
Returns a paginated response with totalCount and array of comments containing:
id: Comment ID
creator: Who wrote the comment (member or emailUser)
For members: {"type": "member", "member": {"organizationMemberId": "..."}}
For email users: {"type": "emailUser", "emailUser": {"emailAddress": "...", "name": "..."}}
body: Comment content with mimeType and content
Use this tool to view discussion history, progress updates, or notes on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the task belongs | |
| taskId | Yes | Task ID to get comments from | |
| page | No | Page number (default: 0) | |
| size | No | Items per page (default: 20, max: 100) | |
| order | No | Sort order: createdAt (oldest first, default), -createdAt (newest first) |
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 and does so comprehensively. It explains URL pattern recognition for extracting IDs, emphasizes that both IDs are REQUIRED, details pagination behavior (default page size, maximum, how to get additional pages), describes sorting options with defaults, and notes the filtered response format. This goes well beyond basic functionality disclosure.
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 well-structured with clear sections (URL Pattern Recognition, IMPORTANT, Pagination, Sorting, Note, Examples, Returns, Use case) and front-loads the core purpose. While comprehensive, some sections could be more concise - for example, the URL pattern explanation is quite detailed. Overall, most sentences earn their place by adding valuable 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 (5 parameters, pagination, sorting, URL parsing) and the absence of both annotations and output schema, the description provides complete context. It explains behavioral aspects, provides practical examples, documents the return structure in detail, and gives clear usage guidance. This fully compensates for the lack of structured metadata.
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 some value by emphasizing that both projectId and taskId are REQUIRED (though the schema's required array already indicates this) and provides practical examples with all parameters. However, it doesn't add significant meaning beyond what the schema provides, 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 tool's purpose with specific verb ('Get list of comments') and resource ('on a specific Dooray task'), distinguishing it from siblings like 'get-task' (which fetches task details) and 'create-task-comment' (which creates new comments). It explains what comments are ('discussions, updates, or notes added by team members'), providing context beyond just the name.
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 ('to view discussion history, progress updates, or notes on a task'), but doesn't explicitly mention when NOT to use it or name specific alternatives. While it distinguishes from siblings by function, it lacks explicit guidance like 'use get-task for task details instead of comments'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-task-listA
Get list of tasks in a Dooray project with powerful filtering and sorting.
IMPORTANT: projectId is REQUIRED. This tool fetches tasks from a specific project.
Note: Returns compact response with essential fields only. For complete task details, use get-task.
URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID" or "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter. When a URL is provided, use get-project for project info instead of get-project-list.
Member ID Filters (use organizationMemberId from get-my-member-info):
toMemberIds: Tasks assigned to specific members
ccMemberIds: Tasks where members are in CC
fromMemberIds: Tasks created by specific members
Workflow Filters:
postWorkflowClasses: ["backlog", "registered", "working", "closed"]
postWorkflowIds: Project-specific workflow IDs
Date Filters (flexible patterns):
"today" - Today's tasks
"thisweek" - This week's tasks
"prev-7d" - Last 7 days
"next-7d" - Next 7 days
ISO8601 range: "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00"
Examples:
All tasks in project: {"projectId": "123456"}
Tasks assigned to me: {"projectId": "123456", "toMemberIds": ["my-org-member-id"]}
Tasks in "working" status: {"projectId": "123456", "postWorkflowClasses": ["working"]}
Tasks due today: {"projectId": "123456", "dueAt": "today"}
Recent tasks (sorted by update time): {"projectId": "123456", "updatedAt": "prev-7d", "order": "-postUpdatedAt"}
Tasks with specific milestone and tags: {"projectId": "123456", "milestoneIds": ["milestone123"], "tagIds": ["tag456"]}
Sorting:
Default: Tasks are sorted by most recently updated first (-postUpdatedAt)
Custom: Use order parameter with: postDueAt, postUpdatedAt, createdAt
Prefix with - for descending (e.g., "-createdAt")
Returns paginated task list with id, number, subject, status, priority, dueDate, assignees, tags, and milestone.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID (REQUIRED) | |
| fromEmailAddress | No | Filter by creator email address | |
| fromMemberIds | No | Filter by creator member IDs | |
| toMemberIds | No | Filter by assignee member IDs (organizationMemberId) | |
| ccMemberIds | No | Filter by CC member IDs | |
| tagIds | No | Filter by tag IDs | |
| parentPostId | No | Filter by parent post ID (get subtasks) | |
| postNumber | No | Filter by specific task number | |
| postWorkflowClasses | No | Filter by workflow classes: backlog, registered, working, closed | |
| postWorkflowIds | No | Filter by workflow IDs | |
| milestoneIds | No | Filter by milestone IDs | |
| subjects | No | Filter by task subject | |
| createdAt | No | Filter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range) | |
| updatedAt | No | Filter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range) | |
| dueAt | No | Filter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range) | |
| order | No | Sort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending) | |
| page | No | Page number (default: 0) | |
| size | No | Items per page (default: 20, max: 100) |
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 effectively describes key behaviors: the tool returns a paginated list with compact response fields, explains default sorting (-postUpdatedAt), and details filtering capabilities (member IDs, workflows, dates). It could improve by mentioning rate limits or authentication needs, but covers most operational aspects well.
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 well-structured with clear sections (IMPORTANT, Note, URL Pattern Recognition, filters, examples, sorting) and uses bold for emphasis. While lengthy, every section adds practical value—no wasted sentences. It could be slightly more concise in the examples section, but overall efficiently conveys complex 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 (18 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, usage guidelines, parameter semantics with examples, and behavioral details like pagination and response format. The main gap is lack of explicit output schema details, but it describes the returned fields adequately for a list tool.
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 baseline is 3. The description adds significant value beyond the schema by explaining parameter semantics in context: it clarifies how to use member ID filters (linking to get-my-member-info), enumerates workflow classes, provides flexible date patterns with examples, and explains sorting options with prefixes. This compensates for the schema's technical descriptions.
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: 'Get list of tasks in a Dooray project with powerful filtering and sorting.' It specifies the resource (tasks), the scope (Dooray project), and distinguishes it from sibling tools like get-task (for complete details) and get-project (for project info from URLs).
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 guidance on when to use this tool vs alternatives: it directs users to get-task for complete task details, get-project for project info from URLs, and get-my-member-info for organizationMemberId. It also clarifies that projectId is REQUIRED and explains URL pattern recognition for extracting IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-taskA
Update an existing task in a Dooray project.
RECOMMENDED WORKFLOW (guide for AI assistants):
Fetch Current Task: Call get-task to retrieve current values before updating
Preserves existing data when only updating specific fields
Shows current assignees, tags, milestone, workflow status
Use returned data to know what values to preserve
Determine Changes: Identify what needs updating
If changing assignees/cc: Get options from get-my-member-info, get-project-member-list, get-project-member-group-list
Member types: {"id": "...", "type": "member|group|email"}
"member": organizationMemberId, "group": group id, "email": email address
Handle Tags: Call get-tag-list if updating tags
CRITICAL: Check tagGroup.mandatory=true - MUST include tags from all mandatory groups or update fails (500 error)
tagGroup.selectOne=true: Select exactly ONE tag from group
tagGroup.selectOne=false: Select one or MORE tags from group
IMPORTANT: tagIds is a COMPLETE replacement, not additive
Handle Workflow: Use get-project-workflow-list to see available statuses
Provide workflowId to change task status
Workflow classes: backlog (대기), registered (등록/할 일), working (진행 중), closed (완료)
IMPORTANT NOTES:
Complete Replacement: assignees, cc, and tagIds completely REPLACE existing values (not merged)
Preserve Data: Only provide fields you want to change; unprovided fields remain unchanged
Korean Terms: "to" = 담당자 (assignee), "cc" = 참조 (reference)
Priority: Use "none" to remove priority
URL Pattern Recognition: When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID":
Extract the first numeric ID after "/task/" as projectId
Extract the second numeric ID as taskNumber
Examples:
Change priority: {"projectId": "123", "taskNumber": 42, "priority": "high"}
Update assignees: {"projectId": "123", "taskNumber": 42, "assignees": [{"id": "user123", "type": "member"}]}
Change status: {"projectId": "123", "taskNumber": 42, "workflowId": "working"}
Update tags: {"projectId": "123", "taskNumber": 42, "tagIds": ["tag1", "tag2"]}
Clear milestone: {"projectId": "123", "taskNumber": 42, "milestoneId": null}
Returns: Updated task with all current details.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the task belongs | |
| taskNumber | Yes | Task number to update | |
| subject | No | New task subject/title | |
| body | No | New task body content | |
| assignees | No | New complete list of assignees (담당자). REPLACES all existing assignees. To get options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each assignee object has {id: string, type: "member"|"group"|"email"}. | |
| cc | No | New complete list of CC recipients (참조). REPLACES all existing CC recipients. To get options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each CC object has {id: string, type: "member"|"group"|"email"}. | |
| dueDate | No | New due date in ISO 8601 format | |
| milestoneId | No | New milestone ID, or null to remove milestone | |
| tagIds | No | New complete array of tag IDs. REPLACES all existing tags. IMPORTANT: Check for mandatory tag groups using get-tag-list tool. Projects may require specific tags from mandatory tag groups, or update will fail with 500 error. | |
| priority | No | Task priority level (highest, high, normal, low, lowest, none) | |
| workflowId | No | New workflow ID (status). Use get-project-workflow-list to see available workflow statuses for this project. Workflow classes: backlog (대기), registered (등록/할 일), working (진행 중), closed (완료). |
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 and does so comprehensively. It explains critical behavioral traits: that assignees, cc, and tagIds completely replace existing values (not merged), that unprovided fields remain unchanged, that mandatory tag groups must be included or updates fail with 500 errors, and that Korean terms have specific meanings. It also provides URL pattern recognition guidance and multiple concrete examples of usage.
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 well-structured with clear sections (Recommended Workflow, Important Notes, URL Pattern Recognition, Examples) and uses bold formatting for emphasis. While lengthy, every section serves a clear purpose - the workflow steps are essential guidance, the notes cover critical behaviors, and the examples provide concrete usage patterns. The information is front-loaded with the core purpose first.
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 complexity of this update tool with 11 parameters, nested objects, and no annotations or output schema, the description provides exceptional completeness. It covers the full update workflow, explains behavioral constraints, provides error prevention guidance (mandatory tag groups), includes localization notes (Korean terms), offers URL parsing help, and gives multiple examples. For a mutation tool with this complexity and no structured metadata, the description leaves no significant gaps.
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?
While the input schema has 100% description coverage, the description adds significant semantic value beyond the schema. It explains the complete replacement behavior for assignees, cc, and tagIds (which the schema mentions but the description elaborates), provides workflow context for using other tools to get parameter values, explains Korean terminology, and gives concrete examples showing how parameters work together in practice. The description compensates for the lack of output schema by explaining what gets returned.
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 ('Update an existing task') and resource ('in a Dooray project'), distinguishing it from sibling tools like create-task (for new tasks) and get-task (for reading). The opening sentence provides immediate clarity about the tool's function.
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 guidance on when and how to use this tool versus alternatives, including a detailed 4-step workflow that references sibling tools like get-task, get-my-member-info, get-project-member-list, get-project-member-group-list, get-tag-list, and get-project-workflow-list. It clearly explains prerequisites and dependencies for successful updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-task-commentA
Update an existing comment (댓글) on a Dooray task.
This tool modifies the content or attachments of an existing task comment.
IMPORTANT LIMITATION: Comments created from incoming emails CANNOT be modified. Only regular comments can be updated.
URL Pattern Recognition: When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID" or "https://nhnent.dooray.com/project/tasks/TASK_ID":
Extract the first numeric ID after "/task/" as projectId (if present)
Extract the second numeric ID (or the ID after "/tasks/") as taskId
Use get-task-comment-list to find the comment ID you want to update
REQUIRED: projectId, taskId, and commentId are all required.
Optional Parameters: You can provide either body, attachFileIds, or both. If you only want to update the text, just provide body. If you only want to update attachments, just provide attachFileIds.
File Attachments:
To attach files, first upload them using the file upload API
Then provide the returned file IDs in the attachFileIds parameter
See: https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419
Workflow:
Use get-task-comment-list to find the comment you want to update and get its ID
Call update-task-comment with the comment ID and new content/attachments
The comment will be modified immediately
Content Format:
Use "text/x-markdown" for markdown formatting (recommended)
Use "text/html" for rich HTML content
Body format: {"mimeType": "text/x-markdown", "content": "..."}
Examples:
Update comment text only: { "projectId": "123456", "taskId": "789012", "commentId": "4219415732999317024", "body": { "mimeType": "text/x-markdown", "content": "## Updated Comment\n\nThis comment has been revised" } }
Update with new attachments: { "projectId": "123456", "taskId": "789012", "commentId": "4219415732999317024", "body": { "mimeType": "text/x-markdown", "content": "See updated files" }, "attachFileIds": ["file123", "file456"] }
Returns: Success message upon completion.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID where the task belongs | |
| taskId | Yes | Task ID where the comment exists | |
| commentId | Yes | Comment ID to update | |
| body | No | New comment content | |
| attachFileIds | No | Array of file IDs to attach (optional) |
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 and does so comprehensively. It reveals critical behavioral traits: the 'IMPORTANT LIMITATION' about email comments, the immediate modification effect ('The comment will be modified immediately'), URL pattern recognition capabilities, authentication requirements (implied through file upload API reference), and the success message return. These go well beyond what the input schema provides.
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 well-structured with clear sections (limitation, URL pattern, parameters, workflow, format, examples) and front-loads the core purpose. While comprehensive, some sections like the detailed examples and external link could be slightly condensed. Every sentence adds value, but the length approaches the upper bound of appropriate conciseness.
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 complexity of a mutation tool with 5 parameters (including nested objects), no annotations, and no output schema, the description provides exceptional completeness. It covers purpose, limitations, prerequisites, parameter semantics, workflow, format details, examples, and return information. The only minor gap is not explicitly stating this is a write operation, but that's strongly implied by 'update' and 'modifies.'
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 baseline is 3. The description adds significant value beyond the schema: it clarifies that projectId, taskId, and commentId are all 'REQUIRED' (reinforcing schema), explains the optional nature of body vs attachFileIds ('you can provide either... or both'), provides detailed content format guidance with mimeType enum context, and includes concrete examples showing parameter usage. This elevates the score above baseline.
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 ('modifies the content or attachments'), resource ('existing task comment'), and distinguishes it from siblings like 'create-task-comment' (for creating new comments) and 'get-task-comment-list' (for listing comments). The opening sentence directly answers 'what does this tool do?'
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?
Explicit guidance is provided on when to use this tool vs alternatives: 'Use get-task-comment-list to find the comment ID you want to update' (prerequisite), 'Comments created from incoming emails CANNOT be modified' (exclusion), and the workflow section outlines the complete usage sequence. The description clearly distinguishes this from creation and listing operations.
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.
17 tool updates
v1.0.0- First observed
create-task - First observed
create-task-comment - First observed
get-milestone-list - First observed
get-my-member-info - First observed
get-project - First observed
get-project-list - First observed
get-project-member-group-list - First observed
get-project-member-list - First observed
get-project-template - First observed
get-project-template-list - First observed
get-project-workflow-list - First observed
get-tag-list - First observed
get-task - First observed
get-task-comment-list - First observed
get-task-list - First observed
update-task - First observed
update-task-comment
TDQS
Scored across 17 tools
Each tool has a distinct purpose with clear boundaries, targeting specific resources and actions. For example, create-task and update-task handle different operations on tasks, while get-project and get-project-list serve different information needs. The descriptions explicitly differentiate overlapping tools like create-task-comment vs. update-task.
All tools follow a consistent verb_noun pattern with hyphens (e.g., create-task, get-project-list, update-task-comment). The naming is uniform across the set, using descriptive verbs like get, create, and update paired with clear nouns like task, project, or comment.
With 17 tools, the count is slightly high but reasonable for the comprehensive task management domain. It covers CRUD operations for tasks, comments, and projects, along with supporting tools for templates, members, and workflows. A few tools could potentially be consolidated, but overall it's well-scoped.
The tool set provides complete coverage for Dooray task management, including full CRUD for tasks and comments, project and member management, template handling, and workflow/tag support. There are no obvious gaps; agents can perform all essential operations like creating, updating, listing, and filtering tasks with necessary metadata.
Maintenance
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
Manage dillie projects, tasks, and sprints; look up members and search platform documentation.
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables integration with Dooray API for comprehensive project management including task operations, comment management, tag organization, search functionality, and user management. Supports task creation, modification, status updates, assignee management, and collaborative features through natural language interactions.7-
- FlicenseBqualityDmaintenanceEnables interaction with Dooray's task and calendar management system, allowing users to filter and list tasks, retrieve details, and manage task comments. It provides a set of tools for seamless integration with MCP-compatible clients like Claude Desktop and Cursor.6-
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to manage Todocko application data, including tasks, projects, worklogs, and attachments. It supports comprehensive project management operations such as tracking activity, managing Kanban boards, and handling shared project synchronization.MIT
- FlicenseNot gradedqualityCmaintenanceEnables Claude Code to query, create, and modify Dooray tasks via natural language.-