Skip to main content

Airbyte Agent SDK

Type-safe connector execution framework with blessed connectors and full IDE autocomplete.

Overview

The Airbyte Agent SDK gives AI agents access to 50+ third-party APIs through strongly typed, well-documented tools. Connectors can run through the Airbyte platform (which manages credentials, rate limiting, and execution) or locally in OSS mode.

How to install

uv pip install airbyte-agent-sdk

Documentation

Full documentation is available at docs.airbyte.com/ai-agents/about/.

  • SDK guides — authentication, adding connectors, executing operations.
  • SDK API reference — generated from the SDK's docstrings.
  • pdoc site — the same reference rendered by pdoc; requires access to the airbytehq/sonar repo.

Tool integration

The SDK ships a tool builder and two connector-tool decorators for turning connector calls into LLM tools with retry-aware exception translation, output-size guards, and framework-specific error signalling, plus translate_exceptions for callables that are not connector tools. Pick from these in this order:

  • build_connector_tools(connector, framework="...") — the simplest, preferred default on supported frameworks (PydanticAI, LangChain, OpenAI Agents, FastMCP) when you do not need custom tool bodies. Returns inspect_connector, read_skill_docs, and execute callables bound to one connector; the tool names are fixed, so register one connector's tool set per agent. Hosted connectors, or local connectors passed an explicit docs_provider, use outline-only guidance and tell the agent to inspect/read docs before execution; local/offline connectors without a docs provider keep generated YAML-derived rich docs. Pass use_progressive_docs=False to make tools.as_list() expose only execute with the legacy rich description.
  • @<Connector>.agent_tool(...) — use when you need custom tool bodies, a framework the SDK does not natively support, or a multi-connector agent. Decorate three functions (execute, inspect, docs) and the execute docstring steers the agent through the inspect → docs → execute flow instead of embedding the full entity/action reference. On supported frameworks pass framework="pydantic_ai", "langchain", "openai_agents", or "mcp" to target that framework's failure signal; on unsupported frameworks omit it and failures raise AirbyteToolError (framework="none"; no auto-detection).
  • @<Connector>.tool_utils — deprecated; retained only for backwards compatibility with existing integrations that use one broad, generated-description tool. Do not use it for new tools. It auto-detects supported frameworks and remains available so existing integrations can migrate independently.
  • @translate_exceptions — same translation behaviour for any callable that is not a generated Connector (custom helpers, eval harnesses, ad-hoc tools).

The builder and decorators preserve async callables, __name__, and __doc__. Transient runtime failures (429/5xx, network, timeout) can be retried silently via internal_retries=N. Output exceeding max_output_chars (default 100 KB) is converted to the framework's retry signal so the LLM can narrow the query.

Pick one SDK decorator per tool. agent_tool and legacy tool_utils already include exception translation. Stacking @translate_exceptions with either decorator is detected and short-circuited.

Prebuilt connector tools (default)

from pydantic_ai import Agent
from airbyte_agent_sdk import build_connector_tools
from airbyte_agent_sdk.connectors.stripe import StripeConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig

stripe = StripeConnector(
    auth_config=AirbyteAuthConfig(
        airbyte_client_id="client_abc123",
        airbyte_client_secret="secret_xyz789",
        connector_id="src_123",
    )
)
tools = build_connector_tools(stripe, framework="pydantic_ai")

agent = Agent("openai:gpt-4o", tools=tools.as_list())

The model-facing docs flow is inspect_connector() -> read_skill_docs() -> read_skill_docs(section="...") -> execute(...). The docs tool binds the hosted docs_skill_id internally, so the model only passes an optional section.

The builder covers one connector per agent — the tool names are fixed (inspect_connector, read_skill_docs, execute), so the tool sets for multiple connectors collide when registered on the same agent. Renaming the callables at registration avoids the collision, but the generated execute guidance still tells the model to call inspect_connector and read_skill_docs, so it points at the wrong tools. Multi-connector agents use agent_tool with connector-specific function names, which weaves those names into the guidance via inspect_tool= and docs_tool=.

To opt out of the progressive inspect/docs flow:

tools = build_connector_tools(stripe, framework="pydantic_ai", use_progressive_docs=False)
agent = Agent("openai:gpt-4o", tools=tools.as_list())  # exposes execute only

Custom tool bodies and unsupported frameworks — agent_tool

When you need custom tool bodies, or when your framework is not one the SDK natively supports, write the three functions yourself and decorate each with agent_tool. The role is inferred from the signature — (entity, action, ...) is execute, (section, ...) is docs, () is inspect — or pass it explicitly (agent_tool("execute")). Extra parameters are allowed.

from airbyte_agent_sdk.connectors.stripe import StripeConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig
from pydantic_ai import Agent

stripe = StripeConnector(auth_config=AirbyteAuthConfig(...))
agent = Agent("openai:gpt-4o")

@agent.tool_plain
@StripeConnector.agent_tool(
    framework="pydantic_ai",
    inspect_tool="stripe_inspect",
    docs_tool="stripe_read_docs",
)
async def stripe_execute(entity: str, action: str, params: dict | None = None):
    result = await stripe.execute(entity, action, params or {})
    return result.data if hasattr(result, "data") else result

@agent.tool_plain
@StripeConnector.agent_tool(framework="pydantic_ai")
async def stripe_inspect():
    return await stripe.inspect_connector()

@agent.tool_plain
@StripeConnector.agent_tool(framework="pydantic_ai")
async def stripe_read_docs(section: str | None = None):
    return await stripe.read_skill_docs(section)

The optional inspect_tool=/docs_tool= kwargs weave the exact registered sibling-tool names into the execute docstring for tighter steering; omitting them uses generic phrasing. Register the same three-function pattern with any other framework and set framework= to match it.

framework= decides what a tool failure looks like to the agent. This applies equally to build_connector_tools, agent_tool, and translate_exceptions:

framework= Tool failures surface as Framework-side wiring
"pydantic_ai" raises pydantic_ai.ModelRetry none — the agent retries
"langchain" raises langchain_core.tools.ToolException pass handle_tool_error=True to the tool so the message goes back to the model instead of aborting the run
"openai_agents" returns the failure message as the tool result register with function_tool(..., strict_mode=False) for params: dict
"mcp" raises fastmcp.exceptions.ToolError FastMCP serializes it as an errored tool result
"none" raises airbyte_agent_sdk.AirbyteToolError catch it in your dispatch loop and hand the message to the model

An explicit framework= whose package is not installed raises RuntimeError at call time. agent_tool defaults to "none" and never auto-detects; build_connector_tools, tool_utils, and translate_exceptions auto-detect when framework is omitted and fall back to "none" with a warning if no supported framework is installed.

On a framework the SDK does not support natively, omit framework= and handle the failure yourself:

from airbyte_agent_sdk import AirbyteToolError

# `handlers` maps each registered tool name to its decorated function;
# `tool_name`/`tool_args` come from the model's tool call.
handlers = {fn.__name__: fn for fn in (stripe_inspect, stripe_read_docs, stripe_execute)}

try:
    content = await handlers[tool_name](**tool_args)
except AirbyteToolError as err:
    content = str(err)  # return to the model as an errored tool result

Legacy: tool_utils

Existing integrations can keep tool_utils without changing behavior:

legacy_agent = Agent("openai:gpt-4o")

@legacy_agent.tool_plain
@StripeConnector.tool_utils
async def legacy_stripe_execute(entity: str, action: str, params: dict | None = None):
    result = await stripe.execute(entity, action, params or {})
    return result.data if hasattr(result, "data") else result

tool_utils embeds the full generated connector catalog in one tool description and auto-detects the installed supported framework. It is deprecated and kept only so existing integrations can migrate independently; new code uses build_connector_tools or agent_tool(framework="...").

See the translate_exceptions reference for advanced kwargs (internal_retries, should_internal_retry, exhausted_runtime_failure_message).

How to install the skills

The repo ships skills that walk agents through setting up and using the connectors. Three install paths:

skills.sh (works for Claude Code, Codex, Cursor, OpenCode, and 40+ other agents):

npx skills add airbytehq/airbyte-agent-sdk

Claude Code (native plugin):

/plugin marketplace add airbytehq/airbyte-agent-sdk
/plugin install airbyte-agent-sdk@airbyte-agent-sdk

Codex (clone + symlink):

git clone https://github.com/airbytehq/airbyte-agent-sdk ~/.codex/skills/airbyte-agent-sdk-src
ln -s ~/.codex/skills/airbyte-agent-sdk-src/connector-sdk/.claude/skills/* ~/.codex/skills/

See docs.airbyte.com/ai-agents/about/ for full documentation.

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

airbyte_agent_sdk-0.1.341-py3-none-any.whl (3.9 MB view details)

Uploaded Python 3

File details

Details for the file airbyte_agent_sdk-0.1.341-py3-none-any.whl.

File metadata

File hashes

Hashes for airbyte_agent_sdk-0.1.341-py3-none-any.whl
Algorithm Hash digest
SHA256 69e9531e969e3bfb3a905d2ac76c9a013283a6e9bceb73ee3f11616b3c15cf6f
MD5 ce1a602d1f837366654841f4e3af0abe
BLAKE2b-256 7b7e5a0ea2927cc8965825ead27f8a37ca752e9817a09b65bcbb49522280578f

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.344

1 file

0.1.343

1 file

0.1.342

1 file

This release

0.1.341 This release

1 file

0.1.340

1 file

0.1.339

1 file

0.1.338

1 file

0.1.337

1 file

0.1.336

1 file

0.1.335

1 file

0.1.334

1 file

0.1.333

1 file

0.1.332

1 file

0.1.331

1 file

0.1.330

1 file

0.1.329

1 file

0.1.328

1 file

0.1.327

1 file

0.1.326

1 file

0.1.325

1 file

0.1.324

1 file

0.1.323

1 file

0.1.322

1 file

0.1.321

1 file

0.1.320

1 file

0.1.319

1 file

0.1.318

1 file

0.1.317

1 file

0.1.316

1 file

0.1.315

1 file

0.1.314

1 file

0.1.313

1 file

0.1.312

1 file

0.1.311

1 file

0.1.310

1 file

0.1.309

1 file

0.1.308

1 file

0.1.307

1 file

0.1.306

1 file

0.1.305

1 file

0.1.304

1 file

0.1.303

1 file

0.1.302

1 file

0.1.301

1 file

0.1.300

1 file

0.1.299

1 file

0.1.298

1 file

0.1.297

1 file

0.1.296

1 file

0.1.295

1 file

0.1.294

1 file

0.1.293

1 file

0.1.292

1 file

0.1.291

1 file

0.1.290

1 file

0.1.289

1 file

0.1.288

1 file

0.1.287

1 file

0.1.286

1 file

0.1.285

1 file

0.1.284

1 file

0.1.283

1 file

0.1.282

1 file

0.1.281

1 file

0.1.280

1 file

0.1.279

1 file

0.1.278

1 file

0.1.277

1 file

0.1.276

1 file

0.1.275

1 file

0.1.274

1 file

0.1.273

1 file

0.1.272

1 file

0.1.271

1 file

0.1.270

1 file

0.1.269

1 file

0.1.268

1 file

0.1.267

1 file

0.1.266

1 file

0.1.265

1 file

0.1.264

1 file

0.1.263

1 file

0.1.262

1 file

0.1.261

1 file

0.1.260

1 file

0.1.259

1 file

0.1.258

1 file

0.1.257

1 file

0.1.256

1 file

0.1.255

1 file

0.1.254

1 file

0.1.253

1 file

0.1.252

1 file

0.1.251

1 file

0.1.250

1 file

0.1.249

1 file

0.1.248

1 file

0.1.247

1 file

0.1.246

1 file

0.1.245

1 file

0.1.244

1 file

0.1.243

1 file

0.1.242

1 file

0.1.241

1 file

0.1.240

1 file

0.1.239

1 file

0.1.238

1 file

0.1.237

1 file

0.1.236

1 file

0.1.235

1 file

0.1.234

1 file

0.1.233

1 file

0.1.232

1 file

0.1.231

1 file

0.1.230

1 file

0.1.229

1 file

0.1.228

1 file

0.1.227

1 file

0.1.226

1 file

0.1.225

1 file

0.1.224

1 file

0.1.223

1 file

0.1.222

1 file

0.1.221

1 file

0.1.220

1 file

0.1.219

1 file

0.1.218

1 file

0.1.217

1 file

0.1.216

1 file

0.1.215

1 file

0.1.214

1 file

0.1.213

1 file

0.1.212

1 file

0.1.211

1 file

0.1.210

1 file

0.1.209

1 file

0.1.208

1 file

0.1.207

1 file

0.1.206

1 file

0.1.205

1 file

0.1.204

1 file

0.1.203

1 file

0.1.202

1 file

0.1.201

1 file

0.1.200

1 file

0.1.199

1 file

0.1.198

1 file

0.1.197

1 file

0.1.196

1 file

0.1.195

1 file

0.1.194

1 file

0.1.193

1 file

0.1.192

1 file

0.1.191

1 file

0.1.190

1 file

0.1.189

1 file

0.1.188

1 file

0.1.187

1 file

0.1.186

1 file

0.1.185

1 file

0.1.184

1 file

0.1.183

1 file

0.1.182

1 file

0.1.181

1 file

0.1.180

1 file

0.1.179

1 file

0.1.178

1 file

0.1.177

1 file

0.1.176

1 file

0.1.175

1 file

0.1.174

1 file

0.1.173

1 file

0.1.172

1 file

0.1.171

1 file

0.1.170

1 file

0.1.169

1 file

0.1.168

1 file

0.1.167

1 file

0.1.166

1 file

0.1.165

1 file

0.1.164

1 file

0.1.163

1 file

0.1.162

1 file

0.1.161

1 file

0.1.160

1 file

0.1.159

1 file

0.1.158

1 file

0.1.157

1 file

0.1.156

1 file

0.1.155

1 file

0.1.154

1 file

0.1.153

1 file

0.1.152

1 file

0.1.151

1 file

0.1.150

1 file

0.1.149

1 file

0.1.148

1 file

0.1.147

1 file

0.1.146

1 file

0.1.145

1 file

0.1.144

1 file

0.1.143

1 file

0.1.142

1 file

0.1.141

1 file

0.1.140

1 file

0.1.139

1 file

0.1.138

1 file

0.1.137

1 file

0.1.136

1 file

0.1.135

1 file

0.1.134

1 file

0.1.133

1 file

0.1.132

1 file

0.1.131

1 file

0.1.130

1 file

0.1.129

1 file

0.1.128

1 file

0.1.127

1 file

0.1.126

1 file

0.1.125

1 file

0.1.124

1 file

0.1.123

1 file

0.1.122

1 file

0.1.121

1 file

0.1.120

1 file

0.1.119

1 file

0.1.118

1 file

0.1.117

1 file

0.1.116

1 file

0.1.115

1 file

0.1.114

1 file

0.1.113

1 file

0.1.112

1 file

0.1.111

1 file

0.1.110

1 file

0.1.109

1 file

0.1.108

1 file

0.1.107

1 file

0.1.106

1 file

0.1.105

1 file

0.1.104

1 file

0.1.103

1 file

0.1.102

1 file

0.1.101

1 file

0.1.100

1 file

0.1.99

1 file

0.1.98

1 file

0.1.97

1 file

0.1.96

1 file

0.1.95

1 file

0.1.94

1 file

0.1.93

1 file

0.1.92

1 file

0.1.91

1 file

0.1.90

1 file

0.1.89

1 file

0.1.88

1 file

0.1.87

1 file

0.1.86

1 file

0.1.85

1 file

0.1.84

1 file

0.1.83

1 file

0.1.82

1 file

0.1.81

1 file

0.1.80

1 file

0.1.79

1 file

0.1.78

1 file

0.1.77

1 file

0.1.76

1 file

0.1.75

1 file

0.1.74

1 file

0.1.73

1 file

0.1.72

1 file

0.1.71

1 file

0.1.70

1 file

0.1.69

1 file

0.1.68

1 file

0.1.67

1 file

0.1.66

1 file

0.1.65

1 file

0.1.64

1 file

0.1.63

1 file

0.1.62

1 file

0.1.61

1 file

0.1.60

1 file

0.1.59

1 file

0.1.58

1 file

0.1.57

1 file

0.1.56

1 file

0.1.55

1 file

0.1.54

1 file

0.1.53

1 file

0.1.52

1 file

0.1.51

1 file

0.1.50

1 file

0.1.49

1 file

0.1.48

1 file

0.1.47

1 file

0.1.46

1 file

0.1.45

1 file

0.1.44

1 file

0.1.43

1 file

0.1.42

1 file

0.1.41

1 file

0.1.40

1 file

0.1.39

1 file

0.1.38

1 file

0.1.37

1 file

0.1.36

1 file

0.1.35

1 file

0.1.34

1 file

0.1.33

1 file

0.1.32

1 file

0.1.31

1 file

0.1.30

1 file

0.1.29

1 file

0.1.28

1 file

0.1.27

1 file

0.1.26

1 file

0.1.25

1 file

0.1.24

1 file

0.1.23

1 file

0.1.22

1 file

0.1.21

1 file

0.1.20

1 file

0.1.19

1 file

0.1.18

1 file

0.1.17

1 file

0.1.16

1 file

0.1.15

1 file

0.1.14

1 file

0.1.13

1 file

0.1.12

1 file

0.1.11

1 file

0.1.10

1 file

0.1.9

1 file

0.1.8

1 file

0.1.7

1 file

0.1.6

1 file

0.1.5

1 file

0.1.4

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page