todoist-mcp 1.3.0 → 1.3.2
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.
- package/README.md +31 -12
- package/dist/tools/tasks.js +20 -4
- package/dist/utils/TodoistClient.js +4 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,24 +32,43 @@ You'll need a Todoist API token to use this MCP server.
|
|
|
32
32
|
2. Navigate to Settings → Integrations
|
|
33
33
|
3. Find your API token under "Developer"
|
|
34
34
|
|
|
35
|
-
### Usage
|
|
35
|
+
### Usage
|
|
36
36
|
|
|
37
|
-
Add to your
|
|
37
|
+
Add to `mcpServers` in your platform config:
|
|
38
38
|
|
|
39
39
|
```json
|
|
40
|
-
{
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"args": ["-y", "todoist-mcp"],
|
|
45
|
-
"env": {
|
|
46
|
-
"API_KEY": "your_todoist_api_token_here"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
40
|
+
"todoist": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["-y", "todoist-mcp"],
|
|
43
|
+
"env": { "API_KEY": "your_todoist_api_token" }
|
|
50
44
|
}
|
|
51
45
|
```
|
|
52
46
|
|
|
47
|
+
| Platform | Config |
|
|
48
|
+
|----------|--------|
|
|
49
|
+
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS), `%APPDATA%\Claude\` (Windows) |
|
|
50
|
+
| Claude Code | `.mcp.json` — `claude mcp add --transport stdio --scope project --env API_KEY=token todoist -- npx -y todoist-mcp` |
|
|
51
|
+
| Cursor | `~/.cursor/mcp.json` or `.cursor/mcp.json` |
|
|
52
|
+
| Codex | `~/.codex/config.toml` or `.codex/config.toml` — see example below |
|
|
53
|
+
| Gemini CLI | `~/.gemini/settings.json` — `gemini mcp add -e API_KEY=token todoist npx -y todoist-mcp` |
|
|
54
|
+
|
|
55
|
+
**Codex** — CLI:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
codex mcp add todoist --env API_KEY=your_token -- npx -y todoist-mcp
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Or add to `config.toml`:
|
|
62
|
+
|
|
63
|
+
```toml
|
|
64
|
+
[mcp_servers.todoist]
|
|
65
|
+
command = "npx"
|
|
66
|
+
args = ["-y", "todoist-mcp"]
|
|
67
|
+
|
|
68
|
+
[mcp_servers.todoist.env]
|
|
69
|
+
API_KEY = "your_todoist_api_token"
|
|
70
|
+
```
|
|
71
|
+
|
|
53
72
|
## Available Tools
|
|
54
73
|
|
|
55
74
|
### Tasks
|
package/dist/tools/tasks.js
CHANGED
|
@@ -48,21 +48,37 @@ const create_fields = {
|
|
|
48
48
|
};
|
|
49
49
|
createApiHandler({
|
|
50
50
|
name: 'get_tasks_list',
|
|
51
|
-
description: 'Get tasks list from Todoist',
|
|
51
|
+
description: 'Get tasks list from Todoist. For advanced filtering use get_tasks_by_filter tool',
|
|
52
52
|
schemaShape: {
|
|
53
53
|
project_id: z.string().optional().describe('Filter by project'),
|
|
54
54
|
section_id: z.string().optional().describe('Filter by section'),
|
|
55
55
|
label: z.string().optional().describe('Filter by label'),
|
|
56
|
-
|
|
56
|
+
ids: z.string().optional().describe('Comma-separated list of task IDs'),
|
|
57
|
+
cursor: z
|
|
57
58
|
.string()
|
|
58
59
|
.optional()
|
|
59
|
-
.describe('
|
|
60
|
-
ids: z.string().optional().describe('Comma-separated list of task IDs'),
|
|
60
|
+
.describe('Cursor for pagination (from next_cursor in previous response)'),
|
|
61
61
|
limit: z.number().optional().default(50),
|
|
62
62
|
},
|
|
63
63
|
method: 'GET',
|
|
64
64
|
path: '/tasks',
|
|
65
65
|
});
|
|
66
|
+
createApiHandler({
|
|
67
|
+
name: 'get_tasks_by_filter',
|
|
68
|
+
description: 'Get tasks from Todoist using filter language. Use for queries like "today", "overdue", "P1", date-based filters, label/project filters in query syntax',
|
|
69
|
+
schemaShape: {
|
|
70
|
+
query: z
|
|
71
|
+
.string()
|
|
72
|
+
.describe('Todoist filter query. Examples: "today", "overdue", "today | overdue", "no date", "no time", "P1 | P2", "7 days & @waiting", "created before: -365 days", "assigned to: person", "added by: me", "#Project & !assigned", "subtask", "!subtask", "today & @email", "@work | @office", "(today | overdue) & #Work", "all & 7 days", "!assigned", "search: keyword"'),
|
|
73
|
+
cursor: z
|
|
74
|
+
.string()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('Cursor for pagination (from next_cursor in previous response)'),
|
|
77
|
+
limit: z.number().optional().default(50),
|
|
78
|
+
},
|
|
79
|
+
method: 'GET',
|
|
80
|
+
path: '/tasks/filter',
|
|
81
|
+
});
|
|
66
82
|
createBatchApiHandler({
|
|
67
83
|
name: 'create_tasks',
|
|
68
84
|
description: 'Create new tasks in Todoist',
|
|
@@ -53,8 +53,11 @@ export class TodoistClient {
|
|
|
53
53
|
headers: this.getHeaders(),
|
|
54
54
|
});
|
|
55
55
|
const data = await this.handleResponse(response);
|
|
56
|
-
// API v1 wraps list responses in { results: [...] }
|
|
56
|
+
// API v1 wraps list responses in { results: [...], next_cursor: ... }
|
|
57
57
|
if (data && typeof data === 'object' && Array.isArray(data.results)) {
|
|
58
|
+
if (data.next_cursor) {
|
|
59
|
+
return { results: data.results, next_cursor: data.next_cursor };
|
|
60
|
+
}
|
|
58
61
|
return data.results;
|
|
59
62
|
}
|
|
60
63
|
return data;
|
package/dist/utils/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "1.3.
|
|
1
|
+
export declare const version = "1.3.2";
|
package/dist/utils/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated file, do not edit
|
|
2
|
-
export const version = '1.3.
|
|
2
|
+
export const version = '1.3.2';
|