Skip to main content
Glama
briancmlee

hol-lsp-mcp

by briancmlee

diagnostics

Retrieve HOL4 diagnostics and proof states for an SML script file, waiting until compilation and proof checking finish or returning INCOMPLETE with elapsed time on timeout.

Instructions

textDocument/publishDiagnostics + $/proofStates: a one-line verdict, the proof tally and the diagnostics. Returns once the compile has finished and no proof is still checking, or after wait seconds with INCOMPLETE and how long each unfinished proof has been checking. Nothing is cancelled: call again to keep waiting. (Clients may move calls longer than about two minutes to the background.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYes
waitNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it discloses the completion condition (compile finished and no proof still checking), the timeout behavior returning INCOMPLETE plus per-proof elapsed time, and that 'nothing is cancelled'. It also warns that long calls may be backgrounded past ~2 minutes. It stops short of stating that this is a non-mutating read, but the operational semantics are unusually well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the return contents come first, then timing/incompleteness semantics, then the non-cancellation note. The LSP message names add jargon but also precision. Nothing is obviously padded, though the third sentence's parenthetical could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema tool, the description covers the return shape, timing, timeout, and incompleteness semantics an agent needs to interpret results. Gaps remain on the `file` argument's expected format and on how this relates to retryCompile/goalState, but the core calling contract is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters. The description gives real meaning to `wait` — it is a timeout after which INCOMPLETE is returned — which is the non-obvious parameter. It adds nothing about `file` (format, relative vs absolute path), leaving that purely to the schema name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific outputs — a one-line verdict, the proof tally, and diagnostics — tied to the defining LSP messages (textDocument/publishDiagnostics + $/proofStates). It is clear what the tool returns, but it never contrasts itself with the closest sibling, goalState, which likely overlaps in proof-state information, so an agent must still guess which to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call it to get compile diagnostics/proof states, and 'call again to keep waiting' gives an actionable retry pattern. However, there is no explicit when-to-use versus alternatives such as goalState, retryCompile, or restart, so the agent gets no routing guidance between siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.