@jtalk22/slack-mcp 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026
3
+ Copyright (c) 2026 jtalk22
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,25 +1,45 @@
1
- # Slack MCP Server
1
+ <p align="center">
2
+ <a href="https://jtalk22.github.io/slack-mcp-server/public/demo.html"><img src="docs/assets/icon-512.png" alt="Slack MCP Server" width="80"></a>
3
+ </p>
4
+
5
+ <h1 align="center">Slack MCP Server</h1>
6
+
7
+ <p align="center">
8
+ <em>Give Claude the same Slack access you have.<br>
9
+ DMs, threads, history—using your existing Slack session.</em>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://jtalk22.github.io/slack-mcp-server/public/demo-video.html">
14
+ <img src="docs/images/demo-readme.gif" alt="Slack MCP tools in action" width="640">
15
+ </a>
16
+ </p>
2
17
 
3
- *Full workspace access via local session mirroring. DMs, threads, and history—no admin approval required.*
18
+ <p align="center">
19
+ <a href="https://www.npmjs.com/package/@jtalk22/slack-mcp"><img src="https://img.shields.io/badge/npm-Install-blue?style=for-the-badge&logo=npm&logoColor=white" alt="npm"></a>
20
+ <a href="https://github.com/jtalk22/slack-mcp-server/pkgs/container/slack-mcp-server"><img src="https://img.shields.io/badge/Docker-Pull-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker"></a>
21
+ </p>
4
22
 
5
- [![Live Demo](https://img.shields.io/badge/LIVE%20DEMO-Try%20It%20Now-00C853?style=for-the-badge&logo=slack&logoColor=white)](https://jtalk22.github.io/slack-mcp-server/public/demo.html)
6
- [![Claude Demo](https://img.shields.io/badge/CLAUDE%20DEMO-See%20MCP%20Tools-da7756?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPjwvc3ZnPg==&logoColor=white)](https://jtalk22.github.io/slack-mcp-server/public/demo-claude.html)
23
+ <p align="center">
24
+ <a href="https://jtalk22.github.io/slack-mcp-server/public/demo.html"><img src="https://img.shields.io/badge/LIVE%20DEMO-Try%20It%20Now-00C853?style=for-the-badge&logo=slack&logoColor=white" alt="Live Demo"></a>
25
+ <a href="https://jtalk22.github.io/slack-mcp-server/public/demo-claude.html"><img src="https://img.shields.io/badge/CLAUDE%20DEMO-See%20MCP%20Tools-da7756?style=for-the-badge" alt="Claude Demo"></a>
26
+ </p>
7
27
 
8
- [![npm](https://img.shields.io/npm/v/@jtalk22/slack-mcp?color=blue&label=npm)](https://www.npmjs.com/package/@jtalk22/slack-mcp)
9
- [![Docker](https://img.shields.io/badge/docker-ghcr.io-blue)](https://github.com/jtalk22/slack-mcp-server/pkgs/container/slack-mcp-server)
10
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
11
- [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
12
- [![GitHub Sponsors](https://img.shields.io/github/sponsors/jtalk22?label=Sponsor&logo=github)](https://github.com/sponsors/jtalk22)
28
+ <br>
13
29
 
14
30
  <p align="center">
15
- <img src="https://assets-worker.james-20a.workers.dev/projects/slack-mcp-server/demo-claude.gif" alt="Claude Desktop using Slack MCP tools" width="800">
31
+ <a href="https://www.npmjs.com/package/@jtalk22/slack-mcp"><img src="https://img.shields.io/npm/dm/@jtalk22/slack-mcp?label=downloads&color=CB3837" alt="npm downloads"></a>
32
+ <a href="https://github.com/jtalk22/slack-mcp-server/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/jtalk22/slack-mcp-server/ci.yml?label=build" alt="Build Status"></a>
33
+ <a href="https://smithery.ai/server/jtalk22/slack-mcp-server"><img src="https://img.shields.io/badge/Smithery-Registry-4A154B" alt="Smithery"></a>
34
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
35
+ <a href="https://github.com/sponsors/jtalk22"><img src="https://img.shields.io/badge/Sponsor-♡-ea4aaa?logo=github" alt="Sponsor"></a>
16
36
  </p>
17
37
 
18
38
  ---
19
39
 
20
40
  ### Why This Exists
21
41
 
22
- I built this because I was working with someone to help me manage a complex workload, and we kept hitting walls. They needed context from my messages—"what did X say about Y?"—but Slack's API blocks access to DMs without admin approval.
42
+ I built this because I was working with someone to help me manage a complex workload, and we kept hitting walls. They needed context from my messages—"what did X say about Y?"—and standard app/OAuth flows were too constrained for that workflow.
23
43
 
24
44
  Screenshotting messages is not a workflow.
25
45
 
@@ -27,59 +47,17 @@ This server bridges the gap. It creates a secure, local bridge between Claude an
27
47
 
28
48
  ![Slack MCP Server Web UI](docs/images/demo-main.png)
29
49
 
30
- > **[Try the Interactive Demo](https://jtalk22.github.io/slack-mcp-server/public/demo.html)** - See the Web UI in action
31
- >
32
- > **[See Claude Desktop Demo](https://jtalk22.github.io/slack-mcp-server/public/demo-claude.html)** - Watch MCP tools in action
33
-
34
50
  ---
35
51
 
36
52
  ## Architecture: Local Session Mirroring
37
53
 
38
54
  Instead of authenticating as a bot, this server leverages your existing Chrome session credentials (macOS) or manual token injection (Linux/Windows). It mirrors your user access exactly—if you can see it in Slack, Claude can see it too.
39
55
 
40
- ```mermaid
41
- sequenceDiagram
42
- participant Chrome as Chrome Browser
43
- participant Script as AppleScript
44
- participant Store as Token Store
45
- participant MCP as MCP Server
46
- participant Slack as Slack API
47
-
48
- Note over Chrome: You're logged into Slack
49
- Script->>Chrome: Execute JavaScript in Slack tab
50
- Chrome-->>Script: xoxc- token + xoxd- cookie
51
- Script->>Store: Save to ~/.slack-mcp-tokens.json
52
- Store->>Store: Encrypt in macOS Keychain
53
-
54
- Note over MCP: Claude asks for DMs
55
- MCP->>Store: Load credentials
56
- Store-->>MCP: Token + Cookie
57
- MCP->>Slack: GET conversations.history
58
- Slack-->>MCP: Full message history
59
- MCP-->>MCP: Return to Claude
60
- ```
56
+ ![Session Mirroring Flow](docs/images/diagram-session-flow.svg)
61
57
 
62
58
  ### Why Not OAuth?
63
59
 
64
- ```mermaid
65
- flowchart LR
66
- subgraph Traditional["Official Slack API (OAuth)"]
67
- A[Create App] --> B[Request Scopes]
68
- B --> C[Admin Approval]
69
- C --> D[User Authorization]
70
- D --> E[Limited Access]
71
- E --> F["No DMs without<br/>per-conversation consent"]
72
- end
73
-
74
- subgraph ThisServer["Session Mirroring"]
75
- G[Open Slack in Chrome] --> H[Mirror Session]
76
- H --> I[Full Access]
77
- I --> J["Your DMs, Channels,<br/>Search, History"]
78
- end
79
-
80
- style Traditional fill:#ffcccc
81
- style ThisServer fill:#ccffcc
82
- ```
60
+ ![OAuth vs Session Mirroring](docs/images/diagram-oauth-comparison.svg)
83
61
 
84
62
  **Trade-off:** Session tokens expire every 1-2 weeks. Auto-refresh (macOS) or manual update keeps things running.
85
63
 
@@ -120,6 +98,18 @@ flowchart LR
120
98
 
121
99
  ## Quick Start
122
100
 
101
+ **Runtime:** Node.js 20+
102
+
103
+ ### 2-Minute Verify
104
+
105
+ ```bash
106
+ npx -y @jtalk22/slack-mcp --version
107
+ npx -y @jtalk22/slack-mcp --setup
108
+ npx -y @jtalk22/slack-mcp --status
109
+ ```
110
+
111
+ If `--status` returns valid workspace/user info, your install path is working.
112
+
123
113
  ### Option A: npm (Recommended)
124
114
 
125
115
  ```bash
@@ -151,7 +141,7 @@ docker pull ghcr.io/jtalk22/slack-mcp-server:latest
151
141
  The interactive setup wizard handles token extraction and validation automatically:
152
142
 
153
143
  ```bash
154
- npx @jtalk22/slack-mcp --setup
144
+ npx -y @jtalk22/slack-mcp --setup
155
145
  ```
156
146
 
157
147
  - **macOS**: Auto-extracts tokens from Chrome (have Slack open in a tab)
@@ -162,7 +152,7 @@ npx @jtalk22/slack-mcp --setup
162
152
  #### Check Token Status
163
153
 
164
154
  ```bash
165
- npx @jtalk22/slack-mcp --status
155
+ npx -y @jtalk22/slack-mcp --status
166
156
  ```
167
157
 
168
158
  #### Alternative: Manual Token Scripts
@@ -297,20 +287,20 @@ finally { refreshInProgress = false; }
297
287
 
298
288
  ---
299
289
 
300
- ## Web UI (for claude.ai)
290
+ ## Web UI (for claude.ai — no MCP support)
301
291
 
302
- Since claude.ai doesn't support MCP, use the REST server:
292
+ If you're using claude.ai in a browser (which doesn't support MCP), you can use the REST server instead:
303
293
 
304
294
  ```bash
305
295
  npm run web
306
- # Or: npx @jtalk22/slack-mcp web
296
+ # Or: npx -y @jtalk22/slack-mcp web
307
297
  ```
308
298
 
309
299
  **Magic Link:** The console prints a one-click URL with the API key embedded:
310
300
 
311
301
  ```
312
302
  ════════════════════════════════════════════════════════════
313
- Slack Web API Server v1.1.7
303
+ Slack Web API Server v1.2.2
314
304
  ════════════════════════════════════════════════════════════
315
305
 
316
306
  Dashboard: http://localhost:3000/?key=smcp_xxxxxxxxxxxx
@@ -329,6 +319,16 @@ Just click the link - no copy-paste needed. The key is saved to your browser and
329
319
 
330
320
  ---
331
321
 
322
+ ## Operations Guides
323
+
324
+ - [Deployment Modes](docs/DEPLOYMENT-MODES.md) - Choose the right operating model (`stdio`, `web`, hosted HTTP, Smithery/Worker)
325
+ - [Use Case Recipes](docs/USE_CASE_RECIPES.md) - 12 copy/paste prompts mapped to current tool contracts
326
+ - [Support Boundaries](docs/SUPPORT-BOUNDARIES.md) - Scope, response targets, and solo-maintainer capacity limits
327
+
328
+ If you're evaluating team rollout, start with [Deployment Modes](docs/DEPLOYMENT-MODES.md) before exposing remote endpoints.
329
+
330
+ ---
331
+
332
332
  ## Troubleshooting
333
333
 
334
334
  ### Tokens Expired
@@ -0,0 +1,58 @@
1
+ # Communication Style Guide
2
+
3
+ Use this guide for release notes, issue replies, and changelog entries.
4
+
5
+ ## Rules
6
+
7
+ 1. Keep text technical, concise, and factual.
8
+ 2. Do not include model/tool credit lines.
9
+ 3. Do not include co-author trailers from tooling.
10
+ 4. State exact versions and commands when relevant.
11
+ 5. Avoid speculative claims.
12
+
13
+ ## Issue Reply Template
14
+
15
+ ```md
16
+ Thanks for reporting this.
17
+
18
+ Status: fixed in `<version>`.
19
+
20
+ Included:
21
+ - `<change 1>`
22
+ - `<change 2>`
23
+
24
+ Install/update:
25
+ - `npx -y @jtalk22/slack-mcp`
26
+ - `npm i -g @jtalk22/slack-mcp@<version>`
27
+ ```
28
+
29
+ ## Release Notes Template
30
+
31
+ ````md
32
+ ## <version> — <short title>
33
+
34
+ ### Fixed
35
+ - <item>
36
+ - <item>
37
+
38
+ ### Runtime / Security
39
+ - <item>
40
+
41
+ ### Verify
42
+ ```bash
43
+ <command>
44
+ <command>
45
+ ```
46
+ ````
47
+
48
+ ## Changelog Entry Template
49
+
50
+ ```md
51
+ ## [<version>] - YYYY-MM-DD
52
+
53
+ ### Fixed
54
+ - <item>
55
+
56
+ ### Changed
57
+ - <item>
58
+ ```
@@ -0,0 +1,48 @@
1
+ # Deployment Modes
2
+
3
+ Use this guide to choose the right operating mode before rollout.
4
+
5
+ ## Quick Chooser
6
+
7
+ - Choose `stdio` for personal use in Claude Desktop/Claude Code.
8
+ - Choose local `web` for browser workflows and manual Slack browsing.
9
+ - Choose hosted HTTP only when you need remote execution and can handle token operations.
10
+ - Choose Smithery/Worker only when your consumers require registry-hosted MCP transport.
11
+
12
+ ## Mode Matrix
13
+
14
+ | Mode | Start Command | Best For | Auth Material | Exposure | Notes |
15
+ |------|---------------|----------|---------------|----------|-------|
16
+ | Local MCP (`stdio`) | `npx -y @jtalk22/slack-mcp` | Individual daily usage in Claude | `SLACK_TOKEN` + `SLACK_COOKIE` via token file/env | Local process | Lowest ops burden |
17
+ | Local Web UI (`web`) | `npx -y @jtalk22/slack-mcp web` | Browser-first usage, manual search/send | Same as above + generated API key | `localhost` by default | Useful when MCP is not available |
18
+ | Hosted MCP (`http`) | `node src/server-http.js` | Controlled hosted integration | Env-injected Slack token/cookie | Remote endpoint | Requires runtime hardening and monitoring |
19
+ | Smithery/Worker | `wrangler deploy` + Smithery publish flow | Registry distribution for hosted consumers | Query/env token handoff | Remote endpoint | Keep worker version parity with npm release |
20
+
21
+ ## Team Deployment Guidance
22
+
23
+ If you are deploying for more than one operator:
24
+
25
+ 1. Start with one maintainer on local `stdio`.
26
+ 2. Document token lifecycle and rotation ownership.
27
+ 3. Define support window and incident contact before enabling hosted mode.
28
+ 4. Validate `/health` and MCP initialize responses on every release.
29
+
30
+ ## Release Checklist by Mode
31
+
32
+ ### Local `stdio`
33
+
34
+ 1. `npx -y @jtalk22/slack-mcp --status`
35
+ 2. `npx -y @jtalk22/slack-mcp --help`
36
+ 3. Confirm tool list in Claude client.
37
+
38
+ ### Local `web`
39
+
40
+ 1. `npx -y @jtalk22/slack-mcp web`
41
+ 2. Verify API key generation at `~/.slack-mcp-api-key`.
42
+ 3. Verify `/health`, `/conversations`, and `/search` endpoints.
43
+
44
+ ### Hosted (`http` or Worker)
45
+
46
+ 1. Verify `version` parity across `package.json`, server metadata, and health responses.
47
+ 2. Confirm `slack_get_thread`, `slack_search_messages`, and `slack_users_info` behavior.
48
+ 3. Confirm token handling mode (ephemeral vs env persistence) is documented.
package/docs/SETUP.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Prerequisites
4
4
 
5
- - Node.js 18+
5
+ - Node.js 20+
6
6
  - Google Chrome (for token extraction)
7
7
  - macOS (for Keychain storage - other platforms use file storage only)
8
8
 
@@ -25,16 +25,22 @@ npm install
25
25
 
26
26
  ### 3. Get Slack Tokens
27
27
 
28
- **Option A: Automatic Extraction**
28
+ **Option A: Setup Wizard (recommended)**
29
29
 
30
30
  1. Open Chrome
31
31
  2. Navigate to https://app.slack.com and log in
32
32
  3. Run:
33
33
  ```bash
34
- npm run tokens:auto
34
+ npx -y @jtalk22/slack-mcp --setup
35
35
  ```
36
36
 
37
- **Option B: Manual Extraction**
37
+ **Option B: Automatic Extraction (repo clone workflow)**
38
+
39
+ ```bash
40
+ npm run tokens:auto
41
+ ```
42
+
43
+ **Option C: Manual Extraction**
38
44
 
39
45
  1. Open https://app.slack.com in Chrome
40
46
  2. Press F12 to open DevTools
@@ -114,7 +120,7 @@ You should see your username and team name.
114
120
 
115
121
  ### "No credentials found"
116
122
 
117
- Run `npm run tokens:auto` with Slack open in Chrome, or `npm run tokens:refresh` to enter manually.
123
+ Run `npx -y @jtalk22/slack-mcp --setup` with Slack open in Chrome, or `npm run tokens:refresh` to enter manually.
118
124
 
119
125
  ### "invalid_auth" Error
120
126
 
@@ -0,0 +1,49 @@
1
+ # Support Boundaries
2
+
3
+ This document sets expectations for issue triage, support scope, and rollout safety.
4
+
5
+ ## In Scope
6
+
7
+ - Reproducible bugs in published release behavior.
8
+ - Install and setup blockers for supported Node/runtime paths.
9
+ - Regressions in existing tools (`slack_get_thread`, `slack_search_messages`, etc.).
10
+ - Documentation corrections with clear technical evidence.
11
+
12
+ ## Out of Scope
13
+
14
+ - Custom Slack policy/legal interpretation for a specific organization.
15
+ - Workspace-specific data migrations or bespoke integrations.
16
+ - Real-time operational support for third-party hosting providers.
17
+ - Urgent production incident ownership for self-hosted external deployments.
18
+
19
+ ## Intake Requirements
20
+
21
+ Include the following in every issue:
22
+
23
+ 1. Version (`npm view @jtalk22/slack-mcp version` output).
24
+ 2. Runtime mode (`stdio`, `web`, `http`, or Worker/Smithery).
25
+ 3. OS and Node version.
26
+ 4. Minimal reproduction steps and exact error text.
27
+ 5. Whether this blocks individual use or team rollout.
28
+
29
+ ## Response Windows (Best Effort)
30
+
31
+ - Installation/blocker bugs: initial response target within 2 business days.
32
+ - Non-blocking bugs: initial response target within 5 business days.
33
+ - Feature requests: triaged in backlog batches.
34
+
35
+ ## Solo Maintainer Capacity Guardrail
36
+
37
+ - Weekly support budget target: <= 2 hours/week.
38
+ - If inbound support exceeds this cap, new feature work may be paused.
39
+ - High-context requests may be deferred until reproducible artifacts are provided.
40
+
41
+ ## Security and Data Handling
42
+
43
+ - Do not post raw tokens/cookies in issues.
44
+ - Use redacted logs.
45
+ - If credentials are exposed, rotate immediately and update issue with redaction.
46
+
47
+ ## Deployment Escalation Rule
48
+
49
+ For team/hosted usage, open a deployment intake issue before broad rollout.
@@ -54,10 +54,13 @@ slack_list_conversations limit=50
54
54
  # Option 1: In Claude Code/Desktop
55
55
  slack_refresh_tokens
56
56
 
57
- # Option 2: CLI
57
+ # Option 2: Package setup wizard
58
+ npx -y @jtalk22/slack-mcp --setup
59
+
60
+ # Option 3: Repo CLI
58
61
  npm run tokens:auto
59
62
 
60
- # Option 3: Manual
63
+ # Option 4: Manual
61
64
  npm run tokens:refresh
62
65
  ```
63
66
 
@@ -0,0 +1,69 @@
1
+ # Use Case Recipes
2
+
3
+ Copy and paste any prompt into your MCP client. Each recipe maps to existing tools and parameters.
4
+
5
+ ## 1) Fast Health Check
6
+
7
+ Prompt:
8
+ `Run slack_health_check and tell me if my workspace connection is valid.`
9
+
10
+ ## 2) Token Age and Cache Snapshot
11
+
12
+ Prompt:
13
+ `Run slack_token_status and summarize token age, health, and cache stats.`
14
+
15
+ ## 3) List Recent DMs
16
+
17
+ Prompt:
18
+ `Use slack_list_conversations with types="im,mpim" and limit=50. Return names and IDs.`
19
+
20
+ ## 4) Summarize a Channel for the Last 3 Days
21
+
22
+ Prompt:
23
+ `Use slack_conversations_history with channel_id="<CHANNEL_ID>", oldest="<UNIX_TS_3_DAYS_AGO>", limit=100, resolve_users=true, then summarize decisions and action items.`
24
+
25
+ ## 5) Pull a Full Thread
26
+
27
+ Prompt:
28
+ `Use slack_get_thread with channel_id="<CHANNEL_ID>" and thread_ts="<THREAD_TS>". Summarize timeline and owners.`
29
+
30
+ ## 6) Search for Decisions
31
+
32
+ Prompt:
33
+ `Use slack_search_messages with query="decision OR approved after:2026-01-01" and count=50. Group results by channel.`
34
+
35
+ ## 7) Find Messages from One Person
36
+
37
+ Prompt:
38
+ `Use slack_search_messages with query="from:@<USERNAME> after:2026-01-01" and count=30. Return top themes.`
39
+
40
+ ## 8) Export Conversation History
41
+
42
+ Prompt:
43
+ `Use slack_get_full_conversation with channel_id="<CHANNEL_ID>", max_messages=2000, include_threads=true, output_file="q1-export.json".`
44
+
45
+ ## 9) Lookup a User Profile
46
+
47
+ Prompt:
48
+ `Use slack_users_info with user_id="<USER_ID>" and return role, timezone, and status fields.`
49
+
50
+ ## 10) Send a Channel Update
51
+
52
+ Prompt:
53
+ `Use slack_send_message with channel_id="<CHANNEL_ID>" and text="Daily update: build passed, deploy at 4 PM ET."`
54
+
55
+ ## 11) Reply in a Thread
56
+
57
+ Prompt:
58
+ `Use slack_send_message with channel_id="<CHANNEL_ID>", thread_ts="<THREAD_TS>", text="Acknowledged. I will post follow-up logs in 30 minutes."`
59
+
60
+ ## 12) Directory Snapshot
61
+
62
+ Prompt:
63
+ `Use slack_list_users with limit=500. Return a compact list of users with admin/bot flags.`
64
+
65
+ ## Notes
66
+
67
+ - Replace placeholders before running (`<CHANNEL_ID>`, `<THREAD_TS>`, `<USER_ID>`, `<USERNAME>`, timestamps).
68
+ - Timestamp parameters are Unix seconds in string form.
69
+ - For large workspaces, start with smaller limits, then expand.
package/docs/WEB-API.md CHANGED
@@ -7,6 +7,8 @@ The Slack Web Server exposes all MCP tools as REST endpoints, accessible from an
7
7
  ```bash
8
8
  cd ~/slack-mcp-server
9
9
  npm run web
10
+ # Or run directly from npm:
11
+ npx -y @jtalk22/slack-mcp web
10
12
  ```
11
13
 
12
14
  The server will:
Binary file
@@ -0,0 +1,27 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#4A154B"/>
5
+ <stop offset="100%" style="stop-color:#3D1140"/>
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background rounded square -->
10
+ <rect x="0" y="0" width="512" height="512" rx="96" ry="96" fill="url(#bg)"/>
11
+
12
+ <!-- Stylized hashtag/channel symbol -->
13
+ <g fill="none" stroke="#FFFFFF" stroke-width="36" stroke-linecap="round">
14
+ <!-- Vertical lines -->
15
+ <line x1="180" y1="140" x2="160" y2="372"/>
16
+ <line x1="352" y1="140" x2="332" y2="372"/>
17
+ <!-- Horizontal lines -->
18
+ <line x1="120" y1="200" x2="392" y2="200"/>
19
+ <line x1="120" y1="312" x2="392" y2="312"/>
20
+ </g>
21
+
22
+ <!-- Slack-colored connection dots (representing MCP bridge) -->
23
+ <circle cx="420" cy="92" r="28" fill="#36C5F0"/>
24
+ <circle cx="92" cy="420" r="28" fill="#2EB67D"/>
25
+ <circle cx="420" cy="420" r="28" fill="#ECB22E"/>
26
+ <circle cx="92" cy="92" r="28" fill="#E01E5A"/>
27
+ </svg>
Binary file
Binary file
Binary file
@@ -0,0 +1,80 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 420">
2
+ <defs>
3
+ <linearGradient id="bgGrad2" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#1a1a2e"/>
5
+ <stop offset="100%" style="stop-color:#16213e"/>
6
+ </linearGradient>
7
+ <marker id="arrowRed2" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
8
+ <path d="M0,0 L0,6 L9,3 z" fill="#e94560"/>
9
+ </marker>
10
+ <marker id="arrowTeal2" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
11
+ <path d="M0,0 L0,6 L9,3 z" fill="#4ecdc4"/>
12
+ </marker>
13
+ </defs>
14
+
15
+ <!-- Background -->
16
+ <rect width="900" height="420" fill="url(#bgGrad2)" rx="12"/>
17
+
18
+ <!-- Left Side: OAuth (Red-tinted) -->
19
+ <rect x="30" y="50" width="400" height="340" rx="12" fill="#e94560" opacity="0.1" stroke="#e94560" stroke-width="2"/>
20
+ <text x="230" y="85" text-anchor="middle" fill="#fca5a5" font-family="system-ui, -apple-system, sans-serif" font-size="16" font-weight="600">Official Slack API (OAuth)</text>
21
+
22
+ <!-- OAuth Flow - Row 1 -->
23
+ <rect x="45" y="110" width="120" height="45" rx="8" fill="#2d2d2d" stroke="#e94560" stroke-width="1"/>
24
+ <text x="105" y="138" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12">Create App</text>
25
+
26
+ <path d="M 170 132 L 190 132" stroke="#e94560" stroke-width="2" marker-end="url(#arrowRed2)"/>
27
+
28
+ <rect x="195" y="110" width="120" height="45" rx="8" fill="#2d2d2d" stroke="#e94560" stroke-width="1"/>
29
+ <text x="255" y="138" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12">Request Scopes</text>
30
+
31
+ <path d="M 320 132 L 340 132" stroke="#e94560" stroke-width="2" marker-end="url(#arrowRed2)"/>
32
+
33
+ <rect x="345" y="110" width="75" height="45" rx="8" fill="#e94560" opacity="0.4" stroke="#e94560" stroke-width="1"/>
34
+ <text x="382" y="128" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="11" font-weight="600">Admin</text>
35
+ <text x="382" y="144" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="11" font-weight="600">Approval</text>
36
+
37
+ <!-- Arrow down from Admin Approval -->
38
+ <path d="M 382 160 L 382 195" stroke="#e94560" stroke-width="2" marker-end="url(#arrowRed2)"/>
39
+
40
+ <!-- OAuth Flow - Row 2 -->
41
+ <rect x="95" y="205" width="140" height="45" rx="8" fill="#2d2d2d" stroke="#e94560" stroke-width="1"/>
42
+ <text x="165" y="233" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12">User Authorization</text>
43
+
44
+ <path d="M 240 227 L 260 227" stroke="#e94560" stroke-width="2" marker-end="url(#arrowRed2)"/>
45
+
46
+ <rect x="265" y="205" width="140" height="45" rx="8" fill="#2d2d2d" stroke="#e94560" stroke-width="1"/>
47
+ <text x="335" y="233" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12">Limited Access</text>
48
+
49
+ <!-- OAuth Result (blocked) -->
50
+ <rect x="70" y="280" width="290" height="60" rx="8" fill="#e94560" opacity="0.15" stroke="#e94560" stroke-width="2" stroke-dasharray="4"/>
51
+ <text x="215" y="305" text-anchor="middle" fill="#fca5a5" font-family="system-ui, -apple-system, sans-serif" font-size="13" font-weight="500">No DMs without</text>
52
+ <text x="215" y="325" text-anchor="middle" fill="#fca5a5" font-family="system-ui, -apple-system, sans-serif" font-size="13" font-weight="500">per-conversation consent</text>
53
+
54
+ <!-- Right Side: Session Mirroring (Green-tinted) -->
55
+ <rect x="470" y="50" width="400" height="340" rx="12" fill="#4ecdc4" opacity="0.1" stroke="#4ecdc4" stroke-width="2"/>
56
+ <text x="670" y="85" text-anchor="middle" fill="#5eead4" font-family="system-ui, -apple-system, sans-serif" font-size="16" font-weight="600">Session Mirroring</text>
57
+
58
+ <!-- Session Mirroring Flow -->
59
+ <rect x="495" y="120" width="160" height="50" rx="8" fill="#3b82f6" opacity="0.9"/>
60
+ <text x="575" y="150" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12" font-weight="500">Open Slack in Chrome</text>
61
+
62
+ <path d="M 660 145 L 700 145" stroke="#4ecdc4" stroke-width="3" marker-end="url(#arrowTeal2)"/>
63
+
64
+ <rect x="705" y="120" width="140" height="50" rx="8" fill="#da7756" opacity="0.9"/>
65
+ <text x="775" y="150" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="12" font-weight="500">Mirror Session</text>
66
+
67
+ <path d="M 775 175 L 775 210" stroke="#4ecdc4" stroke-width="3" marker-end="url(#arrowTeal2)"/>
68
+
69
+ <rect x="605" y="220" width="160" height="50" rx="8" fill="#4ecdc4" opacity="0.9"/>
70
+ <text x="685" y="250" text-anchor="middle" fill="#1a1a2e" font-family="system-ui, -apple-system, sans-serif" font-size="13" font-weight="600">Full Access</text>
71
+
72
+ <!-- Session Mirroring Result (success) -->
73
+ <rect x="510" y="295" width="340" height="60" rx="8" fill="#4ecdc4" opacity="0.2" stroke="#4ecdc4" stroke-width="2"/>
74
+ <text x="680" y="320" text-anchor="middle" fill="#5eead4" font-family="system-ui, -apple-system, sans-serif" font-size="13" font-weight="500">Your DMs, Channels, Search, History</text>
75
+ <text x="680" y="340" text-anchor="middle" fill="#5eead4" font-family="system-ui, -apple-system, sans-serif" font-size="11">✓ Same access as your browser</text>
76
+
77
+ <!-- VS divider -->
78
+ <circle cx="450" cy="210" r="24" fill="#1a1a2e" stroke="#ffffff" stroke-width="2" opacity="0.9"/>
79
+ <text x="450" y="216" text-anchor="middle" fill="#ffffff" font-family="system-ui, -apple-system, sans-serif" font-size="14" font-weight="700">vs</text>
80
+ </svg>