Connections & Integrations Guide

Connections provide low-level adapters to external APIs and services. They handle authentication, token refreshment, rate limits, and network requests.


Connection Architecture

All service integrations inherit from BaseConnection and register themselves with the global ConnectionRegistry.

               +----------------------------------+
               |          BaseConnection          |
               |  - connect(credentials, token)  |
               |  - disconnect()                  |
               |  - is_connected                  |
               |  - service                       |
               +----------------------------------+
                                ^
                                |  inherits
             +------------------+------------------+
             |                                     |
+--------------------------+             +--------------------------+
|     GmailConnection      |             |    CalendarConnection    |
+--------------------------+             +--------------------------+

Using the Connection Registry

The ConnectionRegistry is a singleton repository for discovering and instantiating connections at runtime.

from clara.connections.registry import registry
from clara.connections.google.gmail import GmailConnection

# 1. Register a connection class (automatically done in connection modules)
registry.register("gmail", GmailConnection)

# 2. Retrieve the active singleton instance
gmail = registry.get_instance("gmail")

# 3. Connect with user OAuth token
gmail.connect(access_token="ya29.a0...")

# 4. Perform service actions
messages = gmail.search_emails(folder="inbox", limit=5)

Implementing a Custom Connection

To add an integration for a new service (e.g. GitHub, Slack, Notion):

1. Subclass BaseConnection

Create a new file clara/connections/slack/client.py:

"""Slack Connection Adapter for Clara Core."""

from typing import Optional, Dict, Any
from clara.connections.base import BaseConnection
from clara.connections.registry import registry

class SlackConnection(BaseConnection):
    """Slack API client adapter."""

    def __init__(self, config: Optional[Dict[str, Any]] = None) -> None:
        super().__init__(name="slack", config=config)

    def connect(self, credentials: Optional[str] = None, access_token: Optional[str] = None, **kwargs) -> Any:
        token = access_token or self.config.get("token")
        # Initialize your client SDK or HTTP session here
        self._service = f"SlackClient(token={token})"
        self._is_connected = True
        return self._service

    def disconnect(self) -> None:
        self._service = None
        self._is_connected = False

    def post_message(self, channel: str, text: str) -> Dict[str, Any]:
        """Post a chat message to a Slack channel."""
        # Execute API call using self._service
        return {"status": "ok", "channel": channel, "text": text}

# Register connection in the global registry
registry.register("slack", SlackConnection)

2. Export and Use

Import your connection in clara/connections/__init__.py so it is automatically registered when the module is imported.