MCP server providing a shared HUD ('glance') for AI agents — singleton daemon, stdio adapter, multi-client.
Four tools with clear, detailed descriptions (150-400 chars each) and explicit input schemas. Naming is verb-forward (write_, hide_, read_, edit_) and unambiguous. However, schemas lack formal type definitions in visible code, parameters are documented in descriptions but not in JSON Schema format. No output schemas documented. Error handling guidance is minimal. Tool composition is sound (single responsibility), but parameter validation rules are implicit rather than explicit.
Replace `old_string` with `new_string` in the current HUD HTML. Mirrors the semantics of the `Edit` tool on files: `old_string` must match byte-for-byte (including whitespace) and must be unique unless `replace_all` is true. Requires a prior `read_glance` in this session — the daemon rejects edits that race ahead of the reader's view. Use `write_glance` for full-document replacement. The HUD is a live 480×400 web view anchored at a user-configured screen corner; keep edits anchor-agnostic (prefer symmetric edges, filling, or centered layouts over single-corner pins — see `write_glance`). Edits that touch `<script>` contents may cause the browser to re-execute that script block. Overflow outside 480×400 is clipped.
Close the shared agent-glance HUD window. A subsequent `write_glance` will reopen it.
Return the HTML currently rendered in the shared agent-glance HUD (a 480×400 clickthrough web view anchored at a user-configured screen corner). Note: this returns the HTML as last written or patched — it does NOT reflect DOM mutations made by JavaScript at runtime. You must call this before `edit_glance` — the daemon tracks your last-read version and rejects stale edits. Returns an empty string if the HUD has never been written or was hidden.
Render the given HTML in the shared agent-glance HUD window. The HUD is a full web view (Chromium/WebKit) — inline `<script>` runs, `<style>` + CSS animations/transitions work, `setTimeout`/`setInterval` fire, `fetch` is available, and you can draw with canvas/SVG. The viewport is 480×400 pixels, rendered as a frameless, transparent, clickthrough window anchored at a user-configured screen corner (top-right, top-left, bottom-right, bottom-left, or follow-cursor). You CANNOT query the active anchor, so write anchor-agnostic layouts: prefer content that fills the viewport, uses symmetric edges (e.g. `body{margin:0;padding:20px}` with natural flow, or `position:fixed;inset:20px`), or centers with flex/grid. Avoid pinning to one corner (`position:fixed;top:20px;right:20px` and friends) — that looks visually detached from the chosen corner for 4 of the 5 anchors. The preferred idiom is a HUD — translucent panels/chips with a backdrop blur that float over desktop content (transparent `<body>` background, visible elements use e.g. `rgba(…,0.85)` + `backdrop-filter:blur(24px)`); solid-filled layouts work but feel out of place, so reach for them only when the content demands it. Content outside the 480×400 viewport is clipped. The window is clickthrough, so pointer and keyboard events do NOT reach the page — use JS for visual/timed behavior, not for capturing input. Multiple MCP clients share a single window owned by the daemon; each call replaces the previous HTML (and with it, any running JS state).
Input schemas lack formal JSON Schema type definitions. Parameters documented in descriptions but not in structured schema with 'type', 'minLength', 'pattern' fields. Rubric requires 'parameters lack type definitions → schema score cannot exceed 30'.
No output schemas documented. LLMs cannot infer what fields to expect from tool responses. Rubric baseline: '100% of A+ tools have documented return types'.
Error handling lacks recovery guidance. No tool description explains what to do if HTML rendering fails, if the HUD is already hidden, or if edit_glance receives a stale version. Rubric requires: 'Error responses must tell the LLM what to do next.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
edit_glance requires prior read_glance call (daemon tracks version). This stateful dependency is not enforced in schema and could cause silent failures if LLM skips read_glance. Should document as a prerequisite or return explicit error.
write_glance description is very long (400+ chars) and includes implementation details (Chromium/WebKit, canvas/SVG, backdrop-filter) that distract from the core action. Rubric baseline: 'Keep descriptions between 10 - 1024 characters; too long wastes tokens and buries key details.' Recommend: 'Render HTML in a 480×400 clickthrough HUD window anchored at screen corner. Use symmetric layouts (flex/grid) to work with any anchor. Content outside viewport is clipped; JS runs but cannot capture input.'