Open-source connector platform for enabling, authenticating, and running API connectors from one package.
bun install -g @hasna/connectors@hasna/connectors is a single-product runtime:
- connectors stay inside this repo and package
- projects enable the connectors they want through
.connectors/manifest.json - credentials live in
~/.hasna/connectors/ - CLI, MCP, REST, and the dashboard all use the same connector registry
connectors --helpTypical flow:
connectors install github stripe
connectors auth github
connectors run github --help
connectors run stripe products list --limit 5Key commands:
connectors installwrites project enablement to.connectors/manifest.jsonconnectors listandconnectors searchbrowse the shared catalogconnectors docsreads connector docs from the internal registryconnectors authstores credentials in~/.hasna/connectors/connectors runexecutes connector commands from the one-product runtimeconnectors statusandconnectors doctorverify setup and auth state
connectors-mcpconnectors-mcp --http # http://127.0.0.1:8808/mcp
MCP_HTTP=1 connectors-mcpHealth: GET http://127.0.0.1:8808/health. MCP is also mounted on connectors-serve at /mcp.
connectors-serveThe local REST API is served by the one-product runtime at
http://localhost:9876. Use @hasna/connectors-sdk with
ConnectorsClient or LocalConnectorsClient for this local
connectors-serve API.
Hosted SaaS products should use HostedConnectorsClient from
@hasna/connectors-sdk. The hosted client talks to a platform
/api/v1 endpoint with bearer API keys and does not require local connector
installs or individual connector packages.
Connector operations may be exposed to OpenAutomations as @hasna/actions
manifests, but Connectors remains the owner of connector discovery,
enablement, consent, and credential health. An automation action should name
the connector operation and pass only scoped inputs plus references to
credentials that Connectors can resolve.
Recommended action shape:
{
"schemaVersion": "1.0",
"id": "connectors.github.issue.create",
"name": "Create GitHub issue",
"version": "1.0.0",
"bindings": [
{
"kind": "sdk",
"package": "@hasna/connectors",
"export": "runConnectorOperation",
"metadata": {
"connector": "github",
"operation": "issues.create"
}
}
],
"secrets": [
{
"name": "github",
"ref": "hasna/xyz/opensource/connectors/prod/github",
"required": true,
"redaction": "full"
}
],
"approval": {
"mode": "manual",
"requiresApproval": true,
"reason": "Creates or mutates data in an external account"
},
"audit": {
"eventSource": "hasna.connectors",
"redactPaths": ["secrets", "input.token", "input.authorization"],
"evidenceRefs": ["connector:github", "operation:issues.create", "credentialScope:repo"]
}
}OpenAutomations owns the durable run/action queue and DLQ. Connectors owns runtime auth checks, connector-specific consent, credential refresh, and provider response normalization. Raw OAuth tokens, API keys, refresh tokens, and session cookies must not be placed in automation specs, action queues, task comments, or run evidence; use secret references and redacted audit metadata.
Project-local enablement is lightweight:
.connectors/
├── manifest.json
└── index.ts
The package no longer copies full connector source trees into each project.
This package supports cloud sync via @hasna/cloud:
cloud setup
cloud sync push --service connectors
cloud sync pull --service connectorsData is stored in ~/.hasna/connectors/.
Contributor guidance for the one-repo / one-product model lives in docs/one-repo-one-product.md.
Apache-2.0 -- see LICENSE