Metadata-Version: 2.4
Name: toolchestrator
Version: 0.7.0
Summary: Connect a local tool to a Toolchestrator hub: registry, versioned schema/data sync, task serving, cross-tool reads/calls, web-UI tunnelling, and deploying to teammate runners.
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
Requires-Dist: pynacl>=1.5
Dynamic: license-file

# toolchestrator

The Python client for [Toolchestrator](https://toolchestrator.com), the runtime for the
small apps your team builds with Claude Code. It connects an app to its Toolchestrator
runtime so teammates and AI can use it, while the app keeps running on the machine it was
built 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
