A lightweight, agent-first web page engine with MCP server support for web browsing, rendering, and linting
kite-lite defines 8 tools with basic descriptions and input schemas. All tools have names starting with action verbs (browser_*) and descriptions present. However, descriptions are terse (avg ~80 chars, well below the 194-char baseline for A+ tools), lack WHEN/WHY context, and omit dependency hints. Input schemas are present but minimal, most parameters lack detailed constraints, ranges, or format guidance. Output schemas are not documented in the visible code. Error handling is not evident in tool definitions. The server is STDIO-only, which caps protocol readiness but does not directly penalize definition quality. Tool composition is reasonable (each does one thing), but parameter descriptions need expansion to guide LLM selection and prevent hallucinated values.
Call a WebMCP tool discovered on the current page
Evaluate JavaScript code in the context of the current page
Lint a page or URL for accessibility issues (images without alt, heading hierarchy, lang attribute, link text)
Lint a page or URL for SEO issues
Lint a page or URL for social media metadata (Open Graph, Twitter Card)
Lint a page or URL for WebMCP tool declaration issues
Navigate to a URL and fetch the page, returning parsed DOM, layout, and metadata
Render the current page to SVG, PNG, or PDF at a specified width
Descriptions lack WHEN/WHY context and dependency hints. E.g., browser_navigate says 'Navigate to a URL and fetch the page' but does not explain when to call it vs browser_evaluate, or that it must be called before browser_render. LLMs cannot infer sequencing.
Parameter descriptions are minimal or absent. browser_call_tool's 'arguments' param says 'Arguments matching that tool's inputSchema' but does not explain how to discover or validate those arguments. browser_render's 'width' lacks range guidance (e.g., 'pixels, 320 - 1920').
Output schemas are not documented in visible code. LLMs cannot plan downstream calls or extract fields if they do not know what browser_navigate returns (e.g., does it return links, title, metadata separately or nested?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
No error handling guidance in tool definitions. If browser_navigate fails (404, timeout, invalid URL), the description does not say what error the LLM should expect or how to recover. No recovery hints like 'Try a different URL' or 'Check network connectivity'.
browser_call_tool's 'name' parameter accepts free-form strings with no enum or discovery mechanism. LLMs must guess valid tool names from the page, risking hallucinated names. No guidance on how to discover available tools first.