Atlas / MCP servers / zh1754629545 / Dida365

Dida365BLOCK

mcp/zh1754629545/dida365-2

基于滴答官方文档生成的日程待办增删改查MCP服务

Verdict
BLOCK
Grade
F
Trust score
33 /100
Exposed tools
16 10r · 4w · 2d
Transport
sse · stdio
License
—
Stars
34
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

这是一个为滴答清单(TickTick/Dida365)开发的 Model Context Protocol (MCP) 服务器,使用 TypeScript 编写。该服务允许 AI 助手通过标准化接口与滴答清单 API 进行交互。

功能特性

  • ✅ 创建、读取、更新、删除任务
  • ✅ 管理项目和项目列表
  • ✅ 支持任务优先级和截止日期
  • ✅ 通过环境变量安全配置 API Token
  • ✅ 完整的 TypeScript 类型支持
  • ✅ 错误处理和API响应验证

快速开始

使用MCP (Node版本)

DIDA官方获取token

OpenAPI - API Doc

下载

npm i dida365-mcp-servers

配置json文件

"dida365": {
"command": "node",
"args": [
//your download path ; example:C:\\nvm4w\\nodejs\\node_modules\\dida365-mcp-servers\\dist
],
"env": {
"DIDA365_TOKEN": your TOKEN
}
}

使用本地

1. 安装依赖

npm install

2. 配置环境变量

复制示例环境变量文件:

cp .env.example .env

编辑 .env 文件,添加你的滴答清单 API Token:

DIDA365_TOKEN=Bearer your_token_here

3. 获取 API Token

  1. 访问 滴答清单开放平台
  2. 登录你的滴答清单账号
  3. 创建新应用
  4. 获取访问令牌(Access Token)
  5. 将令牌添加到 .env 文件中

4. 构建和运行

开发模式:

npm run dev

生产模式:

npm run build
npm start

可用工具

任务管理

create_task - 创建新任务

  • 参数:
  • title (string, 必需): 任务标题
  • projectId (string, 必需): 项目ID
  • content (string): 任务内容描述
  • dueDate (string): 截止日期 (ISO 8601格式)
  • priority (number): 优先级 (0-5)

get_task_by_projectId_and_taskId - 通过项目ID和任务ID获取任务

  • 参数:
  • projectId (string, 必需): 项目ID
  • taskId (string, 必需): 任务ID

get_tasks_by_projectId - 通过项目ID获取项目中的任务列表

  • 参数:
  • projectId (string, 必需): 项目ID

update_task - 更新任务

  • 参数:
  • taskId (string, 必需): 任务ID
  • title (string): 任务标题
  • content (string): 任务内容
  • dueDate (string): 截止日期
  • priority (number): 优先级
  • status (number): 任务状态 (0: 未完成, 1: 已完成)

delete_task - 删除任务

  • 参数:
  • taskId (string, 必需): 任务ID
  • projectId (string, 必需): 项目ID

complete_task - 完成任务

  • 参数:
  • taskId (string, 必需): 任务ID
  • `proje
Read from source at commit 4a349f2a780bOBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add dida365-mcp-servers --env DIDA365_TOKEN=${DIDA365_TOKEN} --env DOTENV_CONFIG_DOTENV_KEY=${DOTENV_CONFIG_DOTENV_KEY} --env DOTENV_KEY=${DOTENV_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "dida365-mcp-servers": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "DIDA365_TOKEN": "${DIDA365_TOKEN}",
        "DOTENV_CONFIG_DOTENV_KEY": "${DOTENV_CONFIG_DOTENV_KEY}",
        "DOTENV_KEY": "${DOTENV_KEY}"
      }
    }
  }
}
03

Exposed tools (16)

10 read · 4 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
complete_taskreadMark a task as completed. Requires both task ID and project ID. Updates the task
create_projectwriteCreate a new project in Dida365. Requires at least a project name. Can specify color, view mode, kind and sort order. Returns the created project details.
create_taskwriteCreate a new task in Dida365 with specified details including title, project ID, content, due date and priority. The task will be created under the specified project. Requires at least title and projectId. Returns the created task details.
delete_project_by_projectIDdestructivePermanently delete a project by its ID. This will also delete all tasks within the project. Returns success message upon deletion.
delete_taskdestructivePermanently delete a task from a project. Requires both task ID and project ID for confirmation. Returns success message upon deletion.
get_project_by_projectIdreadGet detailed information about a specific project by its ID. Returns project metadata including name, color, view mode, kind and sort order.
get_projectsreadRetrieve a list of all projects in the Dida365 account. Returns project details including ID, name, color, view mode and sort order. No parameters required.
get_task_by_projectId_and_taskIdreadRetrieve a specific task
get_tasks_by_projectIdreadGet all tasks belonging to a specific project by project ID. Returns a list of tasks with their basic information. Useful for viewing all tasks in a project.
helloreadworld
numberreadnumber
testreadtest
update_project_by_projectIDwriteUpdate an existing project
update_taskwriteModify an existing task
滴答清单任务read获取所有任务的概览
滴答清单项目read获取所有项目的概览
04

Trust audit

BLOCKgrade F · trust 33/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (9 observation(s))
Shell
declared (10 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHHard-coded secrets · inv.env_committed · CWE-798, CWE-321
.env
.env
Why it matters. a real .env in the package
Fix. ship .env.example with placeholders only
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/depd/index.js:425
var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/depd/index.js:427
'return function (' + args + ') {' +
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/function-bind/implementation.js:74
bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/get-intrinsic/index.js:28
return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/get-intrinsic/index.js:305
if ($exec(/^%?[^%]*%?$/, name) === null) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHSupply chain · supply.typosquat · CWE-829, CWE-1357
node_modules/form-data/package.json
request ~ requests
Why it matters. dependency name one edit from a popular package
Fix. verify the package; likely typosquat
HIGHSupply chain · supply.typosquat · CWE-829, CWE-1357
node_modules/iconv-lite/package.json
request ~ requests
Why it matters. dependency name one edit from a popular package
Fix. verify the package; likely typosquat
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
node_modules/@types/node/url.d.ts:558
* console.log(myURL.password);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
node_modules/proxy-from-env/test.js:313
testProxyUrl(env, '', 'http://10.0.0.1/');
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
node_modules/proxy-from-env/test.js:314
testProxyUrl(env, '', 'http://10.0.0.1:80/');
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
node_modules/proxy-from-env/test.js:315
testProxyUrl(env, '', 'http://10.0.0.1:1337/');
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
node_modules/proxy-from-env/test.js:317
testProxyUrl(env, '', 'http://10.0.0.2/');
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
node_modules/iconv-lite/encodings/sbcs-data-generated.js:100
"chars": "€پ‚ƒ„...†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—کTMڑ›œں ،¢£¤¥¦§ ̈©ھ«¬® ̄°±23 ́μ¶· ̧1؛»1⁄41⁄23⁄4؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے"
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
node_modules/iconv-lite/encodings/sbcs-data-generated.js:373
"chars": "«»...“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาําิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํTM๏๐๑๒๓๔๕๖๗๘๙®©����"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
node_modules/dotenv/README-es.md:84
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
node_modules/dotenv/README-es.md:94
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
node_modules/dotenv/README.md:102
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
node_modules/dotenv/README.md:112
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_project_by_projectID, delete_task
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env
.env
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/.package-lock.json
.package-lock.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/call-bind-apply-helpers/.nycrc
.nycrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/dunder-proto/.nycrc
.nycrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/es-define-property/.nycrc
.nycrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 4a349f2a780bfull audit observations/trust-audit/mcp-server/zh1754629545__dida365-2.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-084a349f2a780bBLOCKF33first audit
06

Questions

What is the Dida365 MCP server?

基于滴答官方文档生成的日程待办增删改查MCP服务

What tools does Dida365 expose?

16 in total: 10 read-only, 4 that write, and 2 that can delete or overwrite (delete_project_by_projectID, delete_task). Every one is listed on this page with its risk.

Is Dida365 safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (33/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Dida365 need?

It reads DIDA365_TOKEN, DOTENV_CONFIG_DOTENV_KEY and DOTENV_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Dida365 run?

It speaks sse and stdio, so it runs as a local process your client starts. It is published on npm as dida365-mcp-servers at 1.0.6.

How current is this page?

The grade is for one exact copy of the source (4a349f2a780b), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement