Python
Python 3.8+The first client, and the one our own prober runs on.
pip install batchwatch
batchwatch › Client libraries
One first-party client for every language an LLM pipeline
gets written in — and not one of them puts a dependency in
your lock file. Standard library only, all nine. HTTP is
hand-rolled where it had to be (std::net in Rust,
java.net.http, a raw socket in C++) rather than pulling an
HTTP client and a JSON parser into your build.
The first client, and the one our own prober runs on.
pip install batchwatch
Ships its own types. Two files of source, and no dependencies to install with it.
npm install batchwatch
Installs the way every Go package does - the module proxy already serves it.
go get github.com/batchwatch/client/go@latest
HttpClient and System.Text.Json, nothing else. Built and tested in CI on every push.
dotnet add package Batchwatch
java.net.http and nothing from Maven. Kotlin and Scala use it unchanged.
dev.batchwatch:batchwatch-client:0.2.1
PSR-4 and stream contexts. No Guzzle, no Symfony HTTP client.
composer require batchwatch/batchwatch
net/http and json from the standard library. No gem dependencies at all.
gem install batchwatch
std::net only - no tokio, no reqwest, no serde in your dependency tree.
cargo add batchwatch
A header and a source file, built with a plain Makefile.
git clone https://github.com/batchwatch/client
make -C client/cpp
source distributionRead the source →
The SDKs put batchwatch in your code. The MCP server puts it in your agent's hands: when a model is deciding "batch this or run it now?", it calls batchwatch and gets the real measured queue evidence — no crawl, no index, no ranking in between. It is the same tier system as the API, so a key earns live figures the same way it does everywhere else.
Let an AI agent ASK "should I batch this?" and get the real queue evidence — the measured wait distribution, current conditions and a graded confidence — instead of guessing. Six tools, each a real read route, passed through verbatim.
npx batchwatch-mcp
One call before you submit, one context around the job. That is the whole integration, and it is the same shape in all nine languages.
if bw.should_batch("gpt-5.6-sol", max_wait="15m"):
with bw.track("openai", "gpt-5.6-sol", mode="batch"):
submit_the_job()
should_batch() returns
your default when we cannot answer. A batchwatch outage cannot
stop your job — each client has a test that proves it against a
dead port and a hung socket.Every client is MIT-licensed, and the send path is a few hundred lines with no dependencies to chase. That is the point of publishing them: you can check what leaves your machine yourself instead of taking our word for it.