neurodock-mcp-task-fractionator
Local-first goal decomposition and single next-action selection, exposed as an MCP server.
- Version: v0.0.3 (developer preview)
- Status: Phase 1 substrate server.
- License: AGPL-3.0-or-later.
- Design: see ADR 0003 — task-fractionator tool design.
- Schemas (the contract):
schemas/decompose.schema.jsonandschemas/next_one.schema.json. - User stories driving this server: ("Director with ADHD" — voice-dump a vague initiative, get 5–12 atomic tasks plus the single next one).
Tools
decompose(goal, time_budget?)
Local-heuristic decomposition into atomic 5–90 minute tasks. Every task
carries at least one acceptance criterion, a dependency-sorted sequence
number, and a small bag of tags. Stateless: the server returns the list
and does not persist it. Persistence is the caller's job via
mcp-cognitive-graph.
goal— 5..500 character plain-language goal. Never logged.time_budget— optional ISO 8601 duration (PT4H,P3D,PT2H30M). Unparseable input returnsTIME_BUDGET_UNPARSEABLE.P3Dis treated as 3 working blocks of 4 hours, not 72 hours, per ADR 0003 §3.
Errors: GOAL_REQUIRED, GOAL_TOO_LONG, TIME_BUDGET_UNPARSEABLE,
BUDGET_INFEASIBLE, DEPENDENCY_CYCLE, ACCEPTANCE_CRITERIA_REQUIRED,
DECOMPOSITION_UNAVAILABLE.
next_one(project)
Returns exactly one task — the single thing the user should do next —
with a short reasoning paragraph and a confidence score in [0, 1].
project— 1..120 char project name (case-sensitive, no fuzzy match).- Pending tasks are read from a pluggable
PendingTaskSource. - Selection: lowest
sequencewhosedependenciesare all already complete in the pending set.
Errors: PROJECT_REQUIRED, NO_TASKS_AVAILABLE, ALL_TASKS_BLOCKED,
COGNITIVE_GRAPH_UNAVAILABLE.
Quick start
# From the repo root
uv sync
uv run pytest packages/mcp-task-fractionator/tests/ -v
# Run the server over stdio (the MCP transport):
uv run neurodock-mcp-task-fractionator
In-memory-only next_one (v0.0.3 caveat)
next_one reads pending tasks from a PendingTaskSource. v0.0.3 ships two
implementations:
-
InMemoryPendingTaskSource— default, used by tests. Holds tasks in process memory. Build the server explicitly with this source and seed it before callingnext_one:from neurodock_mcp_task_fractionator import ( InMemoryPendingTaskSource, build_server, ) source = InMemoryPendingTaskSource() source.add("founding-scope-rfc", [task_1, task_2, task_3]) server = build_server(source=source)
-
CognitiveGraphPendingTaskSource— Phase 2 stub. Always raisesCOGNITIVE_GRAPH_UNAVAILABLE. Real wiring lands once themcp-cognitive-graphPython client ships.
Selection via env var: NEURODOCK_TASK_SOURCE=memory|graph (default
memory). Unknown values fall back to memory rather than crashing.
Privacy
Per ADR 0003 §7 the goal text and project name are treated as sensitive user data:
- No remote calls. No LLM call inside the server.
- Goal text is never logged at any level.
- Validation errors reference field names, not user content.
- The rationale paragraph is built from recognised vocabulary tokens only; it never embeds the user's original goal text verbatim.
A test (test_decompose.py::test_rationale_does_not_contain_goal_text)
encodes the privacy invariant.
Development gates
# Lint + format check
uv run ruff check packages/mcp-task-fractionator/
uv run ruff format --check packages/mcp-task-fractionator/
# Strict type check
uv run mypy --strict packages/mcp-task-fractionator/src/
# Tests
uv run pytest packages/mcp-task-fractionator/tests/ -v
All four must pass before a PR is mergeable.
Pointers
- Architecture rationale: ADR 0003 — task-fractionator tool design.
- The five-principles manifesto this server has to honour:
MANIFESTO.md. - Sibling servers:
mcp-chronometric(time, idle, breaks) andmcp-cognitive-graph(persistent state — where pending tasks will live).
Metadata
Release files for neurodock-mcp-task-fractionator 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| neurodock_mcp_task_fractionator-0.1.0.tar.gz | 46.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| neurodock_mcp_task_fractionator-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.0 kB
Release files / neurodock_mcp_task_fractionator-0.1.0.tar.gz
| Download URL | neurodock_mcp_task_fractionator-0.1.0.tar.gz |
|---|---|
| Size | 46.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
342eba0fc7132c4acfba46921a6a36d5b294240ee76eacd2e231da4af5476f37
|
|
BLAKE2b-256 checksum How to use checksums |
68fbd5a171ddba467aebedf7f05855c5268239cb98be156c1d805abeefdc3245
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.22 {"installer":{"name":"uv","version":"0.11.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / neurodock_mcp_task_fractionator-0.1.0-py3-none-any.whl
| Download URL | neurodock_mcp_task_fractionator-0.1.0-py3-none-any.whl |
|---|---|
| Size | 31.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
89283cd44bf666cbc766be5a051ef30e837869b8f85f5e8c71190bf94ef155bb
|
|
BLAKE2b-256 checksum How to use checksums |
32257f4904a7fe1e87c659807dbe66171037035d8da57cfa41ad6ba0cf30cd6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.22 {"installer":{"name":"uv","version":"0.11.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|