# Python SDK: your first call

The Python SDK is one class, `CadyClient`, that calls the same tools as the CLI from your own code.

```python
import asyncio
from cady_cli import CadyClient

async def main():
    async with CadyClient(company="COMPANY_UUID") as cady:
        setup = await cady.call("cady_read", {"refs": ["company:setup"]})
        print(setup)

asyncio.run(main())
```

`call(tool, arguments)` sends one call and returns its result as a dictionary. It prints your company’s setup record.

## Sign-in

The client reuses the sign-in saved by `cady setup` on this machine. On a server, pass `token=` or set `CADY_ACCESS_TOKEN`.

## Company

Pass `company=` every time. The SDK does not read project or machine defaults, and a call that names a different company fails before anything is sent.

## Find tools

- `await cady.discover()` lists the tools this connection serves.
- `await cady.describe("work_read")` returns one tool’s exact fields.
- `await cady.run({"tool": ..., "arguments": ...})` sends a call that Cady handed back to you.

## Install

The SDK is the `cady_cli` Python package, for Python 3.13 or later. **It is not published to a package index yet**, and the install script’s `cady` does not include it.

Next: [errors and batches](https://cadyworks.com/docs/sdk-errors.md).

Next: [Python SDK: errors and batches](https://cadyworks.com/docs/sdk-errors.md)
