Airbyte Agent SDK: typed connectors that give AI agents access to 50+ third-party APIs
Project description
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/.
Tool integration
The SDK ships two decorators for turning a connector call into an LLM tool with retry-aware exception translation, output-size guards, and framework-specific error signalling.
@<Connector>.tool_utils— preferred for typed connectors. Auto-detects the installed framework (pydantic-ai, LangChain, OpenAI Agents, or FastMCP) and composestranslate_exceptionsunder the hood. Passframework="..."to override auto-detection. Forwardsupdate_docstring,max_output_chars,framework,internal_retries,should_internal_retry, andexhausted_runtime_failure_message.@translate_exceptions— same translation behaviour for any callable that is not a generatedConnector(custom helpers, eval harnesses, ad-hoc tools).
Both decorators preserve sync/async, __name__, and __doc__. Transient runtime failures (429/5xx, network, timeout) can be retried silently via internal_retries=N on either decorator. 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 decorator per tool. Stacking
@translate_exceptionsover@<Connector>.tool_utils(or vice versa) is detected at decoration time: the inner layer is preserved and the outer layer logs a warning and short-circuits, so double-translation is impossible.
pydantic-ai
from pydantic_ai import Agent
from airbyte_agent_sdk.connectors.stripe import StripeConnector
agent = Agent("openai:gpt-4o")
@agent.tool_plain
@StripeConnector.tool_utils
async def list_customers(limit: int = 10) -> list[dict]:
async with StripeConnector(connector_id="src_123") as stripe:
result = await stripe.execute("customers", "list", params={"limit": limit})
return result.data
Failures raise pydantic_ai.ModelRetry so the agent can retry with corrected arguments.
LangChain
from langchain_core.tools import StructuredTool
from airbyte_agent_sdk.connectors.stripe import StripeConnector
@StripeConnector.tool_utils(framework="langchain")
async def list_customers(limit: int = 10) -> list[dict]:
async with StripeConnector(connector_id="src_123") as stripe:
result = await stripe.execute("customers", "list", params={"limit": limit})
return result.data
tool = StructuredTool.from_function(
coroutine=list_customers,
name="list_customers",
description="List Stripe customers.",
handle_tool_error=True, # surfaces ToolException as the tool's string result
)
Failures raise langchain_core.tools.ToolException; handle_tool_error=True turns that into the tool's string result for the LLM.
Alternative for non-typed callables: replace
@StripeConnector.tool_utils(framework="langchain")with@translate_exceptions(framework="langchain")fromairbyte_agent_sdk.
OpenAI Agents
from agents import Agent, function_tool
from airbyte_agent_sdk.connectors.stripe import StripeConnector
@function_tool
@StripeConnector.tool_utils(framework="openai_agents")
async def list_customers(limit: int = 10) -> list[dict]:
async with StripeConnector(connector_id="src_123") as stripe:
result = await stripe.execute("customers", "list", params={"limit": limit})
return result.data
agent = Agent(name="stripe", tools=[list_customers])
Note: the OpenAI Agents strategy uses catch-and-return-string semantics — tool_utils catches the failure and returns a string (e.g. "ConnectorValidationError: entity must be one of: ...") instead of raising. The OpenAI runner serialises this string verbatim into the tool result the LLM sees.
Alternative for non-typed callables: replace
@StripeConnector.tool_utils(framework="openai_agents")with@translate_exceptions(framework="openai_agents")fromairbyte_agent_sdk.
FastMCP
from fastmcp import FastMCP
from airbyte_agent_sdk.connectors.stripe import StripeConnector
mcp = FastMCP("stripe-tools")
@mcp.tool()
@StripeConnector.tool_utils(framework="mcp")
async def list_customers(limit: int = 10) -> list[dict]:
async with StripeConnector(connector_id="src_123") as stripe:
result = await stripe.execute("customers", "list", params={"limit": limit})
return result.data
Failures raise fastmcp.exceptions.ToolError, which FastMCP serialises as an MCP error response to the client.
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file airbyte_agent_sdk-0.1.162-py3-none-any.whl.
File metadata
- Download URL: airbyte_agent_sdk-0.1.162-py3-none-any.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b4628ccf91ea0e41defeb6f18a6b19e20c1300650a7cfc57504f01c1ef9423f
|
|
| MD5 |
ccaaea2afecc7c36453bc1c75e8d9470
|
|
| BLAKE2b-256 |
8856b3211a81fb5bdb2b03b89719977f0387640a5db05ed690c38fae5abab840
|