Dida365BLOCK
基于滴答官方文档生成的日程待办增删改查MCP服务
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
下载
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
- 访问 滴答清单开放平台
- 登录你的滴答清单账号
- 创建新应用
- 获取访问令牌(Access Token)
- 将令牌添加到
.env文件中
4. 构建和运行
开发模式:
npm run dev
生产模式:
npm run build npm start
可用工具
任务管理
create_task - 创建新任务
- 参数:
title(string, 必需): 任务标题projectId(string, 必需): 项目IDcontent(string): 任务内容描述dueDate(string): 截止日期 (ISO 8601格式)priority(number): 优先级 (0-5)
get_task_by_projectId_and_taskId - 通过项目ID和任务ID获取任务
- 参数:
projectId(string, 必需): 项目IDtaskId(string, 必需): 任务ID
get_tasks_by_projectId - 通过项目ID获取项目中的任务列表
- 参数:
projectId(string, 必需): 项目ID
update_task - 更新任务
- 参数:
taskId(string, 必需): 任务IDtitle(string): 任务标题content(string): 任务内容dueDate(string): 截止日期priority(number): 优先级status(number): 任务状态 (0: 未完成, 1: 已完成)
delete_task - 删除任务
- 参数:
taskId(string, 必需): 任务IDprojectId(string, 必需): 项目ID
complete_task - 完成任务
- 参数:
taskId(string, 必需): 任务ID- `proje
4a349f2a780bOBSERVED · 2026-10-08Connect
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 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]{
"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}"
}
}
}
}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.
| Tool | Risk | Description |
|---|---|---|
complete_task | read | Mark a task as completed. Requires both task ID and project ID. Updates the task |
create_project | write | Create 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_task | write | Create 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_projectID | destructive | Permanently delete a project by its ID. This will also delete all tasks within the project. Returns success message upon deletion. |
delete_task | destructive | Permanently delete a task from a project. Requires both task ID and project ID for confirmation. Returns success message upon deletion. |
get_project_by_projectId | read | Get detailed information about a specific project by its ID. Returns project metadata including name, color, view mode, kind and sort order. |
get_projects | read | Retrieve 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_taskId | read | Retrieve a specific task |
get_tasks_by_projectId | read | Get 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. |
hello | read | world |
number | read | number |
test | read | test |
update_project_by_projectID | write | Update an existing project |
update_task | write | Modify an existing task |
滴答清单任务 | read | 获取所有任务的概览 |
滴答清单项目 | read | 获取所有项目的概览 |
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.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (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)
.env
var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site','return function (' + args + ') {' +bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();if ($exec(/^%?[^%]*%?$/, name) === null) {request ~ requests
request ~ requests
* console.log(myURL.password);
testProxyUrl(env, '', 'http://10.0.0.1/');
testProxyUrl(env, '', 'http://10.0.0.1:80/');
testProxyUrl(env, '', 'http://10.0.0.1:1337/');
testProxyUrl(env, '', 'http://10.0.0.2/');
"chars": "€پ‚ƒ„...†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—کTMڑ›œں ،¢£¤¥¦§ ̈©ھ«¬® ̄°±23 ́μ¶· ̧1؛»1⁄41⁄23⁄4؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے"
"chars": "«»...“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาําิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํTM๏๐๑๒๓๔๕๖๗๘๙®©����"
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"
delete_project_by_projectID, delete_task
.env
.package-lock.json
.nycrc
.nycrc
.nycrc
Gates applied: no_behavioural_pass.
4a349f2a780bfull audit observations/trust-audit/mcp-server/zh1754629545__dida365-2.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 4a349f2a780b | BLOCK | F | 33 | first audit |
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.