Authorized Slack Research Agent Demo
NOTE: This demo is currently under ACTIVE development
This document provides detailed steps for running the Slack Research Agent proof-of-concept (PoC) demo.
In this demo, we will use the Rossoctl UI to import and deploy both the Slack Research Agent and the Slack Tool. During deployment, we'll configure the A2A protocol for managing agent calls and MCP for enabling communication between the agent and the Slack tool.
Once deployed, we will query the agent using a natural language prompt. The agent will then invoke the tool and return the Slack data as a response.
This demo illustrates how Rossoctl manages the lifecycle of all required components: agents, tools, protocols, and runtime infrastructure.
Here's a breakdown of the sections:
- In Import New Agent, you'll build and deploy the
a2a_slack_researcheragent. - In Import New Tool, you'll build and deploy the
slack_tooltool. - In Configure Keycloak, you'll configure Keycloak to provide access tokens with proper permissions to each component and enable token exchange.
- In Validate the Deployment, you'll verify that all components are running and operational.
- In Chat with the Agent, you'll interact with the agent and confirm it responds correctly using real-time Slack data.
Prerequisites: Ensure you've completed the Rossoctl platform setup as described in the Installation Guide.
This demo uses
SLACK_BOT_TOKENandADMIN_SLACK_BOT_TOKENenv. variables. See the section Slack Tokens below for more details.
You should also open the Agent Platform Demo Dashboard as instructed in the Accessing the UI section.
Slack Tokens
In this demo, the Slack MCP Server will access the Slack API using Slack bot tokens. We will be using two bot tokens: a general SLACK_BOT_TOKEN that is used by default and an ADMIN_SLACK_BOT_TOKEN that is used when the access token has the slack-full-access scope.
For this demo, prior to installing Rossoctl, you need to add two variables to the charts/rossoctl/.secrets.yaml file. Visit
Slack Bot Token page and follow instructions to generate the bot token:
- Create a pre-configured app
- Select the Slack workspace (e.g. rossoctl-dev reach out to us to be added.)
- Edit Configurations
- Change the name, by replacing
my-powerful-appwith a custom name - Modify Slack scopes according to what are required. [See note below]
- Change the name, by replacing
- Create
- Select
Install Appunder Settings. This should take you to a page where you can copyBot User OAuth Token. This will be the value you add asADMIN_SLACK_BOT_TOKENorSLACK_BOT_TOKEN
Note on required scopes To demonstrate finer-grained authorization, each of the tokens must have different scopes. This demo has been tested where:
ADMIN_SLACK_BOT_TOKENhas at leastchannels:historyandchannels:readSLACK_BOT_TOKENhas onlychannels:readThis way, a user that can access Slack will be able to list channels, but not read the conversations, and a user with "admin" access will be able to read channels as well.
Repeat the above for another app with a new name. This time limit the scope to connections:write only. This will be your SLACK_BOT_TOKEN.
Add both variables (slackBotToken and adminSlackBotToken) to charts/rossoctl/.secrets.yaml before executing Rossoctl install.
Import New Agent
Pre-requisite: Pick an LLM provider
The Slack Researcher agent supports any OpenAI-compatible backend. The following models have been tested:
Ollama
- granite3.3:8b This has been tested with an Apple M3 processor and 64 GB of RAM. You will likely need at least 32GB of RAM to run this example locally.
OpenAI The agent will work with a variety of OpenAI models. The following have been tested:
- gpt-4.1-nano
- gpt-4.1-mini
- gpt-4.1
- gpt-4o
- gpt-4o-mini
To log in and import agents you can use the default credentials. Log in to the Rossoctl UI.
To deploy the Slack Research Agent
-
Navigate to Import New Agent in the Rossoctl UI.
-
In the Select Namespace to Deploy Agent drop-down, choose the
<namespace>where you'd like to deploy the agent. (These namespaces are defined in your.envfile.) -
Under Environment Variables, configure the required env vars. You can import
.envfiles from the agent examples repo or add them manually:- LLM settings: Import
.env.openaior.env.ollama, or manually setLLM_API_BASE,LLM_API_KEY, andLLM_MODEL - MCP Slack URL:
MCP_URL=http://mcp-slack-tool-proxy:8000/mcp - Researcher config:
EXTRA_HEADERS={},MODEL_TEMPERATURE=0,MAX_PLAN_STEPS=6,SERVICE_PORT=8000,LOG_LEVEL=INFO - Auth config:
CLIENT_SECRET(fromrossoctl-keycloak-client-secretsecret),ISSUER,JWKS_URI,AUDIENCE— see the auth demo README for values
- LLM settings: Import
-
Depending on the LLM provider you need to do the following:
-
If using
ollama, note that it usesgranite3.3:8b, so you may need to run locally:ollama serveollama pull granite3.3:8bIMPORTANT: The default context length in Ollama is 4k; However we need a 128k context length. Go to Ollama -> Settings and adjust the context length to 128k.
-
If using
openai, you will need to specify a differentTASK_MODEL_ID, and can do so in theCustom Environment Variablessection. i.e.TASK_MODEL_ID=gpt-4.1-nano
-
-
In the Agent Source Repository URL field, use the default: https://github.com/rossoctl/examples Or use a custom repository accessible using the GitHub ID specified in your
.envfile. -
For Git Branch or Tag, use the default
mainbranch (or select another as needed). -
Set Protocol to
a2a. -
Under Specify Source Subfolder:
- Click
Select from examples - Choose:
a2a/slack_researcher
- Click
-
Click Build & Deploy New Agent button.
Import New Tool
To import tools you can use the default credentials
To deploy the Slack Tool using Shipwright:
- Navigate to Import New Tool in the UI.
- Select the same
<namespace>as used for the agent. - Select "Build from source" as the deployment method.
- Under Environment Variables, configure the required env vars for the tool:
- Slack config:
SLACK_BOT_TOKEN(fromslack-secretsecret) - Auth config:
ISSUER,JWKS_URI,AUDIENCE,ADMIN_SLACK_BOT_TOKEN(fromslack-secretsecret),ADMIN_SCOPE_NAME=slack-full-access
- Slack config:
- Use the same source repository: https://github.com/rossoctl/examples
- Choose the
mainbranch or your preferred branch. - Set Select Protocol to
streamable-http. - Under Specify Source Subfolder:
- Select:
mcp/slack_tool
- Select:
- Click Build & Deploy New Tool button.
You will be redirected to a Build Progress page where you can monitor the Shipwright build. Once the build succeeds, the Deployment and Service for the tool will be created automatically.
Configure Keycloak
Now that the agent and tool have been deployed, the Keycloak Administrator must configure the policies to give the UI delegated access to the tool. We have automated these steps in a script.
Set up Python environment
cd rossoctl/demo-setup/keycloak-config/slack/
python -m venv venv
To run the Keycloak configuration script, you must have Python Keycloak library installed.
pip install -r requirements.txt
Define environment variables for accessing Keycloak:
export KEYCLOAK_URL="http://keycloak.localtest.me:8080"
export KEYCLOAK_REALM=master
export KEYCLOAK_ADMIN_USERNAME=admin
export KEYCLOAK_ADMIN_PASSWORD=admin
export NAMESPACE=<namespace>
Now run the configuration script:
python set_up_slack_demo.py
For more information about the configuration script check the detailed README.md file.
Enable Token exchange for the agent
Finally, to enable the agent to perform token exchange, we must go to Keycloak in the browser. Log in with the admin credentials admin and admin.
Click on Clients in the left sidebar, and select spiffe://localtest.me/sa/slack-researcher.
Under the Settings tab, scroll down to Capability config. Double check that Client authentication is enabled. Then enable Standard Token Exchange under Authentication flow. Then click Save.
Now Keycloak has been fully configured for our example!
Validate The Deployment
Depending on your hosting environment, it may take some time for the agent and tool deployments to complete.
To verify that both the agent and tool are running:
-
Open a terminal and connect to your Kubernetes cluster.
-
Use the namespace you selected during deployment to check the status of the pods:
installer$ kubectl get pods -n <namespace>NAME READY STATUS RESTARTS AGEslack-researcher-8bb4644fc-4d65d 1/1 Running 0 1mslack-tool-5bb675dd7c-ccmlp 1/1 Running 0 1m -
Tail the logs to ensure both services have started successfully. For the agent:
installer$ kubectl logs -f deployment/slack-researcher -n <namespace>Defaulted container "slack-researcher" out of: slack-researcher, rossoctl-client-registration (init)INFO: Started server process [18]INFO: Waiting for application startup.INFO: Application startup complete.INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)For the tool:
installer$ kubectl logs -f deployment/slack-tool -n <namespace>Defaulted container "slack-tool" out of: slack-tool, rossoctl-client-registration (init)INFO: Started server process [19]INFO: Waiting for application startup.INFO: Application startup complete.INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -
Once you see the logs indicating that both services are up and running, you're ready to proceed to Chat with the Agent.
Chat with the Agent
Once the deployment is complete and the Keycloak configured, you can run the demo.
This example demonstrates different results based on the user access control. The Keycloak was pre-configured with two Rossoctl demo users:
- slack-full-access-user - Rossoctl user that is tied to Slack token
ADMIN_SLACK_BOT_TOKEN. This user has a full access to all the Slack channels and capabilities. - slack-partial-access-user - Rossoctl user that is tied to Slack token
SLACK_BOT_TOKEN. This user has a limited access to all the Slack channels and limited capabilities. E.g., it can list channels but not read them.
Both users use password as password.
Try each userid for the following interactions with the Slack agent:
-
Login with the Rossoctl userid.
-
Navigate to the Agent Catalog in the Rossoctl UI.
-
Select the same
<namespace>used during the agent deployment. -
Under Available Agents in your namespace, select
slack-researcherand click View Details. -
Scroll to the bottom of the page. In the input field labeled Say something to the agent..., enter:
What are the channels in the Slack? -
You will see the Agent Thinking... message and a series of
Task Status Update. Depending on the speed of your hosting environment, and the userid Slack access level, the agent will return a Slack response. For example:The bot has access to two channels:1. general: This channel is for team-wide announcements and conversations. Everyone is included here.2. random: This channel is for everything else, including team jokes, spur-of-the-moment ideas, and funny GIFs.Please let me know if you need more information about a specific channel. -
You can tail the log files (as shown in the Validate the Deployment section) to observe the interaction between the agent and the tool in real time.
-
To demonstrate finer-grained access, another query to try is
What's going on in the general slack channel?. This query should result in more detail for theslack-full-access-userbut should result in less detail for theslack-partial-access-user.
If you encounter any errors, check the Troubleshooting Guide.
Cleanup
Delete the Agent and the Tool
You may navigate to the Agent Catalog and Tool Catalog in the UI and delete the agent and tool respectively. Else, you may do this in the console:
installer$ kubectl delete deployment slack-researcher slack-tool -n <namespace>
installer$ kubectl delete service slack-researcher slack-tool -n <namespace>