Skip to main content

Exa

The Exa agent connector is a Python package that equips AI agents to interact with Exa through strongly typed, well-documented tools. It's ready to use directly in your Python app, in an agent framework, or exposed through an MCP.

Exa is an AI-powered search engine that finds the exact content you're looking for on the web using embeddings-based search. This connector provides access to Exa's search, contents retrieval, and find-similar endpoints. All endpoints use POST requests with JSON bodies. Requires an Exa API key from dashboard.exa.ai.

Example prompts​

The Exa connector is optimized to handle prompts like these.

  • Search for latest news on Airbyte
  • Find web pages similar to https://airbyte.com
  • Get the full text content of https://airbyte.com
  • Search for AI research papers published this year
  • Find company pages related to data integration startups

Entities and actions​

This connector supports the following entities and actions. For more details, see this connector's full reference documentation.

EntityActions
Search ResultsList
ContentsList
Similar ResultsList

Exa API docs​

See the official Exa API reference.

Interfaces​

Use the Exa connector through the Airbyte Agent CLI, the Python SDK, or the API.

CLI​

Install the CLI:

curl -fsSL https://airbyte.ai/install.sh | bash

Authenticate with Airbyte:

airbyte-agent login

Create the connector. The CLI opens the hosted setup flow:

airbyte-agent connectors create --json '{
"workspace": "<your_workspace_name>",
"name": "exa"
}'

Describe the connector to see its supported entities and actions:

airbyte-agent connectors describe --json '{
"workspace": "<your_workspace_name>",
"name": "exa"
}'

Execute an action:

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "exa",
"entity": "search_results",
"action": "list"
}'

Python SDK​

Installation​

uv pip install airbyte-agent-sdk

Usage​

Connectors can run in hosted or open source mode.

Hosted​

In hosted mode, API credentials are stored securely in Airbyte Agents. You provide your Airbyte credentials instead. If your Airbyte client can access multiple organizations, also set organization_id.

This example assumes you've already authenticated your connector with Airbyte. See Authentication to learn more about authenticating. If you need a step-by-step guide, see the hosted execution tutorial.

The connect() factory returns a fully typed ExaConnector and reads AIRBYTE_CLIENT_ID / AIRBYTE_CLIENT_SECRET from the environment:

The recommended pattern is build_connector_tools, which gives the agent three tools bound to this connector: inspect_connector, read_skill_docs, and execute. The agent can inspect the connector, read only the skill-doc section it needs, and then execute:

inspect_connector() -> read_skill_docs() -> read_skill_docs(section="...") -> execute(entity, action, params)
Pydantic AI
from airbyte_agent_sdk import build_connector_tools
from pydantic_ai import Agent
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.exa import ExaConnector

connector = connect("exa", workspace_name="<your_workspace_name>")

tools = build_connector_tools(connector, framework="pydantic_ai")
agent = Agent("openai:gpt-4o", tools=tools.as_list())
Legacy alternatives​

These examples are kept for existing integrations. For new agents, use build_connector_tools above. The legacy ExaConnector.tool_utils pattern loads the connector's full generated catalog into one broad execute tool description instead of letting the agent read skill docs on demand.

Pydantic AI
from pydantic_ai import Agent
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.exa import ExaConnector

connector = connect("exa", workspace_name="<your_workspace_name>")

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

@agent.tool_plain
@ExaConnector.tool_utils
async def exa_execute(entity: str, action: str, params: dict | None = None):
return await connector.execute(entity, action, params or {})

Or pass credentials explicitly (equivalent, useful when you're not loading them from the environment):

Pydantic AI
from airbyte_agent_sdk import build_connector_tools
from pydantic_ai import Agent
from airbyte_agent_sdk.connectors.exa import ExaConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig

connector = ExaConnector(
auth_config=AirbyteAuthConfig(
workspace_name="<your_workspace_name>",
organization_id="<your_organization_id>", # Optional for multi-org clients
airbyte_client_id="<your-client-id>",
airbyte_client_secret="<your-client-secret>"
)
)

tools = build_connector_tools(connector, framework="pydantic_ai")
agent = Agent("openai:gpt-4o", tools=tools.as_list())
Open source​

In open source mode, you provide API credentials directly to the connector.

The recommended pattern is build_connector_tools, which gives the agent three tools bound to this connector: inspect_connector, read_skill_docs, and execute. The agent can inspect the connector, read only the skill-doc section it needs, and then execute:

inspect_connector() -> read_skill_docs() -> read_skill_docs(section="...") -> execute(entity, action, params)
Pydantic AI
from airbyte_agent_sdk import build_connector_tools
from pydantic_ai import Agent
from airbyte_agent_sdk.connectors.exa import ExaConnector
from airbyte_agent_sdk.connectors.exa.models import ExaAuthConfig

connector = ExaConnector(
auth_config=ExaAuthConfig(
api_key="<Your Exa API key from dashboard.exa.ai/api-keys>"
)
)

tools = build_connector_tools(connector, framework="pydantic_ai")
agent = Agent("openai:gpt-4o", tools=tools.as_list())
Legacy alternatives​

These examples are kept for existing integrations. For new agents, use build_connector_tools above. The legacy ExaConnector.tool_utils pattern loads the connector's full generated catalog into one broad execute tool description instead of letting the agent read skill docs on demand.

Pydantic AI
from pydantic_ai import Agent
from airbyte_agent_sdk.connectors.exa import ExaConnector
from airbyte_agent_sdk.connectors.exa.models import ExaAuthConfig

connector = ExaConnector(
auth_config=ExaAuthConfig(
api_key="<Your Exa API key from dashboard.exa.ai/api-keys>"
)
)

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

@agent.tool_plain
@ExaConnector.tool_utils
async def exa_execute(entity: str, action: str, params: dict | None = None):
return await connector.execute(entity, action, params or {})

Authentication​

For all authentication options, see the connector's authentication documentation.

IP allow list​

If your organization restricts access to specific IPs, add the Airbyte Agents IP addresses to your allow list.

Version information​

Connector version: 1.0.0