Use the kortix connectors CLI for normal agent work:
kortix connectors lslists connectors and actions.kortix connectors discover "<intent>"searches visible actions.kortix connectors show <connector>.<action>shows one input schema and risk.kortix connectors call <connector> <action> '<json>'invokes one action.kortix connectors add,rm, andconnectmanage connectors and connections.kortix connectors mcpruns the optionalkortix-connectorsstdio MCP server.
Durable TypeScript workflows use @kortix/sdk and createKortix. Every
call runs through the connector gateway. The
gateway resolves credentials, enforces access and policy, invokes the upstream
system, and records an audit event. The sandbox carries KORTIX_CLI_TOKEN; it
does not carry raw third-party credentials.
- Act in an external app or API.
- Inspect available connectors, actions, or connected computers.
- Add or configure a connector or connection.
- Request connector credentials without exposing the value.
- Build a repeatable workflow that calls external systems.
Do not load it for work that stays inside the local repository or sandbox.
- List visible connectors:
kortix connectors ls
- Search by intent:
kortix connectors discover "send an email"
- Inspect one action before an unfamiliar call:
kortix connectors show email_email_inbox_bjgk.reply_message
- Call the action:
kortix connectors call email_email_inbox_bjgk reply_message \
'{"inbox_id":"email-inbox@agentmail.to","message_id":"<message-id>","text":"Reply text"}'
For GraphQL actions, put selected fields in args.__select:
kortix connectors call internal_graph query.user \
'{"id":"1","__select":"id name email"}'
import { createKortix } from '@kortix/sdk';
const kortix = createKortix({
backendUrl: process.env.KORTIX_API_URL!,
getToken: async () => process.env.KORTIX_CLI_TOKEN ?? null,
});
const connectors = process.env.KORTIX_PROJECT_ID
? kortix.project(process.env.KORTIX_PROJECT_ID).connectors
: kortix.connectors;
const matches = await connectors.search('send an email', { limit: 5 });
const action = await connectors.describe(matches[0]!.tool);
if (!action) throw new Error('Email action not found');
const result = await connectors.call('email_email_inbox_bjgk.reply_message', {
inbox_id: 'email-inbox@agentmail.to',
message_id: '<message-id>',
text: 'Reply text',
});
if (!result.ok) {
throw new Error(`Connector call failed: ${result.reason ?? result.status ?? 'unknown'}`);
}
Run repository scripts with bun run path/to/script.ts. Keep provider
credentials out of code and repository files.
connectors:
- slug: stripe
name: Stripe API
provider: openapi
spec: https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json
auth:
type: bearer
Use composio for managed SaaS apps. Other supported direct providers are
mcp, openapi, postman, graphql, and http. Add and connect a Composio
toolkit with:
kortix connectors add github --provider composio --app github --apply
kortix connectors connect github
Pipedream exists only for rollback compatibility with already-declared
connectors. Never add a new Pipedream connector automatically. If Composio
cannot satisfy the request, stop, explain the gap, and ask the human before any
explicit --allow-legacy-pipedream retry.
Surface the returned connection URL. Never ask the user to paste a credential
into chat. For an API key, use kortix secrets request NAME --scope connector.
Slack uses the channel flow. Do not add a Slack connector. Run:
kortix channels connect