Metadata-Version: 2.4
Name: toolchestrator
Version: 0.6.0
Summary: Connect a local tool to a Toolchestrator hub: registry, versioned schema/data sync, task serving, cross-tool reads/calls, and web-UI tunnelling.
Author-email: Stevica Kuharski <kstevica@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://toolchestrator.com
Project-URL: Connect guide, https://hub.toolchestrator.com/skill
Keywords: toolchestrator,orchestration,internal-tools,claude-code,ai-tools,automation
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: System :: Distributed Computing
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25
Requires-Dist: websocket-client>=1.5
Dynamic: license-file

# toolchestrator

The Python client for [Toolchestrator](https://toolchestrator.com) — connect a small local
tool to your company's hub without moving it off the machine it runs on.

With this client a connected tool can:

- register itself in the company **registry** (name, author, the problem it solves);
- publish **versioned JSON-Schema** data models and **sync records** to the hub;
- **serve remote task actions** over an outbound long-poll (the hub never connects into your
  machine);
- **read other tools' data** through the hub with filtered queries;
- **invoke** another tool's action and get the result back (`tc.call`);
- **expose its own local web UI** through the hub (`tc.serve_web`).

Works on Python 3.9+; depends only on `requests` and `websocket-client`.

## Install

```bash
pip install toolchestrator
```

## Quick start

```python
from toolchestrator import Toolchestrator

# one-time registration, with a personal token from your hub's Settings page
tc = Toolchestrator.register(
    "https://hub.example.com",        # your company's hub URL
    "tcu_...",                        # personal access token
    "invoice-radar", "Invoice Radar",
    description="Tracks vendor invoices and flags overdue ones.",
    sharing_scope="private",          # start private; widen deliberately
)

# afterwards, anywhere in the tool (loads .toolchestrator.json):
tc = Toolchestrator()
tc.sync_schema("invoice", invoice_schema)
tc.sync_data("invoice", rows, id_field="id")
tc.serve({"mark_paid": handle_mark_paid})   # execute tasks queued on the hub
```

The easiest way to connect a tool is to let an AI coding agent do the wiring: point it at
your hub's connect guide (`<your-hub-url>/skill`) and ask it to *"connect this tool to
Toolchestrator"*. The hub URL always comes from you — the client never assumes one.

## License

MIT © Stevica Kuharski
