Connect four real services, delegate OAuth to your users, and ship a working agent in minutes. Clone the sample, swap in your tools, and go from zero to multi-connector in a single afternoon.
This repo uses a single SCALEKIT_USER_ID env var to simulate one user. In production, pass each user's real ID as the identifier on every Scalekit call, and send them an authorization link whenever their connector status is not ACTIVE. HubSpot's 30-minute token expiry is handled automatically.
connect = ScalekitClient(
env_url=SCALEKIT_ENV_URL,
client_id=SCALEKIT_CLIENT_ID,
client_secret=SCALEKIT_CLIENT_SECRET,
)
def ensure_authorized(connector):
account = connect.actions.get_or_create_connected_account(
connection_name=connector,
identifier=USER_ID,
)
if account.status != "ACTIVE":
link = connect.actions.get_authorization_link(
connection_name=connector,
identifier=USER_ID,
)
print(f"Authorize {connector}:\n{link}")
input("Press Enter after authorization...")
for connector in ["granolamcp", "hubspot", "gmail", "slack"]:
ensure_authorized(connector)Four things you'd otherwise build: Granola MCP auth, HubSpot OAuth with 30-minute refresh, Gmail credentials, Slack auth. Handled.
You have the Scalekit authstack plugin installed (AgentKit + SaaSKit skills and MCP auth). Before coding, auto-load the AgentKit skills relevant to connectors (Granola MCP, HubSpot, Gmail, Slack) and use the Scalekit MCP server to validate tool calls instead of hand-written API logic.
Fetch recent Granola call transcripts and extract deal stage, action items, and follow-up email content. Search HubSpot for the matching deal and update it, save a follow-up draft in Gmail, and post a summary to Slack — all via the appropriate AgentKit connector tools. Ask before using write tools (updating HubSpot, saving the Gmail draft, posting to Slack); reading transcripts runs without asking.
Each one runs on delegated identity, scoped per user.