feat: Slack MCP connector

⛔ closed · #292 · open-legal-products/mike ← amal66/mike · opened 3mo ago by amal66 · closed 2mo ago · +2,168-171 across 15 files · ↗ on GitHub

From the PR description

Connect Mike to Slack's official MCP server (https://mcp.slack.com/mcp) from Account → Connectors: paste the URL, authorize in a popup, and the assistant gets Slack's tools (19 on a default workspace - search, channels, threads, canvases, profiles). Write-capable tools are off by default.

Changes

  • Provider-quirks registry (backend/src/lib/mcp/providers.ts): Google's special-casing in the OAuth flow is now a table; Slack is a second row. Each row declares host matching, env-var prefix, setup instructions, and error hints.
  • Slack support: Slack has no dynamic client registration, so operators set SLACK_MCP_OAUTH_CLIENT_ID/_SECRET (documented in .env.example); without them the UI shows exact setup steps. A paste-ready Slack app manifest ships in docs/slack-mcp-app-manifest.example.json.
  • OAuth discovery fix: the MCP SDK misses Slack's resource metadata (Slack 302s the path-aware well-known URL; the SDK only falls back on 4xx), producing an authorization URL with no scopes - which Slack rejects. We now discover the metadata URL ourselves (preferring the server's 401 WWW-Authenticate header) and pass it to the SDK. Benefits all providers.
  • First 9 commits are shared with #285; whichever merges second gets a small rebase.

Verification

  • 521 backend + 176 frontend tests pass (48 in the MCP suite, incl. new Slack cases).
  • Live end-to-end against a real workspace: consent → encrypted token stored → 19 tools listed, write tools disabled.

Demo

🎬 Placeholder: screenshots/recording to be attached.

🤖 Generated with Claude Code

Our analysis

Add Slack MCP OAuth connector — read the full analysis →

Think the analysis missed something the PR description covers?

Capture this PR into my fork

Download a Markdown prompt that tells Claude how to port every commit in this PR into your working tree. Run it via claude -p < capture-pull-292.md from inside the repo you want the changes in.

⬇ Download capture-pull-292.md