@slack/radar-mcp 1.3.0 → 1.5.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 CHANGED
@@ -28,24 +28,33 @@ Restart your Claude Code session for the tools to appear.
28
28
  The package also ships a browser-based dashboard that shows the same live device data without Claude Code in the loop.
29
29
 
30
30
  ```bash
31
- npx -p @slack/radar-mcp slack-radar-web
31
+ npx @slack/radar-mcp web
32
32
  ```
33
33
 
34
34
  Or with a global install:
35
35
 
36
36
  ```bash
37
37
  npm install -g @slack/radar-mcp
38
- slack-radar-web
38
+ slack-radar
39
39
  ```
40
40
 
41
- Opens `http://localhost:8100` automatically. Set `SLACK_RADAR_WEB_PORT` to use a different port. Features:
41
+ Opens `http://localhost:8100` automatically. Set `SLACK_RADAR_WEB_PORT` to use a different port. (`slack-radar-web` still works as a direct alias.) Tabs:
42
42
 
43
- * Live Network / RTM / Clogs tabs with real-time SSE streaming
44
- * Filter bar for URL, channel, event name, payload text
45
- * Detail pane with Copy JSON, Copy Body, and Copy cURL buttons
46
- * Profile selector for personal vs work profile when both are running
47
- * Auto-extend keeps the device-side server alive while the browser tab is open
48
- * Enable Radar button handles ADB forwarding and device activation without Claude
43
+ * **Live** network, RTM, analytics clogs, and Slack-app logcat in one timeline
44
+ * **Network** calls per second vs response time, every call listed, slow ones flagged
45
+ * **RTM** real-time websocket events
46
+ * **Clogs** analytics events, click one to see its payload
47
+ * **Logs** device logcat, filtered to the Slack app (switch app or clear the filter)
48
+ * **Custom** a tab Claude builds on request. Ask a Claude Code session in your terminal for a view the pre-built tabs do not cover (e.g. "graph calls per second and flag the slow ones"); it authors the view via the `open_radar_dashboard` tool and it appears here. Persists until you refresh the page.
49
+
50
+ Each tab has a counter, rate, sparkline, graph, a filter / sort / pause feed, and a payload inspector. Switching tabs replays what you have already seen this session (the browser caches it, bounded by count and age) so the view does not reset to empty. ADB forwarding and device activation are handled for you; a reconnect control re-arms after a device sleep.
51
+
52
+ ### Screen overlay
53
+
54
+ A **▣ Screen** button opens a side panel that mirrors the live device screen, with a full-resolution screenshot and a screen recording. It is off by default and opens to a consent notice first, because it shows whatever is on the phone (open DMs, message content, notifications).
55
+
56
+ * **Screenshot** works on any machine (pure `screencap`, no extra tools).
57
+ * **Live mirror and recording** need `ffmpeg` on your machine. If it is missing, the panel shows the install command for your platform and the screenshot still works. ffmpeg is not bundled and is never installed for you.
49
58
 
50
59
  ## Prerequisites
51
60
 
@@ -70,7 +79,7 @@ Radar starts **disabled** each session. All tools except `ping` return an error
70
79
 
71
80
  | Tool | Description |
72
81
  |---|---|
73
- | `ping` | Health check. Returns uptime, buffer sizes, remaining session time, stream status. Use `timeout_minutes` to extend sessions. |
82
+ | `ping` | Health check. Returns uptime, buffer sizes, remaining session time, stream status, and which app/profile is bound (`android_user_id`, `profile` personal/secondary, `package`). Use `timeout_minutes` to extend sessions. |
74
83
  | `get_recent_network_calls` | HTTP call summaries: method, URL, status code, duration. Filterable by URL substring and status code. |
75
84
  | `get_network_call_detail` | Full request/response headers and bodies for a specific call (gzip/brotli decompressed). |
76
85
  | `get_recent_rtm_events` | RTM event summaries: type, direction, channel, timestamp. Filterable by type, direction, channel. Uses subtypes (e.g. `message_changed`, not `message`). |
@@ -84,6 +93,7 @@ Radar starts **disabled** each session. All tools except `ping` return an error
84
93
  | `screenshot` | Capture device screen as PNG. 720px default, `full_res=true` for full resolution. |
85
94
  | `record_screen` | Record short screen video (MP4). Default 5s, max 30s. |
86
95
  | `clear_buffers` | Clear all captured network calls and RTM events from device and local buffers. |
96
+ | `open_radar_dashboard` | Author or refine a custom live dashboard tab from a spec (source, filters, widgets, alerts). Suggested when a request is not covered by the pre-built tabs; not auto-invoked. Returns the dashboard URL; debug builds only, local only. |
87
97
  | `_radar_session_enable` | Enable radar for the session. Called by `/radar-enable` skill. |
88
98
  | `_radar_session_disable` | Disable radar for the session. Called by `/radar-disable` skill. |
89
99
 
@@ -121,8 +131,9 @@ What gets captured depends on the in-app server implementation. The MCP server i
121
131
  * **Network calls**: OkHttp interceptor. Ring buffer: 200 calls.
122
132
  * **RTM events**: WebSocket listener. Ring buffer: 500 events.
123
133
  * **Clogs**: Analytics interceptor. Ring buffer: 500 events. Persists across radar activation cycles.
134
+ * **SQLite database** (Database tab, web dashboard only): when you open a database, a read-only **plaintext** copy of that on-device store (message text, request/response bodies, user/channel/team IDs) is pulled to a temp directory **on your own machine** (`os.tmpdir()/slack-radar-db-<port>`, files mode 0600). Auto-deleted when the dashboard process stops.
124
135
 
125
- All data is in-memory only. No disk writes.
136
+ The network, RTM, and clog captures are in-memory ring buffers. The Database tab is the exception: it writes a plaintext copy of the selected on-device database to a temp file on your host for the duration of the session. Review before sharing anything from it.
126
137
 
127
138
  ### What gets captured, in detail
128
139
 
@@ -167,11 +178,11 @@ The device-side server may have auto-shut down. Use `/radar-enable` to restart i
167
178
  **"Session disabled"**
168
179
  Two consecutive connection failures disable the session. Use `/radar-enable` to reconnect.
169
180
 
170
- **Work profile devices**
171
- The MCP server auto-detects the Android user ID via `ps` and targets the broadcast accordingly. No manual `--user` flag needed. The web dashboard shows a profile selector when both personal and work profiles are running.
181
+ **Devices with more than one user (e.g. a work profile)**
182
+ The MCP server auto-detects the Android user ID via `ps` and targets the broadcast accordingly. No manual `--user` flag needed. In the dashboard's Logs tab, the package filter narrows logcat to the Slack app; clear the chip or pick another package to widen it.
172
183
 
173
184
  **Tools not appearing after setup**
174
185
  Restart your Claude Code session. MCP servers are registered at session start.
175
186
 
176
187
  **Port already in use (web dashboard)**
177
- Another instance may be running. Kill it with `lsof -ti :8100 | xargs kill` or set a different port with `SLACK_RADAR_WEB_PORT=8101 slack-radar-web`.
188
+ Another instance may be running. Kill it with `lsof -ti :8100 | xargs kill` or set a different port with `SLACK_RADAR_WEB_PORT=8101 npx @slack/radar-mcp web`.