Install from npm
One global install puts toil on your PATH.
npm install -g @imagile-dev/toiltoil version Alpha · Open source · By Imagile
toil gives your agents your enterprise tools and databases through one CLI, and spends as little of their context as it can: compact JSON, only the fields asked for, and docs read a page at a time instead of every tool schema up front.
Get started
Both need Node.js 24.14 or later, on Windows, macOS or Linux. Alpha APIs and flags may change before 1.0.
One global install puts toil on your PATH.
npm install -g @imagile-dev/toiltoil version Clones toil, builds it, adds a toil alias to your shell and prints toil version.
git clone https://github.com/imagile-dev/toil.git && cd toil && node scripts/setup.mjs The committed bundle runs with no npm install:
git clone https://github.com/imagile-dev/toil.gitnode toil/dist/toil.js versionnode toil/dist/toil.js setup alias # bash or zshnode toil/dist/toil.js setup alias --profile $PROFILE # PowerShell Or build what's on main now:
cd toilnpm cinpm run buildnode dist/toil.js version Token-efficient by design
Many MCP clients put every tool's schema in context before the first question. toil is a CLI the agent already knows how to call, so the context goes on answers instead.
Every command prints one JSON envelope: ok, data, error, meta. One shape to read, on every call.
--select keeps the fields a task names. --summary-file puts a big result in a file and hands back a sample with stats; --output-format toon writes tables as one line per row.
toil wait repeats a read until a condition is true and answers once, instead of the agent asking again and again.
The toil skill is a short index. The agent opens one page when a task needs it, instead of every tool schema loaded up front.
toil util deps scan --include-transitive --include-dev141,580 bytes, about 40,450 tokens{"ok":true,"data":{"ecosystems":["npm"],"manifests":[…],
"packages":[{"name":"@azure-rest/core-client","version":"2.9.0",
"ecosystem":"npm","source":"functions/feedback/package-lock.json",
"type":"direct","scope":"production"}, … 1,082 more … toil util deps scan --include-transitive --include-dev --summary-file deps.json --output-format toon2,375 bytes, about 680 tokens, with all 1,083 rows in deps.jsonschema:
name: string
version: string
…
rows[10]{name,version,ecosystem,source,type,scope}:
@azure-rest/core-client,2.9.0,npm,functions/feedback/package-lock.json,direct,production
source-map-js,1.2.2,npm,functions/feedback/package-lock.json,direct,dev
…
stats[6:]{nulls,distinct,min,max}:
name: 0,791,null,null
… One envelope, every command
Every command returns the same JSON shape on stdout, says where its data came from, and stays read-only until you decide otherwise.
$ npx -y @imagile-dev/toil db query --connection reporting "select status, count(*) from orders group by status"
{ "ok": true, "data": { "columns": ["status", "count"], "rows": [["open", 42], ["shipped", 318]], "truncated": false }, "meta": { "source": "postgres:reporting", "readOnly": true }}
Built for the locked-down laptop
Application control blocks unsigned executables. Security reviews stall on native modules. toil is built so there is nothing for either to catch.
One bundled JavaScript file on the Node you already have. Nothing for application control to block.
No postinstall, no native addon, no binary download. It installs cleanly with --ignore-scripts.
Paste a token you generated once. No OAuth dance, no SSO pop-up, no device code.
toil talks only to hosts in your config. Your firewall logs show exactly what you expect.
The central integrator
Your agent asks toil, and toil knows which line to plug in. Databases and every enterprise tool sit behind one interface and one JSON shape, so nothing new to learn per system.
List connections, describe tables, preview rows and run queries with paging and a row cap, against PostgreSQL, MySQL, SQL Server, SQLite and Oracle. Read-only unless you say otherwise.
$ toil db table describe orders --connection reporting Issue trackers, source hosts, CI, scanners and observability, each behind one pasted token and one consistent JSON shape.
$ toil jira issue get PAY-1042 Still speaks MCP
toil mcp serves the same commands as MCP tools. Vendor servers are often blocked, need a browser login, or don't exist; scope toil to the areas you need and point your agent at it: one config entry, a small, focused tool list, and write tools that only exist if you've turned them on.
"mcpServers": "tickets-and-docs": "command": "npx", "args": [ "-y", "@imagile-dev/toil", "mcp", "--areas", "jira,confluence" ]
How it's built
Every decision in toil traces back to a short list of principles. Here are the first three.
Feedback
Report a bug or ask for a feature without a GitHub account. Each report becomes a public GitHub issue, and we email you the link.
toil is alpha and developed in the open. Star the repo or watch releases to follow each one.