Skip to content
Guides8 min read

How to Set Up a Slack AI Agent That Answers Business Questions

Set up a Slack AI agent that answers business questions from your docs, threads and tools, cites its sources in the thread, and stays quiet otherwise.

A ruined Greek temple glowing in the last light before a snow-capped mountain, cypress trees on either side, with the words "How to set up a Slack AI agent that answers business questions"

Short answer: To set up a Slack AI agent that answers business questions, connect it to the places your answers live (Slack history, docs, CRM, warehouse) through MCP servers or APIs, require it to cite a source for every claim, and limit each answer to what the person asking may see. On Keiki you start from the Company Brain template, connect Slack and your sources, and put the agent in one channel; it answers when asked, links the thread or record it used, and says nothing when it was not addressed.

It's Monday morning and Priya, an account executive, has a renewal call at ten. She types in #sales: "@Keiki what did we promise Acme on the SLA last quarter?" A few seconds later the agent replies in the thread: "99.9% uptime with a 4-hour response for P1 incidents, agreed in March. Here is the thread where Sam confirmed it." The permalink is right under the sentence. Priya opens it, checks the date, and goes to her call. Nobody else in the channel was pinged.

That is the whole job of a Slack agent for business questions: answer from what your company actually wrote down, show where it came from, and stay out of the way the rest of the time.

You'll learn:

  • Why answers grounded in your own sources beat a model's memory
  • How to connect Slack history, docs and business tools through MCP
  • How to make the agent cite its source in the thread
  • When the agent should say nothing at all

This is one of the step-by-step guides in How to add an AI agent to Slack, our main guide to Slack agents.

Why business questions need a grounded agent

Most questions people ask in Slack are lookups: who owns the staging cluster, what we told a customer. The answer already exists in a thread, a doc or a CRM record, and the cost is finding it. A 2012 McKinsey Global Institute report estimated that interaction workers spend nearly 20 percent of their week looking for internal information or tracking down colleagues who can help.

People are already asking AI to do this work. Salesforce's Slack Workforce Index from June 2025, a survey of more than 5,000 desk workers in six countries, found that 60% of them use AI and 40% have worked with an AI agent.

The catch is that a language model on its own answers from training data, not from your company. Retrieval fixes part of that. The original retrieval-augmented generation paper from Facebook AI Research and UCL (Lewis et al., 2020) showed that pairing a model with a searchable index made its answers more factual and specific, and named provenance, showing where an answer came from, as an open problem.

Retrieval alone is not enough, though. In a preregistered 2024 study from Stanford and Yale, legal research tools built on retrieval still hallucinated between 17% and 33% of the time, including answers that cited a source that did not support the claim. So a business agent needs three things together: access to the right sources, a link for every claim so people can check it, and permission to say "I can't find that."

Step 1: Start from the Company Brain template

On Keiki, the fastest start is the Company Brain template. Its instructions already cover the behavior this guide describes:

  • Answer first, then the source, then the caveat. No narrating the search.
  • Every factual claim about the company carries a permalink, a ticket id or a doc name.
  • Say "I can't find that" as soon as it is true, and say what would settle it: the channel to ask in, or the person who was in the thread.
  • Never present an inference as a team decision. "Based on the code it looks like 3" is a different sentence from "the retry limit is 3."

The template also remembers what a channel has settled. When a question takes three threads to answer, the agent saves the conclusion with its source, so the same question next month costs one message. Keiki is invite-only for now, so request access at onkeiki.com if you don't have an account yet.

Step 2: Connect Slack and pick one home channel

Create the Slack app from the manifest Keiki generates, install it, and paste the bot token and signing secret back into Keiki. Then invite the bot to one channel and make it the agent's home.

Channel membership is what the agent can read. Once the app is in a channel, the Company Brain template indexes new messages as people post them, one index per Slack workspace, and searches it with a company_search tool. Each hit comes back with the permalink to the original message. For history from before the agent joined, a company_index_channel tool backfills a channel a page at a time.

The index is filtered in code, not by instruction. A hit passes the same Slack read check as a direct channel read, so something said in a private channel is only ever returned inside that channel. Slack asks the same of every agent: its agent design guidelines say an agent shouldn't read or use information the user who invoked it couldn't access on their own.

Step 3: Connect your business data through MCP

Slack threads hold the discussion. The numbers, contracts and tickets live elsewhere. The Model Context Protocol, which Anthropic open-sourced on November 25, 2024, is the standard way to connect an agent to those systems: each system exposes an MCP server, and any MCP client can discover and call its tools. Slack now ships its own: the Slack MCP server and Real-time Search API launched on February 17, 2026, with separate search scopes for public channels, private channels and DMs.

On Keiki, MCP integrations are a capability you turn on for the agent. You can connect a source in three ways:

  • From the dashboard, as a shared connection for the whole workspace: your CRM, your issue tracker, your analytics warehouse.
  • From the conversation. A person can ask the agent to add a source, and it connects as that person's own connection. If the source needs OAuth, the agent sends a link to authorize it once.
  • From code, with the mcp() plugin from the SDK. It runs inside the agent's sandbox, so sandbox() comes with it:
TypeScript
import { AgentKit } from '@onkeiki/agents'
import { sandbox, mcp } from '@onkeiki/agents-plugins'

const kit = AgentKit.create({
  apiKey: process.env.KEIKI_API_KEY!,
  name: 'Company Brain',
  agent: {
    model: '<model-id>',
    maxSteps: 12,
    historyLimit: 40,
    systemPrompt: () => 'Answer business questions from connected sources. Cite every claim.',
    tools: [],
  },
  plugins: [
    sandbox({ persistent: true }),
    mcp({
      maxServers: 5,
      userCanAdd: true,
      servers: [{ url: 'https://crm-mcp.example.com/mcp' }],
    }),
  ],
})

The agent reaches every connected source through one tool, mcp_execute, which runs a short program against the sources' tools. It looks a tool up and reads its shape before calling it, instead of guessing arguments. If an authorization has expired, the call returns a reconnect link, and the agent sends that exact link instead of making up the data it would have returned.

Shared and personal connections answer differently, and the template keeps them apart. A personal connection runs with that person's access. A write on a shared connection runs as the agent, so the agent names who asked for it ("filed by request from @sam") rather than acting as if they did it themselves. If you publish your own MCP server for other teams, package it as an mcp capability with its URL, auth headers and the secrets the installer provides.

Step 4: Make every answer cite its source in the thread

Without a link, people either trust the agent blindly or ask again in the channel. With one, they can check the answer in a click.

The Company Brain template's rules for citation are short:

  • One link, inline, next to the claim. Not a list of sources at the bottom.
  • When sources disagree, give both with their dates and say which one the agent is choosing.
  • Quote the team's own words for anything contested.
  • If the answer exists only in a private channel, say that it exists and offer to answer in that channel. Don't summarize it in a public one.

The agent replies in the thread of the message that asked, so the channel stays readable. While it works, its status message in the thread carries a Stop button, and typing "stop" ends the turn too.

Step 5: Teach it when to stay quiet

An agent in a channel is not automatically in every conversation. Keiki classifies each Slack event before the model sees it. Direct messages and mentions are always answered. Replies in a thread the agent has joined reach the agent, which decides whether it is being addressed. Channel chatter, joins and reactions are ignored and never reach the model. The full contract is in the Slack agents docs.

Inside a thread, the rules are simple:

  • Addressed to it, through a mention, a DM, or a follow-up to its last answer: answer.
  • Two people talking to each other, or someone tagging a colleague: say nothing.
  • Unsure: stay quiet. A missed message costs a re-ask. An interruption costs trust.

The Company Brain template is stricter about speaking up unasked. It chimes in at most once per thread, and only with a fact that has a source, a correction, or the link to the discussion people are about to repeat. It never joins a disagreement between people. A quiet turn posts nothing, not even a reaction, but it is still recorded in the trace, so you can see what the agent chose not to say.

Step 6: Gate the actions, not just the answers

"What's Acme's plan?" quickly becomes "upgrade them to annual." Reads can run freely. Anything that writes should wait for a person.

Mark those tools with approval: "ask" in their policy. The agent then posts a card in the thread with what it is about to do and Approve and Decline buttons. Approval runs the exact stored call, so the agent can't rephrase it between "yes" and the tool running. MCP tools set to ask go through the same approval records. Slack's own guidance on agent governance asks agents to require confirmation for high-impact actions; Keiki's governed actions are how you get that without building approval UI. To check each speaker's own permissions in your system, add an identity webhook and list requiredScopes on each tool.

For a longer look at approvals and handoffs, read How to add human-in-the-loop to an iMessage agent. The same approval records work in Slack.

Test it before you roll it out

Ask the agent ten questions you already know the answers to, in its home channel. Check that each answer has a link, that the link supports the claim, and that it says "I can't find that" for the question nobody wrote down. Then talk between two teammates in a thread it has joined and make sure it stays out.

You can also run the same check from Claude, Cursor or Codex through Keiki's MCP server: its talk_to_agent tool sends a message to your agent as a real user and returns the reply, with every tool call running for real. Once it holds up in one channel, invite it to the next.

For a Slack agent in production, read how Arc brings qualified leads into Slack. The same agent can also answer customers on WhatsApp or iMessage, as covered in how to turn your API into a WhatsApp and iMessage agent.

FAQ

How do I set up an AI agent in Slack to answer business questions? Connect the agent to the places your answers live: Slack history, docs and business tools through MCP servers or APIs. Require a source link on every claim, and limit answers to what the person asking can see. On Keiki you start from the Company Brain template, install the Slack app Keiki generates, connect your sources, and put the agent in one channel.

How do I add an AI search coworker to Slack? Install a Slack app that can search your workspace and connected tools, and invite it to the channels it should learn from. Keiki's Company Brain template indexes the channels it is in as people post, searches that index with each person's own Slack access, and answers in the thread with a permalink to the original message.

Will the agent see private channels or DMs? Only the ones the app is in. Results from a private channel are only returned inside that channel, and the agent won't carry content from a DM or private channel into another room.

What happens when the answer isn't written down anywhere? The agent says it can't find it and suggests what would settle it, such as the channel to ask or the person who was in the original thread. It doesn't present a guess as a company decision.

Can it take actions as well as answer questions? Yes, through the tools you connect. Set any tool that changes data to ask for approval, and the agent posts an Approve and Decline card in the thread before it runs.

Sources