A local-first MCP context broker for bounded, consent-gated situational awareness.
sense-mcp defines 10 tools with explicit schemas and descriptions. All tools have verb-noun naming (get_*, take_*) and non-empty descriptions (avg ~120 chars). Input schemas are present with typed parameters and enums. However, descriptions lack LLM-optimized guidance on WHEN to use each tool vs alternatives, and output schemas are not documented in the visible code. Error handling is present but generic. Tool composition is reasonable but some tools (get_context_frame, get_relevant_context) appear to overlap in purpose without clear disambiguation.
Get a complete context frame with all available sensor data across multiple domains.
List all available context domains and their current status.
Get environmental sensor data including ambient light, audio levels, temperature, and location.
Route to the most relevant context tools based on the user's intent and available sensors. Returns a routing plan with recommended tools, confidence level, and guidance.
Get the user's calendar and schedule information for the current and upcoming time periods.
Capture and analyze the current screen state, including active window, window titles, and visual content.
Output schemas not documented in visible code. Tools return structured content (contextToolOutputSchema, snapshotToolOutputSchema) but LLMs cannot see what fields to expect without examining implementation details.
Tool purpose disambiguation missing. get_relevant_context and get_context_frame both return context; descriptions do not explain when to call one vs the other. LLMs will guess and waste calls.
Descriptions lack WHEN guidance. Most context tools (get_user_state, get_environment_context, get_schedule_context) describe WHAT they return but not WHEN an LLM should call them or what user intent they serve.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2025-06-18+ | v2 |
Get the user's current internal state including activity level, focus, stress, and engagement metrics.
Capture a snapshot from the device camera.
Capture a snapshot of the entire screen.
Capture a snapshot of a specific window.
Error recovery guidance incomplete. machineErrorResult() returns structured errors with retryable flags and fix_hint, but error messages are generic (e.g. 'context_budget_too_small'). LLMs need specific recovery steps.
Snapshot tools lack dry-run or confirmation. take_camera_snapshot, take_window_snapshot, and take_full_screen_snapshot are write operations that capture device state but offer no preview or confirmation step before execution.