Appearance
Slack Connector
The Slack connector provides access to your Slack workspace with 14 live tools for managing channels, users, messages, files, and reactions, plus ETL ingestion that maps your workspace topology into the knowledge graph.
Authentication
The Slack connector uses a Bot Token (and optionally a User Token for extended permissions). Create a Slack App at api.slack.com/apps with the required bot scopes.
json
{
"name": "Company Slack",
"source_type": "slack",
"config": {
"bot_token": "xoxb-1234567890-abcdefghijklmnop",
"modules": ["channels", "users", "messages", "reactions", "files"]
}
}| Variable | Required | Description |
|---|---|---|
bot_token | Yes | Slack Bot User OAuth Token (xoxb-...) |
user_token | No | Slack User OAuth Token (xoxp-...) for extended permissions |
modules | No | Modules to enable: channels, users, messages, reactions, files, threads |
channels_filter | No | Comma-separated channel names or IDs to limit scope |
message_days | No | Number of days of message history to ingest (default: 30) |
include_private | No | Include private channels the bot is a member of (default: false) |
include_threads | No | Include threaded replies in message ingestion (default: false) |
TIP
Required bot scopes: channels:read, channels:history, users:read, chat:write, files:read, reactions:read. Add groups:read and groups:history if include_private is enabled.
Live Tools (14)
| Tool | Description | Arguments |
|---|---|---|
slack_send_message | Send a message to a channel | channel, text, thread_ts? |
slack_send_file | Send a file to a channel with a message | channel, content, filename, title? |
slack_list_channels | List channels in the workspace | types?, limit? |
slack_list_users | List users in the workspace | limit?, include_bots? |
slack_get_channel_info | Get detailed info about a channel | channel |
slack_list_messages | List recent messages in a channel | channel, limit?, oldest?, latest? |
slack_search_messages | Search messages across the workspace | query, sort?, count? |
slack_create_channel | Create a new channel | name, is_private?, description? |
slack_archive_channel | Archive a channel | channel |
slack_add_reaction | Add an emoji reaction to a message | channel, timestamp, name |
slack_upload_file | Upload a file to a channel | channel, file_path, title?, comment? |
slack_list_files | List files shared in the workspace | channel?, types?, count? |
slack_get_user_info | Get detailed info about a user | user |
slack_update_profile | Update the bot's profile status | status_text?, status_emoji? |
Example: Agent Using Slack Tools
User: "What were the key topics discussed in #engineering this week?"
Agent: Let me check the recent messages.
→ Calls slack_list_messages(channel: "C0123ENGIN", limit: 100, oldest: "1742169600")
→ Summarizes: "Key topics in #engineering this week:
1. Database migration to Postgres 17 (12 messages, led by @sarah)
2. CI pipeline flakiness (8 messages, issue tracked in JIRA-456)
3. New API versioning strategy RFC (6 messages, RFC doc shared)"User: "Send a summary to #engineering-leads"
Agent: I'll post the summary.
→ Calls slack_send_message(channel: "C0456LEADS", text: "Weekly #engineering recap: ...")
→ Returns: "Message sent to #engineering-leads."ETL Ingestion
When you trigger a sync, the Slack connector ingests workspace data into the knowledge graph, mapping channels, users, messages, and their relationships.
Nodes Created
| Node Label | Properties | Slack Resource |
|---|---|---|
SlackChannel | channel_id, name, is_private, is_archived, topic, purpose, member_count, created | Channels |
SlackUser | user_id, name, real_name, display_name, email, is_admin, is_bot, status, tz | Users |
SlackMessage | ts, text, channel_id, user_id, thread_ts, reply_count, reaction_count, subtype | Messages |
SlackFile | file_id, name, filetype, size, url, created, channels | Files |
SlackReaction | name, count, message_ts | Reactions |
Relationships Created
| Relationship | From | To |
|---|---|---|
POSTED_IN | SlackMessage | SlackChannel |
SENT_BY | SlackMessage | SlackUser |
REACTED_TO | SlackReaction | SlackMessage |
REPLIED_TO | SlackMessage | SlackMessage |
UPLOADED_TO | SlackFile | SlackChannel |
MEMBER_OF | SlackUser | SlackChannel |
Graph Queries
cypher
-- Find the most active channels by message count
MATCH (m:SlackMessage)-[:POSTED_IN]->(c:SlackChannel)
RETURN c.name, count(m) AS message_count
ORDER BY message_count DESC
LIMIT 10
-- Find top contributors across all channels
MATCH (m:SlackMessage)-[:SENT_BY]->(u:SlackUser)
WHERE u.is_bot = false
RETURN u.real_name, count(m) AS messages
ORDER BY messages DESC
LIMIT 10
-- Map cross-channel activity (users who post in multiple channels)
MATCH (u:SlackUser)<-[:SENT_BY]-(m:SlackMessage)-[:POSTED_IN]->(c:SlackChannel)
WITH u, collect(DISTINCT c.name) AS channels
WHERE size(channels) > 3
RETURN u.real_name, channelsConfiguration Reference
json
{
"name": "Company Slack",
"source_type": "slack",
"config": {
"bot_token": "xoxb-...",
"user_token": "xoxp-...",
"modules": ["channels", "users", "messages", "reactions", "files", "threads"],
"channels_filter": "engineering,product,support",
"message_days": 30,
"include_private": false,
"include_threads": false
}
}| Field | Type | Default | Description |
|---|---|---|---|
bot_token | string | required | Bot User OAuth Token (xoxb-...) |
user_token | string | -- | User OAuth Token for extended permissions |
modules | string[] | all | Modules to enable for ingestion |
channels_filter | string | -- | Comma-separated channel names or IDs to limit scope |
message_days | number | 30 | Days of message history to ingest |
include_private | bool | false | Include private channels |
include_threads | bool | false | Include threaded replies |
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
invalid_auth | Bot token is invalid or revoked | Reinstall the Slack app to get a new token |
not_in_channel | Bot is not a member of the target channel | Invite the bot to the channel with /invite @agentcy |
channel_not_found | Channel ID is incorrect or channel was deleted | Verify the channel ID with slack_list_channels |
missing_scope | Bot lacks a required OAuth scope | Add the missing scope in the Slack App settings and reinstall |
ratelimited | Slack API rate limit exceeded | Reduce message_days or add channels_filter to limit scope |
account_inactive | User token belongs to a deactivated user | Use a bot token instead or reactivate the user |