Skip to main content
Keystroke ships a catalog of built-in apps you can connect and use from agents and workflows. A built-in app usually gives you one or both of these:
  • Actions you can call as workflow steps or agent tools.
  • Credentials you can connect through the web app or CLI.
Browse the public integration catalog to find apps and available actions.

Two built-in paths

Built-in apps currently fall into two broad paths.
PathExamplesCredential kindBest for
Managed app connectionGoogle Workspace, GitHub, Gong, Snowflake, SlackbotkeystrokeOAuth-style catalog apps whose tools run through Keystroke’s hosted platform MCP layer
Static API key appExaapi_keyApps where you paste an API key into the credential vault
Some app names overlap with gateway apps. For example, slackbot is a managed catalog app for Slack API tools, while the Slack gateway is the native channel integration that lets people talk to an agent in Slack.

Managed app connections

Managed app connections are the default path for many catalog integrations. In code, generated actions declare a credential for the app. At runtime, Keystroke resolves that credential and routes the tool call through the hosted platform MCP layer. From your workflow or agent, they still look like normal actions: import the generated action from the app package and call .run() or attach it as a tool.
Managed catalog apps that use Keystroke’s platform MCP layer are a hosted-cloud feature. Local standalone and OSS runtimes do not provide that platform MCP service by default.
Connect these apps from the Apps page in the web app. When a connection completes, Keystroke creates credential instances for the selected organization, user, or projects.

Static API key apps

Some built-in apps use a normal API key. Exa is the common example. Store the key in the credential vault, then use the package’s actions or MCP tools.
keystroke credentials set exa --set apiKey=@env:EXA_API_KEY --scope org
Then attach the action or tool in code:
import { defineAgent } from "@keystrokehq/keystroke/agent";
import { exaSearch } from "@keystrokehq/exa/actions";

export default defineAgent({
  slug: "researcher",
  systemPrompt: "Use Exa when you need current web research.",
  model: "anthropic/claude-sonnet-4.6",
  tools: [exaSearch],
});
The action receives the API key at runtime; the agent only sees the tool interface and result.

Gateway apps

Gateway apps connect a messaging surface to an agent. Slack is the shipped gateway app today. The connection stores an OAuth credential, and a channel binding decides which agent receives messages from which Slack channel. Use the agent’s channel panel in the web app, or the CLI:
keystroke channels platforms list
keystroke channels accounts --platform slack --project production
keystroke channels bind --agent support --platform slack --account <account-id> --channel <channel-id>
See external channels for the full Slack workflow.

Use built-in actions

Built-in actions are normal actions. You can use them as workflow steps or agent tools, and their credentials resolve the same way as yours.
// Workflow step
await slackSendMessage.run({ channel, markdown_text });

// Agent tool
tools: [slackSendMessage.scope("user")],
Pin a scope when the action should use a user credential or when you need to avoid the default project → organization resolution chain. See using credentials in code.

Next steps

Connect and manage apps

Connect catalog apps and manage their credential instances.

Using credentials in code

Learn how built-in actions resolve credentials at runtime.

Integrations catalog

Browse available apps and actions.

Custom apps and MCP

Add your own credentials and MCP servers.