Quickstart

July 25, 2026 ยท View on GitHub

Install dependencies and start the local development servers:

npm install
npm run dev

npm install and npm run dev create local generated files when they are missing or stale.

Open the API reference at http://localhost:3000/docs.

Run A No-Auth Action

Hacker News does not need credentials, so it is the fastest way to verify the runtime:

curl -s -X POST http://localhost:3000/v1/actions/hackernews.get_top_stories \
  -H 'content-type: application/json' \
  -d '{"input":{}}'

Discover Actions

List services that expose actions:

curl -s http://localhost:3000/v1/actions

List action contracts for one service:

curl -s "http://localhost:3000/v1/actions?service=hackernews"

Get a local markdown guide for one action:

curl -s http://localhost:3000/api/actions/hackernews.get_top_stories/agent.md

Inspect local connections and the account identity exposed to users and agents:

curl -s http://localhost:3000/api/connections

Configure An API Key Connection

Inspect the provider to see supported auth types and credential fields:

curl -s http://localhost:3000/api/providers/github

Store the default API key connection:

curl -s -X PUT http://localhost:3000/api/connections/github \
  -H 'content-type: application/json' \
  -d '{"authType":"api_key","values":{"apiKey":"github_pat_..."}}'

Store a named API key connection:

curl -s -X PUT http://localhost:3000/api/connections/github \
  -H 'content-type: application/json' \
  -d '{"authType":"api_key","connectionName":"work","values":{"apiKey":"github_pat_..."}}'

Execute an action with that default connection:

curl -s -X POST http://localhost:3000/v1/actions/github.get_current_user \
  -H 'content-type: application/json' \
  -d '{"input":{}}'

Configure An OAuth2 Connection

List OAuth configs and copy the expectedRedirectUri for your provider:

curl -s http://localhost:3000/api/oauth/configs

Paste that exact callback URL into your provider OAuth app. With the default port, GitHub uses:

http://localhost:3000/oauth/callback

If you expose the runtime through another origin, set OOMOL_CONNECT_ORIGIN before starting it.

Store the provider OAuth client:

curl -s -X PUT http://localhost:3000/api/oauth/configs/github \
  -H 'content-type: application/json' \
  -d '{"clientId":"...","clientSecret":"..."}'

Start authorization and open the returned authorizationUrl:

curl -s -X POST http://localhost:3000/api/oauth/authorizations \
  -H 'content-type: application/json' \
  -d '{"service":"github"}'

After the browser callback completes, the OAuth credential is stored as the default connection. Add "connectionName":"work" to the authorization request to store the result as a named connection.

Web Console

For local development, open the Web Console at http://localhost:5173. The Vite dev server proxies API requests to the runtime on http://localhost:3000.

For a built console served by the Node runtime, build the web workspace and start only the API server:

npm run build:web
npm run start

Cloudflare Workers Preview

Create the Cloudflare resources, apply the D1 schema, and start a local Worker preview:

cp wrangler.example.jsonc wrangler.local.jsonc
npx wrangler d1 create open-connector
npx wrangler r2 bucket create open-connector-transit-files
npx wrangler d1 migrations apply open-connector --local --config wrangler.local.jsonc
npm run dev:cloudflare

For remote deploys, put the returned D1 database_id in ignored wrangler.local.jsonc, run the migration with --remote --config wrangler.local.jsonc, set secrets with wrangler secret put --config wrangler.local.jsonc, then run:

npm run deploy:cloudflare

The Worker runtime exposes catalog metadata, connection/token/OAuth state APIs, R2-backed transit files, and the same generated provider action executor registry used by the Node runtime.

Runtime Settings

Local runtime state is stored in ./data/connect.sqlite by default. Override the directory with:

OOMOL_CONNECT_DATA_DIR=/path/to/data npm run dev

With Docker Compose, the bundled connector-data volume is mounted at /app/data.

Set OOMOL_CONNECT_ENCRYPTION_KEY to encrypt stored credentials, OAuth client configuration, and completed idempotent Action responses:

OOMOL_CONNECT_ENCRYPTION_KEY="replace-with-a-long-random-secret" npm run dev

Set an admin bearer token when the admin API or web console is reachable outside your own shell:

OOMOL_CONNECT_ADMIN_TOKEN="replace-with-an-admin-token" npm run dev
curl -s http://localhost:3000/api/actions \
  -H "authorization: Bearer replace-with-an-admin-token"

Use the admin token for /api, /docs, and the web console. Create persistent runtime tokens for /v1 and /mcp from the web console Access tab or POST /api/runtime-tokens; only token hashes are stored in SQLite. Persistent tokens have no provider proxy access unless their independent allowedProxies grant includes the provider service or *. OOMOL_CONNECT_RUNTIME_TOKEN remains available for bootstrap scripts.

The server binds to 127.0.0.1 by default. Set HOST=0.0.0.0 only when the runtime must be reachable from outside the local machine or container.

Constrain executable actions with comma-separated action ids or provider wildcards:

OOMOL_CONNECT_ALLOWED_ACTIONS="hackernews.*,github.get_current_user" npm run dev

Provider proxies are controlled separately and are not affected by Action policy. Deployment and runtime rules use OOMOL_CONNECT_ALLOWED_PROXIES and OOMOL_CONNECT_BLOCKED_PROXIES; persistent runtime tokens must additionally grant each provider through allowedProxies.