Push live data streams into your AI coding agent. Connects to MQTT, WebSocket, Kafka, file tails, and webhooks to stream real-time data into Claude Code via MCP.
livetap has 13 well-named tools with clear verb-noun patterns (create_connection, list_watchers, delete_watcher). Descriptions are present and moderately detailed (avg ~150 chars), explaining WHAT and WHEN. Input schemas are comprehensive with proper types, enums, and defaults. However, output schemas are NOT documented, responses are returned as plain text via fetch().text(), forcing LLMs to parse unstructured JSON strings. Error handling is minimal (basic 404 checks, no recovery guidance). No tool annotations (readOnlyHint, destructiveHint). Parameter descriptions could be more prescriptive about constraints (e.g., cooldown guidance is good, but field path format in create_watcher lacks examples). Missing pagination on list_connections and list_watchers despite potentially large result sets.
Create a data connection. MQTT: connects to a broker and subscribes to topics. WebSocket: connects to a remote WS URL. Webhook: creates an HTTP ingest endpoint.
Create an expression-based watcher on a connection. The watcher evaluates structured conditions against each stream entry and fires an alert when conditions match. ALWAYS use read_stream first to understand the data shape and field paths.
Stop and remove a watcher.
Destroy a connection — stops the source subscriber, cleans up the stream buffer.
Get detailed status of a specific connection.
Get details of a specific watcher including conditions, status, match count, and config.
Output schemas not documented. Tools return plain text via fetch().text(), forcing LLMs to parse unstructured JSON strings. No structured response type definitions provided.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
list_connections and list_watchers lack pagination (limit, offset, cursor). No documented result caps. Large deployments could return thousands of items, exhausting context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get evaluation logs from a watcher — shows MATCH, SUPPRESSED, FIELD_NOT_FOUND, and CHECKPOINT events.
List all active connections with their status, message rate, and buffered count.
List watchers. Optionally filter by connectionId. If omitted, lists all watchers.
Read recent entries from a connection's live stream. Use this to inspect what data is flowing through a connection and understand the payload structure before creating watchers.
Restart a stopped watcher.
Get daemon status: uptime, port, active connections and watchers count.
Update a watcher's conditions, match mode, action, or cooldown. The watcher restarts with the new config.
Error handling is minimal. Most tools return basic 404 checks with no recovery guidance. E.g., 'Connection not found' gives no hint to call list_connections() first.
create_watcher 'conditions' parameter lacks format examples. Field path format ('dot.path') is mentioned but no concrete examples (e.g., 'sensors.temperature.value') shown in schema description.