Skip to main content
Glama

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}" --force

Then 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 --force

Run

DOORAY_TOKEN="{personal-token}" npx -y --package=dooray-mcp-link -- dooray-mcp-link

What 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 its Roaming writes 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.bak before 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 --force is 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-link

What 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_download the same way. It writes attachments, including inline body images, to a local temporary directory that is not cleaned up automatically.

  • Run with --mode read-only when 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_calendars

  • dooray_calendar_events

  • dooray_account_members

  • dooray_account_member

  • dooray_project

  • dooray_posts

  • dooray_post_logs

  • dooray_post_log

  • dooray_post_files

  • dooray_post_file_download

  • os

Hidden in read-only mode:

  • dooray_messenger

  • dooray_calendar_post_event

  • dooray_post_log_create

  • dooray_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 (confirm must be true)

  • dooray_calendar_calendars

  • dooray_calendar_events

  • dooray_calendar_post_event (confirm must be true)

  • dooray_account_members

  • dooray_account_member

  • dooray_project

  • dooray_posts (finds task posts and exposes the task body plus fileIdList, 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": "..." }, and confirm must be true)

  • dooray_post_log_update (update a comment or activity log, same body format, confirm must be true)

  • dooray_post_files (lists regular attachments; an empty result or AUTH_FORBIDDEN_ERROR does not determine whether fileIdList items can be downloaded)

  • dooray_post_file_download (downloads IDs from dooray_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.

  1. Parse the task URL. /task/{projectId}/{postId} provides both IDs directly. The legacy /project/tasks/{postId} form provides only postId, so its trailing number must not be used as projectId.

  2. Resolve the project only for the legacy URL form. Call dooray_project with operation=find_projects and the required type, scope, and state filters. Repeat the relevant filter combinations and continue through page values with size up to 100 until every result page has been checked.

  3. 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.

  4. Read the task body from the matching result. Do not call dooray_post_logs unless comments or activity history were explicitly requested.

  5. If the matching post contains fileIdList, call dooray_post_file_download once for every listed ID using the same verified projectId and postId.

  6. Inspect the returned local filePath with an image viewer or an appropriate document parser. The result also includes fileName, mimeType, size, and temporary.

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 to DOORAY_TOKEN.

  • --endpoint: Dooray API endpoint. Defaults to DOORAY_ENDPOINT, then https://api.dooray.com.

  • --mode: tool exposure mode, full or read-only. Defaults to DOORAY_MCP_MODE or full.

  • --help: print usage and exit.

Subcommands

  • register: merge this server into the Claude Desktop configuration. See What register does.

Environment

  • DOORAY_TOKEN: Dooray personal API token.

  • DOORAY_ENDPOINT: Dooray API endpoint, default https://api.dooray.com.

  • DOORAY_MCP_MODE: full or read-only, default full.

  • DOORAY_REQUEST_TIMEOUT_MS: per-request timeout in milliseconds, default 30000.

  • 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.json

Development

npm test                                  # node --test, no dependencies
DOORAY_TOKEN="{personal-token}" node ./src/index.js

License

MIT

Available Tools

15 tools
dooray_account_memberC

find dooray account members by id

ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYesmember id
operationYesThe operation to perform

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesThe operation to perform
user_codeNouser code
member_nameYesmember name

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesThe operation to perform

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
timeMaxYesexclusive end time in ISO 8601, e.g. 2025-04-12T00:00:00+09:00
timeMinYesinclusive start time in ISO 8601, e.g. 2025-04-11T00:00:00+09:00
calendarsNocalendar ids separated by commas
operationYesThe operation to perform

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesmust be true to execute this write operation; set it only after the user has confirmed the change
contentYesevent content
endedAtYesevent end time in ISO 8601
subjectYesevent subject
operationYesThe operation to perform
startedAtYesevent start time in ISO 8601
calendarIdNocalendar id to register an event
wholeDayFlagNoset true for whole day event
recurrenceBydayNorecurrence by day, e.g. MO,TU,WE
recurrenceUntilNorecurrence end date in ISO 8601
recurrenceBymonthNorecurrence by month, 1-12
recurrenceIntervalNorecurrence interval, default is 1
recurrenceFrequencyNorecurrence frequency
recurrenceBymonthdayNorecurrence by day of month, 1-31
recurrenceTimezoneNameNotimezone for recurrence rule, default Asia/Seoul

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesrecipient organizationMemberId
confirmYesmust be true to execute this write operation; set it only after the user has confirmed the change
messageYesmessage to send
operationYesThe operation to perform

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesfile id from the matching post's fileIdList or regular attachment list
postIdYesmatching post id; this is the final numeric path value in both supported task URL forms
fileNameNooptional file name used when the response does not provide one
operationYesThe operation to perform
projectIdYesverified project id of the matching post; for /task/{projectId}/{postId} URLs this is the first numeric path value

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYespost id
operationYesThe operation to perform
projectIdYesproject id

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
logIdYeslog id, or comment id
postIdYespost id
operationYesThe operation to perform
projectIdYesproject id

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
postIdYespost id
confirmYesmust be true to execute this write operation; set it only after the user has confirmed the change
operationYesThe operation to perform
projectIdYesproject id

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNopage number, default is 0
sizeNonumber of logs per page, default is 20
orderNolog sort order
postIdYespost id
operationYesThe operation to perform
projectIdYesproject id

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
logIdYeslog id, or comment id
postIdYespost id
confirmYesmust be true to execute this write operation; set it only after the user has confirmed the change
operationYesThe operation to perform
projectIdYesproject id

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNopage number, default is 0
sizeNonumber of posts per page, default is 20, max is 100
dueAtNodate filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601
orderNosort order: postDueAt, postUpdatedAt, createdAt, prefix '-' for descending
tagIdsNofilter posts by tag ids, comma separated
subjectsNofilter by post subject keyword
createdAtNodate filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601
operationYesThe operation to perform
projectIdYesproject id from /task/{projectId}/{postId}, or comma separated accessible project ids discovered for a legacy /project/tasks/{postId} URL
updatedAtNodate filter: today, thisweek, prev-{N}d, next-{N}d, or ISO8601~ISO8601
postNumberNofilter by post number
ccMemberIdsNofilter posts by cc member ids, comma separated
toMemberIdsNofilter posts by assignee member ids, comma separated
milestoneIdsNofilter by milestone ids, comma separated
parentPostIdNofilter sub-tasks of a parent post
toMemberSizeNofilter by number of assignees
fromMemberIdsNofilter posts by creator member ids, comma separated
postWorkflowIdsNofilter by workflow ids, comma separated
fromEmailAddressNofilter posts by sender email address
postWorkflowClassesNobacklog, registered, working, closed

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoproject list page number; default is 0
sizeNonumber of projects per page; default is 100, max is 100
typeNoproject type; required for find_projects
scopeNoproject scope; required for find_projects
stateNoproject state; required for find_projects
operationYesThe operation to perform
projectIdNoproject id; required for find_project

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesThe operation to get date time

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

B3.2/5.0
Disambiguation4/5

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 Consistency3/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants read-only access to Sprinklr data via MCP, allowing querying reports, searching cases, and calling Sprinklr API endpoints.
    12
    ISC
  • F
    license
    B
    quality
    B
    maintenance
    Enables 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

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