Skip to main content

CLI toolkit for AI agents — covers the long tail of SaaS APIs that don't have a CLI

Project description

oto — CLI toolkit for AI agents

Your LLM already uses gh for GitHub, aws for AWS, gcloud for GCP. oto covers the long tail — the SaaS products that don't have a CLI.

Each connector ships with a SKILL.md — an instruction manual that teaches your AI agent how to use it. Run oto skills enable --all and your Claude Code / Cursor / Aider gets instant context on 15+ APIs.

Why CLI over MCP?

CLI MCP
Token cost ~80 tokens (prompt + --help) 4-32x more (full schema in context)
Reliability 100% ~72% (source)
Setup pipx install oto-cli Server + transport + config
Composability Pipes: oto sirene search "fintech" | jq '.[]' None
Works with Every LLM, every framework MCP-compatible clients only

Installation

# Standalone CLI
pipx install oto-cli

# With specific connectors
pipx install "oto-cli[google,browser]"

# All connectors
pipx install "oto-cli[all]"

# Development
git clone https://github.com/otomata-tech/oto-cli.git
cd oto-cli && pip install -e ".[all]"

Connectors

Command What it does Extra
oto google Gmail, Drive, Docs, Sheets, Slides, Calendar google
oto browser LinkedIn, Crunchbase, Pappers, Indeed, G2, Google browser
oto notion Search, pages, databases
oto sirene French company data (INSEE SIRENE)
oto search Web & news search (dispatches to Serper or browser)
oto serper Direct Serper API (web, news, scrape, suggestions)
oto enrichment Contact enrichment (Kaspr, Hunter, Lemlist)
oto pennylane Accounting (Pennylane API)
oto anthropic API usage & cost tracking anthropic
oto whatsapp Send & read WhatsApp messages
oto attio Attio CRM (contacts, companies, deals, tasks)
oto folk Folk CRM (contacts, companies, deals)
oto zoho Zoho CRM (records, contacts, deals, notes)
oto zohodesk Zoho Desk (tickets, threads, contacts, departments)
oto company French company lookup (multi-source)
oto audio Audio recording, transcription, summaries
oto gemini Image generation via Gemini 3 Pro (text-to-image, editing)
oto openai Image generation via gpt-image-2 (text-to-image, editing)
oto config Configuration & secrets management

Connectors without an "Extra" only need requests (included in base install).

Quick start

# Configure secrets (file-based, default)
mkdir -p ~/.otomata
cat > ~/.otomata/secrets.env << 'EOF'
SERPER_API_KEY=xxx
NOTION_API_KEY=secret_xxx
SIRENE_API_KEY=xxx
EOF

# Or use Scaleway Secret Manager
oto config provider secrets scaleway

# Check config & secrets status
oto config

# Search the web (backend depends on config: serper or browser)
oto search web -q "AI agents 2026"

# Google OAuth setup (per account)
oto google auth myaccount
oto google gmail-search "from:bob" -a myaccount

# Browse LinkedIn
oto browser linkedin profile https://linkedin.com/in/someone

# French company data — INSEE SIRENE
oto sirene search "fintech"

# Enriched data via data.gouv recherche-entreprises (with --idcc filter by convention collective)
oto sirene entreprises --idcc 1285,3090 --naf 90.01Z --dept 75

Skills for AI agents

The killer feature: each connector comes with a SKILL.md that teaches your LLM how to use it.

# Enable all skills for Claude Code
oto skills enable --all

# Or pick specific ones
oto skills enable oto-google
oto skills enable oto-search

Once enabled, your AI agent sees these instructions in its context and knows exactly which oto commands to use, with what arguments, and what output to expect.

Create your own connector

A connector is 3 files:

oto/commands/myservice.py    # CLI commands (Typer app)
oto/tools/myservice/         # API client
skills/oto-myservice/SKILL.md  # LLM instructions

See docs/create-connector.md for the full guide.

How it works

Auto-discoverycli.py scans commands/ at startup. Any Python file exporting a Typer app becomes a sub-command. No registry, no config. Drop a file, it appears in oto --help.

Three types of connectors (same CLI contract: JSON stdout, lazy imports, get_secret()):

  • API — call REST APIs via requests. Each client handles auth/pagination/rate-limiting as the API requires. (notion, sirene, search, pennylane, folk...)
  • Browser — automate a real browser for sites without an API. Async, require oto-cli[browser]. (linkedin, crunchbase, pappers, indeed, g2)
  • SDK — use an official client library. Currently Google Workspace via google-api-python-client + OAuth2. Require oto-cli[google].

Secrets — provider-based resolution, configured via oto config provider secrets <file|scaleway>:

  1. Environment variables (always, highest priority)
  2. Configured provider: file (.otomata/secrets.env project → user) or Scaleway Secret Manager
  3. Default value

Output contract — every command prints JSON to stdout, errors to stderr. Composable with jq, pipes, scripts.

Lazy imports — tool clients are imported inside functions, so the CLI starts fast regardless of how many connectors are installed.

See docs/concepts.md for the full architecture guide.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oto_cli-1.4.0.tar.gz (305.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oto_cli-1.4.0-py3-none-any.whl (381.3 kB view details)

Uploaded Python 3

File details

Details for the file oto_cli-1.4.0.tar.gz.

File metadata

  • Download URL: oto_cli-1.4.0.tar.gz
  • Upload date:
  • Size: 305.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for oto_cli-1.4.0.tar.gz
Algorithm Hash digest
SHA256 c16b52ad079c68a271dc32a7e9211dc46be7a1fe63d366e899e4aff255c0f048
MD5 a5737206b7d5719bbb0ce6b59d280e3d
BLAKE2b-256 58dd7957a670589c2146d307d211516cafec1fc8be3d5de0f1edeb247b46fd75

See more details on using hashes here.

File details

Details for the file oto_cli-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: oto_cli-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 381.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for oto_cli-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 30edd6be4a6a7ce7a15021e5b0a3358400a16c9e7fcc1e94d79fb27ca7a529a6
MD5 b463c5a1e70afc51d3179ebf519b3615
BLAKE2b-256 316432855808ca746cf10ac7c5c7e9ed69df215395012b9e60554210c770132d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page