OpenStation connects the places where work arrives to the tools an agent can use. A connector receives and delivers messages; a tool lets the agent act. Configure these separately so adding a chat channel does not implicitly grant access to a service.
Choose an integration
| Integration | Purpose | Configuration | Guide |
|---|---|---|---|
| Slack | Mentions, threads, and direct messages | connections: plus Slack credentials |
Slack |
| Telegram | Bot conversations and groups | connections: plus a bot token |
Telegram |
| Receive mail with IMAP and send with SMTP | connections: plus mailbox credentials |
||
| Local REPL | Develop an agent in the terminal | openstation <workspace> dev |
Getting started |
| CLI tools | Run a workspace or company executable | A narrow settings grant and an executable on PATH |
Giving agents tools |
| MCP servers | Expose external tools to Claude Code | Workspace .mcp.json and settings grants |
MCP servers |
| Skills | Teach a repeatable procedure | .claude/skills/<name>/SKILL.md |
Skills |
Connect a conversation
Start with a working local agent, then choose a connector guide above. The usual sequence is:
- Create the app, bot, or mailbox and configure its credentials in the workspace environment.
- Declare the connection in
.openstation/openstation.yaml. - Map known channel handles to people in
.openstation/people.yaml. - Set the agent's conversation policy: addressing, admitted roles, profile, settings, and budget.
- Run
serve, send a real message, and inspect the reply and events.
The end-to-end guide brings those steps together with two connectors. Use environment variables for credential names and secrets for sharing an encrypted environment.
Give the agent a tool
A command-line integration can be a small script in any language. For example, the notes agent runs a Python script with this Claude settings grant:
{
"permissions": {
"allow": ["Bash(python3 tools/stats.py:*)"]
}
}
This is a grant fragment to compose with the agent's existing settings, including its denies.
When the workspace uses generated gates, put the rule in an agent role or the agent's inline
allow: list and regenerate with gates write. Do not hand-edit a generated gate.
For MCP, declare the server in .mcp.json and allow only the tools needed, such as
mcp__crm__search. A whole-server grant like mcp__crm__* is broader. There is no MCP server
field in openstation.yaml; see tools and skills for the full setup.
Apply identity and permissions
Transport credentials let the connector reach a service. They do not determine which callers are admitted or what an agent can do. Use roles and people for caller admission and permissions for the enforced tool gate.
Profiles shape behavior independently. A more helpful profile does not grant new tools, and admitting an administrator to a channel does not automatically choose an administrator's gate.
Current limits
- One serving process selects one agent at startup. Run separate processes with explicit agent selection when different agents need to serve different work.
- Conversation selectors use connector types such as
slackandtelegram. Connection names do not provide independent routing namespaces today. - Outbound automation delivery also uses the connector type prefix; multiple connections of the same type are not independently addressable by that prefix.
- Telegram and Email still need the live acceptance coverage listed in project status.
- The experimental
pi-sdkexecutor does not translate MCP tools or Claude hooks. These tool integration instructions target the Claude executors.