tododdle-mcp 3.2.7 → 3.2.8

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.
@@ -5,17 +5,17 @@
5
5
  "url": "https://tododdle.com"
6
6
  },
7
7
  "description": "Agent workflow plugins for ToDoddle.",
8
- "version": "3.2.7",
8
+ "version": "3.2.8",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "tododdle",
12
12
  "displayName": "ToDoddle",
13
13
  "description": "Use ToDoddle as the work ledger for project context and ticket execution.",
14
- "version": "3.2.7",
14
+ "version": "3.2.8",
15
15
  "source": {
16
16
  "source": "npm",
17
17
  "package": "tododdle-mcp",
18
- "version": "3.2.7"
18
+ "version": "3.2.8"
19
19
  },
20
20
  "category": "productivity",
21
21
  "tags": ["project-management", "tickets", "mcp"]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tododdle",
3
3
  "displayName": "ToDoddle",
4
- "version": "3.2.7",
4
+ "version": "3.2.8",
5
5
  "description": "Disciplined agent workflows for projects managed in ToDoddle.",
6
6
  "author": {
7
7
  "name": "ToDoddle",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tododdle",
3
- "version": "3.2.7",
3
+ "version": "3.2.8",
4
4
  "description": "Disciplined agent workflows for projects managed in ToDoddle.",
5
5
  "author": {
6
6
  "name": "ToDoddle",
package/README.md CHANGED
@@ -300,13 +300,13 @@ Uploading a project document requires `projects:read` and `documents:write`. Att
300
300
  | --- | --- | --- | --- |
301
301
  | `TODODDLE_CLIENT_ID` | Yes | None | Agent Connection identifier |
302
302
  | `TODODDLE_CLIENT_SECRET` | Yes | None | Agent Connection secret |
303
- | `TODODDLE_BASE_URL` | No | `https://www.tododdle.com` | Hosted API origin; HTTPS is required except for loopback development |
303
+ | `TODODDLE_BASE_URL` | No | `https://app.tododdle.com` | Application API origin; HTTPS is required except for loopback development |
304
304
  | `TODODDLE_UPLOAD_ROOTS` | No | None | Optional platform path-delimited list of additional directories the MCP may read for uploads |
305
305
  | `TODODDLE_MAX_UPLOAD_BYTES` | No | `1073741824` | Local safety ceiling; the hosted API may enforce a lower limit |
306
306
 
307
307
  No upload-root configuration is needed for normal local use. Stage temporary files below `<system-temp>/tododdle-mcp-uploads`; do not use the full system temporary directory as an approved root. On macOS and Linux, separate optional roots with `:`; on Windows, use `;`. The server resolves symlinks and rejects files outside managed staging and approved roots. Add optional roots only for Docker, sandboxes, or directories whose contents you approve for upload. HTTPS sources reject embedded credentials, private-network destinations, unsafe redirects, oversized responses, and empty files.
308
308
 
309
- Use the final API origin directly. Legacy `trackingti.me` URLs redirect to ToDoddle and are rejected because cross-origin redirects must not forward bearer credentials.
309
+ Use the final application API origin directly. The public `tododdle.com` and `www.tododdle.com` hosts serve the marketing site and are rejected. Legacy `trackingti.me` hosts are also rejected because cross-origin redirects must not forward bearer credentials.
310
310
 
311
311
  Tokens are held in memory only and refreshed automatically. The client secret is sent only to ToDoddle's hosted token endpoint. Server diagnostics go to stderr so stdout remains reserved for MCP JSON-RPC.
312
312
 
@@ -1,9 +1,9 @@
1
- export declare const MCP_PACKAGE_VERSION = "3.2.7";
1
+ export declare const MCP_PACKAGE_VERSION = "3.2.8";
2
2
  export declare const MCP_COMPATIBILITY_LEVEL = 3;
3
3
  export declare const MCP_VERSION_HEADER = "x-tododdle-mcp-version";
4
4
  export declare const MCP_COMPATIBILITY_HEADER = "x-tododdle-mcp-compatibility";
5
5
  export declare const MCP_REQUEST_HEADERS: {
6
- readonly "x-tododdle-mcp-version": "3.2.7";
6
+ readonly "x-tododdle-mcp-version": "3.2.8";
7
7
  readonly "x-tododdle-mcp-compatibility": string;
8
8
  };
9
9
  export declare function formatMcpUpdateRequiredMessage(message: string, details: unknown): string;
@@ -1,4 +1,4 @@
1
- export const MCP_PACKAGE_VERSION = '3.2.7';
1
+ export const MCP_PACKAGE_VERSION = '3.2.8';
2
2
  export const MCP_COMPATIBILITY_LEVEL = 3;
3
3
  export const MCP_VERSION_HEADER = 'x-tododdle-mcp-version';
4
4
  export const MCP_COMPATIBILITY_HEADER = 'x-tododdle-mcp-compatibility';
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,kBAAmB,GAAG,MAAM,EAAE,CAKjG;AAED,wBAAgB,2BAA2B,CACzC,kBAAkB,SAAW,EAC7B,QAAQ,kBAAmB,GAC1B,MAAM,CAGR;AAoCD,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAwBrF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,kBAAmB,GAAG,MAAM,EAAE,CAKjG;AAED,wBAAgB,2BAA2B,CACzC,kBAAkB,SAAW,EAC7B,QAAQ,kBAAmB,GAC1B,MAAM,CAGR;AAsCD,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAwBrF"}
package/dist/config.js CHANGED
@@ -11,7 +11,7 @@ export function getDefaultManagedUploadRoot(temporaryDirectory = tmpdir(), platf
11
11
  return paths.resolve(temporaryDirectory, 'tododdle-mcp-uploads');
12
12
  }
13
13
  function normalizeBaseUrl(value) {
14
- const rawValue = value || 'https://www.tododdle.com';
14
+ const rawValue = value || 'https://app.tododdle.com';
15
15
  let url;
16
16
  try {
17
17
  url = new URL(rawValue);
@@ -20,8 +20,8 @@ function normalizeBaseUrl(value) {
20
20
  throw new Error('TODODDLE_BASE_URL must be a valid absolute URL');
21
21
  }
22
22
  const isLoopback = ['localhost', '127.0.0.1', '::1'].includes(url.hostname);
23
- if (['trackingti.me', 'www.trackingti.me'].includes(url.hostname)) {
24
- throw new Error('TODODDLE_BASE_URL has moved; use https://www.tododdle.com instead of trackingti.me');
23
+ if (['trackingti.me', 'www.trackingti.me', 'tododdle.com', 'www.tododdle.com'].includes(url.hostname)) {
24
+ throw new Error('TODODDLE_BASE_URL must use the application origin https://app.tododdle.com');
25
25
  }
26
26
  if (url.protocol !== 'https:' && !(isLoopback && url.protocol === 'http:')) {
27
27
  throw new Error('TODODDLE_BASE_URL must use HTTPS except for loopback development');
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tododdle-mcp",
3
- "version": "3.2.7",
3
+ "version": "3.2.8",
4
4
  "description": "Agent-first task, project context, and time tracking for ToDoddle",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",