TickTick (Dida365) task bridge: a session-header task panel and curated agent tools over the official TickTick MCP endpoint.
Install
# from npm (prebuilt)
dsh plugin --profile web add @perrylink/dsh-ticktick
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:PerryLink/dsh-ticktick
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
dsh plugin --profile <name> add @perrylink/dsh-ticktick
Release stamp:
0.1.13(2026-10-04).
English | 中文 | Español | Português | हिन्दी
Package name. This project publishes to npm as
@perrylink/dsh-ticktick. The bare npm namedsh-ticktickbelongs to a different, unrelated project — installing it does not install this plugin.
TickTick / Dida365 (滴答清单) task bridge for DeepSeek Harness: a Session-header task panel (list filter, quick add, complete, delete, due dates, drag reorder), eleven curated agent tools, a configuration page on the Plugins page, and a typed Remote service — all over the official TickTick MCP endpoint.
Install
dsh plugin --profile web add github:PerryLink/dsh-ticktick
# npm (published artifact includes lib/, no build permission needed)
dsh plugin --profile web add @perrylink/dsh-ticktick
# git source (pin a commit; pnpm asks you to allow the prepare build once)
dsh plugin --profile web add "github:PerryLink/dsh-ticktick#<sha>"
# local development
dsh plugin --profile web add link:/path/to/dsh-ticktick
Restart dsh web (bundle plugins activate on restart). The ticktick action appears in the Session header; its configuration page opens from the Configure control on the TickTick row of the Plugins page.
What is dsh-ticktick?
TickTick / Dida365 (滴答清单) task bridge for DeepSeek Harness: a Session-header task panel (list filter, quick add, complete, delete, due dates, drag reorder), eleven curated agent tools, a configuration page on the Plugins page, and a typed Remote service — all over the official TickTick MCP endpoint.
Workflow overview: install → open panel → act. The examples below use the real command surface.
Compatibility
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.2.1-alpha.1 (GitHub tag). npm dependency line: @deepseek-ai/dsh 0.2.1-alpha.1 (peers `>=0.1.2-rc.1 <0.2.0 |
| Node | ^22.19.0 || >=24.0.0 |
Features
- Session-header panel — the
ticktickaction in the Session header opens a popup: filter by list (All + every list), toggle undone/completed views, full-text search, add tasks with an optional due date, complete, delete (with confirm), set/clear due dates with overdue/today/tomorrow chips, and drag-reorder (undone, single-list views). A status dot shows the connection state; when no token is configured the panel offers one-step in-panel token setup. - Eleven agent tools —
ticktick_status,ticktick_lists,ticktick_tasks,ticktick_add,ticktick_complete,ticktick_delete,ticktick_due,ticktick_reorder,ticktick_completed,ticktick_search,ticktick_batch_add; Code Mode getsawait tools.ticktick_*(args)for free. - Configuration page — Plugins page → the TickTick row → Configure: API token (secret), token file, MCP endpoint with CN/International presets, protected task ids (all four applied live, no restart), a Test-connection button, and a Clear-credentials button.
- Live token re-read — the Bearer token is re-read per request (card secret > token file, default
$DSH_HOME/.ticktick-token); a 401 resets the client so a rotated token activates without restart. - Measured workarounds — the TickTick MCP server rejects
update_taskfor tasks inside regular projects ("Expecting value: line 1 column 1"); the bridge retries via a move-to-inbox → update → move-back detour. Lists that fail server-side validation (historicalrepeatFrom: ''data) are skipped and reported as warnings, never silently dropped. - Protected ids — mutating operations refuse tasks on the protected-id list before any wire call.
- Multi-device sync — every write lands on the TickTick cloud account, so the phone/desktop/web apps see it; every read fetches current state.
Examples
These are the plugin's real entry points; install once, then call one.
Detailed example
Command
ticktick_lists
Input
{}
Output
Inbox (inbox)
Work (hex1)
Observed from plugins/dsh-ticktick/src/tools.ts:107-109 (renderer); fixture/assertion at plugins/dsh-ticktick/tests/service.spec.ts:40-46,103-108
Failure branch
Input
{"id":"t-guarded","projectId":"hex1"} (protectedTaskIds: ["t-guarded"])
Output
Error: task t-guarded is protected
Observed from plugins/dsh-ticktick/src/service.ts:344-349; plugins/dsh-ticktick/tests/service.spec.ts:158-163
Brief examples
ticktick_tasksticktick_add
Configuration
- Get an API 口令 (a
dp_-prefixed token) from the Dida365/TickTick web app: Profile → Settings → Account & Security → API 口令. - Pick one of three token sources (priority order): the TickTick configuration page's secret field (Plugins page → the TickTick row → Configure), the
DIDA365_TOKENenvironment variable, or a token file (default$DSH_HOME/.ticktick-token, one line). Writing the file activates the bridge without any config change. - Use the card's Test connection button to verify the token, and Clear credentials to wipe it.
| Key | Default | Meaning |
|---|---|---|
tokenFile |
'' |
Path to a text file holding the token; empty resolves to $DSH_HOME/.ticktick-token |
mcpUrl |
https://mcp.dida365.com |
TickTick MCP endpoint (the international endpoint is unverified — see below) |
toolCallTimeoutMs |
30000 |
Per tools/call deadline in milliseconds |
protectedTaskIds |
[] |
Task ids every mutating operation refuses |
tools.* |
'' each |
Raw MCP tool-name pins (projects/tasks/create/complete/remove/update/move); '' = discover by pattern |
Agent tools
| Tool | Purpose |
|---|---|
ticktick_status |
connection state: token configured, client connected, endpoint, last error |
ticktick_lists |
every list (project), the virtual Inbox included |
ticktick_tasks |
undone tasks: one list or all aggregated, with per-list warnings |
ticktick_add |
create a task (list, optional ISO due date) |
ticktick_complete |
complete a task (task id + list id) |
ticktick_delete |
delete a task (task id + list id) |
ticktick_due |
set/clear a due date (omit the date to clear) |
ticktick_reorder |
assign a new integer sortOrder (lists order by descending sortOrder) |
ticktick_completed |
tasks completed within a window (default 30 days), optionally one list |
ticktick_search |
full-text search over tasks (the official search tool) |
ticktick_batch_add |
create several tasks in one call |
Architecture
browser panel ── ctx.remote.ticktick.* ──▶ TicktickService (Typert Remote)
configuration page ── ctx.configForms ──▶ profile entry "ticktick" (Volatile Config)
agent tools ─── ctx.tools (ticktick_*) ──▶ the same service
│
▼
minimal streamable-HTTP MCP client
(session id, protocol version, Retry-After)
│
▼
https://mcp.dida365.com (official TickTick MCP)
Known limitations
- The international TickTick endpoint is unverified:
mcpUrldefaults to the CN endpoint, and the international MCP URL has not been probed. - The completed view, search, and batch add ride the MCP tools
list_completed_tasks_by_date,search, andbatch_add_tasks; their wire contracts come from the published catalogue (dida365-sdkstubs) and re-verification against the live endpoint is pending — runprobes/probe-queries.mjswith a real token before claiming them verified. - The measured
update_taskcrash and the list-validation failure are server-side behaviors;probes/re-verifies them against the live endpoint before a release (run withDIDA365_TOKENexported). - The
/apisurface the panel uses is the standard harness Typert gateway; the token is stored locally (settings document or token file) and sent only to TickTick's own servers. Do not expose adsh webinstance to the public internet.
Verify the bridge against the live endpoint
# PowerShell
$env:DIDA365_TOKEN='dp_...'
node probes/probe-bootstrap.mjs # handshake + tool catalogue
node probes/probe-crud.mjs # create/complete/delete round trip
node probes/probe-due.mjs # due dates (+ detour with a PROJECT_ID)
node probes/probe-reorder.mjs # sortOrder semantics
node probes/probe-queries.mjs # P2 query-tool contract discovery
Uninstall
dsh plugin --profile web remove @perrylink/dsh-ticktick
Restart dsh web. All runtime registrations (tools, panel, configuration page, prompt section) are removed with the plugin. The only static residue is the token in the user settings document — clear it first with the Clear credentials button on the TickTick configuration page (or remove the token file / DIDA365_TOKEN variable) to detach completely. To keep the package installed but inactive, disable the row instead:
- id: ticktick
disabled: true
Install from the DSH Desktop Market
All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.
PerryLink DSH Plugin Family
This project is part of the DeepSeek Harness plugin family from PerryLink. The roster stays collapsed below so every README keeps a short first screen; expand it to see every row and its status.
License
Links
More in this category
Tencent/WeKnora#dsh-weknora★ 35688
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 6403
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 4593
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
sixtysevenlf/dsh-blender-plugin★ 1388
Lets a DSH agent drive a local Blender over a direct TCP channel with 15 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 228 ops across 34 families.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1152
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
anysearch-team/anysearch-dsh★ 665
AnySearch-powered real-time web and vertical search provider for DeepSeek Harness.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.