You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A shared TODO list management server that allows multiple agents to coordinate tasks with statesand assignees. Perfect for agent team coordination.
819
+
A shared TODO list management server that allows multiple agents to coordinate tasks with states, assignees, and dependencies. Perfect for agent team coordination with dependency management and role-based access control.
820
820
821
821
**Features:**
822
822
- Shared TODO list accessible by multiple agents/processes
823
823
- File-based persistence with atomic writes
824
824
- File locking for concurrent access safety
825
825
- Task states: pending, in_progress, done
826
826
- Assignee tracking for task ownership
827
+
- **Dependency management** - TODOs can depend on other TODOs
- **Status validation** - Prevents starting/completing TODOs until dependencies are satisfied
830
+
- **Role-based access control** - Admin mode for leader actions, agent mode for self-service
827
831
- Full CRUD operations (add, update, remove, list)
828
832
- Status summary with counts by state and assignee
833
+
- Query ready and blocked TODOs
829
834
830
835
**Tools:**
831
-
- `add_todo`- Add a new TODO item to the shared list
832
-
- `update_todo_status`- Update the status of a TODO item (pending, in_progress, or done)
833
-
- `update_todo_assignee`- Update the assignee of a TODO item
834
-
- `remove_todo`- Remove a TODO item by ID
836
+
837
+
**Always Available (Agent & Admin):**
835
838
- `list_todos`- List all TODO items
836
839
- `get_todo_status`- Get a summary of the TODO list with counts by status and assignee
840
+
- `get_ready_todos`- Get all TODO items that are ready to start (pending with all dependencies satisfied)
841
+
- `get_blocked_todos`- Get all TODO items that are blocked by dependencies
842
+
- `get_todo_dependencies`- Get dependencies for a TODO item (direct and optionally transitive)
843
+
- `update_todo_status`- Update the status of a TODO item (pending, in_progress, or done)
844
+
- In agent mode: Only allows updating TODOs assigned to the agent (requires `agent_name` parameter)
845
+
- In admin mode: Allows updating any TODO (no `agent_name` required)
846
+
847
+
**Admin Only (requires `TODO_ADMIN_MODE=true`):**
848
+
- `add_todo`- Add a new TODO item to the shared list
849
+
- `remove_todo`- Remove a TODO item by ID
850
+
- `update_todo_assignee`- Update the assignee of a TODO item
851
+
- `add_todo_dependency`- Add a dependency to a TODO item
852
+
- `remove_todo_dependency`- Remove a dependency from a TODO item
837
853
838
854
**Configuration:**
839
855
- `TODO_FILE_PATH` - Environment variable to set the TODO file path (default: `/data/todos.json`)
856
+
- `TODO_ADMIN_MODE`- Set to `true` to enable admin-only tools (add, remove, assign, manage dependencies). When not set, only read operations and self-service status updates are available.
840
857
841
858
**TODO Item Format:**
842
859
```json
843
860
{
844
-
"id": "1703123456789000000",
861
+
"id": "task-1",
845
862
"title": "Implement feature X",
846
863
"status": "in_progress",
847
-
"assignee": "agent1"
864
+
"assignee": "agent1",
865
+
"depends_on": ["task-0"]
848
866
}
849
867
```
850
868
851
869
**Add TODO Input Format:**
852
870
```json
853
871
{
872
+
"id": "task-1",
854
873
"title": "Implement feature X",
855
-
"assignee": "agent1"
874
+
"assignee": "agent1",
875
+
"depends_on": ["task-0"]
856
876
}
857
877
```
858
878
879
+
**Note:** The `id` field is **required** and must be unique. IDs are not auto-generated for predictability.
880
+
859
881
**Update Status Input Format:**
882
+
883
+
In admin mode:
860
884
```json
861
885
{
862
-
"id": "1703123456789000000",
886
+
"id": "task-1",
863
887
"status": "done"
864
888
}
865
889
```
866
890
891
+
In agent mode (requires `agent_name`):
892
+
```json
893
+
{
894
+
"id": "task-1",
895
+
"status": "done",
896
+
"agent_name": "agent1"
897
+
}
898
+
```
899
+
900
+
**Dependency Management:**
901
+
902
+
TODOs can depend on other TODOs. A TODO cannot transition to `in_progress` or `done` until all its dependencies are `done`. The system prevents:
903
+
- Circular dependencies (A → B → A)
904
+
- Starting/completing TODOs with unsatisfied dependencies
905
+
- Removing TODOs that other TODOs depend on
906
+
907
+
**Get Ready TODOs Output Format:**
908
+
```json
909
+
{
910
+
"items": [
911
+
{
912
+
"id": "task-2",
913
+
"title": "Task 2",
914
+
"status": "pending",
915
+
"assignee": "agent1",
916
+
"depends_on": ["task-1"]
917
+
}
918
+
],
919
+
"count": 1
920
+
}
921
+
```
922
+
923
+
**Get Blocked TODOs Output Format:**
924
+
```json
925
+
{
926
+
"items": [
927
+
{
928
+
"id": "task-3",
929
+
"title": "Task 3",
930
+
"status": "pending",
931
+
"assignee": "agent2",
932
+
"blocked_by": [
933
+
{
934
+
"id": "task-1",
935
+
"title": "Task 1",
936
+
"status": "pending"
937
+
}
938
+
]
939
+
}
940
+
],
941
+
"count": 1
942
+
}
943
+
```
944
+
945
+
**Get TODO Dependencies Output Format:**
946
+
```json
947
+
{
948
+
"direct": [
949
+
{
950
+
"id": "task-1",
951
+
"title": "Task 1",
952
+
"status": "done"
953
+
}
954
+
],
955
+
"direct_count": 1
956
+
}
957
+
```
958
+
867
959
**List TODOs Output Format:**
868
960
```json
869
961
{
870
962
"items": [
871
963
{
872
-
"id": "1703123456789000000",
964
+
"id": "task-1",
873
965
"title": "Implement feature X",
874
966
"status": "in_progress",
875
-
"assignee": "agent1"
967
+
"assignee": "agent1",
968
+
"depends_on": ["task-0"]
876
969
}
877
970
],
878
971
"count": 1
@@ -886,6 +979,8 @@ A shared TODO list management server that allows multiple agents to coordinate t
886
979
"pending": 3,
887
980
"in_progress": 5,
888
981
"done": 2,
982
+
"blocked": 2,
983
+
"ready": 1,
889
984
"by_assignee": {
890
985
"agent1": 4,
891
986
"agent2": 6
@@ -894,11 +989,20 @@ A shared TODO list management server that allows multiple agents to coordinate t
894
989
```
895
990
896
991
**Docker Image:**
992
+
993
+
Agent mode (read-only + self-service):
897
994
```bash
898
995
docker run -e TODO_FILE_PATH=/custom/path/todos.json -v /host/data:/data ghcr.io/mudler/mcps/todo:latest
899
996
```
900
997
998
+
Admin mode (full access):
999
+
```bash
1000
+
docker run -e TODO_FILE_PATH=/custom/path/todos.json -e TODO_ADMIN_MODE=true -v /host/data:/data ghcr.io/mudler/mcps/todo:latest
1001
+
```
1002
+
901
1003
**LocalAI configuration (to add to the model config):**
1004
+
1005
+
Agent mode:
902
1006
```yaml
903
1007
mcp:
904
1008
stdio: |
@@ -918,6 +1022,29 @@ mcp:
918
1022
}
919
1023
```
920
1024
1025
+
Admin mode:
1026
+
```yaml
1027
+
mcp:
1028
+
stdio: |
1029
+
{
1030
+
"mcpServers": {
1031
+
"todo": {
1032
+
"command": "docker",
1033
+
"env": {
1034
+
"TODO_FILE_PATH": "/data/todos.json",
1035
+
"TODO_ADMIN_MODE": "true"
1036
+
},
1037
+
"args": [
1038
+
"run", "-i", "--rm", "-v", "/host/data:/data",
1039
+
"ghcr.io/mudler/mcps/todo:master"
1040
+
]
1041
+
}
1042
+
}
1043
+
}
1044
+
```
1045
+
1046
+
**Note:** When `TODO_ADMIN_MODE` is not set or set to `false`, only read operations and self-service status updates are available. Agents can only update TODOs assigned to them by providing their `agent_name` in the `update_todo_status` request. Admin mode enables all tools including adding/removing TODOs, managing dependencies, and assigning tasks.
1047
+
921
1048
### 📬 Mailbox Server
922
1049
923
1050
A shared mailbox server that enables message exchange between different agents in a team. Each agent instance reads only its own messages while being able to send messages to any agent.
0 commit comments