fanout
Fan out 5–30 independent subtasks to cheap or local models, then keep only the distilled result. The engine is a plain async library; the MCP server is the thin integration layer.
Animated demo placeholder — add
docs/assets/demo.gifbefore release.
Why it exists
| Workload | Observed local result | Practical effect |
|---|---|---|
Six src/ files, 9B reasoning model | 6 usable answers in 85s with thinking off | 3.5× faster than 2 answers in 300s with thinking on |
| 5–30 independent tasks | concurrency capped per profile | parallel work without unbounded provider load |
| Long outputs | truncated or reference return modes | less context; full results remain retrievable |
Measure spend and savings on your own run with fanout report; the table is a
local smoke benchmark, not a promise about another model or machine.
Install in 60 seconds
For Claude Code:
/plugin marketplace add dhruvvarshney1/fanout-mcp
/plugin install fanout-mcp@fanout
For Codex:
codex plugin marketplace add dhruvvarshney1/fanout-mcp
codex plugin add fanout-mcp@fanout
Anywhere else, register this stdio server:
uvx --from git+https://github.com/dhruvvarshney1/fanout-mcp fanout-mcp
uv must be on PATH. The package includes default provider settings, so the
server starts without a repository-relative config or working-directory assumption.
See installation by harness and the local setup
guide.
What the server provides
Tools: fan_out, setup_providers(), list_profiles(), validate_providers(), and
get_result(run_id, task_id).
Use fan_out for independent extraction, classification, summarization,
rewriting, or rule checks. Do not use it for dependent tasks, whole-corpus
judgment, or only one or two subtasks.
aggregation can be passthrough, concat, vote, rank, or map_reduce.
Raw worker output is always stored; return_mode controls how much appears
inline: truncated (default), reference, or full.
Configuration
Copy the bundled file when you need custom providers or profiles:
cp src/dhruvvarshney/providers.default.yaml providers.yaml
uv run fanout-mcp
See provider configuration and profiles, the security model, cost accounting, and troubleshooting.
Development
uv sync
uv run ruff check .
uv run mypy --strict src tests
uv run pytest -q
The test suite uses fake providers and in-memory MCP clients; it does not call
Ollama or hosted APIs. Real local-provider checks are opt-in under
scripts/dogfood/.
Accounting
Every run writes task records and a summary to $FANOUT_LOG (by default under
$FANOUT_DATA_DIR). Compare actual usage with a flagship baseline:
uv run fanout report path/to/runs.jsonl --baseline-input-per-1m 3 --baseline-output-per-1m 15
Optional OpenTelemetry support is enabled with uv sync --extra otel and
FANOUT_OTEL=1.
License
Apache-2.0. See distribution decisions and the open-core boundary proposal.