dooray-mcp-js
The server is an MCP server for Dooray that provides tools to interact with Dooray services, focusing on read and some write operations.
Send messages to Dooray messenger.
Find calendars and events, and create calendar events (with recurrence options).
Look up account members by name/userCode or by ID.
Find projects and project details.
Find posts (tasks) with various filters (date, assignee, tags, etc.).
Find comments/activity logs for a post, and get a specific log by ID.
Add and update comments (write operations, hidden in read-only mode).
List and download post attachments, including inline body files.
Get current system date/time.
Supports full and read-only modes; in read-only mode write-capable tools are hidden.
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-jslist my projects"
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-js
Dooray MCP server implemented in Node.js. It follows the tool names and API behavior of dooray-go/dooray-mcp, but does not require Go or Homebrew.
Requirements
Node.js 18 or newer
Dooray personal API token
Related MCP server: mcp-gdocs
Official Documentation
Scope
This MCP server does not wrap every Dooray API. It focuses on frequently used account, calendar, project, post, attachment, and messenger APIs.
Most /admin/v1 and /admin/v2 administration APIs are intentionally not exposed by default, especially write-capable administration endpoints.
Read-only mode
Dooray personal API tokens are not issued with separate read-only and write permissions. A token that can call write APIs may still have those permissions at the Dooray API level.
For safer installations, this server provides a read-only mode at the MCP tool layer. In read-only mode, write-capable tools are not exposed in tools/list and cannot be called through tools/call.
Run
npx -y dooray-mcp-js --token "{personal-token}"You can also use an environment variable:
DOORAY_TOKEN="{personal-token}" npx -y dooray-mcp-jsRun with only read-only tools exposed:
DOORAY_TOKEN="{personal-token}" npx -y dooray-mcp-js --mode read-onlyCodex
Register the package directly with Codex:
codex mcp add dooray-mcp-js --env DOORAY_TOKEN="$DOORAY_TOKEN" -- npx -y dooray-mcp-jsIf the token is not already in DOORAY_TOKEN, pass it when registering:
codex mcp add dooray-mcp-js --env DOORAY_TOKEN="{personal-token}" -- npx -y dooray-mcp-jsThe server reads DOORAY_TOKEN when Codex starts it, so the token does not need to be included in the command arguments.
Codex read-only registration
Register a second MCP server with the same package and token, but expose only read-only tools:
codex mcp add dooray-mcp-js-read-only --env DOORAY_TOKEN="$DOORAY_TOKEN" -- npx -y dooray-mcp-js --mode read-onlyYou can also set the mode through an environment variable:
codex mcp add dooray-mcp-js-read-only --env DOORAY_TOKEN="$DOORAY_TOKEN" --env DOORAY_MCP_MODE=read-only -- npx -y dooray-mcp-jsClaude Desktop
{
"mcpServers": {
"dooray-mcp-js": {
"command": "npx",
"args": ["-y", "dooray-mcp-js"],
"env": {
"DOORAY_TOKEN": "{personal-token}"
}
}
}
}Read-only Claude Desktop configuration:
{
"mcpServers": {
"dooray-mcp-js-read-only": {
"command": "npx",
"args": ["-y", "dooray-mcp-js", "--mode", "read-only"],
"env": {
"DOORAY_TOKEN": "{personal-token}"
}
}
}
}Claude Code
claude mcp add dooray-mcp-js --env DOORAY_TOKEN="{personal-token}" -- npx -y dooray-mcp-jsRead-only registration:
claude mcp add dooray-mcp-js-read-only --env DOORAY_TOKEN="{personal-token}" -- npx -y dooray-mcp-js --mode read-onlyProject Structure
dooray-mcp-js/
├── src/
│ └── index.js # MCP server entry point
├── package.json
└── README.mdLocal development
When working from a cloned repository, run the local entry point directly:
DOORAY_TOKEN="{personal-token}" node ./src/index.jsTools
The dooray-mcp-js package exposes all currently implemented tools. The current server has no delete tool yet.
dooray_messengerdooray_calendar_calendarsdooray_calendar_eventsdooray_calendar_post_eventdooray_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 to a post; body is{ "mimeType": "text/x-markdown", "content": "..." })dooray_post_log_update(update a comment or activity log with the same body format)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 withmedia=raw; authorization is limited to the configured API origin and HTTPSfile-api.dooray.com)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 for this workflow.
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. Call
dooray_postswith the project ID from the new URL form or the candidate project IDs discovered for a legacy URL. Usesizeup to100, continue throughpagevalues as needed, and match the returned post ID to the URL'spostId. A lookup under one incorrect project ID or only the first result page is not evidence that the task or its files are unavailable.Read the task body from the matching
dooray_postsresult. Do not calldooray_post_logsunless the user explicitly asks for comments or activity history.If the matching post contains
fileIdList, calldooray_post_file_downloadonce for every listed ID using the same verifiedprojectIdandpostId. These IDs commonly represent images embedded in the task body, but can represent other body files as well.Inspect the returned local
filePathwith an image viewer or an appropriate document parser. The download result also includesfileName,mimeType,size, andtemporary.
dooray_post_files is exposed for listing regular attachments, but it is separate from the fileIdList path used by body files. It can return an empty list or AUTH_FORBIDDEN_ERROR even when direct downloads from dooray_posts.fileIdList work. Therefore, neither outcome should be reported as proof that a body image or file is inaccessible. A fetch failed error or timeout from dooray_post_file_download is also a transport failure, not a permission result, and should be retried or reported separately. Report a file as forbidden or missing only when the direct download returns a terminal Dooray response such as 403 or 404 with the verified projectId, postId, and fileId.
Read-only mode tools
When --mode read-only or DOORAY_MCP_MODE=read-only is set, write-capable Dooray 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
Options
--token: Dooray personal API token. Defaults toDOORAY_TOKEN.--endpoint: Dooray API endpoint. Defaults tohttps://api.dooray.com.--mode: tool exposure mode. Usefullorread-only. Defaults toDOORAY_MCP_MODEorfull.
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 Servers
AlicenseNot gradedqualityFmaintenanceMCP Server for public disclosure information of Korean companies, powered by the dartpoint.ai API.3Apache 2.0- AlicenseNot gradedqualityDmaintenanceMCP server for Google Docs, Google Drive, and Comments with flexible authentication, enabling document management, editing, formatting, commenting, and drive operations.2112MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server for reading/editing Google Docs content and managing comments, including listing, creating, replying, resolving, and reopening comments via the Docs API and Drive API.GPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP server for managing social media posts across multiple platforms using the Postiz API. Supports creating, updating, deleting posts, and generating videos.602MIT
Related MCP Connectors
A basic MCP server to operate on the Postman API.
PandaDoc MCP server for creating, sending, signing, and tracking PandaDoc documents.
MCP server for Appcircle mobile CI/CD platform.
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/sdadaniel/dooray-mcp-js'
If you have feedback or need assistance with the MCP directory API, please join our Discord server