Skip to main content
A community connector is a package-level integration descriptor: it projects agent-callable tools and triggers onto Smithers’ Tier 0 substrate, instead of adding a workflow node per app. The manifest is declarative, stating what tool and trigger surfaces exist, which auth grants they require, and which runtime adapter loads them. Runtime code may live in the package, but Smithers discovers it only through the loader contract below.

Package Layout

smithers.connector.json is the contract. package.json exposes the loader module as an ESM export, with a smithers.connector field pointing at the manifest:

Manifest Format

The manifest format id is smithers.connector.v1. Unknown top-level keys are ignored; unknown keys inside tools, triggers, auth, and surfaces must fail validation, so authors catch typos before an agent receives the tool catalog.

Loader Contract

A Smithers connector loader must:
  1. validate the manifest before loading package code.
  2. resolve auth via the OAuth plane and token broker, never by handing durable credentials to an LLM-visible tool call.
  3. project tools from surfaces.openapi, surfaces.mcp, or the package loader into AI SDK-compatible tools.
  4. register triggers from surfaces.webhooks with signature verification and dedupe before workflow dispatch.
  5. enforce scopes for every tool and trigger invocation against the connected user and tenant.
  6. Preserve idempotency metadata so retries and resumes avoid duplicate write-side effects.
Loader modules export one named loadConnector function:
The loader may add custom tools that OpenAPI or MCP can’t represent, but they still need manifest entries: the manifest is the auditable catalog Smithers shows to agents and humans.

Tool Declarations

Each tool declaration describes one agent-callable capability, distinct from a raw endpoint. Keep the surface small and curated, with clear names and task-shaped descriptions. Required fields: OpenAPI tools bind via operationId, MCP tools via the upstream MCP tool name, custom tools to code returned by loadConnector. Side-effecting tools must declare idempotency.required: true unless the upstream provider already supplies an idempotency key, request id, or natural unique key.

Trigger Declarations

Triggers describe external events that start or resume workflows: not workflow nodes, and shouldn’t grow into a provider-specific palette. Required fields: Webhook triggers declare the provider signature scheme and payload mapper through surfaces.webhooks; poll triggers declare interval bounds and cursor storage requirements in the manifest before registration.

Auth Requirements

Connector auth declarations are requirements, not secrets: the OAuth plane owns authorization-code + PKCE flows, encrypted refresh-token storage, single-flight refresh, and per-user/per-tenant scoping. Supported auth profiles: Never put tokens, client secrets, refresh tokens, service-account credentials, or shared bot tokens in a connector package. Runtime calls receive scoped action tokens from the tokenBroker; the broker exchanges or unwraps provider credentials outside the agent transcript.

Tier 0 Integration Points

Community connectors plug into these universal surfaces:

Anti-Patterns

  • Don’t add a node per app: connectors contribute agent tools and triggers, not a giant fixed-schema workflow palette.
  • Don’t publish every OpenAPI operation as a tool: collapse noisy endpoint sets into task-shaped actions.
  • Don’t bypass delegated OAuth with service-account or shared-bot tokens.
  • Don’t refresh tokens independently per tool call; route refresh through the single-flight OAuth/token broker path.
  • Don’t omit idempotency from write tools or webhook triggers.
  • Don’t hide tool behavior in package code when the manifest can declare it.

Review Checklist

Before accepting a community connector, verify:
  • The manifest validates as smithers.connector.v1.
  • Every tool has a clear description, auth profile, scope list, and side-effect marker.
  • Every write tool has idempotency metadata.
  • Every trigger has signature verification or polling cursor rules plus dedupe.
  • OAuth scopes are the minimum needed for the declared tools and triggers.
  • The package uses OpenAPI, MCP, webhook ingress, or the token broker instead of inventing a parallel integration plane.