dooray-mcp-link
Click on "Install 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-linkWhat meetings do I have on my calendar this week?"
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-link
Dooray MCP server in pure JavaScript. It exposes Dooray's account, calendar, project, post, attachment, and messenger APIs to MCP clients such as Claude Desktop.
The package ships no compiled executable. Node runs the JavaScript directly, so nothing is unpacked, written, or launched as a binary on the machine.
It was built for internal use and hands-on sessions at NHN LINK, which is why it defaults to caution: write-capable tools require an explicit confirmation on every call, read-only mode removes them entirely, and the Dooray token is never forwarded outside the API origin. It is published openly and works against any Dooray tenant.
Requirements
Node.js 18 or newer
A Dooray personal API token
No other dependencies: the server uses only the Node standard library.
Related MCP server: dooray-mcp-js
Official documentation
Install
One command registers the server with Claude Desktop:
npx -y --package=dooray-mcp-link -- dooray-mcp-link register --token "{personal-token}" --forceThen restart Claude Desktop.
The spec goes through --package, with the executable named after --. Windows npx reads a bare dooray-mcp-link@1.2.3 as the command to run and fails with "is not recognized as an internal or external command"; this form works on both platforms, and register writes it into the configuration for the same reason.
Registering read-only, so no tool can write back to Dooray:
npx -y --package=dooray-mcp-link -- dooray-mcp-link register --token "{personal-token}" --mode read-only --forceRun
DOORAY_TOKEN="{personal-token}" npx -y --package=dooray-mcp-link -- dooray-mcp-linkWhat register does
Searches the known Claude Desktop configuration locations and merges into the file that already exists, rather than assuming one path. On Windows that includes the packaged-install location under
LOCALAPPDATA\Packages\, where a Store or MSIX install has itsRoamingwrites redirected.Prints the file it wrote, so the location can be confirmed. If no configuration existed anywhere it searched, it says so and lists the locations, because that is also what happens when an install keeps its configuration somewhere else. Use
--config <path>to point at that file directly.Copies the current file to
claude_desktop_config.json.bakbefore writing, and writes through a temporary file so a failure cannot truncate the configuration.Merges only the
mcpServers.<name>entry, leaving every other server and top-level setting untouched.Refuses to overwrite an existing server of the same name unless
--forceis passed.Writes a new configuration owner-only (
0600), because the file holds the API token.
Preview the JSON without touching the file:
npx -y --package=dooray-mcp-link -- dooray-mcp-link register --print --token "{personal-token}"register --help lists every option, including --name <name> to register a second server alongside the first and --command <path> to record a specific executable.
If Claude Desktop does not pick it up
Check that the file register reported is the one Claude Desktop actually reads. Its settings dialog exposes the configuration through "Edit Config", which reveals the path in use on that machine. Re-run with --config <path> if they differ.
Manual configuration
{
"mcpServers": {
"dooray": {
"command": "npx",
"args": ["-y", "--package=dooray-mcp-link", "--", "dooray-mcp-link"],
"env": {
"DOORAY_TOKEN": "{personal-token}"
}
}
}
}Claude Code
claude mcp add dooray --env DOORAY_TOKEN="{personal-token}" -- npx -y --package=dooray-mcp-link -- dooray-mcp-linkWhat the MCP client receives
Every tool returns the Dooray API response as-is. A task body, comment, calendar entry, or member record is passed to the MCP client unchanged, and from there to whatever model backs it — including anything the original Dooray content happens to contain, such as personal data or material your organization classifies as confidential.
The server does not classify, redact, or filter that content, and it cannot tell which posts are sensitive. Deciding what may leave Dooray is the caller's responsibility:
Scope requests to the projects and posts that actually need to be read, rather than sweeping whole projects.
Treat
dooray_post_file_downloadthe same way. It writes attachments, including inline body images, to a local temporary directory that is not cleaned up automatically.Run with
--mode read-onlywhen a session only needs to read, so no tool can write back to Dooray.Check your organization's policy before pointing this at projects holding personal or confidential data.
Write tools require confirmation
The four write-capable tools — dooray_messenger, dooray_calendar_post_event, dooray_post_log_create, and dooray_post_log_update — take a required confirm boolean. The handler refuses the call unless it is exactly true, before any request reaches Dooray, so passing schema validation is not on its own enough to send a message or post a comment. Set it only after the user has confirmed the specific change.
Read-only mode
Dooray personal API tokens are not issued with separate read-only and write permissions. A token that can call write APIs still has those permissions at the Dooray API level.
For safer installations, this server provides a read-only mode at the MCP tool layer. With --mode read-only or DOORAY_MCP_MODE=read-only, write-capable tools are not exposed in tools/list and cannot be called through tools/call.
Exposed in read-only mode:
dooray_calendar_calendarsdooray_calendar_eventsdooray_account_membersdooray_account_memberdooray_projectdooray_postsdooray_post_logsdooray_post_logdooray_post_filesdooray_post_file_downloados
Hidden in read-only mode:
dooray_messengerdooray_calendar_post_eventdooray_post_log_createdooray_post_log_update
Attachment downloads
dooray_post_file_download follows Dooray's redirects itself rather than letting the HTTP client do it, so it can decide where the token may go. The Authorization header is sent only to the configured API origin and to the HTTPS file-api.dooray.com download service; any other redirect target receives no credentials.
Downloaded names are stripped of directory components and of the characters Windows rejects (\ / : * ? " < > |, control characters, and trailing dots or spaces), so a name chosen by the server cannot escape the download directory.
Scope
This server does not wrap every Dooray API. It focuses on frequently used account, calendar, project, post, attachment, and messenger endpoints.
Most /admin/v1 and /admin/v2 administration APIs are intentionally not exposed, especially write-capable administration endpoints.
Tools
dooray_messenger(confirmmust betrue)dooray_calendar_calendarsdooray_calendar_eventsdooray_calendar_post_event(confirmmust betrue)dooray_account_membersdooray_account_memberdooray_projectdooray_posts(finds task posts and exposes the task body plusfileIdList, which can contain inline body images/files)dooray_post_logs(find comments and activity logs for a post)dooray_post_log(find one comment or activity log by ID)dooray_post_log_create(add a comment; body is{ "mimeType": "text/x-markdown", "content": "..." }, andconfirmmust betrue)dooray_post_log_update(update a comment or activity log, same body format,confirmmust betrue)dooray_post_files(lists regular attachments; an empty result orAUTH_FORBIDDEN_ERRORdoes not determine whetherfileIdListitems can be downloaded)dooray_post_file_download(downloads IDs fromdooray_posts.fileIdList, including inline body images, or regular attachment file IDs)os
Reading task URLs and body files
Use this workflow when a request asks for a Dooray task body, an image embedded in the body, or a file referenced by the body. Comments and activity logs are a separate resource and are not required.
Parse the task URL.
/task/{projectId}/{postId}provides both IDs directly. The legacy/project/tasks/{postId}form provides onlypostId, so its trailing number must not be used asprojectId.Resolve the project only for the legacy URL form. Call
dooray_projectwithoperation=find_projectsand the requiredtype,scope, andstatefilters. Repeat the relevant filter combinations and continue throughpagevalues withsizeup to100until every result page has been checked.Search for the matching post with
dooray_posts, using the project ID from the new URL form or the candidate IDs discovered for a legacy URL. A lookup under one incorrect project ID, or only the first result page, is not evidence that the task is unavailable.Read the task body from the matching result. Do not call
dooray_post_logsunless comments or activity history were explicitly requested.If the matching post contains
fileIdList, calldooray_post_file_downloadonce for every listed ID using the same verifiedprojectIdandpostId.Inspect the returned local
filePathwith an image viewer or an appropriate document parser. The result also includesfileName,mimeType,size, andtemporary.
dooray_post_files lists regular attachments, which is a separate path from the fileIdList body files. It can return an empty list or AUTH_FORBIDDEN_ERROR even when direct downloads succeed, so neither outcome proves a body file is inaccessible. A transport failure or timeout is likewise not a permission result. Report a file as forbidden or missing only when the direct download returns a terminal response such as 403 or 404 with the verified IDs.
Options
--token: Dooray personal API token. Defaults toDOORAY_TOKEN.--endpoint: Dooray API endpoint. Defaults toDOORAY_ENDPOINT, thenhttps://api.dooray.com.--mode: tool exposure mode,fullorread-only. Defaults toDOORAY_MCP_MODEorfull.--help: print usage and exit.
Subcommands
Environment
DOORAY_TOKEN: Dooray personal API token.DOORAY_ENDPOINT: Dooray API endpoint, defaulthttps://api.dooray.com.DOORAY_MCP_MODE:fullorread-only, defaultfull.DOORAY_REQUEST_TIMEOUT_MS: per-request timeout in milliseconds, default30000.DOORAY_DOWNLOAD_DIR: attachment download directory, default<system temp>/dooray-mcp.
Project structure
dooray-mcp-link/
├── src/
│ ├── index.js # entry point: config, client, registry, stdio server
│ ├── config.js # flags and environment variables
│ ├── dooray.js # authenticated API client and attachment download
│ ├── mcp.js # JSON-RPC 2.0 stdio transport and MCP methods
│ ├── schema.js # JSON Schema builders
│ ├── tools.js # tool definitions and handlers
│ └── register.js # claude_desktop_config.json merging
├── test/
└── package.jsonDevelopment
npm test # node --test, no dependencies
DOORAY_TOKEN="{personal-token}" node ./src/index.jsLicense
MIT
Available Tools
15 toolsdooray_account_memberC
find dooray account members by id
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes | member id | |
| operation | Yes | The operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'find by id' and does not disclose return format, error behavior, permission implications, or that the operation is a read-only lookup. It is minimally transparent but lacks meaningful 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 a single short sentence with no filler, front-loading the action and identifying scope. It is appropriately concise for a simple tool, though it sacrifices some useful context for brevity.
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 two-parameter tool with a fixed enum and no output schema, the description is minimally adequate: an agent can infer that providing a member_id and the find_member_details operation will perform the lookup. However, it omits return-value expectations and alternative-tool routing, leaving some gaps in context.
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 little beyond the schema: 'by id' maps to member_id, but member_id is already documented as 'member id' and operation is documented as 'The operation to perform'. No additional parameter meaning is provided.
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 states a specific verb ('find') and resource ('dooray account members') with a filter ('by id'), making the tool's core purpose clear. It does not explicitly differentiate from the sibling dooray_account_members, but the singular phrasing and id-based lookup imply a detail lookup versus a list operation.
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 gives no guidance on when to use this tool versus dooray_account_members or other sibling tools. There is no mention of prerequisites, context, or exclusions, so an agent must infer usage from the operation enum and tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_account_membersA
find dooray account members by name or userCode
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to perform | |
| user_code | No | user code | |
| member_name | Yes | member name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden; 'find' signals a non-mutating lookup and the search criteria are stated. It does not disclose output shape, exact versus partial matching, or authorization expectations, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. Every word contributes to purpose and usage, and there is no 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?
There is no output schema and no annotations, so the description must compensate by explaining the result and invocation context. It does not mention the required operation value ('find_member_id'), what the tool returns, or how multiple matches are handled, leaving important gaps for an agent.
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 each parameter. The description adds limited value by tying the member_name and user_code parameters to the 'by name or userCode' search intent, but it does not add format, matching, or optionality details beyond 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 uses a specific verb ('find'), a concrete resource ('dooray account members'), and a clear lookup criterion ('by name or userCode'). It distinguishes this tool from sibling tools like dooray_account_member by framing it as a search by name or user code rather than a direct member operation.
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 phrase 'by name or userCode' implies the tool should be used when locating members by those identifiers. However, it does not explicitly state when to avoid this tool or name the alternative to use when other criteria, such as member ID, are available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_calendar_calendarsC
find dooray calendars
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full burden of disclosing side effects and return behavior. 'Find' weakly implies a read-only lookup, but the description does not state whether this mutates anything, requires permissions, returns a list, or could fail.
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 short with no wasted words, but it is under-specified rather than tightly informative. It lacks structure that would make the tool's behavior and output immediately scannable for an agent.
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 an operation with one fixed enum value, the description is minimally viable, but there is no output schema and the description does not describe what a successful response contains. An agent would have to guess whether the tool returns all calendars or some filtered subset.
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% and the only parameter is an enum with description 'The operation to perform'. The tool description adds no parameter-specific meaning, but the schema already fully documents the parameter, so the baseline of 3 applies.
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 uses a verb and a resource ('find dooray calendars'), which points to the calendar collection and distinguishes it from calendar event tools at a noun level. However, 'find' is vague—it does not say whether this lists all calendars, searches, or retrieves a single calendar—so the purpose is only partially clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool instead of siblings such as dooray_calendar_events or dooray_calendar_post_event. The context in which find_calendars should be preferred is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_calendar_eventsC
find dooray events of calendars
| Name | Required | Description | Default |
|---|---|---|---|
| timeMax | Yes | exclusive end time in ISO 8601, e.g. 2025-04-12T00:00:00+09:00 | |
| timeMin | Yes | inclusive start time in ISO 8601, e.g. 2025-04-11T00:00:00+09:00 | |
| calendars | No | calendar ids separated by commas | |
| operation | Yes | The operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only says 'find'. It does not indicate whether this is a read-only operation, what the response shape is, how time boundaries are handled, or whether recurring events or attendee information are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is under-specified rather than effectively concise. It contains a single phrase and omits important context about required operation, expected output, and selection criteria, which should have been included in a tool description.
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 no annotations, no output schema, and an enum operation parameter, the description should explain what the agent can expect and when to invoke it. It provides none of that, leaving an agent to infer behavior almost entirely from the schema.
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 timeMin, timeMax, calendars, and operation. The description adds no additional parameter meaning, which keeps this at the baseline for schemas that already carry the explanatory load.
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 states a specific verb ('find') and resource ('dooray events of calendars'), making the core read-oriented purpose clear. It does not explicitly differentiate from sibling tools like dooray_calendar_calendars or dooray_calendar_post_event, but the word 'events' and 'calendars' provide enough directional clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool over alternatives, such as dooray_calendar_calendars for listing calendars or dooray_calendar_post_event for creating events. The description also does not mention the time range requirement or that this is the read/search path for calendar events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_calendar_post_eventB
register dooray events on a calendar
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | must be true to execute this write operation; set it only after the user has confirmed the change | |
| content | Yes | event content | |
| endedAt | Yes | event end time in ISO 8601 | |
| subject | Yes | event subject | |
| operation | Yes | The operation to perform | |
| startedAt | Yes | event start time in ISO 8601 | |
| calendarId | No | calendar id to register an event | |
| wholeDayFlag | No | set true for whole day event | |
| recurrenceByday | No | recurrence by day, e.g. MO,TU,WE | |
| recurrenceUntil | No | recurrence end date in ISO 8601 | |
| recurrenceBymonth | No | recurrence by month, 1-12 | |
| recurrenceInterval | No | recurrence interval, default is 1 | |
| recurrenceFrequency | No | recurrence frequency | |
| recurrenceBymonthday | No | recurrence by day of month, 1-31 | |
| recurrenceTimezoneName | No | timezone for recurrence rule, default Asia/Seoul |
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, but it only says 'register' without explaining mutating effects, confirmation requirements, defaults, validation behavior, or failure modes. The confirm parameter in the schema covers the write gate, but the description itself does not add 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 a single short sentence with no filler and the core action is front-loaded. It is concise, though the phrasing 'dooray events' is slightly awkward and no structural differentiation is attempted.
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 15 parameters, recurrence options, a confirmation gate, and no output schema, a six-word description is not complete enough. It does not explain calendar selection, how recurrence fields interact, or what happens after creation, leaving the agent to infer important contextual behavior.
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 no parameter-level meaning beyond what the schema already provides, and it does not harmfully omit anything given the schema's completeness.
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 uses a specific verb ('register') and a clear resource ('dooray events on a calendar'), making it plain that this tool creates calendar events. It does not explicitly distinguish itself from sibling tools like dooray_calendar_events, so it stops short of a 5.
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?
Usage is only implied: an agent can infer this tool is for creating/registering calendar events, but there is no explicit when-to-use guidance or mention of alternatives. No exclusions or 'use X instead' direction is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_messengerC
send message to dooray messenger
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | recipient organizationMemberId | |
| confirm | Yes | must be true to execute this write operation; set it only after the user has confirmed the change | |
| message | Yes | message to send | |
| operation | Yes | The operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects. It only says 'send message' and does not mention that this is a write operation requiring confirmation, permission implications, or what happens after the message is sent. The confirm parameter in the schema reveals the write/confirmation behavior, but the description itself adds minimal 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 a single short sentence with no wasted words and is easy to parse. It is concise, though it is so terse that it lacks helpful context, which is penalized in other dimensions rather than here.
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 simple send-message tool with 100% schema coverage, the description plus schema is minimally sufficient to invoke the tool correctly. However, there is no mention of the expected result, delivery behavior, or when to prefer this tool over sibling messaging/post tools, so completeness is only adequate.
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 fully describes all four parameters, including 'confirm' as a required boolean gate and 'operation' as an enum. Since schema description coverage is 100%, the description does not need to add parameter-level detail; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('send message') and the target resource ('dooray messenger'), so an agent can understand the basic function. It does not explicitly differentiate this from sibling tools such as dooray_post_log_create or dooray_posts, but the resource name is specific enough to avoid major confusion.
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?
There is no guidance on when to use this tool versus the sibling tools, nor any mention of prerequisites or context. The description only names the action and target, leaving the agent to infer when this tool should be selected over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_file_downloadA
Download a Dooray post file by fileId through authenticated redirects to a local temporary directory. Authorization is forwarded only to the configured API origin and the HTTPS file-api.dooray.com download service; arbitrary redirect origins receive no Dooray token. Use this for every ID from the matching dooray_posts.fileIdList, including inline body images, with the same verified projectId and postId; it also supports regular attachment file IDs. dooray_post_files is not a prerequisite, and an empty result or AUTH_FORBIDDEN_ERROR from that separate endpoint does not imply that this direct download will fail. On success, the result contains filePath, fileName, mimeType, size, and temporary; inspect filePath with an appropriate local image viewer or document parser. A fetch failure or timeout is transient and must not be reported as a permission denial; retry or report the transport problem separately. Only report a body file as forbidden or missing when this direct request returns a terminal Dooray response such as 403 or 404 with the verified projectId, postId, and fileId.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | file id from the matching post's fileIdList or regular attachment list | |
| postId | Yes | matching post id; this is the final numeric path value in both supported task URL forms | |
| fileName | No | optional file name used when the response does not provide one | |
| operation | Yes | The operation to perform | |
| projectId | Yes | verified project id of the matching post; for /task/{projectId}/{postId} URLs this is the first numeric path value |
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 it delivers: it discloses that auth is forwarded only to the configured API origin and the HTTPS file-api.dooray.com service (not arbitrary redirects), that output lands in a temporary directory, what the success result contains, and — critically — that transient fetch failures must not be reported as permission denials and terminal 403/404 responses are required before claiming a file is forbidden or missing.
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 long but every sentence earns its place — auth routing, usage scope, sibling disambiguation, output contents, and error-handling rules are all necessary given the tool's complexity. The purpose is front-loaded in the first sentence, though the error-handling tail is somewhat verbose and could be tightened.
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 zero annotations and no output schema, the description is remarkably complete: it covers purpose, security-sensitive redirect behavior, success output fields, parameter consistency requirements, transport-failure handling, and the exact conditions under which an error should be reported. An agent has everything needed to invoke it correctly and interpret results.
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 coverage is 100%, so baseline is 3. The description adds meaningful operational nuance beyond the schema by insisting that projectId and postId be the 'same verified' values from the matching post, tying parameter consistency to correct error interpretation, and clarifying that fileId covers both fileIdList entries and regular attachment IDs.
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 opens with a specific verb-resource pair: 'Download a Dooray post file by fileId through authenticated redirects to a local temporary directory.' It clearly differentiates from the sibling dooray_post_files endpoint by stating that this tool is a direct download and that the other endpoint is 'not a prerequisite' and has no bearing on success or failure.
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?
Gives explicit when-to-use guidance: 'Use this for every ID from the matching dooray_posts.fileIdList, including inline body images, with the same verified projectId and postId; it also supports regular attachment file IDs.' It also provides an exclusion/alternative clarification by explaining when dooray_post_files results should NOT be used to infer anything about this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_filesA
List regular attachments only. This is not an availability check for inline body images in dooray_posts.fileIdList. The endpoint can be empty or return AUTH_FORBIDDEN_ERROR while direct dooray_post_file_download calls still succeed, so never use this result alone to conclude that body files cannot be read.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | post id | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral disclosure burden. It reveals that the endpoint can return an empty result or AUTH_FORBIDDEN_ERROR even when files are accessible, which is a critical non-obvious behavioral trait. This goes well beyond what the input schema or annotations could convey.
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?
Three sentences, each earning its place: the action, the exclusion, and the critical failure-mode warning. The key caveat is front-loaded rather than buried.
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?
The description covers the essential behavioral caveat and the distinction from sibling tools, making it usable with the schema-covered parameters. It does not describe the exact return format, but for a list operation this is a minor gap given the strong guidance already provided.
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 three parameters adequately. The description adds no parameter-specific details beyond labeling the result scope, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'List regular attachments only' gives a specific verb, resource, and scope, immediately distinguishing this from dooray_post_file_download and from checking inline body images in dooray_posts.fileIdList. It is not a tautology and the sibling differentiation is explicit.
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 clearly states when not to use this tool, explicitly warns against using it as an availability check, and mentions dooray_post_file_download as the alternative that may still succeed. This gives an agent concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_logB
find a specific comment or activity log of a Dooray post
| Name | Required | Description | Default |
|---|---|---|---|
| logId | Yes | log id, or comment id | |
| postId | Yes | post id | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'find', which implies a read operation, but it does not state whether it is read-only, what happens if no matching log is found, or what data is returned. This is minimal disclosure for an operation with no annotation support.
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 one concise sentence that states the verb and resource directly without filler or unnecessary detail. It is appropriately front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the required parameters and the operation enum, which is good. However, the description provides no information about return values, error behavior, or how this tool relates to the list/create/update sibling tools, leaving an agent with only the minimum viable information to attempt a call.
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 all four parameters already have basic documentation. The description adds the clarifying context that logId refers to a comment or activity log, but it does not add meaningful detail 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 a specific action, 'find', on a specific resource, 'a specific comment or activity log of a Dooray post'. This distinguishes it from sibling create/update tools, though it does not explicitly contrast it with the plural 'dooray_post_logs' tool.
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 word 'specific' implies this tool is for retrieving one known log rather than listing or creating logs, but no explicit alternatives or when-not-to-use guidance is provided. An agent can infer the basic use case from the singular phrasing, but clear routing among siblings is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_log_createC
add a comment to a Dooray post
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| postId | Yes | post id | |
| confirm | Yes | must be true to execute this write operation; set it only after the user has confirmed the change | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only says 'add a comment'. It does not mention that this is a write operation requiring confirm=true, the side effects of the write, or any constraints such as the Markdown-only MIME type. The confirm behavior exists only in the parameter schema, not in the tool 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 a single, front-loaded sentence with no filler or repetition. It is efficient, though arguably under-specified; still, as written, it is concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with 5 required parameters, a nested body object, no output schema, and no annotations, a one-sentence description is insufficient. Missing context includes the confirm-required workflow, what operation=create_log means, the Markdown-only constraint, and how this tool relates to post-log viewing or updating. The definition is not complete enough for safe autonomous invocation.
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 80%, so most parameter meanings are already documented. The description adds little parameter-level value beyond loosely equating the body to a comment, and it does not clarify the required confirm workflow or the operation enum. Baseline 3 is appropriate because the schema already carries most of the parameter semantics.
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 states a specific verb ('add') and resource ('a comment to a Dooray post'), making the core operation clear. It does not explicitly differentiate itself from the sibling dooray_post_log_update, though the create-vs-update distinction is reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as dooray_post_log_update or dooray_post_logs. The intended use case is only implicit in the verb 'add', providing no decision support for an agent choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_logsC
find comments and activity logs of a Dooray post
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | page number, default is 0 | |
| size | No | number of logs per page, default is 20 | |
| order | No | log sort order | |
| postId | Yes | post id | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It only says 'find', implying read-only behavior, but does not disclose pagination, sorting behavior, response shape, or any side effects. There is no contradiction, but the transparency is minimal.
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 a single clear sentence with no filler or redundancy. It is concise and immediately communicates the core action, though it offers no additional structural 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 straightforward read/list tool with fully described parameters, the description plus schema is minimally sufficient. However, without an output schema, some indication of return behavior or pagination would improve completeness, and missing usage guidance leaves contextual 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 all parameters are already documented. The description adds no extra parameter meaning beyond framing the tool as finding post comments and activity logs, which is acceptable but not additive.
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 uses a specific verb ('find') and names the resource ('comments and activity logs of a Dooray post'). It clearly implies a read/list operation that is distinct from the singular dooray_post_log and the mutating dooray_post_log_create/update siblings, though it does not explicitly name them.
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?
There is no guidance about when to use this tool versus alternatives such as dooray_post_log or dooray_post_log_create. The operation enum restricts to 'find_logs', but the description does not explain contexts, exclusions, or relationships to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_post_log_updateB
update a comment or activity log of a Dooray post
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| logId | Yes | log id, or comment id | |
| postId | Yes | post id | |
| confirm | Yes | must be true to execute this write operation; set it only after the user has confirmed the change | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It correctly implies a mutating operation, but it does not mention the required confirmation gate, the fact that existing content will be overwritten, or any side effects. For a write tool, this is a meaningful transparency gap.
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 a single, clear sentence with no filler or redundancy. It is appropriately concise, though it achieves brevity at the cost of omitting useful behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a write tool with no annotations and no output schema, the description is too thin. It does not mention the confirmation requirement, the update semantics, or what happens after execution. The schema covers parameter structure, but the broader operational context is missing.
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 high (~83%), so the parameters are largely self-documenting. The description adds little semantic value beyond the schema, except for framing the target as a 'comment or activity log.' This meets the baseline but does not elevate it.
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 states a specific verb ('update') and a clear resource ('a comment or activity log of a Dooray post'), which is enough to identify the tool's core function. It distinguishes the tool from create/list siblings by the 'update' action, though it does not explicitly name any alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when updating an existing comment or activity log, but it offers no explicit guidance about when to prefer it over related tools like dooray_post_log_create. There are no exclusions, conditions, or alternative-selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_postsA
Find Dooray task posts in one project or a comma-separated set of accessible project IDs. Parse the URL first: /task/{projectId}/{postId} provides both IDs, while legacy /project/tasks/{postId} provides only postId and requires project discovery with dooray_project. Query the known or candidate project IDs with size up to 100 and continue through pages until the returned post ID matches; a lookup under one wrong project ID or only the first page does not prove that the post is unavailable. The matching post response contains the task body, so do not call dooray_post_logs unless comments or activity were explicitly requested. When the post has fileIdList, treat every ID as a downloadable body file, commonly an inline image, and call dooray_post_file_download with the same verified projectId and postId. Always try that direct download even if dooray_post_files is empty or returns AUTH_FORBIDDEN_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | page number, default is 0 | |
| size | No | number of posts per page, default is 20, max is 100 | |
| dueAt | No | date filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601 | |
| order | No | sort order: postDueAt, postUpdatedAt, createdAt, prefix '-' for descending | |
| tagIds | No | filter posts by tag ids, comma separated | |
| subjects | No | filter by post subject keyword | |
| createdAt | No | date filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601 | |
| operation | Yes | The operation to perform | |
| projectId | Yes | project id from /task/{projectId}/{postId}, or comma separated accessible project ids discovered for a legacy /project/tasks/{postId} URL | |
| updatedAt | No | date filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601 | |
| postNumber | No | filter by post number | |
| ccMemberIds | No | filter posts by cc member ids, comma separated | |
| toMemberIds | No | filter posts by assignee member ids, comma separated | |
| milestoneIds | No | filter by milestone ids, comma separated | |
| parentPostId | No | filter sub-tasks of a parent post | |
| toMemberSize | No | filter by number of assignees | |
| fromMemberIds | No | filter posts by creator member ids, comma separated | |
| postWorkflowIds | No | filter by workflow ids, comma separated | |
| fromEmailAddress | No | filter posts by sender email address | |
| postWorkflowClasses | No | backlog, registered, working, closed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and does so richly. It discloses pagination behavior, the risk of false negatives when searching the wrong project or only the first page, the fact that the matching post response contains the task body, and the resilient download strategy even in the face of AUTH_FORBIDDEN_ERROR.
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 dense but every sentence earns its place: core purpose, URL parsing, pagination strategy, sibling-tool exclusions, and file-download handling. It is front-loaded and contains no filler or redundant restatement of the tool name.
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?
Despite having no output schema, the description tells the agent what the matching response contains (task body, fileIdList) and how to interpret paginated results. It also accounts for edge cases like wrong project IDs, empty file lists, and auth errors, making the tool usable without additional documentation.
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 coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema for projectId by explaining URL forms and legacy discovery, and it clarifies that size can be raised to 100 while paging through results. It does not explain every filter, but the schema already does that.
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 opens with a precise verb and resource: 'Find Dooray task posts' in specified project ID scopes. It also differentiates the tool from siblings by explicitly saying when not to call dooray_post_logs and when to call dooray_post_file_download, so an agent can select it confidently.
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 gives explicit routing guidance: use dooray_project for legacy URLs, avoid dooray_post_logs unless comments/activity are requested, and call dooray_post_file_download for fileIdList entries even when dooray_post_files is empty or errors. This is concrete when-to-use and when-not-to-use guidance beyond generic advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dooray_projectA
List Dooray projects accessible to the token or get one project by ID. A /task/{projectId}/{postId} URL provides projectId directly, while a legacy /project/tasks/{postId} URL contains only postId and requires project discovery. find_projects requires type, scope, and state; use page and size to exhaust every relevant filter combination because one page is not proof that a project or post is inaccessible. find_project requires projectId.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | project list page number; default is 0 | |
| size | No | number of projects per page; default is 100, max is 100 | |
| type | No | project type; required for find_projects | |
| scope | No | project scope; required for find_projects | |
| state | No | project state; required for find_projects | |
| operation | Yes | The operation to perform | |
| projectId | No | project id; required for find_project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses token-based access, the difference between modern and legacy URLs, and an important pagination caveat. It does not explicitly state that the operation is read-only or describe error behavior, but the list/get framing and the practical warnings add substantial transparency beyond a bare schema.
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 four sentences with no filler. The main purpose is front-loaded, URL implications are condensed, and the pagination caveat earns its place. Every sentence contributes new operational guidance.
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 seven parameters, two operations, no annotations, and no output schema, the description covers the critical invocation decisions: which operation to choose, which parameters are required for each, how to extract identifiers from URLs, and how to paginate safely. It does not mention response shape, but the absence of an output schema makes that less critical than ensuring correct parameter selection and exhaustive search behavior.
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 coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining conditional requirement relationships (find_projects needs type/scope/state, find_project needs projectId) and by giving strategic meaning to page and size: exhaust every relevant filter combination to avoid false negatives. This is useful behavioral parameter guidance not present in the schema alone.
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 opens with a specific verb and resource: 'List Dooray projects accessible to the token or get one project by ID.' It clearly separates the two operations supported by the tool, find_projects and find_project, and the resource (Dooray projects) is distinct from sibling calendar, messenger, and post 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 gives explicit operation-selection guidance: find_projects requires type, scope, and state; find_project requires projectId. It also provides URL-based decision rules for choosing between direct lookup and project discovery, plus a strong pagination directive: exhaust page/size filter combinations because one page is not proof of inaccessibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osB
get os time date
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to get date time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. The verb 'get' implies a read-only operation, and the sole operation value 'get_date_time' reinforces that. However, it does not mention timezone, format, or return-value details, which are useful behavioral traits for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short with no filler or redundant phrases. It is front-loaded, though the phrase 'time date' could be worded more clearly as 'date/time'.
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 simple one-operation tool, the description plus fully covered schema is sufficient to invoke the tool correctly. However, because there is no output schema, a brief note about the returned date/time format or timezone would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the operation parameter is fully documented with an enum and descriptive text. The tool description adds no extra parameter meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a get operation on an OS time/date resource, and the sibling tools are all Dooray-related, so this tool is easy to distinguish. The phrasing 'os time date' is slightly awkward, but the intent is unambiguous.
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?
Usage is implied by the stated purpose: use this tool to retrieve the OS date/time. There is no explicit when-to-use guidance or exclusions, but the sibling set is unrelated, so the alternative-selection risk is low.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The tools are mostly separable by resource: calendars, events, members, projects, posts, files, logs, messenger, and one OS utility. A few pairs like dooray_post_log vs dooray_post_logs and dooray_post_files vs dooray_post_file_download require careful reading, but the descriptions clarify the list/get and list/download boundaries.
Naming is consistently lowercase snake_case with a dooray_ prefix, but verb placement is inconsistent: dooray_calendar_post_event places the action before the object, while dooray_post_log_create and dooray_post_file_download place it after. Bare noun tools like dooray_project and dooray_posts, plus the pattern-breaking 'os', further weaken consistency.
Fifteen tools is at the upper edge of a well-scoped set and each Dooray resource area has at least one operation. The server does span many concerns—project, calendar, messenger, account, files, and OS—and the os tool feels tacked on, but the count is still reasonable for the described integration.
The set covers discovery and reading for projects, posts, comments, calendars, members, and files, plus comment/event creation and comment updates. Notable lifecycle gaps exist: there is no create/update/delete for task posts, no update/delete for calendar events, and no messenger read capability.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP access to your DEXUN AdWhiz account: ad accounts, AI recommendations, savings.
OAuth Gate exchange MCP for CEX trading, account, wallet, unified account, and sub-account.
Hosted OAuth MCP for Google, Meta, X, and LinkedIn Ads, GA4, and Search Console.
OAuth scope approvals and consent receipts for remote MCP servers.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants read-only access to Sprinklr data via MCP, allowing querying reports, searching cases, and calling Sprinklr API endpoints.12ISC
- AlicenseBqualityBmaintenanceDooray MCP server for interacting with Dooray services such as messenger, calendar, project, and posts. Supports operations like reading, creating, and updating posts, comments, and files.1533MIT
- FlicenseNot gradedqualityCmaintenanceProvides read-only access to Dooray collaboration services through REST, CalDAV, and LDAP, enabling queries for projects, tasks, calendar events, and directory information via 18 MCP tools.
- FlicenseBqualityBmaintenanceEnables MCP-compatible AI clients to securely read a user's Microsoft 365 data across Outlook, Calendar, Teams, meetings, OneNote, SharePoint, OneDrive, Loop, and Search, and to send Outlook email only after explicit user confirmation.103
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/minseoky/dooray-mcp-link'
If you have feedback or need assistance with the MCP directory API, please join our Discord server