
NeuroDock Task Fractionator
io.github.tlennon-iePublished by GitHub account tlennon-iev0.1.0Updated Oct 24, 2026
Decompose a vague goal into atomic 5-90 minute tasks and surface the next safe action.
Overview
Breaks a vague goal into atomic 5-90 minute tasks and picks the single next action to take.
- What you can do
- Exposes two tools over stdio. decompose(goal, time_budget?) turns a plain-language goal into atomic 5-90 minute tasks, each with an acceptance criterion, a dependency-sorted sequence number and tags; it is stateless and returns the list without persisting it. next_one(project) returns exactly one task with a short rationale and a confidence score between 0 and 1, choosing the lowest sequence whose dependencies are already complete. Decomposition is local-heuristic; no LLM call is made inside the server.
- When to use it
- Useful when a large or vague initiative needs to be turned into concrete, time-boxed steps and the user wants a single unambiguous next action rather than a full plan. Suited to local, single-user workflows where the caller stores the resulting tasks itself.
- Requirements
- Runs locally as a Python package over stdio, launched with uvx. No authentication, environment variables or headers are declared. The next_one tool reads pending tasks from a pluggable source; the default in-memory source must be seeded by the caller, and the graph-backed source is a stub that always fails. An optional NEURODOCK_TASK_SOURCE variable selects memory or graph.
Installation
In SourceWeft
- Open NeuroDock Task Fractionator in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
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
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: -
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
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).
Source: packages/mcp-task-fractionator/README.md at commit 2d9cac6
Tools
0Version history
1- v0.1.0LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts