Metadata-Version: 2.4
Name: oto-core
Version: 1.6.0
Summary: Oto connector library — API clients for AI agents (no CLI). Façade CLI = oto-cli.
License: MIT
Project-URL: Homepage, https://oto.ninja
Project-URL: Repository, https://github.com/otomata-tech/oto-core
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.28.0
Requires-Dist: france-opendata>=0.1.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: pyyaml>=6.0
Provides-Extra: google
Requires-Dist: google-auth>=2.0.0; extra == "google"
Requires-Dist: google-auth-oauthlib>=1.0.0; extra == "google"
Requires-Dist: google-api-python-client>=2.0.0; extra == "google"
Requires-Dist: gkeepapi>=0.16.0; extra == "google"
Requires-Dist: markdown>=3.5; extra == "google"
Provides-Extra: browser
Requires-Dist: o-browser; extra == "browser"
Provides-Extra: vivatech
Requires-Dist: o-browser-vivatech; extra == "vivatech"
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.40.0; extra == "anthropic"
Provides-Extra: stock
Requires-Dist: pyarrow>=10.0.0; extra == "stock"
Requires-Dist: pandas>=1.5.0; extra == "stock"
Provides-Extra: all
Requires-Dist: oto-core[anthropic,browser,google,stock,vivatech]; extra == "all"
Dynamic: license-file

# oto-core

Connector library for [Oto](https://oto.ninja) — pure Python API clients for AI agents and automation. No CLI, no server: clients return plain dicts.

```bash
pip install oto-core              # core (requests, france-opendata)
pip install "oto-core[google]"    # + Google Workspace (Drive, Docs, Sheets, Gmail, Calendar, Tasks)
pip install "oto-core[browser]"   # + browser-based scraping (LinkedIn, via o-browser)
pip install "oto-core[stock]"     # + SIRENE stock queries (DuckDB/parquet)
```

## What's inside

- `oto.tools.*` — one client per service: French company data (SIRENE, INPI, BODACC, BOAMP, DVF via [france-opendata](https://pypi.org/project/france-opendata/)), web search (Serper), email finding (Hunter), CRM (Attio, Folk), outreach (Lemlist, Kaspr, Fullenrich), Google Workspace, Slack, WhatsApp, Reddit, Pennylane, and more.
- `oto.config` — three-tier secret resolution: environment variables → secret provider (SOPS/age, file, Scaleway Secret Manager) → defaults.

## Ecosystem

| Package | Role |
|---|---|
| **oto-core** (this) | the clients — single source of truth |
| [oto-cli](https://github.com/otomata-tech/oto-cli) | `oto` command-line façade |
| oto-backend | hosted platform ([mcp.oto.ninja](https://oto.ninja) — MCP + REST, credential vault, orgs) |

```python
from oto.tools.sirene import SireneClient

client = SireneClient()          # reads SIRENE_API_KEY via oto.config
company = client.get_company("130025265")
```

Conventions: clients are import-lazy per optional dependency, raise on error (no silent fallbacks), and stay free of CLI/printing concerns.

MIT — © Otomata.
