@jtalk22/slack-mcp 3.1.0 → 3.2.0

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.
Files changed (65) hide show
  1. package/README.md +45 -13
  2. package/docs/SETUP.md +64 -29
  3. package/docs/TROUBLESHOOTING.md +28 -0
  4. package/lib/handlers.js +156 -0
  5. package/lib/slack-client.js +11 -3
  6. package/lib/token-store.js +6 -5
  7. package/lib/tools.js +131 -0
  8. package/package.json +15 -8
  9. package/public/index.html +10 -6
  10. package/public/share.html +6 -5
  11. package/scripts/setup-wizard.js +1 -1
  12. package/server.json +8 -2
  13. package/src/server-http.js +16 -1
  14. package/src/server.js +31 -7
  15. package/src/web-server.js +117 -4
  16. package/docs/CLOUDFLARE-BROWSER-TOOLKIT.md +0 -67
  17. package/docs/COMMUNICATION-STYLE.md +0 -66
  18. package/docs/COMPATIBILITY.md +0 -19
  19. package/docs/DEPLOYMENT-MODES.md +0 -55
  20. package/docs/HN-LAUNCH.md +0 -72
  21. package/docs/INDEX.md +0 -41
  22. package/docs/INSTALL-PROOF.md +0 -18
  23. package/docs/LAUNCH-COPY-v3.0.0.md +0 -101
  24. package/docs/LAUNCH-MATRIX.md +0 -22
  25. package/docs/LAUNCH-OPS.md +0 -71
  26. package/docs/RELEASE-HEALTH.md +0 -77
  27. package/docs/SUPPORT-BOUNDARIES.md +0 -49
  28. package/docs/USE_CASE_RECIPES.md +0 -69
  29. package/docs/WEB-API.md +0 -303
  30. package/docs/images/demo-channel-messages.png +0 -0
  31. package/docs/images/demo-channels.png +0 -0
  32. package/docs/images/demo-claude-mobile-360x800.png +0 -0
  33. package/docs/images/demo-claude-mobile-390x844.png +0 -0
  34. package/docs/images/demo-claude-mobile-poster.png +0 -0
  35. package/docs/images/demo-main-mobile-360x800.png +0 -0
  36. package/docs/images/demo-main-mobile-390x844.png +0 -0
  37. package/docs/images/demo-main.png +0 -0
  38. package/docs/images/demo-messages.png +0 -0
  39. package/docs/images/demo-poster.png +0 -0
  40. package/docs/images/demo-sidebar.png +0 -0
  41. package/docs/images/diagram-oauth-comparison.svg +0 -80
  42. package/docs/images/diagram-session-flow.svg +0 -105
  43. package/docs/images/social-preview-v3.png +0 -0
  44. package/docs/images/web-api-mobile-360x800.png +0 -0
  45. package/docs/images/web-api-mobile-390x844.png +0 -0
  46. package/public/demo-claude.html +0 -1974
  47. package/public/demo-video.html +0 -244
  48. package/public/demo.html +0 -1196
  49. package/scripts/build-mobile-demo.js +0 -168
  50. package/scripts/build-release-health-delta.js +0 -201
  51. package/scripts/build-social-preview.js +0 -189
  52. package/scripts/capture-screenshots.js +0 -152
  53. package/scripts/check-owner-attribution.sh +0 -131
  54. package/scripts/check-public-language.sh +0 -26
  55. package/scripts/check-version-parity.js +0 -218
  56. package/scripts/cloudflare-browser-tool.js +0 -237
  57. package/scripts/collect-release-health.js +0 -162
  58. package/scripts/impact-push-v3.js +0 -781
  59. package/scripts/record-demo.js +0 -163
  60. package/scripts/release-preflight.js +0 -247
  61. package/scripts/setup-git-hooks.sh +0 -15
  62. package/scripts/update-github-social-preview.js +0 -208
  63. package/scripts/verify-core.js +0 -159
  64. package/scripts/verify-install-flow.js +0 -193
  65. package/scripts/verify-web.js +0 -273
@@ -1,244 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Slack MCP Server Demo</title>
7
- <meta name="description" content="Session-based Slack access for Claude with your existing workspace permissions. Video demo for DMs, channels, search, and threads.">
8
- <meta property="og:type" content="website">
9
- <meta property="og:title" content="Slack MCP Server - Session-Based Slack Access Demo">
10
- <meta property="og:description" content="Session-based Slack access for Claude with your existing workspace permissions. Video walkthrough for Slack workflows.">
11
- <meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo-video.html">
12
- <meta property="og:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-poster.png">
13
- <meta name="twitter:card" content="summary_large_image">
14
- <meta name="twitter:title" content="Slack MCP Server - Session-Based Slack Access Demo">
15
- <meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. Video walkthrough for Slack workflows.">
16
- <meta name="twitter:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-poster.png">
17
- <link rel="preconnect" href="https://fonts.googleapis.com">
18
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
19
- <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
20
- <style>
21
- :root {
22
- --font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
23
- --font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
24
- }
25
-
26
- * {
27
- margin: 0;
28
- padding: 0;
29
- box-sizing: border-box;
30
- }
31
- body {
32
- font-family: var(--font-body);
33
- background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
34
- min-height: 100vh;
35
- display: flex;
36
- flex-direction: column;
37
- align-items: center;
38
- justify-content: center;
39
- padding: 2rem;
40
- }
41
- .container {
42
- max-width: 900px;
43
- width: 100%;
44
- }
45
- h1 {
46
- color: #ffffff;
47
- font-size: 1.75rem;
48
- font-weight: 600;
49
- text-align: center;
50
- margin-bottom: 0.5rem;
51
- font-family: var(--font-heading);
52
- letter-spacing: -0.02em;
53
- }
54
- .subtitle {
55
- color: #94a3b8;
56
- text-align: center;
57
- margin-bottom: 1.5rem;
58
- font-size: 1rem;
59
- }
60
- .cta-strip {
61
- margin: 0 auto 1rem;
62
- background: rgba(15, 52, 96, 0.72);
63
- border: 1px solid rgba(255, 255, 255, 0.16);
64
- border-radius: 12px;
65
- padding: 10px 14px;
66
- display: flex;
67
- justify-content: space-between;
68
- align-items: center;
69
- gap: 10px;
70
- flex-wrap: wrap;
71
- font-size: 0.8125rem;
72
- }
73
- .cta-strip .links {
74
- display: flex;
75
- gap: 8px;
76
- flex-wrap: wrap;
77
- }
78
- .cta-strip .links a {
79
- color: #d8efff;
80
- text-decoration: none;
81
- border: 1px solid rgba(255, 255, 255, 0.24);
82
- border-radius: 999px;
83
- padding: 4px 8px;
84
- }
85
- .cta-strip .links a:hover {
86
- background: rgba(255, 255, 255, 0.08);
87
- }
88
- .cta-strip .note {
89
- color: rgba(255, 255, 255, 0.82);
90
- }
91
- .cta-strip .note a {
92
- color: #9ee7ff;
93
- text-decoration: underline;
94
- }
95
- .video-wrapper {
96
- position: relative;
97
- border-radius: 12px;
98
- overflow: hidden;
99
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
100
- background: #0f0f1a;
101
- }
102
- video {
103
- width: 100%;
104
- display: block;
105
- border-radius: 12px;
106
- }
107
- .controls {
108
- display: flex;
109
- justify-content: center;
110
- gap: 1rem;
111
- margin-top: 1.5rem;
112
- }
113
- .btn {
114
- padding: 0.75rem 1.5rem;
115
- border-radius: 8px;
116
- border: none;
117
- font-size: 0.875rem;
118
- font-weight: 500;
119
- cursor: pointer;
120
- transition: all 0.2s;
121
- }
122
- .btn-primary {
123
- background: #4ecdc4;
124
- color: #1a1a2e;
125
- }
126
- .btn-primary:hover {
127
- background: #5eead4;
128
- transform: translateY(-1px);
129
- }
130
- .btn-secondary {
131
- background: rgba(255, 255, 255, 0.1);
132
- color: #ffffff;
133
- border: 1px solid rgba(255, 255, 255, 0.2);
134
- }
135
- .btn-secondary:hover {
136
- background: rgba(255, 255, 255, 0.15);
137
- }
138
- .back-link {
139
- margin-top: 2rem;
140
- text-align: center;
141
- }
142
- .back-link a {
143
- color: #94a3b8;
144
- text-decoration: none;
145
- font-size: 0.875rem;
146
- }
147
- .back-link a:hover {
148
- color: #ffffff;
149
- }
150
-
151
- @media (max-width: 640px) {
152
- body {
153
- padding: 1rem 0.75rem;
154
- }
155
-
156
- .cta-strip .links {
157
- width: 100%;
158
- }
159
-
160
- .controls {
161
- gap: 0.75rem;
162
- }
163
-
164
- .btn {
165
- flex: 1;
166
- min-width: 0;
167
- padding: 0.72rem 0.95rem;
168
- }
169
- }
170
- </style>
171
- </head>
172
- <body>
173
- <div class="container">
174
- <h1>Slack MCP Server</h1>
175
- <p class="subtitle">Free local-first Slack access using your existing session permissions</p>
176
- <div class="cta-strip">
177
- <div class="links">
178
- <a href="https://www.npmjs.com/package/@jtalk22/slack-mcp" target="_blank" rel="noopener noreferrer">Install</a>
179
- <a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/SETUP.md" target="_blank" rel="noopener noreferrer">Setup Guide</a>
180
- <a href="https://github.com/jtalk22/slack-mcp-server#30-second-compatibility-check" target="_blank" rel="noopener noreferrer">30-Second Check</a>
181
- </div>
182
- <div class="note">
183
- Free local-first path with team rollout references in <a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/DEPLOYMENT-MODES.md" target="_blank" rel="noopener noreferrer">Deployment Modes</a>.
184
- </div>
185
- </div>
186
-
187
- <div class="video-wrapper">
188
- <video id="demo" poster="../docs/images/demo-poster.png" playsinline>
189
- <source src="../docs/videos/demo-claude.webm" type="video/webm">
190
- <source src="https://jtalk22.github.io/slack-mcp-server/docs/videos/demo-claude.webm" type="video/webm">
191
- Your browser does not support the video tag.
192
- </video>
193
- </div>
194
-
195
- <div class="controls">
196
- <button class="btn btn-primary" onclick="togglePlay()">Play / Pause</button>
197
- <button class="btn btn-secondary" onclick="restart()">Restart</button>
198
- </div>
199
-
200
- <div class="back-link">
201
- <a href="https://github.com/jtalk22/slack-mcp-server">← Back to Repository</a>
202
- </div>
203
- </div>
204
-
205
- <script>
206
- const video = document.getElementById('demo');
207
- const HIGHLIGHT_START_SECONDS = 6;
208
-
209
- function playFromHighlight() {
210
- if (video.duration && video.duration > HIGHLIGHT_START_SECONDS + 1) {
211
- video.currentTime = HIGHLIGHT_START_SECONDS;
212
- }
213
- return video.play();
214
- }
215
-
216
- // Autoplay with 1 second delay
217
- setTimeout(() => {
218
- playFromHighlight().catch(() => {
219
- // Autoplay blocked, user will need to click
220
- console.log('Autoplay blocked, click to play');
221
- });
222
- }, 1000);
223
-
224
- function togglePlay() {
225
- if (video.paused) {
226
- video.play();
227
- } else {
228
- video.pause();
229
- }
230
- }
231
-
232
- function restart() {
233
- video.currentTime = 0;
234
- video.play();
235
- }
236
-
237
- // Loop the video
238
- video.addEventListener('ended', () => {
239
- video.currentTime = HIGHLIGHT_START_SECONDS;
240
- video.play();
241
- });
242
- </script>
243
- </body>
244
- </html>