@jtalk22/slack-mcp 3.0.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.
- package/README.md +63 -28
- package/docs/SETUP.md +64 -29
- package/docs/TROUBLESHOOTING.md +28 -0
- package/lib/handlers.js +156 -0
- package/lib/slack-client.js +11 -3
- package/lib/token-store.js +6 -5
- package/lib/tools.js +131 -0
- package/package.json +35 -36
- package/public/index.html +10 -6
- package/public/share.html +128 -0
- package/scripts/setup-wizard.js +1 -1
- package/server.json +10 -4
- package/src/server-http.js +16 -1
- package/src/server.js +31 -7
- package/src/web-server.js +119 -4
- package/docs/CLOUDFLARE-BROWSER-TOOLKIT.md +0 -67
- package/docs/COMMUNICATION-STYLE.md +0 -66
- package/docs/COMPATIBILITY.md +0 -19
- package/docs/DEPLOYMENT-MODES.md +0 -55
- package/docs/HN-LAUNCH.md +0 -72
- package/docs/INDEX.md +0 -40
- package/docs/INSTALL-PROOF.md +0 -18
- package/docs/LAUNCH-COPY-v3.0.0.md +0 -73
- package/docs/LAUNCH-MATRIX.md +0 -22
- package/docs/LAUNCH-OPS.md +0 -71
- package/docs/RELEASE-HEALTH.md +0 -90
- package/docs/SUPPORT-BOUNDARIES.md +0 -49
- package/docs/USE_CASE_RECIPES.md +0 -69
- package/docs/WEB-API.md +0 -303
- package/docs/images/demo-channel-messages.png +0 -0
- package/docs/images/demo-channels.png +0 -0
- package/docs/images/demo-claude-mobile-360x800.png +0 -0
- package/docs/images/demo-claude-mobile-390x844.png +0 -0
- package/docs/images/demo-main-mobile-360x800.png +0 -0
- package/docs/images/demo-main-mobile-390x844.png +0 -0
- package/docs/images/demo-main.png +0 -0
- package/docs/images/demo-messages.png +0 -0
- package/docs/images/demo-poster.png +0 -0
- package/docs/images/demo-sidebar.png +0 -0
- package/docs/images/diagram-oauth-comparison.svg +0 -80
- package/docs/images/diagram-session-flow.svg +0 -105
- package/docs/images/web-api-mobile-360x800.png +0 -0
- package/docs/images/web-api-mobile-390x844.png +0 -0
- package/public/demo-claude.html +0 -1958
- package/public/demo-video.html +0 -235
- package/public/demo.html +0 -1196
- package/scripts/build-release-health-delta.js +0 -201
- package/scripts/capture-screenshots.js +0 -146
- package/scripts/check-owner-attribution.sh +0 -80
- package/scripts/check-public-language.sh +0 -25
- package/scripts/check-version-parity.js +0 -176
- package/scripts/cloudflare-browser-tool.js +0 -237
- package/scripts/collect-release-health.js +0 -150
- package/scripts/record-demo.js +0 -162
- package/scripts/release-preflight.js +0 -243
- package/scripts/setup-git-hooks.sh +0 -15
- package/scripts/verify-core.js +0 -159
- package/scripts/verify-install-flow.js +0 -193
- package/scripts/verify-web.js +0 -269
package/docs/LAUNCH-OPS.md
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Launch Ops Runbook (v3.0.0)
|
|
2
|
-
|
|
3
|
-
This runbook defines launch-day monitoring and distribution for technical/operator channels (no X/Reddit dependency).
|
|
4
|
-
|
|
5
|
-
## Same-Day Fanout Order (9 Channels)
|
|
6
|
-
|
|
7
|
-
1. GitHub release page refresh (`v3.0.0` copy + install-proof block)
|
|
8
|
-
2. npm parity confirm (`@jtalk22/slack-mcp@3.0.0`)
|
|
9
|
-
3. MCP registry parity confirm (`3.0.0`)
|
|
10
|
-
4. Smithery listing metadata/parity update (or timestamped propagation note)
|
|
11
|
-
5. `awesome-mcp-servers` listing PR refresh
|
|
12
|
-
6. Glama metadata sync and canonical link verification
|
|
13
|
-
7. HN thread update comment (high-signal install proof + support path)
|
|
14
|
-
8. GitHub Discussions announcement/support threads update
|
|
15
|
-
9. GitHub Pages/docs surface publish + link verification
|
|
16
|
-
|
|
17
|
-
## Monitoring Cadence
|
|
18
|
-
|
|
19
|
-
- First 4 hours: every 30 minutes
|
|
20
|
-
- Up to 24 hours: every 60 minutes
|
|
21
|
-
|
|
22
|
-
Track:
|
|
23
|
-
- install reports and blocker count
|
|
24
|
-
- npm/MCP parity state
|
|
25
|
-
- listing propagation status (Smithery/Glama)
|
|
26
|
-
- inbound issue and discussion severity
|
|
27
|
-
- hosted migration questions (`SLACK_MCP_HTTP_AUTH_TOKEN`, CORS allowlist)
|
|
28
|
-
|
|
29
|
-
## Triage Rules
|
|
30
|
-
|
|
31
|
-
P1 install blocker:
|
|
32
|
-
- acknowledge within 30-60 minutes
|
|
33
|
-
- provide immediate workaround
|
|
34
|
-
- add fix to patch queue
|
|
35
|
-
|
|
36
|
-
Non-blocking request:
|
|
37
|
-
- acknowledge and route to issue/discussion template
|
|
38
|
-
- provide timeline as best effort
|
|
39
|
-
|
|
40
|
-
## Escalation Triggers
|
|
41
|
-
|
|
42
|
-
1. If install failures exceed 3 unique reports in 24h:
|
|
43
|
-
- pause outbound promotion
|
|
44
|
-
- prioritize hotfix
|
|
45
|
-
|
|
46
|
-
2. If support load exceeds 2 hours/day for 2 days:
|
|
47
|
-
- switch to stability-only mode
|
|
48
|
-
- defer non-critical requests
|
|
49
|
-
|
|
50
|
-
## 24h / 48h / 72h Follow-Up
|
|
51
|
-
|
|
52
|
-
24h:
|
|
53
|
-
- publish release-health delta and short technical summary
|
|
54
|
-
|
|
55
|
-
48h:
|
|
56
|
-
- patch docs for top recurring setup questions
|
|
57
|
-
|
|
58
|
-
72h:
|
|
59
|
-
- ship `v3.0.1` only if launch defects are confirmed
|
|
60
|
-
|
|
61
|
-
## Evidence Log
|
|
62
|
-
|
|
63
|
-
Use:
|
|
64
|
-
- `docs/release-health/launch-log-template.md`
|
|
65
|
-
|
|
66
|
-
Capture:
|
|
67
|
-
- channel
|
|
68
|
-
- UTC timestamp
|
|
69
|
-
- URL or command evidence
|
|
70
|
-
- action taken
|
|
71
|
-
- observed result (`success|partial|blocked`)
|
package/docs/RELEASE-HEALTH.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Release Health Tracking
|
|
2
|
-
|
|
3
|
-
Use this to track installation reliability and operational load during the current release cycle.
|
|
4
|
-
|
|
5
|
-
## One-command snapshot
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
node scripts/collect-release-health.js
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Outputs:
|
|
12
|
-
- `docs/release-health/latest.md`
|
|
13
|
-
- `docs/release-health/YYYY-MM-DD.md`
|
|
14
|
-
- `docs/release-health/automation-delta.md` (when delta script is run)
|
|
15
|
-
|
|
16
|
-
## Version parity report
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npm run verify:version-parity
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Output:
|
|
23
|
-
- `docs/release-health/version-parity.md`
|
|
24
|
-
|
|
25
|
-
If external registries are still propagating immediately after publish:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
npm run verify:version-parity -- --allow-propagation
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Prepublish dry run
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm run verify:release-dry-run
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Output:
|
|
38
|
-
- `docs/release-health/prepublish-dry-run.md`
|
|
39
|
-
|
|
40
|
-
24-hour loop artifacts:
|
|
41
|
-
- `docs/release-health/24h-start.md`
|
|
42
|
-
- `docs/release-health/24h-end.md`
|
|
43
|
-
- `docs/release-health/24h-delta.md`
|
|
44
|
-
|
|
45
|
-
## What it captures automatically
|
|
46
|
-
|
|
47
|
-
- npm downloads (last week, last month)
|
|
48
|
-
- npm latest version
|
|
49
|
-
- GitHub stars, forks, open issues
|
|
50
|
-
- GitHub 14-day traffic views/clones (owner token required via `gh auth`)
|
|
51
|
-
- Count of `deployment-intake` issues
|
|
52
|
-
|
|
53
|
-
## 14-day targets
|
|
54
|
-
|
|
55
|
-
- weekly downloads: `>= 180`
|
|
56
|
-
- qualified deployment-intake submissions: `>= 2`
|
|
57
|
-
- support load: `<= 2 hours/week`
|
|
58
|
-
|
|
59
|
-
## Manual fields to track alongside snapshots
|
|
60
|
-
|
|
61
|
-
- Weekly support minutes spent.
|
|
62
|
-
- Deployment-intake quality (clear use case, owner, timeline).
|
|
63
|
-
- Traffic source notes (search, referrals, docs traffic).
|
|
64
|
-
- External \"first run succeeded\" confirmations (issues/discussions).
|
|
65
|
-
|
|
66
|
-
## Recommended cadence
|
|
67
|
-
|
|
68
|
-
- Days 1-7: daily snapshot
|
|
69
|
-
- Days 8-14: every 2-3 days
|
|
70
|
-
|
|
71
|
-
## Automated cadence (low-touch)
|
|
72
|
-
|
|
73
|
-
- Workflow: `.github/workflows/release-health.yml`
|
|
74
|
-
- Triggers:
|
|
75
|
-
- scheduled at `07:15` and `19:15` UTC
|
|
76
|
-
- manual `workflow_dispatch`
|
|
77
|
-
- Outputs per run:
|
|
78
|
-
- workflow summary with current snapshot and baseline delta
|
|
79
|
-
- artifacts: `docs/release-health/latest.md`, `docs/release-health/automation-delta.md`
|
|
80
|
-
|
|
81
|
-
## Local delta command
|
|
82
|
-
|
|
83
|
-
If you want to compare two explicit snapshots locally:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
node scripts/build-release-health-delta.js \
|
|
87
|
-
--before docs/release-health/24h-start.md \
|
|
88
|
-
--after docs/release-health/24h-end.md \
|
|
89
|
-
--out docs/release-health/24h-delta.md
|
|
90
|
-
```
|
|
@@ -1,49 +0,0 @@
|
|
|
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.
|
package/docs/USE_CASE_RECIPES.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
# Web API Reference
|
|
2
|
-
|
|
3
|
-
The Slack Web Server exposes all MCP tools as REST endpoints, accessible from any browser or HTTP client.
|
|
4
|
-
|
|
5
|
-
Claude web now supports remote MCP connectors on paid plans, so this Web API mode is best used for:
|
|
6
|
-
- local localhost dashboard workflows
|
|
7
|
-
- REST/API integrations
|
|
8
|
-
- fallback operation when you do not want to host a remote MCP endpoint
|
|
9
|
-
|
|
10
|
-
References:
|
|
11
|
-
- https://support.anthropic.com/en/articles/11995447-connectors-in-claude
|
|
12
|
-
- https://support.anthropic.com/en/articles/11175166-about-custom-integrations-using-remote-mcp
|
|
13
|
-
|
|
14
|
-
## Starting the Server
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
cd ~/slack-mcp-server
|
|
18
|
-
npm run web
|
|
19
|
-
# Or run directly from npm:
|
|
20
|
-
npx -y @jtalk22/slack-mcp web
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The server will:
|
|
24
|
-
1. Start on port 3000
|
|
25
|
-
2. Serve the web UI at http://localhost:3000
|
|
26
|
-
3. Generate a secure API key (saved to `~/.slack-mcp-api-key`)
|
|
27
|
-
|
|
28
|
-
## Auto-Start on Login (Recommended)
|
|
29
|
-
|
|
30
|
-
Create a LaunchAgent to auto-start the web server on login:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
cat > ~/Library/LaunchAgents/com.slack-web-api.plist << 'EOF'
|
|
34
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
35
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
36
|
-
<plist version="1.0">
|
|
37
|
-
<dict>
|
|
38
|
-
<key>Label</key>
|
|
39
|
-
<string>com.slack-web-api</string>
|
|
40
|
-
<key>ProgramArguments</key>
|
|
41
|
-
<array>
|
|
42
|
-
<string>/opt/homebrew/bin/node</string>
|
|
43
|
-
<string>/Users/YOUR_USERNAME/slack-mcp-server/src/web-server.js</string>
|
|
44
|
-
</array>
|
|
45
|
-
<key>WorkingDirectory</key>
|
|
46
|
-
<string>/Users/YOUR_USERNAME/slack-mcp-server</string>
|
|
47
|
-
<key>RunAtLoad</key>
|
|
48
|
-
<true/>
|
|
49
|
-
<key>KeepAlive</key>
|
|
50
|
-
<true/>
|
|
51
|
-
<key>StandardOutPath</key>
|
|
52
|
-
<string>/tmp/slack-web-api.log</string>
|
|
53
|
-
<key>StandardErrorPath</key>
|
|
54
|
-
<string>/tmp/slack-web-api.error.log</string>
|
|
55
|
-
</dict>
|
|
56
|
-
</plist>
|
|
57
|
-
EOF
|
|
58
|
-
|
|
59
|
-
# Load it
|
|
60
|
-
launchctl load ~/Library/LaunchAgents/com.slack-web-api.plist
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**Manage the service:**
|
|
64
|
-
```bash
|
|
65
|
-
# Check status
|
|
66
|
-
launchctl list | grep slack-web-api
|
|
67
|
-
|
|
68
|
-
# Restart
|
|
69
|
-
launchctl kickstart -k gui/$(id -u)/com.slack-web-api
|
|
70
|
-
|
|
71
|
-
# Stop
|
|
72
|
-
launchctl unload ~/Library/LaunchAgents/com.slack-web-api.plist
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Authentication
|
|
76
|
-
|
|
77
|
-
All API requests require the API key in the Authorization header:
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
Authorization: Bearer <your-api-key>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
The server generates a cryptographically secure API key on first run, saved to `~/.slack-mcp-api-key`. The key is printed to the console:
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
Dashboard: http://localhost:3000/?key=smcp_xxxxxxxxxxxx
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
To use a custom key:
|
|
90
|
-
```bash
|
|
91
|
-
SLACK_API_KEY=your-custom-key npm run web
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Endpoints
|
|
97
|
-
|
|
98
|
-
### GET /
|
|
99
|
-
Server info and available endpoints (no auth required).
|
|
100
|
-
|
|
101
|
-
### GET /health
|
|
102
|
-
Check Slack connection status.
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
curl -H "Authorization: Bearer $API_KEY" http://localhost:3000/health
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
**Response:**
|
|
109
|
-
```json
|
|
110
|
-
{
|
|
111
|
-
"status": "ok",
|
|
112
|
-
"code": "ok",
|
|
113
|
-
"message": "Slack auth valid",
|
|
114
|
-
"user": "james",
|
|
115
|
-
"team": "Rêvasser"
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
### GET /token-status
|
|
122
|
-
Read-only token diagnostics (age/health/cache stats). This endpoint does not trigger Chrome extraction.
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
curl -H "Authorization: Bearer $API_KEY" http://localhost:3000/token-status
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
### POST /refresh
|
|
131
|
-
Force token refresh from Chrome.
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
curl -X POST -H "Authorization: Bearer $API_KEY" http://localhost:3000/refresh
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
### GET /conversations
|
|
140
|
-
List conversations (DMs/channels).
|
|
141
|
-
|
|
142
|
-
**Query Parameters:**
|
|
143
|
-
| Param | Default | Description |
|
|
144
|
-
|-------|---------|-------------|
|
|
145
|
-
| types | im,mpim | Conversation types |
|
|
146
|
-
| limit | 100 | Max results |
|
|
147
|
-
|
|
148
|
-
**Types:** `im`, `mpim`, `public_channel`, `private_channel`
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/conversations?types=im"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Response:**
|
|
155
|
-
```json
|
|
156
|
-
{
|
|
157
|
-
"count": 5,
|
|
158
|
-
"conversations": [
|
|
159
|
-
{ "id": "D063M4403MW", "name": "Gwen Santos", "type": "dm" }
|
|
160
|
-
]
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
### GET /conversations/:id/history
|
|
167
|
-
Get messages from a conversation.
|
|
168
|
-
|
|
169
|
-
**Query Parameters:**
|
|
170
|
-
| Param | Default | Description |
|
|
171
|
-
|-------|---------|-------------|
|
|
172
|
-
| limit | 50 | Messages to fetch |
|
|
173
|
-
| oldest | - | Unix timestamp start |
|
|
174
|
-
| latest | - | Unix timestamp end |
|
|
175
|
-
| resolve_users | true | Convert user IDs to names |
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/conversations/D063M4403MW/history?limit=10"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
### GET /conversations/:id/full
|
|
184
|
-
Export full conversation with threads.
|
|
185
|
-
|
|
186
|
-
**Query Parameters:**
|
|
187
|
-
| Param | Default | Description |
|
|
188
|
-
|-------|---------|-------------|
|
|
189
|
-
| max_messages | 2000 | Max messages |
|
|
190
|
-
| include_threads | true | Fetch replies |
|
|
191
|
-
| oldest | - | Unix timestamp start |
|
|
192
|
-
| latest | - | Unix timestamp end |
|
|
193
|
-
| output_file | - | Save to file path |
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/conversations/D063M4403MW/full?max_messages=500"
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
### GET /conversations/:id/thread/:ts
|
|
202
|
-
Get thread replies.
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/conversations/D063M4403MW/thread/1767368030.607599"
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
### GET /search
|
|
211
|
-
Search messages across workspace.
|
|
212
|
-
|
|
213
|
-
**Query Parameters:**
|
|
214
|
-
| Param | Default | Description |
|
|
215
|
-
|-------|---------|-------------|
|
|
216
|
-
| q | *required* | Search query |
|
|
217
|
-
| count | 20 | Max results |
|
|
218
|
-
|
|
219
|
-
**Query Syntax:**
|
|
220
|
-
- `from:@username` - From specific user
|
|
221
|
-
- `in:#channel` - In specific channel
|
|
222
|
-
- `before:2026-01-01` - Before date
|
|
223
|
-
- `after:2025-12-01` - After date
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/search?q=from:@gwen%20meeting"
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
### POST /messages
|
|
232
|
-
Send a message.
|
|
233
|
-
|
|
234
|
-
**Body:**
|
|
235
|
-
```json
|
|
236
|
-
{
|
|
237
|
-
"channel_id": "D063M4403MW",
|
|
238
|
-
"text": "Hello!",
|
|
239
|
-
"thread_ts": "1767368030.607599" // optional, for replies
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
curl -X POST -H "Authorization: Bearer $API_KEY" \
|
|
245
|
-
-H "Content-Type: application/json" \
|
|
246
|
-
-d '{"channel_id":"D063M4403MW","text":"Hello!"}' \
|
|
247
|
-
http://localhost:3000/messages
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
### GET /users
|
|
253
|
-
List all workspace users.
|
|
254
|
-
|
|
255
|
-
```bash
|
|
256
|
-
curl -H "Authorization: Bearer $API_KEY" "http://localhost:3000/users?limit=50"
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
### GET /users/:id
|
|
262
|
-
Get user details.
|
|
263
|
-
|
|
264
|
-
```bash
|
|
265
|
-
curl -H "Authorization: Bearer $API_KEY" http://localhost:3000/users/U05GPEVH7J9
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
## Web UI
|
|
271
|
-
|
|
272
|
-
Open http://localhost:3000 in your browser for a visual interface.
|
|
273
|
-
|
|
274
|
-
The UI auto-connects with the default API key:
|
|
275
|
-
1. Select a conversation from the sidebar
|
|
276
|
-
2. View messages, threads, and user info
|
|
277
|
-
3. Search messages across the workspace
|
|
278
|
-
4. Send messages directly from the browser
|
|
279
|
-
|
|
280
|
-
**Using with claude.ai:**
|
|
281
|
-
1. Preferred: add a remote MCP connector in Claude settings if you run a remote endpoint.
|
|
282
|
-
2. Fallback: open the web UI alongside claude.ai for local browsing/search.
|
|
283
|
-
3. Copy-paste relevant message content as needed.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Environment Variables
|
|
288
|
-
|
|
289
|
-
| Variable | Default | Description |
|
|
290
|
-
|----------|---------|-------------|
|
|
291
|
-
| PORT | 3000 | Server port |
|
|
292
|
-
| SLACK_API_KEY | (generated) | API key for authentication |
|
|
293
|
-
| SLACK_TOKEN | - | Slack xoxc token |
|
|
294
|
-
| SLACK_COOKIE | - | Slack xoxd cookie |
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Security Notes
|
|
299
|
-
|
|
300
|
-
1. **API Key**: Keep it secret. Anyone with the key can access your Slack.
|
|
301
|
-
2. **Local Only**: By default, only accessible from localhost.
|
|
302
|
-
3. **HTTPS**: For remote access, put behind a reverse proxy with HTTPS.
|
|
303
|
-
4. **Token Storage**: Slack tokens are stored in keychain and token file.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,80 +0,0 @@
|
|
|
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>
|