Because the tools are functions, the agent can batch, chain and loop them in one request — fetch a page, summarise it on a cheaper model, and write the result to memory — and the intermediate values stay inside the runtime instead of passing through the conversation.
A single MCP server that exposes its tools as a Python API rather than as individual tool definitions. The agent writes a snippet — `__onetool brave.search(query="…")` — and the runtime executes it, so intermediate results flow between calls as variables instead of through the conversation.
- Search and docs — `brave` for web, news, image, video and batch search; `ground` for Google-grounded results with sources; `tavily` for research and extraction; `webfetch` for page content with extraction controls
- Files and data — `file` operations with path boundaries, `excel` with 24 tools, `db` for SQL databases, `arch` for architecture models exported as editable SVG
- Context economy — `ot_context` (aliased `ctx`) stores large outputs as searchable handles with grep, slice and toc, so a page body never enters your context window; `ot_image` (`img`) runs vision on a dedicated cheap model; `ot_llm` delegates transforms to another model
- Persistent state — `mem` with semantic and keyword search plus history and rollback, `knowledge` bases, `localhist` for Git-backed project snapshots
- Visual — `diagram` renders Mermaid, PlantUML and D2 through Kroki, plus a live whiteboard with a Mermaid-compatible DSL
- Runtime — `ot_servers` enables, disables and restarts proxied MCP servers mid-conversation with no client restart; `ot_secrets` handles encrypted secrets; `ot_forge` scaffolds new tool packs; `ot_timer` for named timers
- Forgiving call conventions: any unambiguous parameter prefix resolves (`q=` becomes `query=`), packs have short aliases, snake, camel and Pascal names all resolve on proxied servers, and a typo gets a did-you-mean
Python 3.12+. The bootstrap script installs uv if it is missing and prints the client config; manually it is `uv tool install 'onetool-mcp[all]'` then `onetool init --config ~/.onetool`, then `onetool init mcp-config --client claude-code` to print a ready-to-paste entry. Check the result with `onetool init validate --config ~/.onetool/onetool.yaml`. Security is allowlist-based and everything is blocked by default: the bundled `security.yaml` is not loaded automatically and must be listed under `include:`, which `onetool init` does for you but a hand-written config will not. API keys for the search packs and credentials for any proxied server live in `secrets.yaml`, passed with `--secrets`.
One command plus a key — uv tool install 'onetool-mcp[all]', then supply credentials
