Alpha · Open source · By Imagile

The token-efficient alternative to MCP.

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.

  • Jira Data Center
  • Jira Cloud
  • Azure DevOps Server
  • Azure DevOps Services
  • Bitbucket Data Center
  • Bitbucket Cloud
  • GitHub & GitHub Enterprise
  • Confluence Data Center
  • Confluence Cloud
  • Local git
  • Jenkins
  • JFrog Artifactory
  • OpenShift / Kubernetes
  • Split.IO
  • Sauce Labs
  • SonarQube
  • Checkmarx One
  • Contrast Security
  • Sonatype IQ Server
  • SD Elements
  • OSV.dev
  • Sonatype OSS Index
  • Dynatrace
  • Falcon LogScale
  • Elasticsearch
  • Kibana
  • Figma
  • Alation

Get started

Two ways to run it.

Both need Node.js 24.14 or later, on Windows, macOS or Linux. Alpha APIs and flags may change before 1.0.

git

Run from a clone

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
Step by step

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
  • 28 Integrations shipped
  • 0 Executables to approve
  • 0 Install scripts
  • 3 Platforms, all first-class

Token-efficient by design

Less of the context window, more of the work.

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.

  • Compact envelopes

    Every command prints one JSON envelope: ok, data, error, meta. One shape to read, on every call.

  • Only the fields asked for

    --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.

  • Wait, don't poll

    toil wait repeats a read until a condition is true and answers once, instead of the agent asking again and again.

  • A skill, read as needed

    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.

Beforetoil 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 …
Aftertoil 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.json
schema:
  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

Answers an agent can act on.

Every command returns the same JSON shape on stdout, says where its data came from, and stays read-only until you decide otherwise.

  • ok / data / error / meta on every call, CLI or MCP
  • readOnly reported, not assumed
  • source on every result, so nothing is a mystery
Preview · planned output
$ 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 }}
A security guard holds back a glum queue of executable files at a velvet rope, while a small package walks straight through the door.

Built for the locked-down laptop

If your machine runs Node, it runs toil.

Application control blocks unsigned executables. Security reviews stall on native modules. toil is built so there is nothing for either to catch.

  • No executable

    One bundled JavaScript file on the Node you already have. Nothing for application control to block.

  • No install scripts

    No postinstall, no native addon, no binary download. It installs cleanly with --ignore-scripts.

  • No browser login

    Paste a token you generated once. No OAuth dance, no SSO pop-up, no device code.

  • No telemetry

    toil talks only to hosts in your config. Your firewall logs show exactly what you expect.

The central integrator

One switchboard for everything outside the editor.

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.

A small package character in a hard hat calmly works an old telephone switchboard, plugging cables into sockets for a database, tickets, metrics, code and security.
db

Databases

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
tools

Enterprise tools

Issue trackers, source hosts, CI, scanners and observability, each behind one pasted token and one consistent JSON shape.

$ toil jira issue get PAY-1042

See all 28 integrations

Still speaks MCP

When a client wants MCP, toil serves it.

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.

A star performer is stuck backstage, wrapped in red tape and a login pop-up, while a small package steps into the spotlight as the understudy holding a bouquet of cables.
mcp.json

  "mcpServers": 
    "tickets-and-docs": 
      "command": "npx",
      "args": [
        "-y", "@imagile-dev/toil", "mcp",
        "--areas", "jira,confluence"
      ]
    
  

How it's built

Principles first. Rules follow.

Every decision in toil traces back to a short list of principles. Here are the first three.

  1. 01

    Adoptable inside a locked-down enterprise

    The only things your security team approves are Node and one npm package.

  2. 02

    Safe by default when an agent is driving

    An agent cannot discover a write tool you have not turned on.

  3. 03

    One command, one source; you compose

    You always know which system a result came from, and you choose which ones to ask.

Read all nine principles

Watch it get built.

toil is alpha and developed in the open. Star the repo or watch releases to follow each one.