vikunja-python 0.1.0__tar.gz → 0.1.2__tar.gz
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.
- vikunja_python-0.1.2/PKG-INFO +144 -0
- vikunja_python-0.1.2/README.md +123 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/pyproject.toml +8 -2
- vikunja_python-0.1.2/vikunja_python.egg-info/PKG-INFO +144 -0
- vikunja_python-0.1.0/PKG-INFO +0 -16
- vikunja_python-0.1.0/README.md +0 -85
- vikunja_python-0.1.0/vikunja_python.egg-info/PKG-INFO +0 -16
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/setup.cfg +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_auth_integration.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_cli_core.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_container.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_phase6_integration.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_task_hierarchy_integration.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/tests/test_task_models_unit.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/__init__.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/cli/__init__.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/cli/main.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/__init__.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/client.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/__init__.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/api_token.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/auth.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/base.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/bulk_assignees.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/filter.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/label.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/link_sharing.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/migration.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/phase6_medium.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/project.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/relation.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/task.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/task_expansion.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/user.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/core/models/webhook.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/mcp/__init__.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python/mcp/server.py +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python.egg-info/SOURCES.txt +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python.egg-info/dependency_links.txt +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python.egg-info/entry_points.txt +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python.egg-info/requires.txt +0 -0
- {vikunja_python-0.1.0 → vikunja_python-0.1.2}/vikunja_python.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vikunja-python
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
+
Author-email: Your Name <your.email@example.com>
|
|
6
|
+
License-Expression: WTFPL
|
|
7
|
+
Project-URL: Homepage, https://github.com/oedo808/vikunja-python
|
|
8
|
+
Project-URL: Repository, https://github.com/oedo808/vikunja-python
|
|
9
|
+
Project-URL: Documentation, https://github.com/oedo808/vikunja-python
|
|
10
|
+
Requires-Python: >=3.11
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: httpx>=0.27.0
|
|
13
|
+
Requires-Dist: pydantic>=2.0.0
|
|
14
|
+
Requires-Dist: dateparser>=1.2.0
|
|
15
|
+
Requires-Dist: typer>=0.12.0
|
|
16
|
+
Requires-Dist: fastmcp>=0.1.0
|
|
17
|
+
Provides-Extra: test
|
|
18
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
19
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
20
|
+
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
|
21
|
+
|
|
22
|
+
# Vikunja Python
|
|
23
|
+
|
|
24
|
+
Python API wrapper, CLI tool, MCP server, and Home Assistant integration for the [Vikunja](https://vikunja.io/) task management system.
|
|
25
|
+
|
|
26
|
+
Built for Python 3.13 with httpx, pydantic v2, fastmcp, and typer.
|
|
27
|
+
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
The project is structured into layers:
|
|
31
|
+
|
|
32
|
+
- **core/** -- Pydantic models, async HTTP client (httpx), error handling, API token and JWT authentication
|
|
33
|
+
- **cli/** -- Rich CLI built with typer and rich (task CRUD, project views, saved filter queries, dashboard summary)
|
|
34
|
+
- **mcp/** -- MCP server for agentic AI workflows (13 tools including list_tasks, get_task, create_task, list_saved_filter, task_summary)
|
|
35
|
+
- **custom_components/vikunja/** -- Home Assistant HACS integration (config flow, 3 sensors for saved filters)
|
|
36
|
+
|
|
37
|
+
## Getting Started
|
|
38
|
+
|
|
39
|
+
### Installation
|
|
40
|
+
|
|
41
|
+
From PyPI:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install vikunja-python
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or with uv:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uv sync --all-extras
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Environment Variables
|
|
54
|
+
|
|
55
|
+
Configure your Vikunja instance in a `.env` file or your shell:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
|
|
59
|
+
VIKUNJA_API_TOKEN="your_api_token_here"
|
|
60
|
+
VIKUNJA_DEBUG="true" # Enable verbose stderr logging
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
### CLI (vikunja)
|
|
66
|
+
|
|
67
|
+
The CLI provides a human-friendly interface for managing tasks:
|
|
68
|
+
|
|
69
|
+
- list-tasks -- List tasks with rich table output (supports saved filters via negative project IDs)
|
|
70
|
+
- list-saved-filter -- Query saved filters (e.g., -2 for Due in 3 Days, -3 for Overdue, -4 for Due Today)
|
|
71
|
+
- summary -- Quick dashboard summary across all saved filters (parallel queries, optimized for ePaper dashboards)
|
|
72
|
+
- get-project -- Project details and views
|
|
73
|
+
- list-view-tasks -- List tasks from a specific project view
|
|
74
|
+
- get-task -- Full task details with description
|
|
75
|
+
- create-task -- Create a new task
|
|
76
|
+
- create-label -- Create a new label
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run vikunja list-tasks
|
|
80
|
+
uv run vikunja list-saved-filter --filter-id -2
|
|
81
|
+
uv run vikunja summary --top 5
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### MCP Server (vikunja-mcp)
|
|
85
|
+
|
|
86
|
+
MCP server for agentic workflows. 13 tools including:
|
|
87
|
+
|
|
88
|
+
- list_tasks, get_task, create_task, update_task, complete_task, delete_task
|
|
89
|
+
- list_saved_filter -- Query saved filters (e.g., -2 for Due in 3 Days)
|
|
90
|
+
- task_summary -- Dashboard summary across all filters in one parallel call
|
|
91
|
+
- list_projects, get_project, list_project_view_tasks
|
|
92
|
+
- list_labels, create_label
|
|
93
|
+
- add_subtask, add_task_link
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
uv run vikunja-mcp
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Home Assistant Integration
|
|
100
|
+
|
|
101
|
+
The package includes a HACS-ready custom component for Home Assistant:
|
|
102
|
+
|
|
103
|
+
- Config flow: URL + API token via the HA UI
|
|
104
|
+
- 3 sensors: Overdue, Due Today, Due in 3 Days (from Vikunja saved filters)
|
|
105
|
+
- Each sensor: state = task count, attributes = task list with IDs, titles, due dates
|
|
106
|
+
- Coordinator polls all filters in parallel every 5 minutes
|
|
107
|
+
|
|
108
|
+
Copy `custom_components/vikunja/` to your HA config's `custom_components/` directory, restart HA, and add via Settings -> Devices & Services.
|
|
109
|
+
|
|
110
|
+
## Saved Filter Support
|
|
111
|
+
|
|
112
|
+
Vikunja saved filters are accessed via negative project IDs:
|
|
113
|
+
|
|
114
|
+
| ID | Filter |
|
|
115
|
+
|----|--------|
|
|
116
|
+
| -2 | Due in 3 Days |
|
|
117
|
+
| -3 | Overdue |
|
|
118
|
+
| -4 | Due Today |
|
|
119
|
+
|
|
120
|
+
The API route is `GET /tasks?project_id=-2` (NOT `/projects/-2/tasks`).
|
|
121
|
+
|
|
122
|
+
## Testing
|
|
123
|
+
|
|
124
|
+
Unit tests run without Docker:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run pytest tests/test_task_models_unit.py tests/test_label_model_validation.py -v
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Integration tests require Docker (spins up a real Vikunja instance via testcontainers):
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uv run pytest
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Security & Auth
|
|
137
|
+
|
|
138
|
+
- API Key auth is the primary authentication method for both CLI and MCP server
|
|
139
|
+
- JWT tokens are used for UI-specific features (kanban buckets, reactions) in the CLI only
|
|
140
|
+
- The MCP server only supports API key authentication
|
|
141
|
+
|
|
142
|
+
## License
|
|
143
|
+
|
|
144
|
+
WTFPL - Do What the Fuck You Want to Public License.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Vikunja Python
|
|
2
|
+
|
|
3
|
+
Python API wrapper, CLI tool, MCP server, and Home Assistant integration for the [Vikunja](https://vikunja.io/) task management system.
|
|
4
|
+
|
|
5
|
+
Built for Python 3.13 with httpx, pydantic v2, fastmcp, and typer.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
The project is structured into layers:
|
|
10
|
+
|
|
11
|
+
- **core/** -- Pydantic models, async HTTP client (httpx), error handling, API token and JWT authentication
|
|
12
|
+
- **cli/** -- Rich CLI built with typer and rich (task CRUD, project views, saved filter queries, dashboard summary)
|
|
13
|
+
- **mcp/** -- MCP server for agentic AI workflows (13 tools including list_tasks, get_task, create_task, list_saved_filter, task_summary)
|
|
14
|
+
- **custom_components/vikunja/** -- Home Assistant HACS integration (config flow, 3 sensors for saved filters)
|
|
15
|
+
|
|
16
|
+
## Getting Started
|
|
17
|
+
|
|
18
|
+
### Installation
|
|
19
|
+
|
|
20
|
+
From PyPI:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install vikunja-python
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or with uv:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uv sync --all-extras
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Environment Variables
|
|
33
|
+
|
|
34
|
+
Configure your Vikunja instance in a `.env` file or your shell:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
|
|
38
|
+
VIKUNJA_API_TOKEN="your_api_token_here"
|
|
39
|
+
VIKUNJA_DEBUG="true" # Enable verbose stderr logging
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Features
|
|
43
|
+
|
|
44
|
+
### CLI (vikunja)
|
|
45
|
+
|
|
46
|
+
The CLI provides a human-friendly interface for managing tasks:
|
|
47
|
+
|
|
48
|
+
- list-tasks -- List tasks with rich table output (supports saved filters via negative project IDs)
|
|
49
|
+
- list-saved-filter -- Query saved filters (e.g., -2 for Due in 3 Days, -3 for Overdue, -4 for Due Today)
|
|
50
|
+
- summary -- Quick dashboard summary across all saved filters (parallel queries, optimized for ePaper dashboards)
|
|
51
|
+
- get-project -- Project details and views
|
|
52
|
+
- list-view-tasks -- List tasks from a specific project view
|
|
53
|
+
- get-task -- Full task details with description
|
|
54
|
+
- create-task -- Create a new task
|
|
55
|
+
- create-label -- Create a new label
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv run vikunja list-tasks
|
|
59
|
+
uv run vikunja list-saved-filter --filter-id -2
|
|
60
|
+
uv run vikunja summary --top 5
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### MCP Server (vikunja-mcp)
|
|
64
|
+
|
|
65
|
+
MCP server for agentic workflows. 13 tools including:
|
|
66
|
+
|
|
67
|
+
- list_tasks, get_task, create_task, update_task, complete_task, delete_task
|
|
68
|
+
- list_saved_filter -- Query saved filters (e.g., -2 for Due in 3 Days)
|
|
69
|
+
- task_summary -- Dashboard summary across all filters in one parallel call
|
|
70
|
+
- list_projects, get_project, list_project_view_tasks
|
|
71
|
+
- list_labels, create_label
|
|
72
|
+
- add_subtask, add_task_link
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
uv run vikunja-mcp
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Home Assistant Integration
|
|
79
|
+
|
|
80
|
+
The package includes a HACS-ready custom component for Home Assistant:
|
|
81
|
+
|
|
82
|
+
- Config flow: URL + API token via the HA UI
|
|
83
|
+
- 3 sensors: Overdue, Due Today, Due in 3 Days (from Vikunja saved filters)
|
|
84
|
+
- Each sensor: state = task count, attributes = task list with IDs, titles, due dates
|
|
85
|
+
- Coordinator polls all filters in parallel every 5 minutes
|
|
86
|
+
|
|
87
|
+
Copy `custom_components/vikunja/` to your HA config's `custom_components/` directory, restart HA, and add via Settings -> Devices & Services.
|
|
88
|
+
|
|
89
|
+
## Saved Filter Support
|
|
90
|
+
|
|
91
|
+
Vikunja saved filters are accessed via negative project IDs:
|
|
92
|
+
|
|
93
|
+
| ID | Filter |
|
|
94
|
+
|----|--------|
|
|
95
|
+
| -2 | Due in 3 Days |
|
|
96
|
+
| -3 | Overdue |
|
|
97
|
+
| -4 | Due Today |
|
|
98
|
+
|
|
99
|
+
The API route is `GET /tasks?project_id=-2` (NOT `/projects/-2/tasks`).
|
|
100
|
+
|
|
101
|
+
## Testing
|
|
102
|
+
|
|
103
|
+
Unit tests run without Docker:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
uv run pytest tests/test_task_models_unit.py tests/test_label_model_validation.py -v
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Integration tests require Docker (spins up a real Vikunja instance via testcontainers):
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
uv run pytest
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Security & Auth
|
|
116
|
+
|
|
117
|
+
- API Key auth is the primary authentication method for both CLI and MCP server
|
|
118
|
+
- JWT tokens are used for UI-specific features (kanban buckets, reactions) in the CLI only
|
|
119
|
+
- The MCP server only supports API key authentication
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
WTFPL - Do What the Fuck You Want to Public License.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vikunja-python"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.2"
|
|
4
4
|
description = "API wrapper, CLI tool, and MCP server for Vikunja"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Your Name", email = "your.email@example.com" }
|
|
@@ -12,8 +12,14 @@ dependencies = [
|
|
|
12
12
|
"typer>=0.12.0",
|
|
13
13
|
"fastmcp>=0.1.0",
|
|
14
14
|
]
|
|
15
|
-
requires-python = ">=3.
|
|
15
|
+
requires-python = ">=3.11"
|
|
16
16
|
license = "WTFPL"
|
|
17
|
+
readme = "README.md"
|
|
18
|
+
|
|
19
|
+
[project.urls]
|
|
20
|
+
Homepage = "https://github.com/oedo808/vikunja-python"
|
|
21
|
+
Repository = "https://github.com/oedo808/vikunja-python"
|
|
22
|
+
Documentation = "https://github.com/oedo808/vikunja-python"
|
|
17
23
|
|
|
18
24
|
[project.optional-dependencies]
|
|
19
25
|
test = [
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vikunja-python
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
+
Author-email: Your Name <your.email@example.com>
|
|
6
|
+
License-Expression: WTFPL
|
|
7
|
+
Project-URL: Homepage, https://github.com/oedo808/vikunja-python
|
|
8
|
+
Project-URL: Repository, https://github.com/oedo808/vikunja-python
|
|
9
|
+
Project-URL: Documentation, https://github.com/oedo808/vikunja-python
|
|
10
|
+
Requires-Python: >=3.11
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: httpx>=0.27.0
|
|
13
|
+
Requires-Dist: pydantic>=2.0.0
|
|
14
|
+
Requires-Dist: dateparser>=1.2.0
|
|
15
|
+
Requires-Dist: typer>=0.12.0
|
|
16
|
+
Requires-Dist: fastmcp>=0.1.0
|
|
17
|
+
Provides-Extra: test
|
|
18
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
19
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
20
|
+
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
|
21
|
+
|
|
22
|
+
# Vikunja Python
|
|
23
|
+
|
|
24
|
+
Python API wrapper, CLI tool, MCP server, and Home Assistant integration for the [Vikunja](https://vikunja.io/) task management system.
|
|
25
|
+
|
|
26
|
+
Built for Python 3.13 with httpx, pydantic v2, fastmcp, and typer.
|
|
27
|
+
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
The project is structured into layers:
|
|
31
|
+
|
|
32
|
+
- **core/** -- Pydantic models, async HTTP client (httpx), error handling, API token and JWT authentication
|
|
33
|
+
- **cli/** -- Rich CLI built with typer and rich (task CRUD, project views, saved filter queries, dashboard summary)
|
|
34
|
+
- **mcp/** -- MCP server for agentic AI workflows (13 tools including list_tasks, get_task, create_task, list_saved_filter, task_summary)
|
|
35
|
+
- **custom_components/vikunja/** -- Home Assistant HACS integration (config flow, 3 sensors for saved filters)
|
|
36
|
+
|
|
37
|
+
## Getting Started
|
|
38
|
+
|
|
39
|
+
### Installation
|
|
40
|
+
|
|
41
|
+
From PyPI:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install vikunja-python
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or with uv:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uv sync --all-extras
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Environment Variables
|
|
54
|
+
|
|
55
|
+
Configure your Vikunja instance in a `.env` file or your shell:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
|
|
59
|
+
VIKUNJA_API_TOKEN="your_api_token_here"
|
|
60
|
+
VIKUNJA_DEBUG="true" # Enable verbose stderr logging
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
### CLI (vikunja)
|
|
66
|
+
|
|
67
|
+
The CLI provides a human-friendly interface for managing tasks:
|
|
68
|
+
|
|
69
|
+
- list-tasks -- List tasks with rich table output (supports saved filters via negative project IDs)
|
|
70
|
+
- list-saved-filter -- Query saved filters (e.g., -2 for Due in 3 Days, -3 for Overdue, -4 for Due Today)
|
|
71
|
+
- summary -- Quick dashboard summary across all saved filters (parallel queries, optimized for ePaper dashboards)
|
|
72
|
+
- get-project -- Project details and views
|
|
73
|
+
- list-view-tasks -- List tasks from a specific project view
|
|
74
|
+
- get-task -- Full task details with description
|
|
75
|
+
- create-task -- Create a new task
|
|
76
|
+
- create-label -- Create a new label
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run vikunja list-tasks
|
|
80
|
+
uv run vikunja list-saved-filter --filter-id -2
|
|
81
|
+
uv run vikunja summary --top 5
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### MCP Server (vikunja-mcp)
|
|
85
|
+
|
|
86
|
+
MCP server for agentic workflows. 13 tools including:
|
|
87
|
+
|
|
88
|
+
- list_tasks, get_task, create_task, update_task, complete_task, delete_task
|
|
89
|
+
- list_saved_filter -- Query saved filters (e.g., -2 for Due in 3 Days)
|
|
90
|
+
- task_summary -- Dashboard summary across all filters in one parallel call
|
|
91
|
+
- list_projects, get_project, list_project_view_tasks
|
|
92
|
+
- list_labels, create_label
|
|
93
|
+
- add_subtask, add_task_link
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
uv run vikunja-mcp
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Home Assistant Integration
|
|
100
|
+
|
|
101
|
+
The package includes a HACS-ready custom component for Home Assistant:
|
|
102
|
+
|
|
103
|
+
- Config flow: URL + API token via the HA UI
|
|
104
|
+
- 3 sensors: Overdue, Due Today, Due in 3 Days (from Vikunja saved filters)
|
|
105
|
+
- Each sensor: state = task count, attributes = task list with IDs, titles, due dates
|
|
106
|
+
- Coordinator polls all filters in parallel every 5 minutes
|
|
107
|
+
|
|
108
|
+
Copy `custom_components/vikunja/` to your HA config's `custom_components/` directory, restart HA, and add via Settings -> Devices & Services.
|
|
109
|
+
|
|
110
|
+
## Saved Filter Support
|
|
111
|
+
|
|
112
|
+
Vikunja saved filters are accessed via negative project IDs:
|
|
113
|
+
|
|
114
|
+
| ID | Filter |
|
|
115
|
+
|----|--------|
|
|
116
|
+
| -2 | Due in 3 Days |
|
|
117
|
+
| -3 | Overdue |
|
|
118
|
+
| -4 | Due Today |
|
|
119
|
+
|
|
120
|
+
The API route is `GET /tasks?project_id=-2` (NOT `/projects/-2/tasks`).
|
|
121
|
+
|
|
122
|
+
## Testing
|
|
123
|
+
|
|
124
|
+
Unit tests run without Docker:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run pytest tests/test_task_models_unit.py tests/test_label_model_validation.py -v
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Integration tests require Docker (spins up a real Vikunja instance via testcontainers):
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uv run pytest
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Security & Auth
|
|
137
|
+
|
|
138
|
+
- API Key auth is the primary authentication method for both CLI and MCP server
|
|
139
|
+
- JWT tokens are used for UI-specific features (kanban buckets, reactions) in the CLI only
|
|
140
|
+
- The MCP server only supports API key authentication
|
|
141
|
+
|
|
142
|
+
## License
|
|
143
|
+
|
|
144
|
+
WTFPL - Do What the Fuck You Want to Public License.
|
vikunja_python-0.1.0/PKG-INFO
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: vikunja-python
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
-
Author-email: Your Name <your.email@example.com>
|
|
6
|
-
License-Expression: WTFPL
|
|
7
|
-
Requires-Python: >=3.13.12
|
|
8
|
-
Requires-Dist: httpx>=0.27.0
|
|
9
|
-
Requires-Dist: pydantic>=2.0.0
|
|
10
|
-
Requires-Dist: dateparser>=1.2.0
|
|
11
|
-
Requires-Dist: typer>=0.12.0
|
|
12
|
-
Requires-Dist: fastmcp>=0.1.0
|
|
13
|
-
Provides-Extra: test
|
|
14
|
-
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
15
|
-
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
16
|
-
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
vikunja_python-0.1.0/README.md
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# Vikunja Python
|
|
2
|
-
|
|
3
|
-
An open-source (WTFPL) API wrapper, rich CLI tool, and Model Context Protocol (MCP) server for the [Vikunja](https://vikunja.io/) task management system.
|
|
4
|
-
|
|
5
|
-
Built for **Python 3.13** using `httpx`, `pydantic v2`, and `fastmcp`.
|
|
6
|
-
|
|
7
|
-
## 🏗 Architecture
|
|
8
|
-
|
|
9
|
-
The project is structured into three distinct layers to ensure modularity and clean dependency management:
|
|
10
|
-
|
|
11
|
-
- **`/core`**: The engine. Handles Pydantic models, HTTP client logic, and error handling. (Minimal dependencies).
|
|
12
|
-
- **`/cli`**: A high-visual-impact command-line interface built with `typer` and `rich`.
|
|
13
|
-
- **`/mcp`**: A Model Context Protocol server designed for agentic workflows, optimized for smaller LLMs (like Gemma).
|
|
14
|
-
|
|
15
|
-
## 🚀 Getting Started
|
|
16
|
-
|
|
17
|
-
### Installation
|
|
18
|
-
This project uses `uv` for modern Python package management.
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
uv sync --all-extras
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Environment Variables
|
|
25
|
-
Configure your Vikunja instance in a `.env` file or your shell:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
|
|
29
|
-
VIKUNJA_API_TOKEN="your_api_token_here" # Recommended for MCP
|
|
30
|
-
VIKUNJA_JWT_TOKEN="your_jwt_here" # Required for Buckets/Reactions in CLI
|
|
31
|
-
VIKUNJA_DEBUG="true" # Set to true or 1 to enable verbose stderr logging
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## 🛠 Features & Tooling
|
|
35
|
-
|
|
36
|
-
### CLI (`vikunja`)
|
|
37
|
-
The CLI provides a rich, human-friendly interface for managing your workspace.
|
|
38
|
-
- **Tasks & Projects**: Full CRUD support with formatted tables.
|
|
39
|
-
- **Buckets (Kanban)**: List and manage columns (Requires JWT).
|
|
40
|
-
- **Reactions**: Add emojis to tasks (Requires JWT).
|
|
41
|
-
- **Labels**: List and categorize tasks.
|
|
42
|
-
- **Auth**: Built-in `login` command to generate JWTs.
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
uv run vikunja list-tasks
|
|
46
|
-
uv run vikunja login
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### MCP Server (`vikunja-mcp`)
|
|
50
|
-
A powerful server that gives LLMs "hands" to manage your Vikunja instance. Optimized for reliability and low turn-count.
|
|
51
|
-
- **Global Search**: Find tasks across all projects in one turn.
|
|
52
|
-
- **Bulk Scaffolding**: Create projects and multiple tasks in a single operation.
|
|
53
|
-
- **Smart Dates**: Natural language date parsing (e.g., "remind me next Friday").
|
|
54
|
-
- **Task Memory**: Full support for reading and writing task comments.
|
|
55
|
-
- **Explicit Hierarchy**: Clear directional tools for subtasks and dependencies.
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
# Start via STDIO (for Claude Desktop)
|
|
59
|
-
uv run vikunja-mcp
|
|
60
|
-
|
|
61
|
-
# Start via SSE (HTTP)
|
|
62
|
-
uv run vikunja-mcp dev --transport sse
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## 🔒 Security & Auth Policy
|
|
66
|
-
|
|
67
|
-
- **MCP Protocol**: The MCP server is strictly limited to **API Key Authentication**. We do not support user/password login via MCP to ensure secure, scoped agentic access.
|
|
68
|
-
- **UI-Only Features**: Features like Buckets (Kanban columns) and Reactions currently require a JWT (UI Session). These are supported in the CLI but are excluded from the MCP server to maintain protocol security.
|
|
69
|
-
|
|
70
|
-
## 🧪 Testing
|
|
71
|
-
|
|
72
|
-
We use `testcontainers-python` to run integration tests against a live, ephemeral Vikunja instance. No mocks, just real API verification.
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
uv run pytest
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## 🗺 Future Roadmap
|
|
79
|
-
- [ ] **Backgrounds**: Support for Unsplash project backgrounds.
|
|
80
|
-
- [ ] **Attachments**: File upload/download support.
|
|
81
|
-
- [ ] **Webhooks**: Core models for receiving Vikunja events.
|
|
82
|
-
- [ ] **Bulk Labels**: Tools for mass-tagging tasks.
|
|
83
|
-
|
|
84
|
-
## 📜 License
|
|
85
|
-
WTFPL - Do What the Fuck You Want to Public License.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: vikunja-python
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
-
Author-email: Your Name <your.email@example.com>
|
|
6
|
-
License-Expression: WTFPL
|
|
7
|
-
Requires-Python: >=3.13.12
|
|
8
|
-
Requires-Dist: httpx>=0.27.0
|
|
9
|
-
Requires-Dist: pydantic>=2.0.0
|
|
10
|
-
Requires-Dist: dateparser>=1.2.0
|
|
11
|
-
Requires-Dist: typer>=0.12.0
|
|
12
|
-
Requires-Dist: fastmcp>=0.1.0
|
|
13
|
-
Provides-Extra: test
|
|
14
|
-
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
15
|
-
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
16
|
-
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|