Inspiration

Every fast moving team lives inside Slack. Decisions get made in a thread at 9pm, a commitment gets buried under three emoji reactions, and a week later nobody can remember who agreed to what. We wanted to give teams a second brain that reads Slack the way a great chief of staff would, so no promise, question, or decision ever falls through the cracks.

What it does

Trelo is a Slack native workspace intelligence app. Once installed in a Slack workspace, Trelo:

Ask Trelo lets any teammate ask a natural language question and get an answer grounded in real Slack history, with citations back to the original messages and channels.

Commitments automatically extracts action items from ongoing conversations ("I will ship the report by Friday", "can you review this by tomorrow"), tracks owner, due date, and source message, and lets teams close them out.

Daily Digest produces a 24 hour summary per channel so leaders can catch up on ten channels in two minutes instead of scrolling forever.

Channels view shows every indexed channel and its latest activity at a glance. MCP server exposes the same tools to any MCP compatible client so teammates can query their Slack workspace from wherever they already work.

How we built it

Trelo is built entirely around the Slack platform:

Slack OAuth v2 for workspace install, scoped to channels:history, channels:read, chat:write, users:read, search:read.public, and related event scopes.

Slack Events API streams every public message, membership change, and channel event to a signature verified webhook. Every request is validated with the Slack signing secret before it is queued.

Slack Web API methods conversations.info, users.info, and chat.getPermalink enrich each indexed message with a stable name, avatar, and back link.

Slack Real Time Search API (assistant.search.context) powers Ask Trelo with live, permission aware retrieval across the workspace, on top of our local index.

Slack AI capabilities are used through the assistant search context so answers surface the semantically relevant messages, not just keyword hits.

Slack MCP is exposed by Trelo as a Model Context Protocol server so tools like ask_trelo, list_commitments, toggle_commitment, get_digest, and list_channels can be called by any MCP client, protected by OAuth so each caller only ever sees their own workspace.

Postgres with row level security stores installations, messages, channels, commitments, digests, and answers. Every table is scoped by workspace_id and enforced at the database layer, so one workspace can never read another.

Challenges we ran into

Slack events arrive at high volume and out of order, so we had to make the event pipeline idempotent and fast enough to acknowledge Slack in under three seconds while still enriching and indexing off the hot path.

Grounding answers strictly in real Slack context, never in outside knowledge, so users always get citations they can verify.

Implementing a Model Context Protocol server behind OAuth so external agents get the exact same row level security as the app itself.

Accomplishments that we're proud of

A fully working Slack OAuth install, event ingestion, message enrichment, and search stack. An MCP server that any MCP client can connect to, scoped per user. Row level security across every table so tenant isolation is enforced by the database, not by application code.

What we learned

Slack is not just a messaging product. Between the Events API, Web API, Real Time Search API, AI search, and MCP, it is a full platform for building agents that live where teams already work. Building on those primitives, instead of scraping around them, is what makes an agent feel native.

What's next for Trelo

Slash commands and shortcuts so teammates can ask Trelo without leaving Slack.

Weekly executive digests and personalized commitment reminders via DM.

Fine grained per channel indexing controls and audit logs for enterprise workspaces.

Deeper Slack AI integrations as new capabilities ship.

Built With

  • model-context-protocol
  • postgresql
  • react
  • row-level-security
  • slack-ai-search
  • slack-api
  • slack-events-api
  • slack-oauth-v2
  • slack-real-time-search-api-(assistant.search.context)
  • slack-web-api
  • tanstack
  • typescript
Share this project:

Updates