Inspiration
Slack runs on fast, dense, jargon-heavy text. For a lot of people that's a barrier, not a convenience: non-native speakers, neurodivergent teammates, people with low vision, or anyone new to a team and drowning in acronyms. Existing "summary" bots give everyone the same wall of text. We wanted something that meets each person where they are — and that helps them participate, not just keep up.
What it does
Allyn is a personalised, agentic accessibility layer for Slack.
/allyn setupcaptures each person's needs: language, reading level, summary length, jargon handling, and free-text access notes. Everything Allyn shows that person is adapted to it./allyn catchupgives a private, plain-language, translated digest of a channel — the same channel renders differently for each teammate.- “Simplify with Allyn” (message shortcut) rewrites any single message at your reading level and language, expanding team acronyms it has learned.
/allyn triagereads a conversation, extracts the action items, and turns each into a task — then/allyn taskslets you complete them with one tap./allyn remindschedules reminders Allyn DMs you when due.
How we built it
- Slack Bolt (Python) + Socket Mode for a no-hosting, zero-cost runtime.
- A custom MCP server (
allyn.mcp_server) exposes Allyn's action tools (create_task, set_reminder, glossary, list/complete) over the Model Context Protocol. The agent connects to it as an MCP client over stdio and routes every action through it — that's the challenge's "MCP server integration", used for real. - A free-tier LLM brain: Google Gemini primary, Groq automatic fallback.
- SQLite for profiles, tasks, reminders, and the team glossary — inspectable and portable.
- The accessibility logic lives in pure, unit-tested functions (22 tests, no network); MCP, the LLM, and Slack are thin adapters around that core.
Challenges we ran into
- Bridging Slack's synchronous handlers with the async MCP client SDK — solved with a persistent MCP session on a dedicated event-loop thread.
- Reliable action-item extraction on free models — solved by making extraction a deterministic two-step (one structured LLM call → explicit MCP tool calls) with tolerant JSON parsing.
Accomplishments we're proud of
- Personalisation that's genuinely per-user, not one-size-fits-all.
- A real MCP integration, not a checkbox.
- Runs entirely free, locally, with a tested core.
What we learned
Accessibility is most powerful when it's the default and when it's active — helping people act, not just read.
What's next
Voice/audio digests, scheduled morning briefings per profile, more MCP tools (calendar, docs), and publishing the action tools as a reusable MCP server.
Log in or sign up for Devpost to join the conversation.