tododdle-mcp 2.8.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tododdle",
3
- "version": "2.8.0",
3
+ "version": "3.0.1",
4
4
  "description": "Disciplined agent workflows for projects managed in ToDoddle.",
5
5
  "author": {
6
6
  "name": "ToDoddle",
@@ -9,19 +9,19 @@
9
9
  "homepage": "https://tododdle.com",
10
10
  "repository": "https://github.com/krffl/tododdle-mcp",
11
11
  "license": "MIT",
12
- "keywords": ["project-management", "tasks", "time-tracking", "mcp"],
12
+ "keywords": ["project-management", "tickets", "boards", "time-tracking", "mcp"],
13
13
  "skills": "./skills/",
14
14
  "interface": {
15
15
  "displayName": "ToDoddle",
16
16
  "shortDescription": "Manage tracked work with project context",
17
- "longDescription": "Use ToDoddle as the shared work ledger for project context, task execution, durable status updates, blockers, comments, and time tracking.",
17
+ "longDescription": "Use ToDoddle as the shared work ledger for project context, board and lane structure, ticket execution, durable status updates, blockers, comments, and time tracking.",
18
18
  "developerName": "ToDoddle",
19
19
  "category": "Productivity",
20
20
  "capabilities": ["Read", "Write"],
21
21
  "websiteURL": "https://tododdle.com",
22
22
  "defaultPrompt": [
23
23
  "Review my ToDoddle work queue and recommend what to do next.",
24
- "Read the project context and begin the relevant task.",
24
+ "Read the project context and begin the relevant ticket.",
25
25
  "Summarize progress and update the tracked work."
26
26
  ],
27
27
  "brandColor": "#0F766E"
package/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # ToDoddle MCP Server
2
2
 
3
- The official Model Context Protocol stdio server for [ToDoddle](https://tododdle.com). It gives MCP-compatible agents a bounded interface for project context, task management, comments, and time tracking through ToDoddle's hosted API.
3
+ The official Model Context Protocol stdio server for [ToDoddle](https://tododdle.com). It gives MCP-compatible agents a bounded interface for project context, boards, lanes, tickets, comments, and time tracking through ToDoddle's hosted API.
4
4
 
5
5
  The package contains no ToDoddle application or database code. It is a small stdio client that authenticates as an Agent Connection and calls the hosted API.
6
6
 
7
- Agent work claims let any connected agent indicate that it is actively handling a task without becoming the human assignee. Claims use the configured Agent Connection label, an opaque run ID, and an expiring lease.
7
+ Version 3 sends its package version and compatibility level with every token and API request. If ToDoddle returns `MCP_UPDATE_REQUIRED`, run `npx --yes --prefer-online tododdle-mcp@latest` and restart the MCP host. The error includes the installed version, minimum supported level, update command, and current troubleshooting guide.
8
+
9
+ Agent work claims let any connected agent indicate that it is actively handling a ticket without becoming the human assignee. Claims use the configured Agent Connection label, an opaque run ID, and an expiring lease.
8
10
 
9
11
  ## Requirements
10
12
 
@@ -90,11 +92,15 @@ Installing the plugin does not create or expand ToDoddle credentials, scopes, or
90
92
  For substantial planning or implementation, load project context in a small, predictable sequence:
91
93
 
92
94
  1. Call `get_project_brief` once for the durable purpose, constraints, and success criteria.
93
- 2. Call `get_project_context` once for bounded project-plan and section structure.
94
- 3. Use `list_project_artifacts`, `list_tasks`, or `get_task` only for the artifacts and work relevant to the request. Keep list calls bounded and follow their pagination metadata.
95
- 4. Reuse returned project, plan, section, task, and artifact IDs in the active conversation and its compaction summary. Refresh only volatile task state before a mutation.
95
+ 2. Call `get_project_context` once for bounded board and lane structure.
96
+ 3. Use `list_project_artifacts`, `list_tickets`, or `get_ticket` only for the artifacts and work relevant to the request. Keep list calls bounded and follow their pagination metadata.
97
+ 4. Reuse returned project, board, lane, ticket, and artifact IDs in the active conversation and its compaction summary. Refresh only volatile ticket state before a mutation.
98
+
99
+ Simple lookups should skip the brief and full context entirely. Call the narrowest read tool, such as `get_ticket` for a known ticket or hierarchy-filtered `list_tickets` for one board or lane. `get_work_queue` remains the cross-project operational view. The stable API fields `planId`, `sectionId`, and `taskId` identify boards, lanes, and tickets.
100
+
101
+ ### Version 3 migration
96
102
 
97
- Simple lookups should skip the brief and full context entirely: call the narrowest read tool, such as `get_task` for a known task or hierarchy-filtered `list_tasks` for one plan or section. `get_work_queue` remains the cross-project operational view. This keeps context current without repeatedly rediscovering stable hierarchy or fanning out by status.
103
+ Version 3 replaces Plan, Section, and Task tool names with Board, Lane, and Ticket names. The hosted API paths and stable ID fields do not change. Version 2 clients must update to `tododdle-mcp@latest` and restart their agent host. The API returns `MCP_UPDATE_REQUIRED` with the exact update command when an old client identifies itself.
98
104
 
99
105
  The server returns authoritative website URLs with records so an agent can hand work back to a human without reconstructing routes. Access remains the intersection of the Agent Connection's scopes, explicit project grants, and authorizing user's current ACL on every call.
100
106
 
@@ -109,55 +115,55 @@ When ToDoddle should be mandatory for one repository, merge the relevant rules f
109
115
  - `list_projects`
110
116
  - `get_project`
111
117
  - `get_project_context`
112
- - `list_plans`
113
- - `get_plan`
114
- - `list_sections`
115
- - `get_section`
118
+ - `list_boards`
119
+ - `get_board`
120
+ - `list_lanes`
121
+ - `get_lane`
116
122
  - `list_project_members`
117
123
  - `list_project_documents`
118
124
  - `get_document_download_url`
119
125
  - `list_notes`
120
126
  - `get_note`
121
- - `list_tasks`
127
+ - `list_tickets`
122
128
  - `get_work_queue`
123
129
  - `list_available_work`
124
130
  - `get_focus_list`
125
- - `add_task_to_focus`
126
- - `move_focus_task`
127
- - `remove_task_from_focus`
128
- - `get_task`
131
+ - `add_ticket_to_focus`
132
+ - `move_focus_ticket`
133
+ - `remove_ticket_from_focus`
134
+ - `get_ticket`
129
135
  - `get_project_brief`
130
136
  - `list_project_artifacts`
131
137
  - `get_project_artifact`
132
138
  - `get_agent_inbox`
133
139
 
134
- ### Manage Tasks
135
-
136
- - `claim_task`
137
- - `claim_next_task`
138
- - `renew_task_claim`
139
- - `release_task`
140
- - `create_task`
141
- - `update_task`
142
- - `transition_task`
143
- - `preview_task_move`
144
- - `move_task`
145
- - `set_task_blocker`
146
- - `add_task_comment`
140
+ ### Manage Tickets
141
+
142
+ - `claim_ticket`
143
+ - `claim_next_ticket`
144
+ - `renew_ticket_claim`
145
+ - `release_ticket`
146
+ - `create_ticket`
147
+ - `update_ticket`
148
+ - `transition_ticket`
149
+ - `preview_ticket_move`
150
+ - `move_ticket`
151
+ - `set_ticket_blocker`
152
+ - `add_ticket_comment`
147
153
  - `acknowledge_agent_reply`
148
- - `archive_task`
154
+ - `archive_ticket`
149
155
 
150
- `list_available_work` reads only unblocked, currently unclaimed work in one project. `claim_next_task` atomically selects the highest-ranked eligible task and safely replays a still-live claim when its unique stable run ID is retried. `claim_task` claims a known task, `renew_task_claim` refreshes its lease, and `release_task` ends that lease without changing task status or human assignment. A conflicting live claim identifies the Agent Connection already handling the task. Human assignment remains independent throughout. `preview_task_move` reports section automation and hierarchy blockers before a same-project plan move. `move_task` and `archive_task` are marked destructive because a destination section may archive the task. Task deletion is intentionally unavailable.
156
+ `list_available_work` reads only unblocked, currently unclaimed work in one project. `claim_next_ticket` selects the highest-ranked eligible ticket. `claim_ticket`, `renew_ticket_claim`, and `release_ticket` manage its agent lease without changing human assignment. `preview_ticket_move` reports lane automation and hierarchy blockers before a board move. `move_ticket` and `archive_ticket` are destructive because a destination lane can archive the ticket. Ticket deletion is unavailable.
151
157
 
152
158
  Durable agent-to-human handoffs use typed `HANDOFF` comments with a concise outcome, verification and immutable evidence, and any remaining risk or next action. External mutations return a stable ToDoddle `uiUrl`; expiring asset token URLs must not be copied into comments. A continuing run reads and handles its Agent Connection inbox reply before acknowledgement, then reloads the linked record.
153
159
 
154
- Task create/update accepts `TASK`, `FEATURE`, `EPIC`, `BUG`, `RESEARCH`, and `ACTION_ITEM`. Section create/update supports `SET_KIND` alongside status, priority, assignee, and archive entry actions.
160
+ Ticket create/update accepts the stable kind values `TASK`, `FEATURE`, `EPIC`, `BUG`, `RESEARCH`, and `ACTION_ITEM`. Lane create/update supports `SET_KIND` alongside status, priority, assignee, and archive entry actions.
155
161
 
156
162
  ### Manage Project Structure
157
163
 
158
164
  - `create_project`, `update_project`, `archive_project`, `restore_project`
159
- - `create_plan`, `update_plan`, `move_plan`, `archive_plan`, `restore_plan`
160
- - `create_section`, `update_section`, `move_section`, `archive_section`, `restore_section`
165
+ - `create_board`, `update_board`, `move_board`, `archive_board`, `restore_board`
166
+ - `create_lane`, `update_lane`, `move_lane`, `archive_lane`, `restore_lane`
161
167
 
162
168
  Archive operations are destructive and require client approval. Permanent deletion is intentionally unavailable.
163
169
 
@@ -173,10 +179,10 @@ Notes are organization-scoped and unavailable to project-only connections.
173
179
 
174
180
  - `get_active_time_entries`
175
181
  - `list_project_time`
176
- - `list_task_time`
177
- - `start_task_timer`
178
- - `stop_task_timer`
179
- - `log_task_time`
182
+ - `list_ticket_time`
183
+ - `start_ticket_timer`
184
+ - `stop_ticket_timer`
185
+ - `log_ticket_time`
180
186
  - `update_time_entry`
181
187
  - `archive_time_entry`
182
188
 
@@ -187,7 +193,7 @@ Notes are organization-scoped and unavailable to project-only connections.
187
193
  - `create_project_artifact`
188
194
  - `update_project_artifact`
189
195
  - `transition_project_artifact`
190
- - `link_artifact_task`
196
+ - `link_artifact_ticket`
191
197
  - `add_artifact_comment`
192
198
  - `list_artifact_revisions`
193
199
  - `link_project_artifacts`
@@ -195,13 +201,17 @@ Notes are organization-scoped and unavailable to project-only connections.
195
201
  ### Upload Files
196
202
 
197
203
  - `upload_project_document`
198
- - `attach_file_to_task`
204
+ - `attach_file_to_ticket`
199
205
 
200
206
  Each tool accepts either an approved local `filePath` or an HTTPS `sourceUrl`. Local paths are disabled until `TODODDLE_UPLOAD_ROOTS` is configured. Files stream directly from this local MCP process to ToDoddle's short-lived Bunny upload URL; file bodies are never placed in MCP JSON messages.
201
207
 
208
+ If an agent copies a source file into a dedicated ToDoddle upload directory only to satisfy the local path restriction, it should remove that temporary copy after the tool confirms success. It should retain the copy after a failed or uncertain upload so the upload can be retried. It must never remove the original source or a pre-existing file. Temporary files that the MCP creates for HTTPS sources are removed automatically.
209
+
202
210
  Use `get_document_download_url` with a `projectId` and `documentId` returned by `list_project_documents` to obtain a five-minute tokenized URL. The URL grants access only to that ready document and should not be stored in comments or other durable project context. Video documents return a protected stream URL when the workspace subscription permits playback.
203
211
 
204
- The server also provides task, project, and project-artifact resource templates plus `triage_work` and `daily_status` prompts.
212
+ For attachment review, request a fresh URL, download the asset into a private `mktemp -d` directory without printing or persisting the URL, and inspect the local file with the appropriate tool. Use a browser only when local download or rendering is unavailable. Remove only the agent-created temporary files and directory after successful inspection; never remove an original or pre-existing user file.
213
+
214
+ The server also provides ticket, project, and project-artifact resource templates plus `triage_work` and `daily_status` prompts.
205
215
 
206
216
  ## Permissions
207
217
 
@@ -7,20 +7,20 @@
7
7
  "update_project": ["PUT /api/external/projects/[projectId]"],
8
8
  "archive_project": ["PUT /api/external/projects/[projectId]"],
9
9
  "restore_project": ["PUT /api/external/projects/[projectId]"],
10
- "list_plans": ["GET /api/external/projects/[projectId]/plans"],
11
- "get_plan": ["GET /api/external/projects/[projectId]/plans/[planId]"],
12
- "create_plan": ["POST /api/external/projects/[projectId]/plans"],
13
- "update_plan": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
14
- "move_plan": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
15
- "archive_plan": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
16
- "restore_plan": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
17
- "list_sections": ["GET /api/external/projects/[projectId]/plans/[planId]/sections"],
18
- "get_section": ["GET /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
19
- "create_section": ["POST /api/external/projects/[projectId]/plans/[planId]/sections"],
20
- "update_section": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
21
- "move_section": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
22
- "archive_section": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
23
- "restore_section": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
10
+ "list_boards": ["GET /api/external/projects/[projectId]/plans"],
11
+ "get_board": ["GET /api/external/projects/[projectId]/plans/[planId]"],
12
+ "create_board": ["POST /api/external/projects/[projectId]/plans"],
13
+ "update_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
14
+ "move_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
15
+ "archive_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
16
+ "restore_board": ["PUT /api/external/projects/[projectId]/plans/[planId]"],
17
+ "list_lanes": ["GET /api/external/projects/[projectId]/plans/[planId]/sections"],
18
+ "get_lane": ["GET /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
19
+ "create_lane": ["POST /api/external/projects/[projectId]/plans/[planId]/sections"],
20
+ "update_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
21
+ "move_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
22
+ "archive_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
23
+ "restore_lane": ["PUT /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]"],
24
24
  "list_project_members": ["GET /api/external/projects/[projectId]/members"],
25
25
  "list_project_documents": ["GET /api/external/projects/[projectId]/documents"],
26
26
  "get_document_download_url": ["POST /api/external/projects/[projectId]/documents/[documentId]/download-url"],
@@ -28,7 +28,7 @@
28
28
  "POST /api/external/projects/[projectId]/documents/upload-sessions",
29
29
  "POST /api/external/projects/[projectId]/documents/[documentId]/finalize"
30
30
  ],
31
- "attach_file_to_task": [
31
+ "attach_file_to_ticket": [
32
32
  "POST /api/external/projects/[projectId]/documents/upload-sessions",
33
33
  "POST /api/external/projects/[projectId]/documents/[documentId]/finalize"
34
34
  ],
@@ -40,32 +40,32 @@
40
40
  "get_project_context": ["GET /api/external/projects/[projectId]/context"],
41
41
  "get_work_queue": ["GET /api/external/work-queue"],
42
42
  "list_available_work": ["GET /api/external/work-queue/available"],
43
- "claim_next_task": ["POST /api/external/work-queue/available"],
43
+ "claim_next_ticket": ["POST /api/external/work-queue/available"],
44
44
  "get_focus_list": ["GET /api/external/focus"],
45
- "add_task_to_focus": ["POST /api/external/focus"],
46
- "move_focus_task": ["PATCH /api/external/focus/[taskId]"],
47
- "remove_task_from_focus": ["DELETE /api/external/focus/[taskId]"],
48
- "list_tasks": ["GET /api/external/tasks"],
49
- "get_task": ["GET /api/external/tasks/[taskId]"],
50
- "claim_task": ["PUT /api/external/tasks/[taskId]/claim"],
51
- "renew_task_claim": ["PUT /api/external/tasks/[taskId]/claim"],
52
- "release_task": ["DELETE /api/external/tasks/[taskId]/claim"],
53
- "create_task": ["POST /api/external/tasks"],
54
- "update_task": ["PUT /api/external/tasks/[taskId]"],
55
- "transition_task": ["PUT /api/external/tasks/[taskId]"],
56
- "set_task_blocker": ["PUT /api/external/tasks/[taskId]"],
57
- "move_task": ["PUT /api/external/tasks/[taskId]/move"],
58
- "preview_task_move": ["POST /api/external/tasks/[taskId]/move/preview"],
59
- "add_task_comment": ["POST /api/external/tasks/[taskId]/comments"],
45
+ "add_ticket_to_focus": ["POST /api/external/focus"],
46
+ "move_focus_ticket": ["PATCH /api/external/focus/[taskId]"],
47
+ "remove_ticket_from_focus": ["DELETE /api/external/focus/[taskId]"],
48
+ "list_tickets": ["GET /api/external/tasks"],
49
+ "get_ticket": ["GET /api/external/tasks/[taskId]"],
50
+ "claim_ticket": ["PUT /api/external/tasks/[taskId]/claim"],
51
+ "renew_ticket_claim": ["PUT /api/external/tasks/[taskId]/claim"],
52
+ "release_ticket": ["DELETE /api/external/tasks/[taskId]/claim"],
53
+ "create_ticket": ["POST /api/external/tasks"],
54
+ "update_ticket": ["PUT /api/external/tasks/[taskId]"],
55
+ "transition_ticket": ["PUT /api/external/tasks/[taskId]"],
56
+ "set_ticket_blocker": ["PUT /api/external/tasks/[taskId]"],
57
+ "move_ticket": ["PUT /api/external/tasks/[taskId]/move"],
58
+ "preview_ticket_move": ["POST /api/external/tasks/[taskId]/move/preview"],
59
+ "add_ticket_comment": ["POST /api/external/tasks/[taskId]/comments"],
60
60
  "get_agent_inbox": ["GET /api/external/agent-inbox"],
61
61
  "acknowledge_agent_reply": ["POST /api/external/agent-inbox/[commentId]/acknowledge"],
62
- "archive_task": ["PATCH /api/external/tasks/[taskId]/archive"],
62
+ "archive_ticket": ["PATCH /api/external/tasks/[taskId]/archive"],
63
63
  "get_active_time_entries": ["GET /api/external/time-entries/active"],
64
64
  "list_project_time": ["GET /api/external/projects/[projectId]/time-entries"],
65
- "list_task_time": ["GET /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
66
- "start_task_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
67
- "log_task_time": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
68
- "stop_task_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]/stop"],
65
+ "list_ticket_time": ["GET /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
66
+ "start_ticket_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
67
+ "log_ticket_time": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries"],
68
+ "stop_ticket_timer": ["POST /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]/stop"],
69
69
  "update_time_entry": ["PATCH /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]"],
70
70
  "archive_time_entry": ["DELETE /api/external/projects/[projectId]/tasks/[taskId]/time-entries/[timeEntryId]"],
71
71
  "get_project_brief": ["GET /api/external/projects/[projectId]/brief"],
@@ -76,19 +76,21 @@
76
76
  "link_project_artifacts": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/relations"],
77
77
  "update_project_artifact": ["PATCH /api/external/projects/[projectId]/artifacts/[artifactId]"],
78
78
  "transition_project_artifact": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/transition"],
79
- "link_artifact_task": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/task-links"],
79
+ "link_artifact_ticket": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/task-links"],
80
80
  "add_artifact_comment": ["POST /api/external/projects/[projectId]/artifacts/[artifactId]/comments"]
81
81
  },
82
82
  "exceptions": {
83
83
  "POST /api/external/oauth/token": "Transport-level OAuth token acquisition is exercised by the API client, not exposed as a model-callable tool.",
84
+ "GET /api/external/action-approvals": "Consequential-action review is a human control surface and is not exposed as a model-callable read.",
85
+ "GET /api/external/action-approvals/[approvalId]": "Consequential-action detail is a human control surface and is not exposed as a model-callable read.",
84
86
  "DELETE /api/external/projects/[projectId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes reversible archive and restore tools.",
85
87
  "DELETE /api/external/projects/[projectId]/plans/[planId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes reversible archive and restore tools.",
86
88
  "DELETE /api/external/projects/[projectId]/plans/[planId]/sections/[sectionId]": "Compatibility endpoint is intentionally omitted; MCP exposes explicit optimistic archive and restore tools.",
87
- "POST /api/external/projects/[projectId]/tasks/[taskId]/attachments": "Attachment creation is completed by the direct-upload finalize operation used by attach_file_to_task.",
88
- "GET /api/external/tasks/[taskId]/comments": "get_task returns bounded comments with the complete task context, avoiding a redundant model-callable read.",
89
- "DELETE /api/external/tasks/[taskId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes archive_task.",
89
+ "POST /api/external/projects/[projectId]/tasks/[taskId]/attachments": "Attachment creation is completed by the direct-upload finalize operation used by attach_file_to_ticket.",
90
+ "GET /api/external/tasks/[taskId]/comments": "get_ticket returns bounded comments with the complete ticket context, avoiding a redundant model-callable read.",
91
+ "DELETE /api/external/tasks/[taskId]": "Compatibility hard-delete endpoint is intentionally omitted; MCP exposes archive_ticket.",
90
92
  "GET /api/external/todos": "Superseded personal-list contract; MCP uses the bounded Focus API.",
91
- "POST /api/external/todos": "Superseded personal-list contract; MCP uses add_task_to_focus.",
92
- "DELETE /api/external/todos/[taskId]": "Superseded personal-list contract; MCP uses remove_task_from_focus."
93
+ "POST /api/external/todos": "Superseded personal-list contract; MCP uses add_ticket_to_focus.",
94
+ "DELETE /api/external/todos/[taskId]": "Superseded personal-list contract; MCP uses remove_ticket_from_focus."
93
95
  }
94
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO;IAJ5B,YACW,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,OAAO,EAI3B;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,UAAU,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,iBAAkB,YAAW,WAAW;IAIvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;IAE3B,YAA6B,MAAM,EAAE,SAAS,EAAI;YAEpC,cAAc;YA0Bd,OAAO;YAqCP,WAAW;IAazB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,OAAO;IAaf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,oCAE9E;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,oCAExD;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAE9B;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEhC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEjC;IAEK,UAAU,CACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAUf;CACF"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO;IAJ5B,YACW,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,OAAO,EAI3B;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,UAAU,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,iBAAkB,YAAW,WAAW;IAIvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;IAE3B,YAA6B,MAAM,EAAE,SAAS,EAAI;YAEpC,cAAc;YA6Bd,OAAO;YAsCP,WAAW;IAazB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,OAAO;IAkBf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,oCAE9E;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,oCAExD;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAE9B;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEhC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,oCAEjC;IAEK,UAAU,CACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAUf;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { createReadStream } from 'node:fs';
2
+ import { MCP_REQUEST_HEADERS, formatMcpUpdateRequiredMessage } from './compatibility.js';
2
3
  export class ToDoddleApiError extends Error {
3
4
  status;
4
5
  code;
@@ -28,7 +29,10 @@ export class ToDoddleApiClient {
28
29
  });
29
30
  const response = await fetch(`${this.config.baseUrl}/api/external/oauth/token`, {
30
31
  method: 'POST',
31
- headers: { 'content-type': 'application/x-www-form-urlencoded' },
32
+ headers: {
33
+ 'content-type': 'application/x-www-form-urlencoded',
34
+ ...MCP_REQUEST_HEADERS,
35
+ },
32
36
  body: form,
33
37
  redirect: 'manual',
34
38
  });
@@ -54,6 +58,7 @@ export class ToDoddleApiClient {
54
58
  method,
55
59
  headers: {
56
60
  authorization: `Bearer ${token}`,
61
+ ...MCP_REQUEST_HEADERS,
57
62
  ...(body !== undefined ? { 'content-type': 'application/json' } : {}),
58
63
  ...(idempotencyKey ? { 'idempotency-key': idempotencyKey } : {}),
59
64
  },
@@ -91,11 +96,15 @@ export class ToDoddleApiClient {
91
96
  throw new ToDoddleApiError(response.status, 'configuration_error', `TODODDLE_BASE_URL redirected${destination ? ` to ${destination}` : ''}; configure the final API origin instead`);
92
97
  }
93
98
  toError(status, payload) {
94
- return new ToDoddleApiError(status, typeof payload.error === 'string' ? payload.error : 'server_error', typeof payload.message === 'string'
99
+ const code = typeof payload.error === 'string' ? payload.error : 'server_error';
100
+ const message = typeof payload.message === 'string'
95
101
  ? payload.message
96
102
  : typeof payload.error_description === 'string'
97
103
  ? payload.error_description
98
- : `ToDoddle request failed (${status})`, payload.details);
104
+ : `ToDoddle request failed (${status})`;
105
+ return new ToDoddleApiError(status, code, code === 'MCP_UPDATE_REQUIRED'
106
+ ? formatMcpUpdateRequiredMessage(message, payload.details)
107
+ : message, payload.details);
99
108
  }
100
109
  get(path, query) {
101
110
  return this.request('GET', path, undefined, query);
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const MCP_PACKAGE_VERSION = "3.0.1";
2
+ export declare const MCP_COMPATIBILITY_LEVEL = 3;
3
+ export declare const MCP_VERSION_HEADER = "x-tododdle-mcp-version";
4
+ export declare const MCP_COMPATIBILITY_HEADER = "x-tododdle-mcp-compatibility";
5
+ export declare const MCP_REQUEST_HEADERS: {
6
+ readonly "x-tododdle-mcp-version": "3.0.1";
7
+ readonly "x-tododdle-mcp-compatibility": string;
8
+ };
9
+ export declare function formatMcpUpdateRequiredMessage(message: string, details: unknown): string;
10
+ //# sourceMappingURL=compatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC;AAUX,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAUxF"}
@@ -0,0 +1,17 @@
1
+ export const MCP_PACKAGE_VERSION = '3.0.1';
2
+ export const MCP_COMPATIBILITY_LEVEL = 3;
3
+ export const MCP_VERSION_HEADER = 'x-tododdle-mcp-version';
4
+ export const MCP_COMPATIBILITY_HEADER = 'x-tododdle-mcp-compatibility';
5
+ export const MCP_REQUEST_HEADERS = {
6
+ [MCP_VERSION_HEADER]: MCP_PACKAGE_VERSION,
7
+ [MCP_COMPATIBILITY_HEADER]: String(MCP_COMPATIBILITY_LEVEL),
8
+ };
9
+ export function formatMcpUpdateRequiredMessage(message, details) {
10
+ const value = details && typeof details === 'object' ? details : {};
11
+ const updateCommand = typeof value.updateCommand === 'string'
12
+ ? value.updateCommand
13
+ : 'npx --yes --prefer-online tododdle-mcp@latest';
14
+ const documentation = typeof value.documentationUrl === 'string' ? ` See ${value.documentationUrl}.` : '';
15
+ return `${message} Ask the user to run \`${updateCommand}\`, then restart Codex.${documentation}`;
16
+ }
17
+ //# sourceMappingURL=compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AAEvE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,CAAC,kBAAkB,CAAC,EAAE,mBAAmB;IACzC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,uBAAuB,CAAC;CACnD,CAAC;AAUX,MAAM,UAAU,8BAA8B,CAAC,OAAe,EAAE,OAAgB;IAC9E,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,OAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACrC,CAAC,CAAC,KAAK,CAAC,aAAa;QACrB,CAAC,CAAC,+CAA+C,CAAC;IACtD,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO,GAAG,OAAO,0BAA0B,aAAa,0BAA0B,aAAa,EAAE,CAAC;AACpG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0DnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6FD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,WAAW,EAChB,aAAa,GAAE,wBAA6B,GAC3C,SAAS,CA4qDX"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0DnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6FD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,WAAW,EAChB,aAAa,GAAE,wBAA6B,GAC3C,SAAS,CA6qDX"}