- Embed screenshot videos/rag-sky-random.png - Add step-by-step commands and notes - Include helper test script tests/test_channel_by_id_or_name.py - Redact example tokens from docs
13 KiB
Slack Integration Setup Guide
This guide provides step-by-step instructions for setting up Slack integration with LEANN.
Overview
LEANN's Slack integration uses MCP (Model Context Protocol) servers to fetch and index your Slack messages for RAG (Retrieval-Augmented Generation). This allows you to search through your Slack conversations using natural language queries.
Prerequisites
-
Slack Workspace Access: You need admin or owner permissions in your Slack workspace to create apps and configure OAuth tokens.
-
Slack MCP Server: Install a Slack MCP server (e.g.,
slack-mcp-servervia npm) -
LEANN: Ensure you have LEANN installed and working
Step 1: Create a Slack App
1.1 Go to Slack API Dashboard
- Visit https://api.slack.com/apps
- Click "Create New App"
- Choose "From scratch"
- Enter your app name (e.g., "LEANN Slack Integration")
- Select your workspace
- Click "Create App"
1.2 Configure App Permissions
Bot Token Scopes
- In your app dashboard, go to "OAuth & Permissions" in the left sidebar
- Scroll down to "Scopes" section
- Under "Bot Token Scopes", click "Add an OAuth Scope"
- Add the following scopes:
channels:read- Read public channel informationchannels:history- Read messages in public channelsgroups:read- Read private channel informationgroups:history- Read messages in private channelsim:read- Read direct message informationim:history- Read direct messagesmpim:read- Read group direct message informationmpim:history- Read group direct messagesusers:read- Read user informationteam:read- Read workspace information
App-Level Tokens (Optional)
Some MCP servers may require app-level tokens:
- Go to "Basic Information" in the left sidebar
- Scroll down to "App-Level Tokens"
- Click "Generate Token and Scopes"
- Enter a name (e.g., "LEANN Integration")
- Add the
connections:writescope - Click "Generate"
- Copy the token (starts with
xapp-)
1.3 Install App to Workspace
- Go to "OAuth & Permissions" in the left sidebar
- Click "Install to Workspace"
- Review the permissions and click "Allow"
- Copy the "Bot User OAuth Token" (starts with
xoxb-)
Step 2: Install Slack MCP Server
Option A: Using npm (Recommended)
# Install globally
npm install -g slack-mcp-server
# Or install locally
npm install slack-mcp-server
Option B: Using npx (No installation required)
# Use directly without installation
npx slack-mcp-server
Step 3: Configure Environment Variables
Create a .env file or set environment variables:
# Required: Bot User OAuth Token
SLACK_BOT_TOKEN=xoxb-your-bot-token-here
# Optional: App-Level Token (if your MCP server requires it)
SLACK_APP_TOKEN=xapp-your-app-token-here
# Optional: Workspace-specific settings
SLACK_WORKSPACE_ID=T1234567890 # Your workspace ID (optional)
Step 4: Test the Setup
4.1 Test MCP Server Connection
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--test-connection \
--workspace-name "Your Workspace Name"
This will test the connection and list available tools without indexing any data.
4.2 Index a Specific Channel
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--workspace-name "Your Workspace Name" \
--channels general \
--query "What did we discuss about the project?"
4.3 Real RAG Query Example
To ask intelligent questions about your Slack conversations:
# Ask about a specific topic discussed in your channels
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--workspace-name "Sky Lab Computing" \
--channels random general \
--query "What is LEANN about?"
This will:
- Retrieve relevant messages from the specified channels
- Index the content for semantic search
- Generate an intelligent answer based on the retrieved context
- Provide citations showing which messages were used
Success Example: Working Integration
Here's what a successful Slack integration looks like in practice:
Terminal Output
When you run the connection test, you should see output similar to this:
Testing Slack MCP Connection...
Environment: SLACK_MCP_XOXP_TOKEN = xoxb-16753592806-967...
Connected to Slack MCP server!
Authenticated with Slack.
Listing available MCP tools...
Found 5 available tools:
1. channels_list - Get list of channels
2. conversations_add_message - Add messages to channels
3. conversations_history - Get messages from channels
4. conversations_replies - Get thread messages
5. conversations_search_messages - Search messages with filters
Testing message fetch from 'random' channel...
Successfully fetched messages from channel random.
Visual Example
The following screenshot shows a successful integration with VS Code displaying the retrieved Slack channel data:
Key Success Indicators
- Authentication Success: Connected to your Slack workspace
- Tool Availability: 5 MCP tools ready for interaction
- Data Access: Retrieved channel directory with member counts and purposes
- Comprehensive Coverage: Access to multiple channels including specialized research groups
This demonstrates that your Slack integration is fully functional and ready for RAG queries across your entire workspace.
Important: Invite Your Bot to Channels
Before running RAG queries, you need to invite your Slack bot to the channels you want to access. This is a security feature in Slack.
To invite your bot to a channel:
- Go to the channel in Slack (e.g.,
#generalor#random) - Type:
/invite @YourBotName(replace with your actual bot name) - Or click the channel name → "Settings" → "Integrations" → "Add apps"
Common Issues and Solutions
Issue 1: "users cache is not ready yet" Error
Problem: You see this warning:
WARNING - Failed to fetch messages from channel random: Failed to fetch messages: {'code': -32603, 'message': 'users cache is not ready yet, sync process is still running... please wait'}
Solution: This is a common timing issue. The LEANN integration now includes automatic retry logic:
- Wait and Retry: The system will automatically retry with exponential backoff (2s, 4s, 8s, etc.)
- Increase Retry Parameters: If needed, you can customize retry behavior:
python -m apps.slack_rag \ --mcp-server "slack-mcp-server" \ --max-retries 10 \ --retry-delay 3.0 \ --channels general \ --query "Your query here" - Keep MCP Server Running: Start the MCP server separately and keep it running:
# Terminal 1: Start MCP server slack-mcp-server # Terminal 2: Run LEANN (it will connect to the running server) python -m apps.slack_rag --mcp-server "slack-mcp-server" --channels general --query "test"
Issue 2: "No message fetching tool found"
Problem: The MCP server doesn't have the expected tools.
Solution:
- Check if your MCP server is properly installed and configured
- Verify your Slack tokens are correct
- Try a different MCP server implementation
- Check the MCP server documentation for required configuration
Issue 3: Permission Denied Errors
Problem: You get permission errors when trying to access channels.
Solutions:
- Check Bot Permissions: Ensure your bot has been added to the channels you want to access
- Verify Token Scopes: Make sure you have all required scopes configured
- Channel Access: For private channels, the bot needs to be explicitly invited
- Workspace Permissions: Ensure your Slack app has the necessary workspace permissions
Issue 4: Empty Results
Problem: No messages are returned even though the channel has messages.
Solutions:
- Check Channel Names: Ensure channel names are correct (without the # symbol)
- Verify Bot Access: Make sure the bot can access the channels
- Check Date Ranges: Some MCP servers have limitations on message history
- Increase Message Limits: Try increasing the message limit:
python -m apps.slack_rag \ --mcp-server "slack-mcp-server" \ --channels general \ --max-messages-per-channel 1000 \ --query "test"
Advanced Configuration
Custom MCP Server Commands
If you need to pass additional parameters to your MCP server:
python -m apps.slack_rag \
--mcp-server "slack-mcp-server --token-file /path/to/tokens.json" \
--workspace-name "Your Workspace" \
--channels general \
--query "Your query"
Multiple Workspaces
To work with multiple Slack workspaces, you can:
- Create separate apps for each workspace
- Use different environment variables
- Run separate instances with different configurations
Performance Optimization
For better performance with large workspaces:
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--workspace-name "Your Workspace" \
--max-messages-per-channel 500 \
--no-concatenate-conversations \
--query "Your query"
Screenshot: Real RAG Query Results
Here's what you'll see when running a RAG query on your Slack workspace:
What this screenshot shows:
- ✅ Successful MCP connection to Slack workspace
- ✅ Channel directory retrieval (107 channels discovered)
- ✅ Proper error handling for channel access permissions
- ⚠️ "not_in_channel" errors indicating bot needs invitation to specific channels
This is the expected behavior - the integration is working perfectly, it just needs proper channel permissions to access conversation messages.
Real RAG Query Example (Sky Lab Computing “random”)
This example shows a real query against the Sky Lab Computing workspace’s “random” channel using the Slack MCP server, with an embedded screenshot of the terminal output.
Screenshot
Prerequisites
- Bot is installed in the Sky Lab Computing workspace and invited to the target channel (run
/invite @YourBotNamein the channel if needed) - Bot token available and exported in the same terminal session
Commands
- Set the workspace token for this shell
export SLACK_MCP_XOXP_TOKEN="xoxb-***-redacted-***"
- Run a real query against the “random” channel by channel ID (C0GN5BX0F)
python test_channel_by_id_or_name.py \
--channel-id C0GN5BX0F \
--workspace-name "Sky Lab Computing" \
--query "PUBPOL 290"
Expected: The output contains a matching message (e.g., “do we have a channel for class PUBPOL 290 this semester?”) followed by a compact RAG-style answer section.
- Optional: Ask a broader question
python test_channel_by_id_or_name.py \
--channel-id C0GN5BX0F \
--workspace-name "Sky Lab Computing" \
--query "What is LEANN about?"
Notes:
- If you see
not_in_channel, invite the bot to the channel and re-run. - If you see
channel_not_found, confirm the channel ID and workspace. - Deep search via server-side “search” tools may require additional Slack scopes; the example above performs client-side filtering over retrieved history.
Troubleshooting Checklist
- Slack app created with proper permissions
- Bot token (xoxb-) copied correctly
- App-level token (xapp-) created if needed
- MCP server installed and accessible
- Environment variables set correctly
- Bot invited to relevant channels
- Channel names specified without # symbol
- Sufficient retry attempts configured
- Network connectivity to Slack APIs
Getting Help
If you continue to have issues:
- Check Logs: Look for detailed error messages in the console output
- Test MCP Server: Use
--test-connectionto verify the MCP server is working - Verify Tokens: Double-check that your Slack tokens are valid and have the right scopes
- Community Support: Reach out to the LEANN community for help
Example Commands
Basic Usage
# Test connection
python -m apps.slack_rag --mcp-server "slack-mcp-server" --test-connection
# Index specific channels
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--workspace-name "My Company" \
--channels general random \
--query "What did we decide about the project timeline?"
Advanced Usage
# With custom retry settings
python -m apps.slack_rag \
--mcp-server "slack-mcp-server" \
--workspace-name "My Company" \
--channels general \
--max-retries 10 \
--retry-delay 5.0 \
--max-messages-per-channel 2000 \
--query "Show me all decisions made in the last month"


