Building an AI-Powered Slack Agent with MCP Standardization
duolingo · Education · 2026 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.4 (schema v2)
Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.
Problem
Domain: Enterprise MCP and Slack agent adoption
Duolingo needed to make MCP-powered internal tools usable across the company after local MCP setup, dependency management, credentials, and configuration files limited adoption to a few technical enthusiasts.
Constraints:
- Individual MCP server setup required repo discovery, config discovery, credentials, and manual mcp.json edits.
- Different MCP servers used different runtimes such as Python, uvx, TypeScript, and Docker.
- Even standardized HTTP MCP configuration still had too much friction for broad adoption.
- Write operations needed human approval so the Slack agent could not make unsafe changes unaudited.
Architecture
Duolingo first created an MCP discovery page, then standardized internal MCP servers around HTTP configuration and JWT headers, and finally abstracted MCP complexity into an AI Slack app. The Slack app uses the Cloud Agent SDK to talk to MCP servers and the Slack Bot SDK to interact in Slack threads. It connects to read-only tools from 15-plus MCP servers, can run diagnostic commands, auto-responds in help desk and incident channels, and gates writes such as pull requests and Jira tickets behind human-in-the-loop verification.
Diagram confidence: reconstructed (reconstructed from prose).
flowchart LR slack-user[Slack User] --> ai-slack-app[AI Slack App] ai-slack-app --> slack-bot-sdk[Slack Bot SDK] ai-slack-app --> cloud-agent-sdk[Cloud Agent SDK] cloud-agent-sdk --> standardized-mcp-servers[Standardized MCP Servers] standardized-mcp-servers --> internal-services[Internal Services] ai-slack-app --> human-approval[Human Approval] human-approval --> internal-services[Internal Services]
Components
| Component | Role | Interacts with |
|---|---|---|
Slack User |
Employee asking for help, incident response, metrics, or tool actions inside Slack. | AI Slack App |
AI Slack App |
Conversational interface that brings MCP tools into Slack threads. | Slack User, Slack Bot SDK, Cloud Agent SDK, Human Approval |
Slack Bot SDK |
Messaging layer for receiving and responding in Slack threads. | AI Slack App |
Cloud Agent SDK |
Agent runtime that calls MCP servers and diagnostic tools. | AI Slack App, Standardized MCP Servers |
Standardized MCP Servers |
HTTP/JWT-configured internal MCP servers exposing 300-plus tools. | Cloud Agent SDK, Internal Services |
Internal Services |
Systems queried or acted on through MCP tools, AWS, BigQuery, Jira, and code workflows. | Standardized MCP Servers, Human Approval |
Human Approval |
Approval gate for write operations such as pull requests and Jira tickets. | AI Slack App, Internal Services |
Data flow
Employees ask the Slack bot in channels or threads. The Slack app routes the request through the Cloud Agent SDK to standardized MCP servers and internal diagnostic tools, returns responses in Slack, and requires explicit human approval before write operations leave the safe read-only path.
Why this architecture
Duolingo learned that documentation and standardized config were not enough; adoption increased only after MCP tools came to employees in Slack. The architecture removes local setup from the happy path while preserving standardized MCP servers underneath and human approval for writes.
Models used: Cloud Agent SDK agent model
Scale
- Duolingo supported around 30 MCP servers and 300-plus tools.“As of today, we have like around 30 MCP servers supported at Duolingo with 300 plus tools. And half of those are served internally with a very standardized HTTP configuration. You basically put your JWT token in the header and you just set the URL to be the MCP name”transcript, stated
- The Slack app connected read-only tools from more than 15 MCP servers.“connected a bunch of read-only tools from 15 plus MCP servers and it also has the ability to run AWS BigQuery commands to diagnostic different things or get metrics internally.”transcript, stated
- Weekly active users grew from around 20 to more than 250.“we have around like 20 uh weekly active users, and as of today, we have more than 250 people using uh the bot on a weekly basis.”transcript, stated
- The bot reached roughly 30% of the company and stabilized near an 80% upvote rate.“company uh like Duolingo, that's more around like 30% of the company. And this graph uh shows the uh upvote rate on the response where uh I think as we gradually add more”transcript, stated“over time, and recently, I think it stabilizes around 80%. Uh it's not perfect, but it definitely provides value to people. And finally, if your company also uses Slack or uh and use Slack called, we”transcript, stated
Alternatives considered (roads not taken)
Manual per-engineer MCP setup.
Rejected because: The setup burden was high enough that very few engineers bothered.
Centralized setup web page only.
Rejected because: It solved discovery but not runtime/dependency problems or broad adoption.
Let the agent perform writes directly.
Rejected because: Duolingo wanted to prevent unsafe automated changes to code or project-management systems.
Patterns
tool-use-orchestration (agent-infrastructure)
The Slack app exposes internal MCP tools and diagnostic commands through a conversational agent.
human-in-the-loop-gate (safety)
Write operations require explicit human approval before they take effect.
safety-policy-enforcement (governance)
The Slack app uses read-only defaults and write gates to keep broad access safe.
Tradeoffs
Adoption surface
Chose Slack app over Local editor MCP configuration.
Rationale: Slack removed local setup from the path and made MCP available in shared operational workflows.
MCP standardization
Chose HTTP configuration with JWT and internal URLs over Let every MCP server define its own runtime and setup.
Rationale: A standardized config made servers easier to support and compose.
Write safety
Chose Human-in-the-loop verification over Fully autonomous writes from Slack.
Rationale: The agent could assist with Jira and PR actions without being trusted to mutate systems alone.
Gotchas (what bit them)
Discovery pages do not eliminate adoption friction.
Root cause: Users still had to copy config, manage credentials, and configure local tools.
Resolution: Move the MCP experience into Slack where users already ask for help.
MCP servers become hard to roll out when every server has a different runtime.
Root cause: Different servers used Python, uvx, TypeScript, Docker images, and conflicting local dependencies.
Resolution: Standardize internal MCP servers around HTTP configuration and consistent auth.
A widely available agent needs explicit write boundaries.
Root cause: Slack lowers friction enough that many employees can trigger tool calls.
Resolution: Use read-only tools by default and human verification for writes.
Evaluation
Duolingo evaluates the Slack agent through weekly active users, upvote rate, response quality over time, adoption after skill and prompt additions, and operational usefulness in help desk and incident channels.
Metrics: Weekly active users · Company adoption share · Upvote rate · Help desk and incident response usefulness · On-call toil reduction
Outcomes
- Duolingo standardized roughly 30 MCP servers and 300-plus tools.
- The Slack app reached more than 250 weekly active users, about 30% of the company.
- The bot reduced on-call toil by auto-responding in help desk and incident channels.
The source reports a November 2024 start, May 2025 discovery page, August 2025 standardization, September 2025 Slack app, 15-plus MCP servers in the bot, 250-plus weekly active users, 30% company reach, and 80% upvote rate.